Salome HOME
Updated copyright comment
[tools/medcoupling.git] / src / MEDCoupling_Swig / MEDCouplingBasicsTest1.py
index cdc7565519432feff07e948f9e5b7f90c93b09bc..d21899aad12f429924840b1d479e479ccb4710b0 100644 (file)
@@ -1,5 +1,5 @@
 #  -*- coding: utf-8 -*-
-# Copyright (C) 2007-2016  CEA/DEN, EDF R&D
+# Copyright (C) 2007-2024  CEA, EDF
 #
 # 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
+from medcoupling import *
+
 import unittest
 from math import pi,e,sqrt,cos,sin
 from datetime import datetime
 from MEDCouplingDataForTest import MEDCouplingDataForTest
-import rlcompleter,readline # this line has to be here, to ensure a usability of MEDCoupling/MEDLoader. B4 removing it please notify to anthony.geay@cea.fr
+import rlcompleter,readline # this line has to be here, to ensure a usability of MEDCoupling/MEDLoader. B4 removing it please notify to anthony.geay@edf.fr
 
 class MEDCouplingBasicsTest1(unittest.TestCase):
     def testArray2(self):
@@ -60,21 +62,21 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(7,arr4.getNumberOfTuples());
         self.assertEqual(2,arr4.getNumberOfComponents());
         tmp=arr4.getValues()
-        for i in xrange(14):
+        for i in range(14):
             self.assertTrue(abs(arr4Ref[i]-tmp[i])<1e-14);
             pass
         arr5=arr4.subArray(3);
         self.assertEqual(4,arr5.getNumberOfTuples());
         self.assertEqual(2,arr5.getNumberOfComponents());
         tmp=arr5.getValues()
-        for i in xrange(8):
+        for i in range(8):
             self.assertTrue(abs(arr4Ref[6+i]-tmp[i])<1e-14);
             pass
         arr6=arr4.subArray(2,5);
         self.assertEqual(3,arr6.getNumberOfTuples());
         self.assertEqual(2,arr6.getNumberOfComponents());
         tmp=arr6.getValues()
-        for i in xrange(6):
+        for i in range(6):
             self.assertTrue(abs(arr4Ref[4+i]-tmp[i])<1e-14);
             pass
         pass
@@ -88,7 +90,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         coords=[ 0.024155, 0.04183768725682622, -0.305, 0.04831000000000001, -1.015761910347357e-17,
                  -0.305, 0.09662000000000001, -1.832979297858306e-18, -0.305, 0.120775, 0.04183768725682623,
                  -0.305, 0.09662000000000001, 0.08367537451365245, -0.305, 0.04831000000000001, 0.08367537451365246,
-                 -0.305, 0.024155, 0.04183768725682622, -0.2863, 0.04831000000000001, -1.015761910347357e-17, -0.2863, 
+                 -0.305, 0.024155, 0.04183768725682622, -0.2863, 0.04831000000000001, -1.015761910347357e-17, -0.2863,
                  0.09662000000000001, -1.832979297858306e-18, -0.2863, 0.120775, 0.04183768725682623, -0.2863, 0.09662000000000001,
                  0.08367537451365245, -0.2863, 0.04831000000000001, 0.08367537451365246, -0.2863 ]
         self.assertEqual(MEDCouplingMesh.GetNumberOfNodesOfGeometricType(NORM_TRI3),3)
@@ -133,7 +135,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         field.setNature(ExtensiveMaximum)
         myCoords=DataArrayDouble.New()
         sampleTab=[]
-        for i in range(nbOfCells*9):
+        for i in range(nbOfCells * 9):
             sampleTab.append(float(i))
         myCoords.setValues(sampleTab,nbOfCells,9);
         field.setArray(myCoords)
@@ -150,7 +152,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         field3=mesh3.fillFromAnalytic(ON_CELLS,2,"x*IVec+(y+z)*JVec")
         field3.applyFunc("u*u*u+cos(u)")
         pass
-        
+
     def testMeshPointsCloud(self):
         targetCoords=[-0.3,-0.3,0.5, 0.2,-0.3,1., 0.7,-0.3,1.5,
                       -0.3,0.2,0.5, 0.2,0.2,1., 0.7,0.2,1.5, -0.3,0.7,0.5, 0.2,0.7,1., 0.7,0.7,1.5]
@@ -198,7 +200,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         fieldOnCells.setArray(array);
         fieldOnCells.checkConsistencyLight();
         pass
-    
+
     def testDeepCopy(self):
         array=DataArrayDouble.New();
         array.setValues(5*3*[7.],5,3);
@@ -212,7 +214,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         array4=array3.deepCopy();
         self.assertEqual(array4.getIJ(3,2),17);
         pass
-    
+
     def testRevNodal(self):
         mesh=MEDCouplingDataForTest.build2DTargetMesh_1()
         revNodal,revNodalIndx=mesh.getReverseNodalConnectivity();
@@ -223,7 +225,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(list(revNodal.getValues()),revNodalExpected)
         self.assertEqual(list(revNodalIndx.getValues()),revNodalIndexExpected)
         pass
-    
+
     def testConvertToPolyTypes(self):
         mesh=MEDCouplingDataForTest.build2DTargetMesh_1();
         elts=[1,3];
@@ -300,7 +302,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(expected5,list(connIndex.getValues()));
         self.assertEqual(expected6,list(conn.getValues()));
         pass
-    
+
     def testDescConn3D(self):
         mesh=MEDCouplingDataForTest.build3DTargetMesh_1();
         desc=DataArrayInt.New();
@@ -329,7 +331,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
                    5, 5, 5, 14, 13, 4, 4, 3, 4, 7, 6, 4, 12, 15, 16, 13, 4, 4, 13, 16, 7, 4, 7, 16, 15, 6, 4, 6, 15, 12, 3, 5, 4, 5, 8, 7, 5, 13, 16, 17, 14, 5, 5, 14, 17, 8, 5, 8,
                    17, 16, 7, 4, 18, 21, 22, 19, 4, 9, 18, 19, 10, 4, 10, 19, 22, 13, 4, 13, 22, 21, 12, 4, 12, 21, 18, 9, 4, 19, 22, 23, 20, 4, 10, 19, 20, 11, 4, 11, 20, 23, 14, 4,
                    14, 23, 22, 13, 4, 21, 24, 25, 22, 4, 13, 22, 25, 16, 4, 16, 25, 24, 15, 4, 15, 24, 21, 12, 4, 22, 25, 26, 23, 4, 14, 23, 26, 17, 4, 17, 26, 25, 16]
-        
+
         self.assertEqual(expected1,list(descIndx.getValues()));
         self.assertEqual(expected2,list(desc.getValues()));
         self.assertEqual(expected3,list(revDescIndx.getValues()));
@@ -420,7 +422,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         subMesh=subMesh.buildPartOfMySelf(dd,True);
         self.assertEqual("coucou",subMesh.getName());
         pass
-    
+
     def testBuildPartOfMySelfNode(self):
         mesh=MEDCouplingDataForTest.build2DTargetMesh_1();
         tab1=[5,7,8,4]
@@ -461,7 +463,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(NORM_QUAD4,subMesh.getAllGeoTypes()[1]);
         self.assertEqual(3,subMesh.getNumberOfCells());
         pass
-    
+
     def testZipCoords(self):
         mesh=MEDCouplingDataForTest.build2DTargetMesh_1();
         self.assertEqual(2,len(mesh.getAllGeoTypes()));
@@ -506,7 +508,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(subConn,list(subMesh.getNodalConnectivity().getValues()));
         self.assertEqual(subConnIndex,list(subMesh.getNodalConnectivityIndex().getValues()));
         pass
-    
+
     def testZipConnectivity(self):
         m1=MEDCouplingDataForTest.build2DTargetMesh_1();
         m2=MEDCouplingDataForTest.build2DTargetMesh_1();
@@ -531,7 +533,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertTrue(m7.isEqual(m6,1e-12));
         self.assertEqual(7,m6.getNumberOfCells());
         pass
-    
+
     def testEqualMesh(self):
         mesh1=MEDCouplingDataForTest.build2DTargetMesh_1();
         mesh2=MEDCouplingDataForTest.build2DTargetMesh_1();
@@ -581,7 +583,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertTrue(mesh1.isEqual(mesh2,1e-12));
         self.assertTrue(mesh2.isEqual(mesh1,1e-12));
         pass
