Salome HOME
Fix of reference connectivity of faces of PENTA15 cell from Roberto Da Via
[tools/medcoupling.git] / src / MEDCoupling_Swig / MEDCouplingPickleTest.py
index 89a2f60c7a8edfa4af1c7886e2370cb21b2cb540..e1ea6f8f8d7f9834f512e9c93c0aae9a463e7579 100644 (file)
@@ -1,5 +1,5 @@
 #  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2016  CEA/DEN, EDF R&D
+# Copyright (C) 2007-2021  CEA/DEN, EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-from MEDCoupling import *
+
+import sys
+if sys.platform == "win32":
+    from MEDCouplingCompat import *
+else:
+    from medcoupling import *
 from MEDCouplingDataForTest import MEDCouplingDataForTest
 
 if MEDCouplingHasNumPyBindings():
@@ -28,7 +33,12 @@ if MEDCouplingHasNumPyBindings():
 from platform import architecture
 from sys import getrefcount
 
-import os,gc,weakref,cPickle,unittest
+import os, gc, weakref, unittest
+import sys
+if sys.version_info.major < 3:
+  import cPickle as pickle
+else:
+  import pickle
 
 class MEDCouplingPickleTest(unittest.TestCase):
     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
@@ -36,14 +46,14 @@ class MEDCouplingPickleTest(unittest.TestCase):
         """ Test of a simple DataArrayDouble."""
         x=DataArrayDouble(10,1) ; x.iota() ; x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
         x.setName("toto")
-        pickled=cPickle.dumps(x,cPickle.HIGHEST_PROTOCOL)
-        xx=cPickle.loads(pickled)
+        pickled=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
+        xx=pickle.loads(pickled)
         self.assertTrue(xx.isEqual(x,1e-16))
         # Bigger to check that the behavior is OK for large strings.
         x=DataArrayDouble(1200) ; x.iota() ; x.setInfoOnComponents(["aa"])
         x.setName("titi")
-        pickled=cPickle.dumps(x,cPickle.HIGHEST_PROTOCOL)
-        xx=cPickle.loads(pickled)
+        pickled=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
+        xx=pickle.loads(pickled)
         self.assertTrue(xx.isEqual(x,1e-16))
         pass
 
@@ -52,17 +62,17 @@ class MEDCouplingPickleTest(unittest.TestCase):
         """ Test of a simple DataArrayInt."""
         x=DataArrayInt(10) ; x.iota() ; x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
         x.setName("toto")
-        pickled=cPickle.dumps(x,cPickle.HIGHEST_PROTOCOL)
-        xx=cPickle.loads(pickled)
+        pickled=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
+        xx=pickle.loads(pickled)
         self.assertTrue(xx.isEqual(x))
         # Bigger to check that the behavior is OK for large strings.
         x=DataArrayInt(1200) ; x.iota() ; x.setInfoOnComponents(["aa"])
         x.setName("titi")
-        pickled=cPickle.dumps(x,cPickle.HIGHEST_PROTOCOL)
-        xx=cPickle.loads(pickled)
+        pickled=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
+        xx=pickle.loads(pickled)
         self.assertTrue(xx.isEqual(x))
         pass
-    
+
     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
     def test3(self):
         """ Test of a MEDCouplingUMesh pickeling."""
@@ -72,14 +82,14 @@ class MEDCouplingPickleTest(unittest.TestCase):
         m.setName("mesh")
         m.getCoords().setInfoOnComponents(["aa","bbb","ddddd"])
         m.checkConsistencyLight()
-        st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
-        m2=cPickle.loads(st)
+        st=pickle.dumps(m,pickle.HIGHEST_PROTOCOL)
+        m2=pickle.loads(st)
         self.assertTrue(m2.isEqual(m,1e-16))
         pass
 
     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
     def test4(self):
-        """ Idem test3 except that here serialization/deserialization is done explicitely."""
+        """ Idem test3 except that here serialization/deserialization is done explicitly."""
         arr=DataArrayDouble(10) ; arr.iota()
         m=MEDCouplingCMesh() ; m.setCoords(arr,arr,arr)
         m=m.buildUnstructured()
@@ -104,12 +114,12 @@ class MEDCouplingPickleTest(unittest.TestCase):
         m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY,arrZ)
         m.setName("mesh")
         m.checkConsistencyLight()
-        st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
-        m2=cPickle.loads(st)
+        st=pickle.dumps(m,pickle.HIGHEST_PROTOCOL)
+        m2=pickle.loads(st)
         self.assertTrue(m2.isEqual(m,1e-16))
         self.assertTrue(m2.getCoordsAt(0).isEqual(arrX,1e-16))
         pass
