Salome HOME
Update copyrights
[tools/medcoupling.git] / src / MEDCoupling_Swig / MEDCouplingMemArray.i
index f814d5a0e579958b8bddca6c2405229d86bc3e0a..7bc107464dc3967dfcec647000d8449bfff904b1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2019  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
@@ -93,6 +93,7 @@
 %newobject MEDCoupling::DataArrayInt::findIdsEqualList;
 %newobject MEDCoupling::DataArrayInt::findIdsNotEqualList;
 %newobject MEDCoupling::DataArrayInt::findIdsEqualTuple;
+%newobject MEDCoupling::DataArrayInt::findIdForEach;
 %newobject MEDCoupling::DataArrayInt::sumPerTuple;
 %newobject MEDCoupling::DataArrayInt::negate;
 %newobject MEDCoupling::DataArrayInt::computeAbs;
@@ -800,31 +801,6 @@ namespace MEDCoupling
         return ToNumPyArray<DataArrayFloat,float>(self,NPY_FLOAT,"DataArrayFloat");
       }
 #endif
-
-      // serialization
-      static PyObject *___new___(PyObject *cls, PyObject *args) throw(INTERP_KERNEL::Exception)
-      {
-        return NewMethWrapCallInitOnlyIfDictWithSingleEltInInput(cls,args,"DataArrayFloat");
-      }
-      
-      PyObject *__getnewargs__() throw(INTERP_KERNEL::Exception)
-      {
-#ifdef WITH_NUMPY
-        if(!self->isAllocated())
-          throw INTERP_KERNEL::Exception("PyWrap of DataArrayFloat.__getnewargs__ : self is not allocated !");
-        PyObject *ret(PyTuple_New(1));
-        PyObject *ret0(PyDict_New());
-        PyObject *numpyArryObj(MEDCoupling_DataArrayFloat_toNumPyArray(self));
-        {// create a dict to discriminite in __new__ if __init__ should be called. Not beautiful but not idea ...
-          PyObject *tmp1(PyInt_FromLong(0));
-          PyDict_SetItem(ret0,tmp1,numpyArryObj); Py_DECREF(tmp1); Py_DECREF(numpyArryObj);
-          PyTuple_SetItem(ret,0,ret0);
-        }
-        return ret;
-#else
-        throw INTERP_KERNEL::Exception("PyWrap of DataArrayByte.__getnewargs__ : not implemented because numpy is not active in your configuration ! No serialization/unserialization available without numpy !");
-#endif
-      }
     }
   };
 
@@ -941,9 +917,8 @@ namespace MEDCoupling
     void checkNoNullValues() const throw(INTERP_KERNEL::Exception);
     DataArrayDouble *computeBBoxPerTuple(double epsilon=0.0) const throw(INTERP_KERNEL::Exception);
     void recenterForMaxPrecision(double eps) throw(INTERP_KERNEL::Exception);
-    double getMaxValue(int& tupleId) const throw(INTERP_KERNEL::Exception);
     double getMaxValueInArray() const throw(INTERP_KERNEL::Exception);
-    double getMinValue(int& tupleId) const throw(INTERP_KERNEL::Exception);
+    double getMaxAbsValueInArray() const throw(INTERP_KERNEL::Exception);
     double getMinValueInArray() const throw(INTERP_KERNEL::Exception);
     int count(double value, double eps) const throw(INTERP_KERNEL::Exception);
     double getAverageValue() const throw(INTERP_KERNEL::Exception);
@@ -1070,6 +1045,22 @@ namespace MEDCoupling
           }
       }
 