-    
+
     def testEqualFieldDouble(self):
         mesh1=MEDCouplingDataForTest.build2DTargetMesh_1();
         mesh2=MEDCouplingDataForTest.build2DTargetMesh_1();
@@ -670,7 +672,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertRaises(InterpKernelException,field.setNature,ExtensiveMaximum);
         self.assertRaises(InterpKernelException,field.setNature,ExtensiveConservation);
         pass
-      
+
     def testNatureOperations(self):
         """ Check nature constraints on field operations """
         m = MEDCouplingCMesh()
@@ -682,7 +684,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         f2.setNature(IntensiveMaximum)
         self.assertEqual(ExtensiveMaximum, f1.getNature())
         self.assertEqual(IntensiveMaximum, f2.getNature())
-        
+
         da = DataArrayDouble([1.0,2.0,3.0,4.0])
         f1.setMesh(m); f2.setMesh(m)
         f1.setArray(da); f2.setArray(da.deepCopy())
@@ -720,7 +722,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(NoNature, f3.getNature())
         f3 = f1.dot(f2)
         self.assertEqual(NoNature, f3.getNature())
-        
+
         da = DataArrayDouble.Meld([da, da, da])
         f1.setArray(da); f2.setArray(da.deepCopy())
         f3 = MEDCouplingFieldDouble.CrossProductFields(f1,f2)
@@ -754,7 +756,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         expected=[1,2,4,5,7,8]
         self.assertEqual(expected,list(toCheck));
         pass
-    
+
     def testExtrudedMesh1(self):
         mesh3D,mesh2D=MEDCouplingDataForTest.build3DExtrudedUMesh_1();
         ext=MEDCouplingMappedExtrudedMesh.New(mesh3D,mesh2D,1);
@@ -797,7 +799,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(5,m4.getMesh2D().getNumberOfCells());
         self.assertEqual(3,m4.getMesh1D().getNumberOfCells());
         m3DIds=m4.getMesh3DIds().getValues();
-        self.assertEqual(range(15),list(m3DIds));
+        self.assertEqual(list(range(15)), list(m3DIds));
         #some random in cells to check that extrusion alg find it correctly
         expected1=[1,3,2,0,6,5,7,10,11,8,12,9,14,13,4]
         m3.renumberCells(expected1,False);
@@ -853,7 +855,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         expected2=[0.075,0.0375,0.0375,0.075,0.075,
                    0.1125,0.05625,0.05625,0.1125,0.1125,
                    0.0625,0.03125,0.03125,0.0625,0.0625]
-        for i in xrange(15):
+        for i in range(15):
             self.assertAlmostEqual(expected2[rexpected1[i]],arrPtr[i],16);
             pass
         m5=m4.build3DUnstructuredMesh();
@@ -864,7 +866,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertTrue(isinstance(f.getMesh(),MEDCouplingMappedExtrudedMesh))
         arr=f.getArray();
         arrPtr=arr.getValues();
-        for i in xrange(15):
+        for i in range(15):
             self.assertAlmostEqual(expected2[rexpected1[i]],arrPtr[i],15);
             pass
         pass
@@ -877,7 +879,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         o2n,newNbOfNodes=targetMesh.buildNewNumberingFromCommonNodesFormat(comm,commI);
         self.assertEqual(27,newNbOfNodes);
         self.assertEqual(27,o2n.getNumberOfTuples());
-        o2nExp1=range(27)
+        o2nExp1 = list(range(27))
         self.assertEqual(o2nExp1,list(o2n.getValues()));
         #
         targetMesh=MEDCouplingDataForTest.build3DTargetMeshMergeNode_1();
@@ -920,8 +922,8 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
                     200., 50., 0.,   0., 200., 0., 50., 200., 0. , 200., 200., 0. ,
                     0., 0., 50., 50., 0., 50. , 200., 0., 50.  , 0., 50., 50., 50.,
                     50., 50. , 200., 50., 50.,   0., 200., 50., 50., 200., 50. ,
-                    200., 200., 50. , 0., 0., 200., 50., 0., 200. , 200., 0., 200.  
-                    , 0., 50., 200., 50., 50., 200. , 200., 50., 200., 
+                    200., 200., 50. , 0., 0., 200., 50., 0., 200. , 200., 0., 200.
+                    , 0., 50., 200., 50., 50., 200. , 200., 50., 200.,
                     0., 200., 200., 50., 200., 200. , 200., 200., 200. ]
         self.assertEqual(coordsExp,targetMesh.getCoords().getValues());
         # 2D
@@ -992,7 +994,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
     def testMergeMeshOnSameCoords1(self):
         m1=MEDCouplingDataForTest.build2DTargetMesh_1();
         m2=MEDCouplingDataForTest.build2DTargetMesh_1();
-        cells=range(5);
+        cells = list(range(5));
         m2.convertToPolyTypes(cells);
         m1.tryToShareSameCoords(m2,1e-12);
         m3=MEDCouplingDataForTest.build2DTargetMesh_1();
@@ -1025,6 +1027,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         f3=MEDCouplingFieldDouble.MergeFields(f1,f2);
         f3.checkConsistencyLight();
         m4=MEDCouplingDataForTest.build2DTargetMeshMerged_1();
+        m4.setName(f1.getMesh().getName())
         self.assertTrue(f3.getMesh().isEqual(m4,1.e-12));
         name=f3.getName();
         self.assertEqual(name,"MeasureOfMesh_");
@@ -1035,7 +1038,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         values=[0.25,0.125,0.125,0.25,0.25,0.5,0.5]
         tmp=f3.getArray().getValues();
         self.assertEqual(len(values),len(tmp))
-        for i in xrange(7):
+        for i in range(7):
             self.assertTrue(abs(values[i]-tmp[i])<1e-12)
             pass
         pass
@@ -1046,7 +1049,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         f1=m.fillFromAnalytic(ON_CELLS,1,"x+y");
         self.assertAlmostEqual(3.4,f1.getTime()[0],12) ; self.assertEqual(5,f1.getTime()[1]) ; self.assertEqual(6,f1.getTime()[2])
         self.assertEqual("us",f1.getTimeUnit())
-        f1.checkConsistencyLight();                    
+        f1.checkConsistencyLight();
         self.assertEqual(f1.getTypeOfField(),ON_CELLS);
         self.assertEqual(f1.getTimeDiscretization(),ONE_TIME);
         self.assertEqual(1,f1.getNumberOfComponents());
@@ -1054,7 +1057,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         values1=[-0.1,0.23333333333333336,0.56666666666666665,0.4,0.9]
         tmp=f1.getArray().getValues();
         self.assertEqual(len(values1),len(tmp))
-        for i in xrange(len(tmp)):
+        for i in range(len(tmp)):
             self.assertTrue(abs(tmp[i]-values1[i])<1.e-12)
             pass
         #
@@ -1067,7 +1070,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         values2=[-0.6,-0.1,0.4,-0.1,0.4,0.9,0.4,0.9,1.4]
         tmp=f1.getArray().getValues();
         self.assertEqual(len(values2),len(tmp))
-        for i in xrange(len(tmp)):
+        for i in range(len(tmp)):
             self.assertTrue(abs(tmp[i]-values2[i])<1.e-12)
             pass
         #
@@ -1080,7 +1083,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         values3=[-0.6,-1.2,-0.1,-0.2,0.4,0.8,-0.1,-0.2,0.4,0.8,0.9,1.8,0.4,0.8,0.9,1.8,1.4,2.8]
         tmp=f1.getArray().getValues();
         self.assertEqual(len(values3),len(tmp))
-        for i in xrange(len(tmp)):
+        for i in range(len(tmp)):
             self.assertTrue(abs(tmp[i]-values3[i])<1.e-12)
             pass
         values4=f1.accumulate();
@@ -1088,9 +1091,10 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertTrue(abs(3.6-values4[0])<1.e-12);
         self.assertTrue(abs(7.2-values4[1])<1.e-12);
         values4=f1.integral(True);
+        #0.4 == 0.25/4*-0.6+(0.25/4+0.125/3)*-0.1+0.4*(0.125/3.+0.125/3)+(-0.1)*(0.25/4+0.25/4)+0.4*(0.25/4+0.125/3+0.125/3+0.25/4+0.25/4)+0.9*(0.25/4+0.125/3)+0.4*0.25/4+0.9*(0.25/4+0.25/4)+1.4*0.25/4
         self.assertEqual(2,len(values4))