-    
+
     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
     def test6(self):
         """ Test of a MEDCoupling1SGTUMesh pickeling."""
@@ -117,11 +127,11 @@ class MEDCouplingPickleTest(unittest.TestCase):
         m=MEDCouplingCMesh() ; m.setCoords(arr,arr)
         m=m.build1SGTUnstructured()
         self.assertTrue(isinstance(m,MEDCoupling1SGTUMesh))
-        st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
-        m2=cPickle.loads(st)
+        st=pickle.dumps(m,pickle.HIGHEST_PROTOCOL)
+        m2=pickle.loads(st)
         self.assertTrue(m2.isEqual(m,1e-16))
         pass
-    
+
     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
     def test7(self):
         """ Test of a MEDCoupling1DGTUMesh pickeling."""
@@ -130,8 +140,8 @@ class MEDCouplingPickleTest(unittest.TestCase):
         m=m.buildUnstructured() ; m.convertAllToPoly()
         m=MEDCoupling1DGTUMesh(m)
         self.assertTrue(isinstance(m,MEDCoupling1DGTUMesh))
-        st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
-        m2=cPickle.loads(st)
+        st=pickle.dumps(m,pickle.HIGHEST_PROTOCOL)
+        m2=pickle.loads(st)
         self.assertTrue(m2.isEqual(m,1e-16))
         pass
 
@@ -150,8 +160,8 @@ class MEDCouplingPickleTest(unittest.TestCase):
         mesh2D.setCoords(mesh3D.getCoords())
         mesh=MEDCouplingMappedExtrudedMesh(mesh3D,mesh2D,0) ; del mesh3D,mesh2D
         self.assertTrue(isinstance(mesh,MEDCouplingMappedExtrudedMesh))
-        st=cPickle.dumps(mesh,cPickle.HIGHEST_PROTOCOL)
-        m2=cPickle.loads(st)
+        st=pickle.dumps(mesh,pickle.HIGHEST_PROTOCOL)
+        m2=pickle.loads(st)
         self.assertTrue(m2.isEqual(mesh,1e-16))
         pass
 
@@ -165,8 +175,8 @@ class MEDCouplingPickleTest(unittest.TestCase):
         #
         mesh=MEDCouplingCurveLinearMesh() ; mesh.setCoords(m.getCoords()) ; del m
         mesh.setNodeGridStructure([10,5])
-        st=cPickle.dumps(mesh,cPickle.HIGHEST_PROTOCOL)
-        m2=cPickle.loads(st)
+        st=pickle.dumps(mesh,pickle.HIGHEST_PROTOCOL)
+        m2=pickle.loads(st)
         self.assertTrue(m2.isEqual(mesh,1e-16))
         pass
 
@@ -175,8 +185,8 @@ class MEDCouplingPickleTest(unittest.TestCase):
         """ Test of a MEDCouplingIMesh pickeling."""
         m=MEDCouplingIMesh("mesh",3,DataArrayInt([3,1,4]),DataArrayDouble([1.5,2.5,3.5]),DataArrayDouble((0.5,1.,0.25))) ; m.setAxisUnit("km")
         m.checkConsistencyLight()
-        st=cPickle.dumps(m,cPickle.HIGHEST_PROTOCOL)
-        m2=cPickle.loads(st)
+        st=pickle.dumps(m,pickle.HIGHEST_PROTOCOL)
+        m2=pickle.loads(st)
         self.assertTrue(m2.isEqual(m,1e-16))
         self.assertEqual(m2.getName(),m.getName())
         pass
@@ -195,10 +205,14 @@ class MEDCouplingPickleTest(unittest.TestCase):
         f.getArray().setInfoOnComponents(["u1","vv2"])
         f.checkConsistencyLight();
         #
-        st=cPickle.dumps(f,cPickle.HIGHEST_PROTOCOL)
-        f2=cPickle.loads(st)
+        st=pickle.dumps(f,pickle.HIGHEST_PROTOCOL)
+        f2=pickle.loads(st)
         self.assertTrue(f2.isEqual(f,1e-16,1e-16))
         self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
+        ###
+        ft=MEDCouplingFieldTemplate(f)
+        ft2=pickle.loads(pickle.dumps(ft,pickle.HIGHEST_PROTOCOL))
+        self.assertTrue(ft2.isEqual(ft,1e-16))
         pass
 
     @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
@@ -233,7 +247,7 @@ class MEDCouplingPickleTest(unittest.TestCase):
         self.assertEqual(2,f.getNbOfGaussLocalization());
         array=DataArrayDouble.New();
         ptr=18*2*[None]