+      PyObject *asArcOfCircle() const throw(INTERP_KERNEL::Exception)
+      {
+        double center[2],radius,ang;
+        self->asArcOfCircle(center,radius,ang);
+        PyObject *ret(PyTuple_New(3));
+        {
+          PyObject *ret0(PyList_New(2));
+          PyList_SetItem(ret0,0,PyFloat_FromDouble(center[0]));
+          PyList_SetItem(ret0,1,PyFloat_FromDouble(center[1]));
+          PyTuple_SetItem(ret,0,ret0);
+        }
+        PyTuple_SetItem(ret,1,PyFloat_FromDouble(radius));
+        PyTuple_SetItem(ret,2,PyFloat_FromDouble(ang));        
+        return ret;
+      }
+
       DataArrayDoubleIterator *__iter__() throw(INTERP_KERNEL::Exception)
       {
         return self->iterator();
@@ -1153,6 +1144,28 @@ namespace MEDCoupling
         return convertDblArrToPyListOfTuple<double>(vals,nbOfComp,nbOfTuples);
       }
 
+      static PyObject *ComputeIntegralOfSeg2IntoTri3(PyObject *seg2, PyObject *tri3) throw(INTERP_KERNEL::Exception)
+      {
+        const char msg[]="Python wrap of DataArrayDouble::ComputeIntegralOfSeg2IntoTri3 : ";
+        double val,val2;
+        DataArrayDouble *a,*a2;
+        DataArrayDoubleTuple *aa,*aa2;
+        std::vector<double> bb,bb2;
+        int sw;
+        const double *seg2Ptr(convertObjToPossibleCpp5_Safe(seg2,sw,val,a,aa,bb,msg,2,2,true));
+        const double *tri3Ptr(convertObjToPossibleCpp5_Safe(tri3,sw,val2,a2,aa2,bb2,msg,3,2,true));
+        //
+        double res0[3],res1;
+        DataArrayDouble::ComputeIntegralOfSeg2IntoTri3(seg2Ptr,tri3Ptr,res0,res1);
+        PyObject *ret(PyTuple_New(2)),*ret0(PyTuple_New(3));
+        PyTuple_SetItem(ret0,0,PyFloat_FromDouble(res0[0]));
+        PyTuple_SetItem(ret0,1,PyFloat_FromDouble(res0[1]));
+        PyTuple_SetItem(ret0,2,PyFloat_FromDouble(res0[2]));
+        PyTuple_SetItem(ret,0,ret0);
+        PyTuple_SetItem(ret,1,PyFloat_FromDouble(res1));
+        return ret;
+      }
+      
       DataArrayDouble *symmetry3DPlane(PyObject *point, PyObject *normalVector) throw(INTERP_KERNEL::Exception)
       {
         const char msg[]="Python wrap of DataArrayDouble::symmetry3DPlane : ";
@@ -1302,6 +1315,16 @@ namespace MEDCoupling
         return ret;
       }
 
+         PyObject *getMaxAbsValue() const throw(INTERP_KERNEL::Exception)
+      {
+        std::size_t tmp;
+        double r1=self->getMaxAbsValue(tmp);
+        PyObject *ret=PyTuple_New(2);
+        PyTuple_SetItem(ret,0,PyFloat_FromDouble(r1));
+        PyTuple_SetItem(ret,1,PyInt_FromLong(tmp));
+        return ret;
+      }
+
       PyObject *getMaxValue2() const throw(INTERP_KERNEL::Exception)
       {
         DataArrayInt *tmp;
@@ -1340,6 +1363,14 @@ namespace MEDCoupling
         PyObject *ret=convertDblArrToPyListOfTuple<double>(tmp,2,nbOfCompo);
         return ret;
       }