-        self.assertTrue(abs(0.5-values4[0])<1.e-12);
-        self.assertTrue(abs(1.-values4[1])<1.e-12);
+        self.assertTrue(abs(0.4-values4[0])<1.e-12);
+        self.assertTrue(abs(0.8-values4[1])<1.e-12);
         #
         self.assertRaises(InterpKernelException,m.fillFromAnalytic,ON_NODES,1,"1./(x-0.2)");
         pass
@@ -1106,7 +1110,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         values1=[-0.1,0.23333333333333336,0.56666666666666665,0.4,0.9]
         tmp=f1.getArray().getValues();
         self.assertEqual(len(values1),len(tmp))
-        for i in xrange(len(values1)):
+        for i in range(len(values1)):
             self.assertTrue(abs(values1[i]-tmp[i])<1.e-12);
             pass
         #
@@ -1119,7 +1123,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         values2=[-0.9,0.1,1.1,-0.4,0.6,1.6,0.1,1.1,2.1]
         tmp=f1.getArray().getValues();
         self.assertEqual(len(values2),len(tmp))
-        for i in xrange(len(values2)):
+        for i in range(len(values2)):
             self.assertTrue(abs(values2[i]-tmp[i])<1.e-12);
             pass
         f1=m.fillFromAnalytic(ON_NODES,1,"2.*x+y");
@@ -1131,7 +1135,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         tmp=f1.getArray().getValues();
         values2Bis=[-0.9,0.1,1.1,-0.4,0.6,1.6,0.1,1.1,2.1]
         self.assertEqual(len(values2Bis),len(tmp))
-        for i in xrange(len(values2Bis)):
+        for i in range(len(values2Bis)):
             self.assertTrue(abs(values2Bis[i]-tmp[i])<1.e-12);
             pass
         #
@@ -1144,15 +1148,15 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         values3=[-0.6,-1.2,-0.1,-0.2,0.4,0.8,-0.1,-0.2,0.4,0.8,0.9,1.8,0.4,0.8,0.9,1.8,1.4,2.8]
         tmp=f1.getArray().getValues();
         self.assertEqual(len(values3),len(tmp))
-        for i in xrange(len(values3)):
+        for i in range(len(values3)):
             self.assertTrue(abs(values3[i]-tmp[i])<1.e-12);
             pass
         values4=f1.accumulate();
         self.assertTrue(abs(3.6-values4[0])<1.e-12);
         self.assertTrue(abs(7.2-values4[1])<1.e-12);
         values4=f1.integral(True);
-        self.assertTrue(abs(0.5-values4[0])<1.e-12);
-        self.assertTrue(abs(1.-values4[1])<1.e-12);
+        self.assertTrue(abs(0.4-values4[0])<1.e-12);
+        self.assertTrue(abs(0.8-values4[1])<1.e-12);
         pass
 
     def testApplyFunc(self):
@@ -1171,7 +1175,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         values1=[-1.8,-0.3,1.2,-0.3,1.2,2.7,1.2,2.7,4.2]
         tmp=f1.getArray().getValues();
         self.assertEqual(len(values1),len(tmp))
-        for i in xrange(len(tmp)):
+        for i in range(len(tmp)):
             self.assertTrue(abs(tmp[i]-values1[i])<1.e-12)
             pass
         pass
@@ -1201,7 +1205,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
                  5.0423700574830965, 17.435300118916864]
         tmp=f2.getArray().getValues();
         self.assertEqual(len(tmp),len(values2))
-        for i in xrange(len(tmp)):
+        for i in range(len(tmp)):
             self.assertTrue(abs(tmp[i]-values2[i])<1.e-12)
             pass
         #
@@ -1213,7 +1217,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         values1=[-1.8,-0.3,1.2,-0.3,1.2,2.7,1.2,2.7,4.2]
         tmp=f1.getArray().getValues();
         self.assertEqual(len(tmp),len(values1))
-        for i in xrange(len(tmp)):
+        for i in range(len(tmp)):
             self.assertTrue(abs(tmp[i]-values1[i])<1.e-12)
             pass
         pass
@@ -1231,7 +1235,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         values1=[-1.2,-0.2,0.8,-0.2,0.8,1.8,0.8,1.8,2.8]
         tmp=f3.getArray().getValues();
         self.assertEqual(len(values1),len(tmp))
-        for i in xrange(len(tmp)):
+        for i in range(len(tmp)):
             self.assertTrue(abs(tmp[i]-values1[i])<1.e-12)
             pass
         #
@@ -1242,7 +1246,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         values2=[0.36,0.01,0.16,0.01,0.16,0.81,0.16,0.81,1.96]
         tmp=f3.getArray().getValues();
         self.assertEqual(len(values2),len(tmp))
-        for i in xrange(len(tmp)):
+        for i in range(len(tmp)):
             self.assertTrue(abs(tmp[i]-values2[i])<1.e-12)
             pass
         #
@@ -1254,7 +1258,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         values3=[0.6,0.1,-0.4,0.1,-0.4,-0.9,-0.4,-0.9,-1.4]
         tmp=f4.getArray().getValues();
         self.assertEqual(len(values3),len(tmp))
-        for i in xrange(len(tmp)):
+        for i in range(len(tmp)):
             self.assertTrue(abs(tmp[i]-values3[i])<1.e-12)
             pass
         #
@@ -1264,7 +1268,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(f4.getTypeOfField(),ON_NODES);
         self.assertEqual(f4.getTimeDiscretization(),ONE_TIME);
         tmp=f4.getArray().getValues();
-        for i in xrange(len(tmp)):
+        for i in range(len(tmp)):
             self.assertTrue(abs(tmp[i]-2.)<1.e-12)
             pass
         #
@@ -1280,7 +1284,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         tmp=f3.getArray().getValues();
         values4=[-1.2,-0.2,0.8,-0.2,0.8,1.8,0.8,1.8,2.8]
         self.assertEqual(len(values3),len(tmp))
-        for i in xrange(len(tmp)):
+        for i in range(len(tmp)):
             self.assertTrue(abs(tmp[i]-values4[i])<1.e-12)
             pass
         #
@@ -1296,7 +1300,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         tmp=f3.getArray().getValues();
         values5=[-1.2,-0.2,0.8,-0.2,0.8,1.8,0.8,1.8,2.8]
         self.assertEqual(len(values5),len(tmp))
-        for i in xrange(len(tmp)):
+        for i in range(len(tmp)):
             self.assertTrue(abs(tmp[i]-values5[i])<1.e-12)
             pass
         pass
@@ -1316,7 +1320,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(1,f3.getNumberOfComponents());
         self.assertEqual(9,f3.getNumberOfTuples());
         val=f3.getArray().getValues();
-        for i in xrange(9):
+        for i in range(9):
             self.assertTrue(abs(expected1[i]-val[i])<1.e-12);
         #
         f1=m.buildOrthogonalField();
@@ -1326,13 +1330,13 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         f3=f1*f2;
         expected2=[-0.035355339059327376,0.,0.035355339059327376, 0.2592724864350674,0.,-0.2592724864350674, 0.37712361663282529,0.,-0.37712361663282529, -0.035355339059327376,0.,0.035355339059327376, 0.31819805153394637,0.,-0.31819805153394637]
         val=f3.getArray().getValues();
-        for i in xrange(15):
+        for i in range(15):
             self.assertTrue(abs(expected2[i]-val[i])<1.e-12);
             pass
         #
         f3=f2*f1;
         val=f3.getArray().getValues();
-        for i in xrange(15):
+        for i in range(15):
             self.assertTrue(abs(expected2[i]-val[i])<1.e-12);
             pass
         pass
@@ -1351,7 +1355,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(1,f1.getNumberOfComponents());
         self.assertEqual(9,f1.getNumberOfTuples());
         val=f1.getArray().getValues();
-        for i in xrange(9):
+        for i in range(9):
             self.assertTrue(abs(expected1[i]-val[i])<1.e-12);
             pass
         #
@@ -1360,7 +1364,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         f1*=f2
         expected2=[-0.035355339059327376,0.,0.035355339059327376, 0.2592724864350674,0.,-0.2592724864350674, 0.37712361663282529,0.,-0.37712361663282529, -0.035355339059327376,0.,0.035355339059327376, 0.31819805153394637,0.,-0.31819805153394637]
         val=f1.getArray().getValues();
-        for i in xrange(15):
+        for i in range(15):
             self.assertTrue(abs(expected2[i]-val[i])<1.e-12);
             pass
         #
@@ -1450,7 +1454,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertTrue(abs(42.075-res[1])<1.e-12);
         self.assertTrue(abs(72.075-res[2])<1.e-12);
         pass
