Salome HOME
Ready for Salome9/py3 - Thanks a lot Gilles
[tools/medcoupling.git] / src / MEDCoupling_Swig / MEDCouplingPickleTest.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 from MEDCoupling import *
22 from MEDCouplingDataForTest import MEDCouplingDataForTest
23
24 if MEDCouplingHasNumPyBindings():
25     from numpy import *
26     pass
27
28 from platform import architecture
29 from sys import getrefcount
30
31 import os, gc, weakref, unittest
32 import sys
33 if sys.version_info.major < 3:
34   import cPickle as pickle
35 else:
36   import pickle
37
38 class MEDCouplingPickleTest(unittest.TestCase):
39     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
40     def test1(self):
41         """ Test of a simple DataArrayDouble."""
42         x=DataArrayDouble(10,1) ; x.iota() ; x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
43         x.setName("toto")
44         pickled=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
45         xx=pickle.loads(pickled)
46         self.assertTrue(xx.isEqual(x,1e-16))
47         # Bigger to check that the behavior is OK for large strings.
48         x=DataArrayDouble(1200) ; x.iota() ; x.setInfoOnComponents(["aa"])
49         x.setName("titi")
50         pickled=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
51         xx=pickle.loads(pickled)
52         self.assertTrue(xx.isEqual(x,1e-16))
53         pass
54
55     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
56     def test2(self):
57         """ Test of a simple DataArrayInt."""
58         x=DataArrayInt(10) ; x.iota() ; x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
59         x.setName("toto")
60         pickled=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
61         xx=pickle.loads(pickled)
62         self.assertTrue(xx.isEqual(x))
63         # Bigger to check that the behavior is OK for large strings.
64         x=DataArrayInt(1200) ; x.iota() ; x.setInfoOnComponents(["aa"])
65         x.setName("titi")
66         pickled=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
67         xx=pickle.loads(pickled)
68         self.assertTrue(xx.isEqual(x))
69         pass
70     
71     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
72     def test3(self):
73         """ Test of a MEDCouplingUMesh pickeling."""
74         arr=DataArrayDouble(10) ; arr.iota()
75         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
76         m=m.buildUnstructured()
77         m.setName("mesh")
78         m.getCoords().setInfoOnComponents(["aa","bbb","ddddd"])
79         m.checkConsistencyLight()
80         st=pickle.dumps(m,pickle.HIGHEST_PROTOCOL)
81         m2=pickle.loads(st)
82         self.assertTrue(m2.isEqual(m,1e-16))
83         pass
84
85     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
86     def test4(self):
87         """ Idem test3 except that here serialization/deserialization is done explicitely."""
88         arr=DataArrayDouble(10) ; arr.iota()
89         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
90         m=m.buildUnstructured()
91         m.setName("mesh")
92         m.getCoords().setInfoOnComponents(["aa","bbb","ddddd"])
93         m.checkConsistencyLight()
94         #
95         a0,a1,a2=m.getTinySerializationInformation()
96         b0,b1=m.serialize()
97         m2=MEDCouplingUMesh()
98         m2.unserialization(a0,a1,b0,b1,a2);
99         self.assertTrue(m2.isEqual(m,1e-16))
100         pass
101
102     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
103     def test5(self):
104         """ Test of a MEDCouplingCMesh pickeling."""
105         arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
106         arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
107         arrZ=DataArrayDouble(7) ; arrZ.iota() ; arrZ.setInfoOnComponents(["cccc"])
108         #
109         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
110         m.setName("mesh")
111         m.checkConsistencyLight()
112         st=pickle.dumps(m,pickle.HIGHEST_PROTOCOL)
113         m2=pickle.loads(st)
114         self.assertTrue(m2.isEqual(m,1e-16))
115         self.assertTrue(m2.getCoordsAt(0).isEqual(arrX,1e-16))
116         pass
117     
118     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
119     def test6(self):
120         """ Test of a MEDCoupling1SGTUMesh pickeling."""
121         arr=DataArrayDouble(10) ; arr.iota()
122         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
123         m=m.build1SGTUnstructured()
124         self.assertTrue(isinstance(m,MEDCoupling1SGTUMesh))
125         st=pickle.dumps(m,pickle.HIGHEST_PROTOCOL)
126         m2=pickle.loads(st)
127         self.assertTrue(m2.isEqual(m,1e-16))
128         pass
129     
130     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
131     def test7(self):
132         """ Test of a MEDCoupling1DGTUMesh pickeling."""
133         arr=DataArrayDouble(10) ; arr.iota()
134         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
135         m=m.buildUnstructured() ; m.convertAllToPoly()
136         m=MEDCoupling1DGTUMesh(m)
137         self.assertTrue(isinstance(m,MEDCoupling1DGTUMesh))
138         st=pickle.dumps(m,pickle.HIGHEST_PROTOCOL)
139         m2=pickle.loads(st)
140         self.assertTrue(m2.isEqual(m,1e-16))
141         pass
142
143     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
144     def test8(self):
145         """ Test of a MEDCouplingMappedExtrudedMesh pickeling."""
146         arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
147         arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
148         arrZ=DataArrayDouble(7) ; arrZ.iota() ; arrZ.setInfoOnComponents(["cccc"])
149         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
150         mesh3D=m.buildUnstructured() ; del m
151         #
152         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
153         mesh2D=m.buildUnstructured() ; del m
154         #
155         mesh2D.setCoords(mesh3D.getCoords())
156         mesh=MEDCouplingMappedExtrudedMesh(mesh3D,mesh2D,0) ; del mesh3D,mesh2D
157         self.assertTrue(isinstance(mesh,MEDCouplingMappedExtrudedMesh))
158         st=pickle.dumps(mesh,pickle.HIGHEST_PROTOCOL)
159         m2=pickle.loads(st)
160         self.assertTrue(m2.isEqual(mesh,1e-16))
161         pass
162
163     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
164     def test9(self):
165         """ Test of a MEDCouplingCurveLinearMesh pickeling."""
166         arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
167         arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
168         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
169         m=m.buildUnstructured()
170         #
171         mesh=MEDCouplingCurveLinearMesh() ; mesh.setCoords(m.getCoords()) ; del m
172         mesh.setNodeGridStructure([10,5])
173         st=pickle.dumps(mesh,pickle.HIGHEST_PROTOCOL)
174         m2=pickle.loads(st)
175         self.assertTrue(m2.isEqual(mesh,1e-16))
176         pass
177
178     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
179     def test10(self):
180         """ Test of a MEDCouplingIMesh pickeling."""
181         m=MEDCouplingIMesh("mesh",3,DataArrayInt([3,1,4]),DataArrayDouble([1.5,2.5,3.5]),DataArrayDouble((0.5,1.,0.25))) ; m.setAxisUnit("km")
182         m.checkConsistencyLight()
183         st=pickle.dumps(m,pickle.HIGHEST_PROTOCOL)
184         m2=pickle.loads(st)
185         self.assertTrue(m2.isEqual(m,1e-16))
186         self.assertEqual(m2.getName(),m.getName())
187         pass
188
189     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
190     def test11(self):
191         """  Test of MEDCouplingFieldDouble lying on MEDCouplingCMesh pickeling. """
192         arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
193         arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
194         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
195         f=m.getMeasureField(True)
196         f.setName("aname")
197         a=f.getArray()
198         b=a[:] ; b.iota(7000.)
199         f.setArray(DataArrayDouble.Meld(a,b))
200         f.getArray().setInfoOnComponents(["u1","vv2"])
201         f.checkConsistencyLight();
202         #
203         st=pickle.dumps(f,pickle.HIGHEST_PROTOCOL)
204         f2=pickle.loads(st)
205         self.assertTrue(f2.isEqual(f,1e-16,1e-16))
206         self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
207         pass
208
209     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
210     def test12(self):
211         """  Test of MEDCouplingFieldDouble on Gauss Points lying on MEDCouplingUMesh pickeling."""
212         _a=0.446948490915965;
213         _b=0.091576213509771;
214         _p1=0.11169079483905;
215         _p2=0.0549758718227661;
216         refCoo1=[ 0.,0., 1.,0., 0.,1. ]
217         gsCoo1=[ 2*_b-1, 1-4*_b, 2*_b-1, 2.07*_b-1, 1-4*_b,
218                  2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 ]
219         wg1=[ 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 ]
220         _refCoo1=refCoo1
221         _gsCoo1=gsCoo1
222         _wg1=wg1
223         #
224         m=MEDCouplingDataForTest.build2DTargetMesh_1();
225         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,NO_TIME);
226         f.setMesh(m);
227         self.assertEqual(5,f.getNumberOfMeshPlacesExpected());
228         self.assertEqual(0,f.getNbOfGaussLocalization());
229         f.setGaussLocalizationOnType(NORM_TRI3,_refCoo1,_gsCoo1,_wg1);
230         f.setGaussLocalizationOnType(NORM_TRI3,_refCoo1,_gsCoo1,_wg1); # not a bug only to check that it works well
231         self.assertRaises(InterpKernelException,f.setGaussLocalizationOnType,NORM_QUAD4,_refCoo1,_gsCoo1,_wg1)
232         self.assertEqual(1,f.getNbOfGaussLocalization());
233         refCoo2=[ 0.,0., 1.,0., 1.,1., 0.,1. ]
234         _refCoo2=refCoo2
235         _gsCoo1=_gsCoo1[0:4]
236         _wg1=_wg1[0:2]
237         f.setGaussLocalizationOnType(NORM_QUAD4,_refCoo2,_gsCoo1,_wg1);
238         self.assertEqual(2,f.getNbOfGaussLocalization());
239         array=DataArrayDouble.New();
240         ptr=18*2*[None]
241         for i in range(18 * 2):
242             ptr[i]=float(i+1)
243         array.setValues(ptr,18,2);
244         ptr=array.getPointer();
245         f.setArray(array);
246         f.setName("MyFirstFieldOnGaussPoint");
247         f.checkConsistencyLight();
248         self.assertAlmostEqual(27.,f.getIJK(2,5,0),14);
249         self.assertAlmostEqual(16.,f.getIJK(1,5,1),14);
250         #
251         f.clearGaussLocalizations();
252         self.assertEqual(0,f.getNbOfGaussLocalization());
253         self.assertRaises(InterpKernelException,f.checkConsistencyLight);
254         ids1=[0,1,3,4]
255         self.assertRaises(InterpKernelException,f.setGaussLocalizationOnCells,ids1,_refCoo2,_gsCoo1,_wg1);
256         self.assertEqual(0,f.getNbOfGaussLocalization());
257         ids2=[0,4]
258         f.setGaussLocalizationOnCells(ids2,_refCoo2,_gsCoo1,_wg1);
259         self.assertEqual(1,f.getNbOfGaussLocalization());
260         self.assertEqual(0,f.getGaussLocalizationIdOfOneCell(0));
261         self.assertRaises(InterpKernelException,f.getGaussLocalizationIdOfOneCell,1);
262         ids3=[1,2]
263         f.setGaussLocalizationOnCells(ids3,_refCoo1,_gsCoo1,_wg1);
264         self.assertEqual(2,f.getNbOfGaussLocalization());
265         self.assertEqual(0,f.getGaussLocalizationIdOfOneCell(0));
266         self.assertEqual(1,f.getGaussLocalizationIdOfOneCell(1));
267         self.assertEqual(1,f.getGaussLocalizationIdOfOneCell(2));
268         self.assertRaises(InterpKernelException,f.checkConsistencyLight);#<- cell 3 has no localization
269         ids4=[3]
270         _gsCoo2=_gsCoo1;
271         _wg2=_wg1;
272         _gsCoo2[0]=0.8888777776666;
273         _wg2[0]=0.1234567892377;
274         f.setGaussLocalizationOnCells(ids4,_refCoo2,_gsCoo2,_wg2);
275         self.assertEqual(3,f.getNbOfGaussLocalization());
276         tmpIds=f.getCellIdsHavingGaussLocalization(0);
277         self.assertEqual(ids2,list(tmpIds.getValues()));
278         self.assertRaises(InterpKernelException,f.checkConsistencyLight);#<- it's always not ok because undelying array not with the good size.
279         array2=f.getArray().subArray(0,10);
280         f.setArray(array2);
281         f.checkConsistencyLight();
282         ####
283         st=pickle.dumps(f,pickle.HIGHEST_PROTOCOL)
284         f2=pickle.loads(st)
285         self.assertTrue(f2.isEqual(f,1e-16,1e-16))
286         self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
287         pass
288
289     def test13(self):
290         eStr="This is an exception."
291         e=InterpKernelException(eStr)
292         self.assertEqual(e.what(),eStr)
293         st=pickle.dumps(e,pickle.HIGHEST_PROTOCOL)
294         e2=pickle.loads(st)
295         self.assertTrue(e is not e2)
296         self.assertTrue(isinstance(e2,InterpKernelException))
297         self.assertEqual(e2.what(),eStr)
298         pass
299
300     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
301     def test14(self):
302         """Pickelization of DataArrayBytes"""
303         x=DataArrayByte(256,1)
304         for i in range(256):
305             x[i]=-128+i
306             pass
307         x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
308         x.setName("toto")
309         st=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
310         x2=pickle.loads(st)
311         self.assertTrue(x2.isEqual(x))
312         pass
313
314     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
315     def test15(self):
316         """Pickelization of DataArrayFloat"""
317         x=DataArrayFloat(256) ; x.iota()
318         x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
319         x.setName("toto")
320         st = pickle.dumps(x, pickle.HIGHEST_PROTOCOL)
321         x2 = pickle.loads(st)
322         self.assertTrue(x2.isEqual(x,1e-7))
323         pass
324
325     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
326     def test16(self):
327         """  Test of MEDCouplingFieldInt lying on MEDCouplingCMesh pickeling. """
328         arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
329         arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
330         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
331         f=m.getMeasureField(True)
332         f=f.convertToIntField()
333         self.assertTrue(isinstance(f,MEDCouplingFieldInt))
334         f.setName("aname")
335         a=f.getArray()
336         b=a[:] ; b.iota(7000)
337         f.setArray(DataArrayInt.Meld(a,b))
338         f.getArray().setInfoOnComponents(["u1","vv2"])
339         f.checkConsistencyLight();
340         #
341         st = pickle.dumps(f, pickle.HIGHEST_PROTOCOL)
342         f2 = pickle.loads(st)
343         self.assertTrue(f2.isEqual(f,1e-16,0))
344         self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
345         pass
346     
347     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
348     def test17(self):
349         """  Test of MEDCouplingFieldInt lying on MEDCouplingCMesh pickeling. """
350         arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
351         arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
352         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
353         f2=m.getMeasureField(True)
354         f=MEDCouplingFieldFloat(ON_CELLS)
355         f.setMesh(m) ; f.setArray(f2.getArray().convertToFloatArr())
356         self.assertTrue(isinstance(f,MEDCouplingFieldFloat))
357         f.setName("aname")
358         a=f.getArray()
359         b=a[:] ; b.iota(7000.)
360         f.setArray(DataArrayFloat.Meld(a,b))
361         f.getArray().setInfoOnComponents(["u1","vv2"])
362         f.checkConsistencyLight();
363         #
364         st = pickle.dumps(f, pickle.HIGHEST_PROTOCOL)
365         f2 = pickle.loads(st)
366         self.assertTrue(f2.isEqual(f,1e-16,0))
367         self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
368         pass
369
370     def setUp(self):
371         pass
372     pass
373
374 if __name__=="__main__":
375     unittest.main()