+      
+      PyObject *normMaxPerComponent() const throw(INTERP_KERNEL::Exception)
+      {
+        int nbOfCompo(self->getNumberOfComponents());
+        INTERP_KERNEL::AutoPtr<double> tmp(new double[nbOfCompo]);
+        self->normMaxPerComponent(tmp);
+        return convertDblArrToPyList<double>(tmp,nbOfCompo);
+      }
 
       PyObject *accumulate() const throw(INTERP_KERNEL::Exception)
       {
@@ -1433,7 +1464,7 @@ namespace MEDCoupling
         int nbComp=self->getNumberOfComponents(),nbTuples=-1;
         const char msg[]="Python wrap of DataArrayDouble::computeTupleIdsNearTuples : ";
         const double *pos=convertObjToPossibleCpp5_Safe2(pt,sw,val,a,aa,bb,msg,nbComp,true,nbTuples);
-        MCAuto<DataArrayDouble> inpu=DataArrayDouble::New(); inpu->useArray(pos,false,CPP_DEALLOC,nbTuples,nbComp);
+        MCAuto<DataArrayDouble> inpu=DataArrayDouble::New(); inpu->useArray(pos,false,DeallocType::CPP_DEALLOC,nbTuples,nbComp);
         DataArrayInt *c=0,*cI=0;
         self->computeTupleIdsNearTuples(inpu,eps,c,cI);
         PyObject *ret=PyTuple_New(2);
@@ -1515,7 +1546,7 @@ namespace MEDCoupling
             }
           case 4:
             {
-              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,CPP_DEALLOC,1,(int)bb.size());
+              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,DeallocType::CPP_DEALLOC,1,(int)bb.size());
               return SWIG_NewPointerObj(SWIG_as_voidptr(DataArrayDouble::Add(self,aaa)),SWIGTYPE_p_MEDCoupling__DataArrayDouble, SWIG_POINTER_OWN | 0 );
             }
           default:
@@ -1547,7 +1578,7 @@ namespace MEDCoupling
             }
           case 4:
             {
-              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,CPP_DEALLOC,1,(int)bb.size());
+              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,DeallocType::CPP_DEALLOC,1,(int)bb.size());
               return DataArrayDouble::Add(self,aaa);
             }
           default:
@@ -1606,7 +1637,7 @@ namespace MEDCoupling
             }
           case 4:
             {
-              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,CPP_DEALLOC,1,(int)bb.size());
+              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,DeallocType::CPP_DEALLOC,1,(int)bb.size());
               return SWIG_NewPointerObj(SWIG_as_voidptr(DataArrayDouble::Substract(self,aaa)),SWIGTYPE_p_MEDCoupling__DataArrayDouble, SWIG_POINTER_OWN | 0 );
             }
           default:
@@ -1638,7 +1669,7 @@ namespace MEDCoupling
             }
           case 4:
             {
-              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,CPP_DEALLOC,1,(int)bb.size());
+              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,DeallocType::CPP_DEALLOC,1,(int)bb.size());
               return DataArrayDouble::Substract(aaa,self);
             }
           default:
@@ -1697,7 +1728,7 @@ namespace MEDCoupling
             }
           case 4:
             {
-              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,CPP_DEALLOC,1,(int)bb.size());
+              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,DeallocType::CPP_DEALLOC,1,(int)bb.size());
               return SWIG_NewPointerObj(SWIG_as_voidptr(DataArrayDouble::Multiply(self,aaa)),SWIGTYPE_p_MEDCoupling__DataArrayDouble, SWIG_POINTER_OWN | 0 );
             }
           default:
@@ -1763,7 +1794,7 @@ namespace MEDCoupling
             }
           case 4:
             {
-              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,CPP_DEALLOC,1,(int)bb.size());
+              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,DeallocType::CPP_DEALLOC,1,(int)bb.size());
               return SWIG_NewPointerObj(SWIG_as_voidptr(DataArrayDouble::Divide(self,aaa)),SWIGTYPE_p_MEDCoupling__DataArrayDouble, SWIG_POINTER_OWN | 0 );
             }
           default:
@@ -1795,7 +1826,7 @@ namespace MEDCoupling
             }
           case 4:
             {
-              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,CPP_DEALLOC,1,(int)bb.size());
+              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,DeallocType::CPP_DEALLOC,1,(int)bb.size());
               return DataArrayDouble::Divide(aaa,self);
             }
           default:
@@ -1836,7 +1867,7 @@ namespace MEDCoupling
             }
           case 4:
             {
-              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,CPP_DEALLOC,1,(int)bb.size());
+              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,DeallocType::CPP_DEALLOC,1,(int)bb.size());
               return DataArrayDouble::Pow(self,aaa);
             }
           default:
@@ -1868,7 +1899,7 @@ namespace MEDCoupling
             }
           case 4:
             {
-              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,CPP_DEALLOC,1,(int)bb.size());
+              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,DeallocType::CPP_DEALLOC,1,(int)bb.size());
               return DataArrayDouble::Pow(aaa,self);
             }
           default:
@@ -1908,7 +1939,7 @@ namespace MEDCoupling
             }
           case 4:
             {
-              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,CPP_DEALLOC,1,(int)bb.size());
+              MCAuto<DataArrayDouble> aaa=DataArrayDouble::New(); aaa->useArray(&bb[0],false,DeallocType::CPP_DEALLOC,1,(int)bb.size());
               self->powEqual(aaa);
               Py_XINCREF(trueSelf);
               return trueSelf;
@@ -1938,31 +1969,6 @@ namespace MEDCoupling
         PyTuple_SetItem(ret,1,SWIG_NewPointerObj(SWIG_as_voidptr(ret1),SWIGTYPE_p_MEDCoupling__DataArrayInt, SWIG_POINTER_OWN | 0 ));
         return ret;
       }
-
-      // serialization
-      static PyObject *___new___(PyObject *cls, PyObject *args) throw(INTERP_KERNEL::Exception)
-      {
-        return NewMethWrapCallInitOnlyIfDictWithSingleEltInInput(cls,args,"DataArrayDouble");
-      }
-
-      PyObject *__getnewargs__() throw(INTERP_KERNEL::Exception)
-      {
-#ifdef WITH_NUMPY
-        if(!self->isAllocated())
-          throw INTERP_KERNEL::Exception("PyWrap of DataArrayDouble.__getnewargs__ : self is not allocated !");
-        PyObject *ret(PyTuple_New(1));
-        PyObject *ret0(PyDict_New());
-        PyObject *numpyArryObj(MEDCoupling_DataArrayDouble_toNumPyArray(self));
-        {// create a dict to discriminite in __new__ if __init__ should be called. Not beautiful but not idea ...
-          PyObject *tmp1(PyInt_FromLong(0));
-          PyDict_SetItem(ret0,tmp1,numpyArryObj); Py_DECREF(tmp1); Py_DECREF(numpyArryObj);
-          PyTuple_SetItem(ret,0,ret0);
-        }
-        return ret;
-#else
-        throw INTERP_KERNEL::Exception("PyWrap of DataArrayDouble.__getnewargs__ : not implemented because numpy is not active in your configuration ! No serialization/unserialization available without numpy !");
-#endif
-      }
     }
   };
 
@@ -2306,6 +2312,7 @@ namespace MEDCoupling
     DataArrayInt *invertArrayN2O2O2N(int oldNbOfElem) const throw(INTERP_KERNEL::Exception);
     DataArrayInt *invertArrayO2N2N2OBis(int newNbOfElem) const throw(INTERP_KERNEL::Exception);
     MCAuto< MapII > invertArrayN2O2O2NOptimized() const throw(INTERP_KERNEL::Exception);
+    MCAuto< MapII > giveN2OOptimized() const throw(INTERP_KERNEL::Exception);
     DataArrayInt *indicesOfSubPart(const DataArrayInt& partOfThis) const throw(INTERP_KERNEL::Exception);
     DataArrayInt *fromNoInterlace() const throw(INTERP_KERNEL::Exception);
     DataArrayInt *toNoInterlace() const throw(INTERP_KERNEL::Exception);
@@ -2347,9 +2354,8 @@ namespace MEDCoupling
     bool presenceOfValue(const std::vector<int>& vals) const throw(INTERP_KERNEL::Exception);
     int count(int value) const throw(INTERP_KERNEL::Exception);
     int accumulate(int compId) const throw(INTERP_KERNEL::Exception);
-    int getMaxValue(int& tupleId) const throw(INTERP_KERNEL::Exception);
     int getMaxValueInArray() const throw(INTERP_KERNEL::Exception);