-    
+
     def testMergeNodesOnField(self):
         targetMesh=MEDCouplingDataForTest.build3DTargetMeshMergeNode_1();
         f1=targetMesh.fillFromAnalytic(ON_NODES,1,"x+y+z");
@@ -1546,7 +1550,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(3,len(corr));
         expectedVals1=[3,3,2]
         expectedVals2=[[0,1,2],[3,0,2],[3,0]]
-        for i in xrange(3):
+        for i in range(3):
             arr=corr[i];
             self.assertEqual(1,arr.getNumberOfComponents());
             nbOfVals=expectedVals1[i];
@@ -1561,7 +1565,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(1,arr2.getNumberOfComponents());
         self.assertEqual(4,arr2.getNumberOfTuples());
         self.assertEqual(fidExp,list(arr2.getValues()));
-        for i in xrange(3):
+        for i in range(3):
             nbOfVals=expectedVals1[i];
             self.assertEqual(list(fidsOfGroups[i]),fidsGrp[i]);
             pass
@@ -1595,7 +1599,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(5,field.getNumberOfTuples());
         self.assertEqual(3,field.getNumberOfComponents());
         vals=field.getArray().getValues();
-        for i in xrange(15):
+        for i in range(15):
             self.assertTrue(abs(expected[i%3]-vals[i])<1e-12);
         # testing
         targetCoords=[0.,0.,0.,0.5,0.,0.5,1.,0.,1.,0.,1.,0.]
@@ -1699,7 +1703,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         fieldOnCells.setMesh(targetMesh);
         array=DataArrayDouble.New();
         tmp=2*nbOfCells*[None]
-        for i in xrange(nbOfCells):
+        for i in range(nbOfCells):
             tmp[2*i]=7.+float(i);
             tmp[2*i+1]=17.+float(i)
             pass
@@ -1719,7 +1723,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         fieldOnNodes.setMesh(targetMesh);
         array=DataArrayDouble.New();
         tmp=2*nbOfNodes*[None]
-        for i in xrange(nbOfNodes):
+        for i in range(nbOfNodes):
             tmp[2*i]=17.+float(i);
             tmp[2*i+1]=27.+float(i)
             pass
@@ -1744,7 +1748,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         mesh=MEDCouplingCMesh.New();
         meshEmpty=mesh.clone(True);
         self.assertTrue(meshEmpty.isEqual(mesh, 1e-12));
-        
+
         coordsX=DataArrayDouble.New();
         arrX=[ -1., 1., 2., 4. ]
         coordsX.setValues(arrX, 4, 1);
@@ -1763,9 +1767,9 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
                     4., 1., 3., 4., 6., 2., 4., 5., 7., 4., 6., 7., 9., 0., 2., 3., 5., 2., 4., 5.,
                     7., 3., 5., 6., 8., 5., 7., 8., 10., 2., 4., 5.,
                     7., 4., 6., 7., 9., 5., 7., 8., 10., 7., 9., 10., 12.];
-        
+
         val=fieldOnNodes.getArray().getValues();
-        for i in xrange(64):
+        for i in range(64):
           self.assertAlmostEqual(expected1[i], val[i], 12)
         res=fieldOnNodes.getValueOnPos(1, 3, 2);
         self.assertAlmostEqual(7., res[0], 12);
@@ -1776,23 +1780,23 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         val=fieldOnCells.getArray().getValues();
         expected2=[0, 1.5, 3, 1.5, 3, 4.5, 3, 4.5, 6, 1.5, 3, 4.5, 3, 4.5,
                     6, 4.5, 6, 7.5, 3, 4.5, 6, 4.5, 6, 7.5, 6, 7.5, 9];
-        for i in xrange(27):
+        for i in range(27):
           self.assertAlmostEqual(expected2[i], val[i], 12);
         #res=fieldOnCells.getValueOnPos(1,2,1);
         #self.assertAlmostEqual(6.,res,12);
         #
         meshDeepCopy=mesh.deepCopy();
         meshClone=mesh.clone(False);
-        
+
         meshEmpty.copyTinyStringsFrom(mesh);
         #no data in meshEmpty, expected False
         self.assertTrue(not meshEmpty.isEqual(mesh, 1e-12));
-        
+
         self.assertTrue(meshDeepCopy.isEqual(mesh, 1e-12));
         meshDeepCopy.copyTinyStringsFrom(mesh);
         self.assertTrue(meshDeepCopy.isEqual(mesh, 1e-12));
         self.assertTrue(meshClone.isEqual(mesh, 1e-12));
-        
+
         self.assertEqual(CARTESIAN, mesh.getType());
         self.assertEqual(CARTESIAN, meshEmpty.getType());
         self.assertEqual(CARTESIAN, meshDeepCopy.getType());
@@ -1811,7 +1815,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         arrZ1=[ -3., 3., 6., 12. ]
         coordsZ1.setValues(arrZ1, 4, 1);
         mesh1.setCoords(coordsX1, coordsY1, coordsZ1);
-        
+
         mesh2=MEDCouplingCMesh.New();
         coordsX2=DataArrayDouble.New();
         arrX2=[ -1., 1., 2., 4. ]
@@ -1823,7 +1827,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         arrZ2=[ -3., 3., 6., 12.+1e-6 ]
         coordsZ2.setValues(arrZ2, 4, 1);
         mesh2.setCoords(coordsX2, coordsY2, coordsZ2);
-        
+
         mesh3=MEDCouplingCMesh.New();
         coordsX3=DataArrayDouble.New();
         arrX3=[-1.]
@@ -1835,24 +1839,24 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         arrZ3=[-3.]
         coordsZ3.setValues(arrZ3, 1, 1);
         mesh3.setCoords(coordsX3, coordsY3, coordsZ3);
-        
+
         self.assertEqual(3, mesh1.getSpaceDimension());
         self.assertEqual(3, mesh1.getMeshDimension());
-        
+
         self.assertTrue(not mesh1.isEqual(mesh2, 1e-12));
         self.assertTrue(not mesh2.isEqual(mesh1, 1e-12));
         self.assertTrue(not mesh2.isEqualWithoutConsideringStr(mesh1, 1e-12));
         self.assertTrue(mesh1.isEqual(mesh2, 1e-5));
         self.assertTrue(not mesh1.isEqual(mesh2, 1e-7));
-        
+
         self.assertRaises(InterpKernelException, mesh3.checkConsistency, 1e-12);
         mesh1.checkConsistency(1e-12);
         self.assertEqual(NORM_HEXA8, mesh1.getTypeOfCell(1));
-        
+
         self.assertEqual(NORM_HEXA8, mesh1.getAllGeoTypes()[0]);
         self.assertEqual(27, mesh1.getNumberOfCellsWithType(NORM_HEXA8));
         self.assertRaises(InterpKernelException, mesh1.getNumberOfCellsWithType, NORM_QUAD4);
-        
+
         coo=mesh1.getCoordinatesOfNode(0);
         self.assertEqual(3, len(coo));
         self.assertAlmostEqual(-1., coo[0], 14);
@@ -1863,7 +1867,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertAlmostEqual(4., coo[0], 14);
         self.assertAlmostEqual(8., coo[1], 14);
         self.assertAlmostEqual(12., coo[2], 14);
-        
+
         a=str(mesh1)
         repr=mesh1.simpleRepr();
         repr=mesh1.advancedRepr();
@@ -1885,13 +1889,13 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         arrZ1=[ -3., 3., 6., 12. ]
         coordsZ1.setValues(arrZ1, 4, 1);
         mesh1.setCoords(coordsX1, coordsY1, coordsZ1);
-        
+
         dis=mesh1.getDistributionOfTypes();
         self.assertEqual(1, len(dis));
         self.assertEqual(NORM_HEXA8, dis[0][0]);
         self.assertEqual(27, dis[0][1]);
         self.assertEqual(-1, dis[0][2]);
-        
+
         idsPerType=[]
         self.assertTrue(not mesh1.checkTypeConsistencyAndContig(dis, idsPerType));
         dis[0][0]=NORM_QUAD4;
@@ -1905,7 +1909,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         check=mesh1.checkTypeConsistencyAndContig(dis, idsPerType);
         self.assertTrue(check);
         self.assertTrue(check.isEqual(ids));
-        
+
         code, idsInPflPerType, pfls=mesh1.splitProfilePerType(ids);
         self.assertEqual(1, len(code));
         self.assertEqual(NORM_HEXA8, code[0][0]);
