Salome HOME
677b11082a1c5e1ecef1dce6df7a1453393b747b
[modules/med.git] / src / MEDCoupling_Swig / MEDCouplingPickleTest.py
1 #  -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2015  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,cPickle,unittest
32
33 class MEDCouplingPickleTest(unittest.TestCase):
34     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
35     def test1(self):
36         """ Test of a simple DataArrayDouble."""
37         x=DataArrayDouble(10,1) ; x.iota() ; x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
38         x.setName("toto")
39         pickled=cPickle.dumps(x,cPickle.HIGHEST_PROTOCOL)
40         xx=cPickle.loads(pickled)
41         self.assertTrue(xx.isEqual(x,1e-16))
42         # Bigger to check that the behavior is OK for large strings.
43         x=DataArrayDouble(1200) ; x.iota() ; x.setInfoOnComponents(["aa"])
44         x.setName("titi")
45         pickled=cPickle.dumps(x,cPickle.HIGHEST_PROTOCOL)
46         xx=cPickle.loads(pickled)
47         self.assertTrue(xx.isEqual(x,1e-16))
48         pass
49
50     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
51     def test2(self):
52         """ Test of a simple DataArrayInt."""
53         x=DataArrayInt(10) ; x.iota() ; x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
54         x.setName("toto")
55         pickled=cPickle.dumps(x,cPickle.HIGHEST_PROTOCOL)
56         xx=cPickle.loads(pickled)
57         self.assertTrue(xx.isEqual(x))
58         # Bigger to check that the behavior is OK for large strings.
59         x=DataArrayInt(1200) ; x.iota() ; x.setInfoOnComponents(["aa"])
60         x.setName("titi")
61         pickled=cPickle.dumps(x,cPickle.HIGHEST_PROTOCOL)
62         xx=cPickle.loads(pickled)
63         self.assertTrue(xx.isEqual(x))
64         pass
65     
66     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
67     def test3(self):
68         """ Test of a MEDCouplingUMesh pickeling."""
69         arr=DataArrayDouble(10) ; arr.iota()
70         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
71         m=m.buildUnstructured()
72         m.setName("mesh")
73         m.getCoords().setInfoOnComponents(["aa","bbb","ddddd"])
74         m.checkCoherency()
75         st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
76         m2=cPickle.loads(st)
77         self.assertTrue(m2.isEqual(m,1e-16))
78         pass
79
80     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
81     def test4(self):
82         """ Idem test3 except that here serialization/deserialization is done explicitely."""
83         arr=DataArrayDouble(10) ; arr.iota()
84         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
85         m=m.buildUnstructured()
86         m.setName("mesh")
87         m.getCoords().setInfoOnComponents(["aa","bbb","ddddd"])
88         m.checkCoherency()
89         #
90         a0,a1,a2=m.getTinySerializationInformation()
91         b0,b1=m.serialize()
92         m2=MEDCouplingUMesh()
93         m2.unserialization(a0,a1,b0,b1,a2);
94         self.assertTrue(m2.isEqual(m,1e-16))
95         pass
96
97     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
98     def test5(self):
99         """ Test of a MEDCouplingCMesh pickeling."""
100         arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
101         arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
102         arrZ=DataArrayDouble(7) ; arrZ.iota() ; arrZ.setInfoOnComponents(["cccc"])
103         #
104         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
105         m.setName("mesh")
106         m.checkCoherency()
107         st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
108         m2=cPickle.loads(st)
109         self.assertTrue(m2.isEqual(m,1e-16))
110         self.assertTrue(m2.getCoordsAt(0).isEqual(arrX,1e-16))
111         pass
112     
113     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
114     def test6(self):
115         """ Test of a MEDCoupling1SGTUMesh pickeling."""
116         arr=DataArrayDouble(10) ; arr.iota()
117         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
118         m=m.build1SGTUnstructured()
119         self.assertTrue(isinstance(m,MEDCoupling1SGTUMesh))
120         st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
121         m2=cPickle.loads(st)
122         self.assertTrue(m2.isEqual(m,1e-16))
123         pass
124     
125     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
126     def test7(self):
127         """ Test of a MEDCoupling1DGTUMesh pickeling."""
128         arr=DataArrayDouble(10) ; arr.iota()
129         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
130         m=m.buildUnstructured() ; m.convertAllToPoly()
131         m=MEDCoupling1DGTUMesh(m)
132         self.assertTrue(isinstance(m,MEDCoupling1DGTUMesh))
133         st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
134         m2=cPickle.loads(st)
135         self.assertTrue(m2.isEqual(m,1e-16))
136         pass
137
138     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
139     def test8(self):
140         """ Test of a MEDCouplingExtrudedMesh pickeling."""
141         arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
142         arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
143         arrZ=DataArrayDouble(7) ; arrZ.iota() ; arrZ.setInfoOnComponents(["cccc"])
144         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
145         mesh3D=m.buildUnstructured() ; del m
146         #
147         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
148         mesh2D=m.buildUnstructured() ; del m
149         #
150         mesh2D.setCoords(mesh3D.getCoords())
151         mesh=MEDCouplingExtrudedMesh(mesh3D,mesh2D,0) ; del mesh3D,mesh2D
152         self.assertTrue(isinstance(mesh,MEDCouplingExtrudedMesh))
153         st=cPickle.dumps(mesh,cPickle.HIGHEST_PROTOCOL)
154         m2=cPickle.loads(st)
155         self.assertTrue(m2.isEqual(mesh,1e-16))
156         pass
157
158     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
159     def test9(self):
160         """ Test of a MEDCouplingCurveLinearMesh pickeling."""
161         arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
162         arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
163         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
164         m=m.buildUnstructured()
165         #
166         mesh=MEDCouplingCurveLinearMesh() ; mesh.setCoords(m.getCoords()) ; del m
167         mesh.setNodeGridStructure([10,5])
168         st=cPickle.dumps(mesh,cPickle.HIGHEST_PROTOCOL)
169         m2=cPickle.loads(st)
170         self.assertTrue(m2.isEqual(mesh,1e-16))
171         pass
172
173     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
174     def test10(self):
175         """ Test of a MEDCouplingIMesh pickeling."""
176         m=MEDCouplingIMesh("mesh",3,DataArrayInt([3,1,4]),DataArrayDouble([1.5,2.5,3.5]),DataArrayDouble((0.5,1.,0.25))) ; m.setAxisUnit("km")
177         m.checkCoherency()
178         st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
179         m2=cPickle.loads(st)
180         self.assertTrue(m2.isEqual(m,1e-16))
181         self.assertEqual(m2.getName(),m.getName())
182         pass
183
184     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
185     def test11(self):
186         """  Test of MEDCouplingFieldDouble lying on MEDCouplingCMesh pickeling. """
187         arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
188         arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
189         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
190         f=m.getMeasureField(True)
191         f.setName("aname")
192         a=f.getArray()
193         b=a[:] ; b.iota(7000.)
194         f.setArray(DataArrayDouble.Meld(a,b))
195         f.getArray().setInfoOnComponents(["u1","vv2"])
196         f.checkCoherency();
197         #
198         st=cPickle.dumps(f,cPickle.HIGHEST_PROTOCOL)
199         f2=cPickle.loads(st)
200         self.assertTrue(f2.isEqual(f,1e-16,1e-16))
201         self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
202         pass
203
204     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
205     def test12(self):
206         """  Test of MEDCouplingFieldDouble on Gauss Points lying on MEDCouplingUMesh pickeling."""
207         _a=0.446948490915965;
208         _b=0.091576213509771;
209         _p1=0.11169079483905;
210         _p2=0.0549758718227661;
211         refCoo1=[ 0.,0., 1.,0., 0.,1. ]
212         gsCoo1=[ 2*_b-1, 1-4*_b, 2*_b-1, 2.07*_b-1, 1-4*_b,
213                  2*_b-1, 1-4*_a, 2*_a-1, 2*_a-1, 1-4*_a, 2*_a-1, 2*_a-1 ]
214         wg1=[ 4*_p2, 4*_p2, 4*_p2, 4*_p1, 4*_p1, 4*_p1 ]
215         _refCoo1=refCoo1
216         _gsCoo1=gsCoo1
217         _wg1=wg1
218         #
219         m=MEDCouplingDataForTest.build2DTargetMesh_1();
220         f=MEDCouplingFieldDouble.New(ON_GAUSS_PT,NO_TIME);
221         f.setMesh(m);
222         self.assertEqual(5,f.getNumberOfMeshPlacesExpected());
223         self.assertEqual(0,f.getNbOfGaussLocalization());
224         f.setGaussLocalizationOnType(NORM_TRI3,_refCoo1,_gsCoo1,_wg1);
225         f.setGaussLocalizationOnType(NORM_TRI3,_refCoo1,_gsCoo1,_wg1); # not a bug only to check that it works well
226         self.assertRaises(InterpKernelException,f.setGaussLocalizationOnType,NORM_QUAD4,_refCoo1,_gsCoo1,_wg1)
227         self.assertEqual(1,f.getNbOfGaussLocalization());
228         refCoo2=[ 0.,0., 1.,0., 1.,1., 0.,1. ]
229         _refCoo2=refCoo2
230         _gsCoo1=_gsCoo1[0:4]
231         _wg1=_wg1[0:2]
232         f.setGaussLocalizationOnType(NORM_QUAD4,_refCoo2,_gsCoo1,_wg1);
233         self.assertEqual(2,f.getNbOfGaussLocalization());
234         array=DataArrayDouble.New();
235         ptr=18*2*[None]
236         for i in xrange(18*2):
237             ptr[i]=float(i+1)
238         array.setValues(ptr,18,2);
239         ptr=array.getPointer();
240         f.setArray(array);
241         f.setName("MyFirstFieldOnGaussPoint");
242         f.checkCoherency();
243         self.assertAlmostEqual(27.,f.getIJK(2,5,0),14);
244         self.assertAlmostEqual(16.,f.getIJK(1,5,1),14);
245         #
246         f.clearGaussLocalizations();
247         self.assertEqual(0,f.getNbOfGaussLocalization());
248         self.assertRaises(InterpKernelException,f.checkCoherency);
249         ids1=[0,1,3,4]
250         self.assertRaises(InterpKernelException,f.setGaussLocalizationOnCells,ids1,_refCoo2,_gsCoo1,_wg1);
251         self.assertEqual(0,f.getNbOfGaussLocalization());
252         ids2=[0,4]
253         f.setGaussLocalizationOnCells(ids2,_refCoo2,_gsCoo1,_wg1);
254         self.assertEqual(1,f.getNbOfGaussLocalization());
255         self.assertEqual(0,f.getGaussLocalizationIdOfOneCell(0));
256         self.assertRaises(InterpKernelException,f.getGaussLocalizationIdOfOneCell,1);
257         ids3=[1,2]
258         f.setGaussLocalizationOnCells(ids3,_refCoo1,_gsCoo1,_wg1);
259         self.assertEqual(2,f.getNbOfGaussLocalization());
260         self.assertEqual(0,f.getGaussLocalizationIdOfOneCell(0));
261         self.assertEqual(1,f.getGaussLocalizationIdOfOneCell(1));
262         self.assertEqual(1,f.getGaussLocalizationIdOfOneCell(2));
263         self.assertRaises(InterpKernelException,f.checkCoherency);#<- cell 3 has no localization
264         ids4=[3]
265         _gsCoo2=_gsCoo1;
266         _wg2=_wg1;
267         _gsCoo2[0]=0.8888777776666;
268         _wg2[0]=0.1234567892377;
269         f.setGaussLocalizationOnCells(ids4,_refCoo2,_gsCoo2,_wg2);
270         self.assertEqual(3,f.getNbOfGaussLocalization());
271         tmpIds=f.getCellIdsHavingGaussLocalization(0);
272         self.assertEqual(ids2,list(tmpIds.getValues()));
273         self.assertRaises(InterpKernelException,f.checkCoherency);#<- it's always not ok because undelying array not with the good size.
274         array2=f.getArray().substr(0,10);
275         f.setArray(array2);
276         f.checkCoherency();
277         ####
278         st=cPickle.dumps(f,cPickle.HIGHEST_PROTOCOL)
279         f2=cPickle.loads(st)
280         self.assertTrue(f2.isEqual(f,1e-16,1e-16))
281         self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
282         pass
283
284     def test13(self):
285         eStr="This is an exception."
286         e=InterpKernelException(eStr)
287         self.assertEqual(e.what(),eStr)
288         st=cPickle.dumps(e,cPickle.HIGHEST_PROTOCOL)
289         e2=cPickle.loads(st)
290         self.assertTrue(e is not e2)
291         self.assertTrue(isinstance(e2,InterpKernelException))
292         self.assertEqual(e2.what(),eStr)
293         pass
294
295     def setUp(self):
296         pass
297     pass
298
299 if __name__=="__main__":
300     unittest.main()