-    int getMinValue(int& tupleId) const throw(INTERP_KERNEL::Exception);
+    int getMaxAbsValueInArray() const throw(INTERP_KERNEL::Exception);
     int getMinValueInArray() const throw(INTERP_KERNEL::Exception);
     void abs() throw(INTERP_KERNEL::Exception);
     DataArrayInt *computeAbs() const throw(INTERP_KERNEL::Exception);
@@ -2568,6 +2574,15 @@ namespace MEDCoupling
         return self->findIdsEqualTuple(bg,bg+sz);
       }
 
+      DataArrayInt *findIdForEach(PyObject *vals) const throw(INTERP_KERNEL::Exception)
+      {
+        int sw,sz,val;
+        std::vector<int> val2;
+        const int *bg(convertIntStarLikePyObjToCppIntStar(vals,sw,sz,val,val2));
+        MCAuto<DataArrayInt> ret(self->findIdForEach(bg,bg+sz));
+        return ret.retn();
+      }
+
       PyObject *splitInBalancedSlices(int nbOfSlices) const throw(INTERP_KERNEL::Exception)
       {
         std::vector< std::pair<int,int> > slcs(self->splitInBalancedSlices(nbOfSlices));
@@ -2619,7 +2634,7 @@ namespace MEDCoupling
         std::vector<int> stdvecTyyppArr;
         const int *arrPtr(convertIntStarLikePyObjToCppIntStar(arr,sw,szArr,iTypppArr,stdvecTyyppArr));
         int *pt(MEDCoupling::DataArrayInt::CheckAndPreparePermutation(arrPtr,arrPtr+szArr));
-        ret->useArray(pt,true,MEDCoupling::C_DEALLOC,szArr,1);
+        ret->useArray(pt,true,MEDCoupling::DeallocType::C_DEALLOC,szArr,1);
         return ret.retn();
       }
 
@@ -2996,6 +3011,16 @@ namespace MEDCoupling
         PyTuple_SetItem(ret,1,PyInt_FromLong(tmp));
         return ret;
       }
+    
+      PyObject *getMaxAbsValue(std::size_t& tupleId) const throw(INTERP_KERNEL::Exception)
+      {
+       std::size_t tmp;
+        int r1=self->getMaxAbsValue(tmp);
+        PyObject *ret=PyTuple_New(2);
+        PyTuple_SetItem(ret,0,PyInt_FromLong(r1));
+        PyTuple_SetItem(ret,1,PyInt_FromLong(tmp));
+        return ret;
+      }
 
       PyObject *getMinValue() const throw(INTERP_KERNEL::Exception)
       {
@@ -3195,7 +3220,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues1(tmp,it1,it1+1,1,0,nbOfComponents,1,false);
                   return self;
                 case 3:
@@ -3219,7 +3244,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues3(tmp,&vt1[0],&vt1[0]+vt1.size(),0,nbOfComponents,1,false);
                   return self;
                 case 3:
@@ -3243,7 +3268,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues1(tmp,pt1.first,pt1.second.first,pt1.second.second,0,nbOfComponents,1,false);
                   return self;
                 case 3:
@@ -3267,7 +3292,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues3(tmp,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),0,nbOfComponents,1,false);
                   return self;
                 case 3:
@@ -3291,7 +3316,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues1(tmp,it1,it1+1,1,ic1,ic1+1,1,false);
                   return self;
                 case 3:
@@ -3315,7 +3340,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues3(tmp,&vt1[0],&vt1[0]+vt1.size(),ic1,ic1+1,1,false);
                   return self;
                 case 3:
@@ -3339,7 +3364,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues1(tmp,pt1.first,pt1.second.first,pt1.second.second,ic1,ic1+1,1,false);
                   return self;
                 case 3:
@@ -3363,7 +3388,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues3(tmp,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),ic1,ic1+1,1,false);
                   return self;
                 case 3:
@@ -3387,7 +3412,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues2(tmp,&it1,&it1+1,&vc1[0],&vc1[0]+vc1.size(),false);
                   return self;
                 case 3:
@@ -3411,7 +3436,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues2(tmp,&vt1[0],&vt1[0]+vt1.size(),&vc1[0],&vc1[0]+vc1.size(),false);
                   return self;
                 case 3:
@@ -3435,7 +3460,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues4(tmp,pt1.first,pt1.second.first,pt1.second.second,&vc1[0],&vc1[0]+vc1.size(),false);
                   return self;
                 case 3:
@@ -3459,7 +3484,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues2(tmp,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),&vc1[0],&vc1[0]+vc1.size(),false);
                   return self;
                 case 3:
@@ -3483,7 +3508,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues1(tmp,it1,it1+1,1,pc1.first,pc1.second.first,pc1.second.second,false);
                   return self;
                 case 3:
@@ -3507,7 +3532,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues3(tmp,&vt1[0],&vt1[0]+vt1.size(),pc1.first,pc1.second.first,pc1.second.second,false);
                   return self;
                 case 3:
@@ -3531,7 +3556,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues1(tmp,pt1.first,pt1.second.first,pt1.second.second,pc1.first,pc1.second.first,pc1.second.second,false);
                   return self;
                 case 3:
@@ -3555,7 +3580,7 @@ namespace MEDCoupling
                   return self;
                 case 2:
                   tmp=DataArrayInt::New();
-                  tmp->useArray(&v1[0],false,CPP_DEALLOC,1,v1.size());
+                  tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
                   self->setPartOfValues3(tmp,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),pc1.first,pc1.second.first,pc1.second.second,false);
                   return self;
                 case 3:
@@ -3600,7 +3625,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               return DataArrayInt::Add(self,aaaa);
             }
           case 3:
@@ -3636,7 +3661,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               return DataArrayInt::Add(self,aaaa);
             }
           case 4:
@@ -3668,7 +3693,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> bb=DataArrayInt::New(); bb->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> bb=DataArrayInt::New(); bb->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               self->addEqual(bb);
               Py_XINCREF(trueSelf);
               return trueSelf;
@@ -3710,7 +3735,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               return DataArrayInt::Substract(self,aaaa);
             }
           case 3:
@@ -3746,7 +3771,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               return DataArrayInt::Substract(aaaa,self);
             }
           case 4:
@@ -3778,7 +3803,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> bb=DataArrayInt::New(); bb->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> bb=DataArrayInt::New(); bb->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               self->substractEqual(bb);
               Py_XINCREF(trueSelf);
               return trueSelf;
@@ -3820,7 +3845,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               return DataArrayInt::Multiply(self,aaaa);
             }
           case 3:
@@ -3856,7 +3881,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               return DataArrayInt::Multiply(self,aaaa);
             }
           case 4:
@@ -3888,7 +3913,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> bb=DataArrayInt::New(); bb->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> bb=DataArrayInt::New(); bb->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               self->multiplyEqual(bb);
               Py_XINCREF(trueSelf);
               return trueSelf;
@@ -3930,7 +3955,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               return DataArrayInt::Divide(self,aaaa);
             }
           case 3:
@@ -3966,7 +3991,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               return DataArrayInt::Divide(aaaa,self);
             }
           case 4:
@@ -3998,7 +4023,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> bb=DataArrayInt::New(); bb->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> bb=DataArrayInt::New(); bb->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               self->divideEqual(bb);
               Py_XINCREF(trueSelf);
               return trueSelf;
@@ -4040,7 +4065,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               return DataArrayInt::Modulus(self,aaaa);
             }
           case 3:
@@ -4076,7 +4101,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               return DataArrayInt::Modulus(aaaa,self);
             }
           case 3:
@@ -4147,7 +4172,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               return DataArrayInt::Pow(self,aaaa);
             }
           case 3:
@@ -4183,7 +4208,7 @@ namespace MEDCoupling
             }
           case 2:
             {
-              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,CPP_DEALLOC,1,(int)aa.size());
+              MCAuto<DataArrayInt> aaaa=DataArrayInt::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,(int)aa.size());
               return DataArrayInt::Pow(aaaa,self);
             }
           case 3:
@@ -5062,31 +5087,6 @@ namespace MEDCoupling
       }
 #endif
 