@@ -1915,29 +1919,29 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(1, len(pfls));
         self.assertTrue(idsInPflPerType[0].isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9])));
         self.assertTrue(pfls[0].isEqual(ids));
-        
+
         cells1=[0, 1, 25, 26]
         partMesh1=mesh1.buildPart(cells1)
         self.assertTrue(isinstance(partMesh1,MEDCouplingMesh))
         self.assertEqual(4, partMesh1.getNumberOfCellsWithType(NORM_HEXA8));
         self.assertEqual(64, mesh1.getNumberOfNodes());
         self.assertEqual(64, partMesh1.getNumberOfNodes());
-        
+
         cells2=[25, 26]
         partMesh2, arr1=mesh1.buildPartAndReduceNodes(cells2)
         self.assertTrue(isinstance(partMesh2,MEDCouplingCMesh))
         self.assertEqual(2,partMesh2.getNumberOfCellsWithType(NORM_HEXA8));
         self.assertEqual(12,partMesh2.getNumberOfNodes());
-        
+
         cells3=[2, 3]
         partMesh3, arr2=partMesh1.buildPartAndReduceNodes(cells3)
         self.assertTrue(isinstance(partMesh3,MEDCouplingUMesh))
         self.assertEqual(2, partMesh3.getNumberOfCellsWithType(NORM_HEXA8));
         self.assertEqual(12, partMesh3.getNumberOfNodes());
-        
+
         self.assertRaises(InterpKernelException, mesh1.simplexize, 0);
         self.assertRaises(InterpKernelException, mesh1.getMeasureFieldOnNode, True);
-        
+
         #double bbox1[6];
         #double bbox2[6];
         bbox1=mesh1.getBoundingBox(); #[(-1.0, 4.0), (-2.0, 8.0), (-3.0, 12.0)]
@@ -1946,12 +1950,12 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         bbox1=partMesh3.getBoundingBox();
         bbox2=partMesh2.getBoundingBox();
         self.assertTrue(bbox1==bbox2);
-        
+
         self.assertRaises(InterpKernelException, mesh1.buildOrthogonalField);
         mesh2d=MEDCouplingCMesh.New();
         mesh2d.setCoords(coordsX1, coordsY1);
         f1=mesh2d.buildOrthogonalField();
-        
+
         pass
 
     def testScale(self):
@@ -1962,7 +1966,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
                    -0.05,0.45, 0.2,0.45, 0.45,0.45]
         val=mesh.getCoords().getValues();
         self.assertEqual(18,len(val))
-        for i in xrange(18):
+        for i in range(18):
             self.assertTrue(abs(expected1[i]-val[i])<1e-12);
             pass
         pass
@@ -2049,7 +2053,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(3,m1.getSpaceDimension());
         expected=[-0.3,-0.3,0., 0.2,-0.3,0., 0.7,-0.3,0., -0.3,0.2,0., 0.2,0.2,0., 0.7,0.2,0., -0.3,0.7,0., 0.2,0.7,0., 0.7,0.7,0.]
         val=m1.getCoords().getValues();
-        for i in xrange(27):
+        for i in range(27):
             self.assertTrue(abs(expected[i]-val[i])<1e-14);
             pass
         pass