-        for i in xrange(18*2):
+        for i in range(18 * 2):
             ptr[i]=float(i+1)
         array.setValues(ptr,18,2);
         ptr=array.getPointer();
@@ -275,23 +289,97 @@ class MEDCouplingPickleTest(unittest.TestCase):
         f.setArray(array2);
         f.checkConsistencyLight();
         ####
-        st=cPickle.dumps(f,cPickle.HIGHEST_PROTOCOL)
-        f2=cPickle.loads(st)
+        st=pickle.dumps(f,pickle.HIGHEST_PROTOCOL)
+        f2=pickle.loads(st)
         self.assertTrue(f2.isEqual(f,1e-16,1e-16))
         self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
+        ###
+        ft=MEDCouplingFieldTemplate(f)
+        ft2=pickle.loads(pickle.dumps(ft,pickle.HIGHEST_PROTOCOL))
+        self.assertTrue(ft2.isEqual(ft,1e-16))
         pass
 
     def test13(self):
         eStr="This is an exception."
         e=InterpKernelException(eStr)
         self.assertEqual(e.what(),eStr)
-        st=cPickle.dumps(e,cPickle.HIGHEST_PROTOCOL)
-        e2=cPickle.loads(st)
+        st=pickle.dumps(e,pickle.HIGHEST_PROTOCOL)
+        e2=pickle.loads(st)
         self.assertTrue(e is not e2)
         self.assertTrue(isinstance(e2,InterpKernelException))
         self.assertEqual(e2.what(),eStr)
         pass
 
+    @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
+    def test14(self):
+        """Pickelization of DataArrayBytes"""
+        x=DataArrayByte(256,1)
+        for i in range(256):
+            x[i]=-128+i
+            pass
+        x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
+        x.setName("toto")
+        st=pickle.dumps(x,pickle.HIGHEST_PROTOCOL)
+        x2=pickle.loads(st)
+        self.assertTrue(x2.isEqual(x))
+        pass
+
+    @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
+    def test15(self):
+        """Pickelization of DataArrayFloat"""
+        x=DataArrayFloat(256) ; x.iota()
+        x.rearrange(2) ; x.setInfoOnComponents(["aa","bbb"])
+        x.setName("toto")
+        st = pickle.dumps(x, pickle.HIGHEST_PROTOCOL)
+        x2 = pickle.loads(st)
+        self.assertTrue(x2.isEqual(x,1e-7))
+        pass
+
+    @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
+    def test16(self):
+        """  Test of MEDCouplingFieldInt lying on MEDCouplingCMesh pickeling. """
+        arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
+        arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
+        m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
+        f=m.getMeasureField(True)
+        f=f.convertToIntField()
+        self.assertTrue(isinstance(f,MEDCouplingFieldInt))
+        f.setName("aname")
+        a=f.getArray()
+        b=a[:] ; b.iota(7000)
+        f.setArray(DataArrayInt32.Meld(a,b))
+        f.getArray().setInfoOnComponents(["u1","vv2"])
+        f.checkConsistencyLight();
+        #
+        st = pickle.dumps(f, pickle.HIGHEST_PROTOCOL)
+        f2 = pickle.loads(st)
+        self.assertTrue(f2.isEqual(f,1e-16,0))
+        self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
+        pass
+
+    @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
+    def test17(self):
+        """  Test of MEDCouplingFieldInt lying on MEDCouplingCMesh pickeling. """
+        arrX=DataArrayDouble(10) ; arrX.iota() ; arrX.setInfoOnComponents(["aa"])
+        arrY=DataArrayDouble(5) ; arrY.iota() ; arrY.setInfoOnComponents(["bbb"])
+        m=MEDCouplingCMesh() ; m.setCoords(arrX,arrY)
+        f2=m.getMeasureField(True)
+        f=MEDCouplingFieldFloat(ON_CELLS)
+        f.setMesh(m) ; f.setArray(f2.getArray().convertToFloatArr())
+        self.assertTrue(isinstance(f,MEDCouplingFieldFloat))
+        f.setName("aname")
+        a=f.getArray()
+        b=a[:] ; b.iota(7000.)
+        f.setArray(DataArrayFloat.Meld(a,b))
+        f.getArray().setInfoOnComponents(["u1","vv2"])
+        f.checkConsistencyLight();
+        #
+        st = pickle.dumps(f, pickle.HIGHEST_PROTOCOL)
+        f2 = pickle.loads(st)
+        self.assertTrue(f2.isEqual(f,1e-16,0))
+        self.assertTrue(f2.getMesh().isEqual(f.getMesh(),1e-16))
+        pass
+
     def setUp(self):
         pass
     pass