-      // serialization
-      static PyObject *___new___(PyObject *cls, PyObject *args) throw(INTERP_KERNEL::Exception)
-      {
-        return NewMethWrapCallInitOnlyIfDictWithSingleEltInInput(cls,args,"DataArrayByte");
-      }
-
-      PyObject *__getnewargs__() throw(INTERP_KERNEL::Exception)
-      {
-#ifdef WITH_NUMPY
-        if(!self->isAllocated())
-          throw INTERP_KERNEL::Exception("PyWrap of DataArrayByte.__getnewargs__ : self is not allocated !");
-        PyObject *ret(PyTuple_New(1));
-        PyObject *ret0(PyDict_New());
-        PyObject *numpyArryObj(MEDCoupling_DataArrayByte_toNumPyArray(self));
-        {// create a dict to discriminite in __new__ if __init__ should be called. Not beautiful but not idea ...
-          PyObject *tmp1(PyInt_FromLong(0));
-          PyDict_SetItem(ret0,tmp1,numpyArryObj); Py_DECREF(tmp1); Py_DECREF(numpyArryObj);
-          PyTuple_SetItem(ret,0,ret0);
-        }
-        return ret;
-#else
-        throw INTERP_KERNEL::Exception("PyWrap of DataArrayByte.__getnewargs__ : not implemented because numpy is not active in your configuration ! No serialization/unserialization available without numpy !");
-#endif
-      }
-
       DataArrayByte *__setitem__(PyObject *obj, PyObject *value) throw(INTERP_KERNEL::Exception)
       {
         self->checkAllocated();
@@ -5952,14 +5952,30 @@ namespace MEDCoupling
 }
 
 %pythoncode %{
-def MEDCouplingDataArrayIntReduceFunct(cls,params):
+def MEDCouplingStdReduceFunct(cls,params):
     a,b=params
-    ret=DataArrayInt.__new__(cls)
+    ret=object.__new__(cls)
     ret.__init__(*a)
     ret.__setstate__(b)
     return ret
+
+def MEDCouplingDataArrayDoubleReduce(self):
+    if not MEDCouplingHasNumPyBindings():
+      raise InterpKernelException("PyWrap of DataArrayDouble.__reduce__ : not implemented because numpy is not active in your configuration ! No serialization/unserialization available without numpy !")
+    return MEDCouplingStdReduceFunct,(DataArrayDouble,((self.toNumPyArray(),),(self.__getstate__()),))
+
 def MEDCouplingDataArrayIntReduce(self):
     if not MEDCouplingHasNumPyBindings():
-      raise InterpKernelException("PyWrap of DataArrayInt.__getnewargs__ : not implemented because numpy is not active in your configuration ! No serialization/unserialization available without numpy !")
-    return MEDCouplingDataArrayIntReduceFunct,(DataArrayInt,((self.toNumPyArray(),),(self.__getstate__()),))
+      raise InterpKernelException("PyWrap of DataArrayInt.__reduce__ : not implemented because numpy is not active in your configuration ! No serialization/unserialization available without numpy !")
+    return MEDCouplingStdReduceFunct,(DataArrayInt,((self.toNumPyArray(),),(self.__getstate__()),))
+
+def MEDCouplingDataArrayByteReduce(self):
+    if not MEDCouplingHasNumPyBindings():
+      raise InterpKernelException("PyWrap of DataArrayByte.__reduce__ : not implemented because numpy is not active in your configuration ! No serialization/unserialization available without numpy !")
+    return MEDCouplingStdReduceFunct,(DataArrayByte,((self.toNumPyArray(),),(self.__getstate__()),))
+
+def MEDCouplingDataArrayFloatReduce(self):
+    if not MEDCouplingHasNumPyBindings():
+      raise InterpKernelException("PyWrap of DataArrayFloat.__reduce__ : not implemented because numpy is not active in your configuration ! No serialization/unserialization available without numpy !")
+    return MEDCouplingStdReduceFunct,(DataArrayFloat,((self.toNumPyArray(),),(self.__getstate__()),))
 %}