@@ -2084,7 +2088,7 @@ class MEDCouplingBasicsTest1(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();
@@ -2146,7 +2150,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         f.setDescription("MyDescriptionNE");
         array=DataArrayDouble.New();
         tmp=18*2*[None]
-        for i in xrange(18*2):
+        for i in range(18 * 2):
             tmp[i]=float(i+7)
             pass
         array.setValues(tmp,18,2);
@@ -2228,7 +2232,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(1,f3.getNumberOfComponents());
         f3Ptr=f3.getArray().getValues();
         expected1=[0.075,0.0375,0.0375,0.075,0.075, 0.1125,0.05625,0.05625,0.1125,0.1125, 0.0625,0.03125,0.03125,0.0625,0.0625];
-        for i in xrange(15):
+        for i in range(15):
             self.assertTrue(abs(expected1[i]-f3Ptr[i])<1e-12);
             pass
         f4=m5.computeCellCenterOfMass();
@@ -2236,32 +2240,137 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(3,f4.getNumberOfComponents());
         f4Ptr=f4.getValues();
         expected2=[-0.05,-0.05,0.15, 0.3666666666666667,-0.13333333333333333,0.15, 0.53333333333333333,0.033333333333333333,0.15, -0.05,0.45,0.15, 0.45,0.45,0.15,-0.05,-0.05,0.525, 0.3666666666666667,-0.13333333333333333,0.525, 0.53333333333333333,0.033333333333333333,0.525, -0.05,0.45,0.525, 0.45,0.45,0.525,-0.05,-0.05,0.875, 0.3666666666666667,-0.13333333333333333,0.875, 0.53333333333333333,0.033333333333333333,0.875, -0.05,0.45,0.875, 0.45,0.45,0.875];
-        for i in xrange(45):
+        for i in range(45):
             self.assertTrue(abs(expected2[i]-f4Ptr[i])<1e-12);
             pass
         pass
 
     def testCellOrientation3(self):
-        from cmath import rect  
+        from cmath import rect
 
-        c = [rect(1.0, i*pi/4.0) for i in range(8)]
+        c = [rect(1.0, i * pi / 4.0) for i in range(8)]
         coords = [c[-1].real,c[-1].imag,  c[3].real,c[3].imag,
                    c[5].real,c[5].imag,  c[1].real,c[1].imag]
-        connec = [0,1,2,3] 
-        baseMesh = MEDCouplingUMesh.New("circle", 2)  
+        connec = [0,1,2,3]
+        baseMesh = MEDCouplingUMesh.New("circle", 2)
         baseMesh.allocateCells(1)
         meshCoords = DataArrayDouble.New(coords, 4, 2)
         baseMesh.setCoords(meshCoords)
         baseMesh.insertNextCell(NORM_QPOLYG, connec)  # a circle
-        baseMesh.finishInsertingCells()  
+        baseMesh.finishInsertingCells()
         baseMesh.changeSpaceDimension(3)
-        Oz = [0.0, 0.0, -1.0] 
+        Oz = [0.0, 0.0, -1.0]
         cell_lst = baseMesh.are2DCellsNotCorrectlyOriented(Oz, False)
         self.assertEqual(cell_lst.getNumberOfTuples(), 0)
         Oz[2] = 1.0
         cell_lst = baseMesh.are2DCellsNotCorrectlyOriented(Oz, False)
         self.assertEqual(cell_lst.getNumberOfTuples(), 1)
 
+    def testCellOrientation4(self):
+        """ Non regression for NORM_QPOLYG whose linear version is self-intersecting. """
+        mesh = MEDCouplingUMesh('merge', 2)
+        coo = DataArrayDouble([(38.45,0),(37.8659,6.67677),(38.57,0),(38.51,0),(38.3563,2.68214),(38.4266,1.34189),(38.0758,5.35121),(38.2394,4.01912),(37.6098,7.9942),(37.1398,9.95159),(37.2558,9.98265),(38.24,5.0344),(37.1978,9.96712),(37.3876,8.97597)])
+        mesh.setCoords(coo)
+        c = DataArrayInt([32, 9, 8, 6, 4, 0, 2, 10, 13, 1, 7, 5, 3, 11, 12])
+        cI = DataArrayInt([0, 15])
+        mesh.setConnectivity(c, cI)
+        vec = [0., 0., -1.]
+        mesh.changeSpaceDimension(3)
+        mesh.orientCorrectly2DCells(vec, False)
+        mesh.changeSpaceDimension(2)
+        cRef = [32, 9, 10, 2, 0, 4, 6, 8, 12, 11, 3, 5, 7, 1, 13]
+        cIRef = [0, 15]
+        self.assertEqual(mesh.getNodalConnectivity().getValues(), cRef)
+        self.assertEqual(mesh.getNodalConnectivityIndex().getValues(), cIRef)
+        pass
+
+    def testCellOrientation5(self):
+        """ Non regression for NORM_QPOLYG  """
+        mesh = MEDCouplingUMesh('Mesh_3', 2)
+        coo = DataArrayDouble([(-34.3035,5.1),(-35.2018,4.59163),(-34.9509,6.21985),(-35.0858,5.4072),(-34.7527,4.84582),(-34.6641,5.63857)])
+        mesh.setCoords(coo)
+        c = DataArrayInt([6, 2, 1, 0, 3, 4, 5])
+        cI = DataArrayInt([0, 7])
+        mesh.setConnectivity(c, cI)
+        vec = [0., 0., -1.]
+        mesh.changeSpaceDimension(3)
+        mesh.orientCorrectly2DCells(vec, False)
+        mesh.changeSpaceDimension(2)
+        cRef = [6, 2, 0, 1, 5, 4, 3]
+        cIRef = [0, 7]
+        self.assertEqual(mesh.getNodalConnectivity().getValues(), cRef)
+        self.assertEqual(mesh.getNodalConnectivityIndex().getValues(), cIRef)
+        # Second call doest not change anything:
+        mesh.changeSpaceDimension(3)
+        mesh.orientCorrectly2DCells(vec, False)
+        mesh.changeSpaceDimension(2)
+        self.assertEqual(mesh.getNodalConnectivity().getValues(), cRef)
+        self.assertEqual(mesh.getNodalConnectivityIndex().getValues(), cIRef)
+        pass
+
+    def testCellOrientation6(self):
+        # CCTP 2.3.1 (bos #26452)
+        mesh = MEDCouplingUMesh('Orientation', 3)
+        coo = [0,0,0, 0,10,0, 10,0,0, 10,10,0, -10,0,0, -10,10,-0, 0,0,10, 10,0,10, -10,0,10, 0,-10,0, 10,-10,0, -10,-10,0, 0,5,0, 5,0,0, 10,5,0, 5,10,0, -5,0,-0, -10,5,-0, -5,10,-0, 0,0,5, 10,0,5, 5,0,10, -10,0,5, -5,0,10, 0,-5,0, 10,-5,0, 5,-10,0, -10,-5,0, -5,-10,0, 5,5,0, -5,5,-0, 5,0,5, -5,0,5, 5,-5,0, -5,-5,0]
+        meshCoords = DataArrayDouble.New(coo, 35, 3)
+        mesh.setCoords(meshCoords)
+        mesh.setMeshDimension( 2 )
+        conn = [ 1,12,29,15, 15,29,14, 3, 12, 0,13,29, 29,13, 2,14,  1,12,30,18, 18,30,17, 5, 12, 0,16,30, 30,16, 4,17,  6,19,31,21, 21,31,20, 7, 19, 0,13,31, 31,13, 2,20,  6,19,32,23, 23,32,22, 8, 19, 0,16,32, 32,16, 4,22, 9,24,33,26, 26,33,25,10, 24, 0,13,33, 33,13, 2,25, 9,24,34,28, 28,34,27,11, 24, 0,16,34, 34,16, 4,27]
+        mesh.allocateCells(24)
+        for i in range(24):
+            mesh.insertNextCell(NORM_QUAD4,4,conn[4*i:4*(i+1)]);
+        mesh.finishInsertingCells()
+        Group_1 = list( range( 0, 4 ))
+        Group_2 = list( range( 4, 8 ))
+        Group_3 = list( range( 8, 12 ))
+        Group_5 = list( range( 16, 20 ))
+        Group_7 = Group_3
+        Group_8 = list( range( 12, 16 ))
+
+        # example 1.1 - check failure on non-manifold
+        objMesh = mesh.buildPartOfMySelf( Group_1 + Group_3 + Group_5 )
+        refMesh = mesh.buildPartOfMySelf( Group_1 )
+        self.assertRaisesRegex(Exception, "Non-manifold",
+                               objMesh.orientCorrectly2DCells, refMesh )
+        # example 1.2
+        # - do nothing, as request "de non-appartenance de la reference a la cible" dropped
+        #
+        # example 1.3 - fix orientation of Group_1 and Group_8
+        objMesh = mesh.buildPartOfMySelf( Group_1 + Group_2 + Group_7 + Group_8 )
+        refMesh = mesh.buildPartOfMySelf( Group_7 )
+        objMesh.orientCorrectly2DCells( refMesh )
+        # check Group_1
+        self.assertEqual( objMesh.getNodeIdsOfCell( 0 ), [ 1, 15, 29, 12 ])
+        self.assertEqual( objMesh.getNodeIdsOfCell( 1 ), [ 15, 3, 14, 29 ])
+        self.assertEqual( objMesh.getNodeIdsOfCell( 2 ), [ 12, 29, 13, 0 ])
+        self.assertEqual( objMesh.getNodeIdsOfCell( 3 ), [ 29, 14, 2, 13 ])
+        # check Group_8
+        self.assertEqual( objMesh.getNodeIdsOfCell( 12 ), [ 6, 23, 32, 19 ])
+        self.assertEqual( objMesh.getNodeIdsOfCell( 13 ), [ 23, 8, 22, 32 ])
+        self.assertEqual( objMesh.getNodeIdsOfCell( 14 ), [ 19, 32, 16, 0 ])
+        self.assertEqual( objMesh.getNodeIdsOfCell( 15 ), [ 32, 22, 4, 16 ])
+        #
+        # Case with no reference given. Group_2 and Group_7 must reverse
+        objMesh = mesh.buildPartOfMySelf( Group_1 + Group_2 + Group_7 + Group_8 )
+        objMesh.orientCorrectly2DCells( None )
+        # check Group_2
+        self.assertEqual( objMesh.getNodeIdsOfCell( 4 ), [ 1, 18, 30, 12 ])
+        self.assertEqual( objMesh.getNodeIdsOfCell( 5 ), [ 18, 5, 17, 30 ])
+        self.assertEqual( objMesh.getNodeIdsOfCell( 6 ), [ 12, 30, 16, 0 ])
+        self.assertEqual( objMesh.getNodeIdsOfCell( 7 ), [ 30, 17, 4, 16 ])
+        # check Group_7
+        self.assertEqual( objMesh.getNodeIdsOfCell( 8 ), [ 6, 21, 31, 19 ])
+        self.assertEqual( objMesh.getNodeIdsOfCell( 9 ), [ 21, 7, 20, 31 ])
+        self.assertEqual( objMesh.getNodeIdsOfCell( 10 ), [ 19, 31, 13, 0 ])
+        self.assertEqual( objMesh.getNodeIdsOfCell( 11 ), [ 31, 20, 2, 13 ])
+        #
+        # Case with differently oriented reference faces. Expect an exception
+        objMesh = mesh.buildPartOfMySelf( Group_1 + Group_2 + Group_7 + Group_8 )
+        refMesh = mesh.buildPartOfMySelf( Group_1 + Group_2 )
+        self.assertRaisesRegex(Exception, "Different orientation",
+                               objMesh.orientCorrectly2DCells, refMesh )
+        pass
+
     def testPolyhedronBarycenter(self):
         connN=[0,3,2,1, -1, 4,5,6,7, -1, 0,4,7,3, -1, 3,7,6,2, -1, 2,6,5,1, -1, 1,5,4,0];
         coords=[0.,0.,0., 1.,0.,0., 1.,1.,0., 0.,1.,0., 0.,0.,1., 1.,0.,1., 1.,1.,1., 0.,1.,1., 0.5, 0.5, 0.5];
@@ -2284,7 +2393,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(3,da.getNumberOfComponents());
         daPtr=da.getValues();
         ref=meshN.getCoords().getValues()[24:];
-        for i in xrange(3):
+        for i in range(3):
             self.assertTrue(abs(ref[i]-daPtr[i])<1e-12);
             pass
         #
@@ -2293,7 +2402,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         da=meshN.computeCellCenterOfMass();
         daPtr=da.getValues();
         ref=meshN.getCoords().getValues()[24:];
-        for i in xrange(3):
+        for i in range(3):
             self.assertTrue(abs(ref[i]-daPtr[i])<1e-12);
             pass
         #
@@ -2302,7 +2411,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         da=meshN.computeCellCenterOfMass();
         daPtr=da.getValues();
         ref=meshN.getCoords().getValues()[24:];
-        for i in xrange(3):
+        for i in range(3):
             self.assertTrue(abs(ref[i]-daPtr[i])<1e-12);
             pass
         #
@@ -2313,7 +2422,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         da=meshN.computeCellCenterOfMass();
         daPtr=da.getValues();
         ref=meshN.getCoords().getValues()[24:];
-        for i in xrange(3):
+        for i in range(3):
             self.assertTrue(abs(ref[i]-daPtr[i])<1e-10);
             pass
         pass
@@ -2332,7 +2441,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(1,f3.getNumberOfComponents());
         expected9=[0.75,5.105,0.8,5.155]
         ptr=f3.getValues();
-        for i in xrange(4):
+        for i in range(4):
             self.assertTrue(abs(expected9[i]-ptr[i])<1e-12);
             pass
         #
@@ -2341,13 +2450,13 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(1,f2.getNumberOfComponents());
         expected1=[0.5,0.21,-0.6,-0.31]
         ptr=f2.getArray().getValues();
-        for i in xrange(4):
+        for i in range(4):
             self.assertTrue(abs(expected1[i]-ptr[i])<1e-12);
             pass
         expected2=[0.5,0.21,0.6,0.31]
         f2=m1.getMeasureField(True);
         ptr=f2.getArray().getValues();
-        for i in xrange(4):
+        for i in range(4):
             self.assertTrue(abs(expected2[i]-ptr[i])<1e-12);
             pass
         #integral
@@ -2355,7 +2464,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         res=f1.integral(False);
         self.assertTrue(3,len(res))
         expected3=[0.9866,-0.3615,0.4217]
-        for i in xrange(3):
+        for i in range(3):
             self.assertTrue(abs(expected3[i]-res[i])<1e-12);
             pass
         self.assertTrue(abs(expected3[0]-f1.integral(0,False))<1e-12);
@@ -2363,14 +2472,14 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertTrue(abs(expected3[2]-f1.integral(2,False))<1e-12);
         res=f1.integral(True);
         expected4=[-3.4152,8.7639,-14.6879]
-        for i in xrange(3):
+        for i in range(3):
             self.assertTrue(abs(expected4[i]-res[i])<1e-12);
             pass
         #normL1
         res=f1.normL1();
         self.assertTrue(3,len(res))
         expected5=[6.979506172839505, 16.89018518518518, 27.02969135802469]
-        for i in xrange(3):
+        for i in range(3):
             self.assertTrue(abs(expected5[i]-res[i])<1e-12);
             pass
         self.assertTrue(abs(expected5[0]-f1.normL1(0))<1e-12);
@@ -2380,7 +2489,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         res=f1.normL2();
         self.assertTrue(3,len(res))
         expected7=[7.090910979452395, 16.9275542960123, 27.053271464160858]
-        for i in xrange(3):
+        for i in range(3):
             self.assertTrue(abs(expected7[i]-res[i])<1e-9);
             pass
         self.assertTrue(abs(expected7[0]-f1.normL2(0))<1e-9);
@@ -2397,14 +2506,14 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(4,f2.getArray().getNumberOfTuples());
         self.assertEqual(1,f2.getNumberOfComponents());
         ptr=f2.getArray().getValues();
-        for i in xrange(4):
+        for i in range(4):
             self.assertTrue(abs(sqrt(2.)*expected2[i]-ptr[i])<1e-12);
             pass
         f2=m1.getMeasureField(True);
         self.assertEqual(4,f2.getArray().getNumberOfTuples());
         self.assertEqual(1,f2.getNumberOfComponents());
         ptr=f2.getArray().getValues();
-        for i in xrange(4):
+        for i in range(4):
             self.assertTrue(abs(expected2[i]*sqrt(2.)-ptr[i])<1e-12);
             pass
         #bary
@@ -2413,7 +2522,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(2,f3.getNumberOfComponents());
         expected10=[0.75,0.75,5.105,5.105,0.8,0.8,5.155,5.155]
         ptr=f3.getValues();
-        for i in xrange(8):
+        for i in range(8):
             self.assertTrue(abs(expected10[i]-ptr[i])<1e-12);
             pass
         #
@@ -2423,19 +2532,19 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         array.setValues(arr,m1.getNumberOfCells(),3);
         f1.setArray(array);
         res=f1.integral(False);
-        for i in xrange(3):
+        for i in range(3):
             self.assertTrue(abs(sqrt(2.)*expected4[i]-res[i])<1e-12);
             pass
         res=f1.integral(True);
-        for i in xrange(3):
+        for i in range(3):
             self.assertTrue(abs(sqrt(2.)*expected4[i]-res[i])<1e-12);
             pass
         res=f1.normL1();
-        for i in xrange(3):
+        for i in range(3):
             self.assertTrue(abs(expected5[i]-res[i])<1e-12);
             pass
         res=f1.normL2();
-        for i in xrange(3):
+        for i in range(3):
             self.assertTrue(abs(expected7[i]-res[i])<1e-12);
             pass
         pass
@@ -2447,12 +2556,12 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(1,f1.getNumberOfComponents());
         expected1=[-0.5,-1,-1.5,-0.5,-1,  0.5,1,1.5,0.5,1]
         ptr=f1.getArray().getValues();
-        for i in xrange(10):
+        for i in range(10):
             self.assertTrue(abs(expected1[i]-ptr[i])<1e-12);
             pass
         f1=m1.getMeasureField(True);
         ptr=f1.getArray().getValues();
-        for i in xrange(10):
+        for i in range(10):
             self.assertTrue(abs(abs(expected1[i])-ptr[i])<1e-12);
             pass
         f2=m1.computeCellCenterOfMass();
@@ -2460,7 +2569,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(2,f2.getNumberOfComponents());
         expected2=[0.5,0.3333333333333333,0.5,0.5,0.5,0.77777777777777777,0.5,0.3333333333333333,0.5,0.5,0.5,0.3333333333333333,0.5,0.5,0.5,0.77777777777777777,0.5,0.3333333333333333,0.5,0.5]
         ptr=f2.getValues();
-        for i in xrange(20):
+        for i in range(20):
             self.assertTrue(abs(expected2[i]-ptr[i])<1e-12);
             pass
         m1.changeSpaceDimension(3);
@@ -2468,7 +2577,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(10,f1.getArray().getNumberOfTuples());
         self.assertEqual(1,f1.getNumberOfComponents());
         ptr=f1.getArray().getValues();
-        for i in xrange(10):
+        for i in range(10):
             self.assertTrue(abs(abs(expected1[i])-ptr[i])<1e-12);
             pass
         f2=m1.computeCellCenterOfMass();
@@ -2476,7 +2585,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(3,f2.getNumberOfComponents());
         ptr=f2.getValues();
         expected3=[0.5,0.3333333333333333,0.,0.5,0.5,0.,0.5,0.77777777777777777,0.,0.5,0.3333333333333333,0.,0.5,0.5,0., 0.5,0.3333333333333333,0.,0.5,0.5,0.,0.5,0.77777777777777777,0.,0.5,0.3333333333333333,0.,0.5,0.5,0.]
-        for i in xrange(30):
+        for i in range(30):
             self.assertTrue(abs(expected3[i]-ptr[i])<1e-12);
             pass
         pass
@@ -2517,7 +2626,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
                  0.0719302438309 , -0.178468260473 , -0.211432157345 , 0.142871843159 , -0.208769948542 , 0.0454101128246 ,
                  0.167803379307 , -0.207851396623 , -0.088802726124 , 0.12868717152 , -0.230920439715 , 0.00760508389036 ,
                  -0.0372812069535 , -0.286740286332 , 0.00963701291166 ]
