1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2016 CEA/DEN, EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 from MEDCoupling import *
22 from MEDCouplingDataForTest import MEDCouplingDataForTest
24 if MEDCouplingHasNumPyBindings():
28 from platform import architecture
29 from sys import getrefcount
31 import os, gc, weakref, unittest
33 if sys.version_info.major < 3:
34 import cPickle as pickle
38 class MEDCouplingPickleTest(unittest.TestCase):
39 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
41 """ Test of a simple DataArrayDouble."""
42 x=DataArrayDouble(10,1) ; x.iota() ; x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
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"])
50 pickled=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
51 xx=pickle.loads(pickled)
52 self.assertTrue(xx.isEqual(x,1e-16))
55 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
57 """ Test of a simple DataArrayInt."""
58 x=DataArrayInt(10) ; x.iota() ; x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
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"])
66 pickled=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
67 xx=pickle.loads(pickled)
68 self.assertTrue(xx.isEqual(x))
71 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
73 """ Test of a MEDCouplingUMesh pickeling."""
74 arr=DataArrayDouble(10) ; arr.iota()
75 m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
76 m=m.buildUnstructured()
78 m.getCoords().setInfoOnComponents(["aa","bbb","ddddd"])
79 m.checkConsistencyLight()
80 st=pickle.dumps(m,pickle.HIGHEST_PROTOCOL)
82 self.assertTrue(m2.isEqual(m,1e-16))
85 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
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()
92 m.getCoords().setInfoOnComponents(["aa","bbb","ddddd"])
93 m.checkConsistencyLight()
95 a0,a1,a2=m.getTinySerializationInformation()
98 m2.unserialization(a0,a1,b0,b1,a2);
99 self.assertTrue(m2.isEqual(m,1e-16))
102 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
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"])
109 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
111 m.checkConsistencyLight()
112 st=pickle.dumps(m,pickle.HIGHEST_PROTOCOL)
114 self.assertTrue(m2.isEqual(m,1e-16))
115 self.assertTrue(m2.getCoordsAt(0).isEqual(arrX,1e-16))
118 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
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)
127 self.assertTrue(m2.isEqual(m,1e-16))
130 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
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)
140 self.assertTrue(m2.isEqual(m,1e-16))
143 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
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
152 m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
153 mesh2D=m.buildUnstructured() ; del m
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)
160 self.assertTrue(m2.isEqual(mesh,1e-16))
163 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
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()
171 mesh=MEDCouplingCurveLinearMesh() ; mesh.setCoords(m.getCoords()) ; del m
172 mesh.setNodeGridStructure([10,5])
173 st=pickle.dumps(mesh,pickle.HIGHEST_PROTOCOL)
175 self.assertTrue(m2.isEqual(mesh,1e-16))
178 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
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)
185 self.assertTrue(m2.isEqual(m,1e-16))
186 self.assertEqual(m2.getName(),m.getName())
189 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
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)
198 b=a[:] ; b.iota(7000.)
199 f.setArray(DataArrayDouble.Meld(a,b))
200 f.getArray().setInfoOnComponents(["u1","vv2"])
201 f.checkConsistencyLight();
203 st=pickle.dumps(f,pickle.HIGHEST_PROTOCOL)
205 self.assertTrue(f2.isEqual(f,1e-16,1e-16))
206 self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
209 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
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 ]
224 m=MEDCouplingDataForTest.build2DTargetMesh_1();
225 f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,NO_TIME);
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. ]
237 f.setGaussLocalizationOnType(NORM_QUAD4,_refCoo2,_gsCoo1,_wg1);
238 self.assertEqual(2,f.getNbOfGaussLocalization());
239 array=DataArrayDouble.New();
241 for i in range(18 * 2):
243 array.setValues(ptr,18,2);
244 ptr=array.getPointer();
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);
251 f.clearGaussLocalizations();
252 self.assertEqual(0,f.getNbOfGaussLocalization());
253 self.assertRaises(InterpKernelException,f.checkConsistencyLight);
255 self.assertRaises(InterpKernelException,f.setGaussLocalizationOnCells,ids1,_refCoo2,_gsCoo1,_wg1);
256 self.assertEqual(0,f.getNbOfGaussLocalization());
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);
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
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);
281 f.checkConsistencyLight();
283 st=pickle.dumps(f,pickle.HIGHEST_PROTOCOL)
285 self.assertTrue(f2.isEqual(f,1e-16,1e-16))
286 self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
290 eStr="This is an exception."
291 e=InterpKernelException(eStr)
292 self.assertEqual(e.what(),eStr)
293 st=pickle.dumps(e,pickle.HIGHEST_PROTOCOL)
295 self.assertTrue(e is not e2)
296 self.assertTrue(isinstance(e2,InterpKernelException))
297 self.assertEqual(e2.what(),eStr)
300 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
302 """Pickelization of DataArrayBytes"""
303 x=DataArrayByte(256,1)
307 x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
309 st=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
311 self.assertTrue(x2.isEqual(x))
314 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
316 """Pickelization of DataArrayFloat"""
317 x=DataArrayFloat(256) ; x.iota()
318 x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
320 st = pickle.dumps(x, pickle.HIGHEST_PROTOCOL)
321 x2 = pickle.loads(st)
322 self.assertTrue(x2.isEqual(x,1e-7))
325 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
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))
336 b=a[:] ; b.iota(7000)
337 f.setArray(DataArrayInt.Meld(a,b))
338 f.getArray().setInfoOnComponents(["u1","vv2"])
339 f.checkConsistencyLight();
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))
347 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
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))
359 b=a[:] ; b.iota(7000.)
360 f.setArray(DataArrayFloat.Meld(a,b))
361 f.getArray().setInfoOnComponents(["u1","vv2"])
362 f.checkConsistencyLight();
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))
374 if __name__=="__main__":