-        
+
         connN = [ #polyhedron 0
             0 , 1 , 3 , 4 , 2 , -1 , 1 , 5 , 6 , 7 , 0 , -1 , 0 , 7 , 8 , 10 , 11 , 9 , 2 , -1 , 1 , 5 , 12 , 14 , 15 , 13 , 3 , -1 , 16 , 9 , 2 , 4 , 17 , -1
             , 4 , 3 , 13 , 18 , 17 , -1 , 5 , 6 , 19 , 21 , 20 , 12 , -1 , 6 , 7 , 8 , 23 , 22 , 19 , -1 , 23 , 24 , 10 , 8 , -1 , 25 , 11 , 9 , 16 , -1
@@ -2536,7 +2645,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
             , 60 , 61 , 21 , 19 , 38 , 49 , -1 , 62 , 50 , 48 , 58 , -1 , 60 , 63 , 64 , 62 , 50 , 49 , -1 , 5 , 6 , 19 , 21 , 20 , 12 , -1
             , 55 , 5 , 12 , 65 , -1 , 66 , 67 , 65 , 55 , 56 , 57 , -1 , 63 , 66 , 57 , 59 , 64 , -1 , 64 , 62 , 58 , 59 , -1
             , 60 , 63 , 66 , 67 , 68 , 61 , -1 , 61 , 68 , 20 , 21 , -1 , 67 , 68 , 20 , 12 , 65]
-        
+
         barys = [ -0.0165220465527 , -0.0190922868195 , 0.158882733414 ,
                   0.0287618656076 , 0.135874379934 , -0.14601588119 ,
                   -0.147128055553 , 0.0465995097041 , -0.049391174453 ,
@@ -2563,7 +2672,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(4,da.getNumberOfTuples());
         self.assertEqual(3,da.getNumberOfComponents());
         daPtr=da.getValues();
-        for i in xrange(12):
+        for i in range(12):
             self.assertTrue(abs(barys[i]-daPtr[i])<1e-12);
             pass
         pass
@@ -2579,22 +2688,22 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         f.setArray(arr);
         renumber1=[3,1,0,4,2]
         loc=[-0.05,-0.05, 0.55,-0.25, 0.55,0.15, -0.05,0.45, 0.45,0.45]
-        for j in xrange(5):
+        for j in range(5):
             res=f.getValueOn(loc[2*j:2*j+2]);
-            for i in xrange(3):
+            for i in range(3):
                 self.assertTrue(abs(values1[i+3*j]-res[i])<1e-12);
                 pass
             pass
         f.renumberCells(renumber1,False);
         ptr=f.getArray().getValues();
         expected1=[9.,109.,10009.,8.,108.,10008.,11.,111.,10011.,7.,107.,10007.,10.,110.,10010.]
-        for i in xrange(15):
+        for i in range(15):
             self.assertTrue(abs(expected1[i]-ptr[i])<1e-12);
             pass
         #check that fields remains the same geometrically
-        for j in xrange(5):
+        for j in range(5):
             res=f.getValueOn(loc[2*j:2*(j+1)]);
-            for i in xrange(3):
+            for i in range(3):
                 self.assertTrue(abs(values1[i+3*j]-res[i])<1e-12);
                 pass
             pass
@@ -2628,7 +2737,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertTrue(not f.isEqual(fCpy,1e-12,1e-12));
         expected2=[21.,1021.,22.,1022.,23.,1023.,24.,1024.,25.,1025.,26.,1026., 11.,1011.,12.,1012.,13.,1013.,14.,1014.,15.,1015.,16.,1016., 41.,1041.,42.,1042., 1.,1001.,2.,1002., 31.,1031.,32.,1032.]
         ptr=f.getArray().getValues();
-        for i in xrange(36):
+        for i in range(36):
             self.assertTrue(abs(expected2[i]-ptr[i])<1e-12);
             pass
         renumber2=[2,1,4,0,3]
@@ -2648,7 +2757,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertTrue(not f.isEqual(fCpy,1e-12,1e-12));
         expected3=[21.,1021.,22.,1022.,23.,1023.,11.,1011.,12.,1012.,13.,1013.,41.,1041.,42.,1042.,43.,1043.,44.,1044.,1.,1001.,2.,1002.,3.,1003.,4.,1004.,31.,1031.,32.,1032.,33.,1033.,34.,1034.]
         ptr=f.getArray().getValues();
-        for i in xrange(36):
+        for i in range(36):
             self.assertTrue(abs(expected3[i]-ptr[i])<1e-12);
             pass
         f.renumberCells(renumber2,False);#perform reverse operation of renumbering to check that the resulting field is equal.
@@ -2670,9 +2779,9 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         renumber1=[0,4,1,3,5,2,6,7,8]
         loc=[0.5432,-0.2432, 0.5478,0.1528]
         expected1=[9.0272, 109.0272, 10009.0272, 11.4124,111.4124,10011.4124]
-        for j in xrange(2):
+        for j in range(2):
             res=f.getValueOn(loc[2*j:2*j+2]);
-            for i in xrange(3):
+            for i in range(3):
                 self.assertTrue(abs(expected1[i+3*j]-res[i])<1e-12);
                 pass
             pass
@@ -2680,14 +2789,14 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertTrue(f.isEqual(fCpy,1e-12,1e-12));
         f.renumberNodes(renumber1);
         self.assertTrue(not f.isEqual(fCpy,1e-12,1e-12));
-        for j in xrange(2):
+        for j in range(2):
             res=f.getValueOn(loc[2*j:2*j+2]);
-            for i in xrange(3):
+            for i in range(3):
                 self.assertTrue(abs(expected1[i+3*j]-res[i])<1e-12);
                 pass
             pass
         expected2=[7.,107.,10007.,9.,109.,10009.,12.,112.,10012.,10.,110.,10010.,8.,108.,10008.,11.,111.,10011.,13.,113.,10013.,14.,114.,10014.,15.,115.,10015.]
-        for i in xrange(27):
+        for i in range(27):
             self.assertTrue(abs(expected2[i]-f.getArray().getValues()[i])<1e-12);
             pass
         renumber2=[0,2,5,3,1,4,6,7,8]
@@ -2701,7 +2810,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         types=mesh.getAllGeoTypes();
         types.sort()
         self.assertEqual(5,len(types));
-        expected1=[NORM_POLYGON, NORM_TRI3, NORM_QUAD4, NORM_TRI6, NORM_QUAD8]
+        expected1 = [NORM_POLYGON, NORM_TRI3, NORM_QUAD4, NORM_TRI6, NORM_QUAD8]
         expected1.sort()
         self.assertEqual(expected1,types);
         self.assertTrue(mesh.isPresenceOfQuadratic());
@@ -2824,11 +2933,11 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         self.assertEqual(None,cellCor);
         self.assertNotEqual(None,nodeCor);
         expected1=[0, 1, 3, 4, 5, 6, 7, 8, 9]
-        for i in xrange(9):
+        for i in range(9):
             self.assertEqual(expected1[i],nodeCor.getIJ(i,0));
             pass
         pass
-      
+
     def testSwig2CheckDeepEquivalWith1(self):
         eps = 1.0e-8
         mcart = MEDCouplingCMesh()
@@ -2943,7 +3052,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         f2=m2.getMeasureField(False);
         self.assertEqual(5,f1.getArray().getNumberOfTuples());
         self.assertEqual(1,f2.getArray().getNumberOfTuples());
-        for i in xrange(5):
+        for i in range(5):
             self.assertAlmostEqual(expected1[i],f1.getIJ(i,0),12);
             pass
         self.assertAlmostEqual(expected1[0],f2.getIJ(0,0),12);
@@ -2954,7 +3063,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         f2=m2.getMeasureField(False);
         self.assertEqual(5,f1.getArray().getNumberOfTuples());
         self.assertEqual(1,f2.getArray().getNumberOfTuples());
-        for i in xrange(5):
+        for i in range(5):
             self.assertAlmostEqual(expected1[i],f1.getIJ(i,0),12);
             pass
         self.assertAlmostEqual(expected1[0],f2.getIJ(0,0),12);
@@ -2978,7 +3087,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         f1.changeUnderlyingMesh(mesh2,10,1e-12);
         #self.assertTrue(f1.getMesh()==mesh2);
         expected1=[7.,107.,9.,109.,8.,108.,10.,110.,11.,111.,12.,112.,13.,113.,15.,115.,14.,114.,16.,116.]
-        for i in xrange(20):
+        for i in range(20):
             self.assertAlmostEqual(expected1[i],f1.getArray().getIJ(0,i),12);
             pass
         #
@@ -2995,7 +3104,7 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         f1.changeUnderlyingMesh(mesh2,10,1e-12);
         #self.assertTrue(f1.getMesh()==mesh2);
         expected2=[7.,107.,17.,117.,8.,108.,10.,110.,11.,111.,12.,112.,13.,113.,15.,115.,14.,114.,16.,116.,9.,109.]
-        for i in xrange(22):
+        for i in range(22):
             self.assertAlmostEqual(expected2[i],f1.getArray().getIJ(0,i),12);
             pass
         pass
@@ -3076,13 +3185,13 @@ class MEDCouplingBasicsTest1(unittest.TestCase):
         #
         f3=f1.dot(f2);
         expected1=[842.,1820.,2816.,3830.,4862.,5912.,6980.,8066.,9170.,10292.]
-        for i in xrange(10):
+        for i in range(10):
             self.assertAlmostEqual(expected1[i],f3.getIJ(i,0),9);
             pass
         #
         f4=f1.crossProduct(f2);
         expected2=[-93., 186., -93., -392., 784., -392., -691., 1382., -691., -990., 1980., -990., -1289., 2578., -1289., -1588., 3176., -1588., -1887., 3774., -1887., -2186., 4372., -2186., -2485., 4970., -2485., -2784., 5568., -2784.]
-        for i in xrange(30):
+        for i in range(30):
             self.assertAlmostEqual(expected2[i],f4.getIJ(0,i),9);
             pass
         pass