1 // Copyright (C) 2007-2024 CEA, EDF
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 // Author : Anthony Geay (EDF R&D)
21 %include "MEDCouplingMemArray.i"
23 %define ARRAYDEF( ARRAY, INT )
25 // namespace MEDCoupling
27 // class ARRAY ## Iterator;
29 // class ARRAY : public DataArray -- #ifdef doesn't work inside
34 INT getHashCode() const;
36 void aggregate(const ARRAY *other);
37 ARRAY *performCopyOrIncrRef(bool deepCopy) const;
38 void deepCopyFrom(const ARRAY& other);
39 void reserve(std::size_t nbOfElems);
40 void pushBackSilent(INT val);
43 void allocIfNecessary(INT nbOfTuple, INT nbOfCompo);
44 bool isEqual(const ARRAY& other) const;
45 bool isEqualWithoutConsideringStr(const ARRAY& other) const;
46 bool isEqualWithoutConsideringStrAndOrder(const ARRAY& other) const;
47 DataArrayIdType *occurenceRankInThis() const;
48 DataArrayIdType *buildPermutationArr(const ARRAY& other) const;
49 ARRAY *sumPerTuple() const;
50 void sort(bool asc=true);
52 void checkMonotonic(bool increasing) const;
53 bool isMonotonic(bool increasing) const;
54 void checkStrictlyMonotonic(bool increasing) const;
55 bool isStrictlyMonotonic(bool increasing) const;
57 void fillWithValue(INT val);
58 void iota(INT init=0);
59 std::string repr() const;
60 std::string reprZip() const;
61 std::string reprNotTooLong() const;
62 ARRAY *invertArrayO2N2N2O(mcIdType newNbOfElem) const;
63 ARRAY *invertArrayN2O2O2N(mcIdType oldNbOfElem) const;
64 ARRAY *invertArrayO2N2N2OBis(mcIdType newNbOfElem) const;
65 DataArrayIdType *indicesOfSubPart(const ARRAY& partOfThis) const;
66 ARRAY *fromNoInterlace() const;
67 ARRAY *toNoInterlace() const;
68 ARRAY *selectByTupleIdSafeSlice(mcIdType bg, mcIdType end, mcIdType step) const;
69 DataArrayIdType *checkAndPreparePermutation() const;
70 DataArrayIdType *buildPermArrPerLevel() const;
71 bool isIota(mcIdType sizeExpected) const;
72 bool isUniform(INT val) const;
73 INT checkUniformAndGuess() const;
74 bool hasUniqueValues() const;
75 ARRAY *subArray(mcIdType tupleIdBg, mcIdType tupleIdEnd=-1) const;
77 ARRAY *changeNbOfComponents(std::size_t newNbOfComp, INT dftValue) const;
78 void meldWith(const ARRAY *other);
79 void setPartOfValues1(const ARRAY *a, mcIdType bgTuples, mcIdType endTuples, mcIdType stepTuples, mcIdType bgComp, mcIdType endComp, mcIdType stepComp, bool strictCompoCompare=true);
80 void setPartOfValuesSimple1(INT a, mcIdType bgTuples, mcIdType endTuples, mcIdType stepTuples, mcIdType bgComp, mcIdType endComp, mcIdType stepComp);
81 void setPartOfValuesAdv(const ARRAY *a, const DataArrayIdType *tuplesSelec);
82 void getTuple(mcIdType tupleId, INT *res) const;
83 INT getIJ(std::size_t tupleId, std::size_t compoId) const;
84 INT getIJSafe(std::size_t tupleId, std::size_t compoId) const;
87 void setIJ(mcIdType tupleId, mcIdType compoId, INT newVal);
88 void setIJSilent(mcIdType tupleId, mcIdType compoId, INT newVal);
90 const INT *getConstPointer() const;
91 ARRAY ## Iterator *iterator();
92 const INT *begin() const;
93 const INT *end() const;
94 DataArrayIdType *findIdsEqual(INT val) const;
95 DataArrayIdType *findIdsNotEqual(INT val) const;
96 mcIdType changeValue(INT oldValue, INT newValue);
97 mcIdType findIdFirstEqualTuple(const std::vector<INT>& tupl) const;
98 mcIdType findIdFirstEqual(INT value) const;
99 mcIdType findIdFirstEqual(const std::vector<INT>& vals) const;
100 mcIdType findIdSequence(const std::vector<INT>& vals) const;
101 bool presenceOfTuple(const std::vector<INT>& tupl) const;
102 bool presenceOfValue(INT value) const;
103 bool presenceOfValue(const std::vector<INT>& vals) const;
104 INT count(INT value) const;
105 INT accumulate(INT compId) const;
106 INT getMaxValueInArray() const;
107 INT getMaxAbsValueInArray() const;
108 INT getMinValueInArray() const;
110 void sortPerTuple(bool asc);
111 ARRAY *computeAbs() const;
112 void applyLin(INT a, INT b, INT compoId);
113 void applyLin(INT a, INT b);
114 void applyInv(INT numerator);
115 ARRAY *negate() const;
116 void applyDivideBy(INT val);
117 void applyModulus(INT val);
118 void applyRModulus(INT val);
119 void applyPow(INT val);
120 void applyRPow(INT val);
121 ARRAY *findIdsInRange(INT vmin, INT vmax) const;
122 ARRAY *findIdsNotInRange(INT vmin, INT vmax) const;
123 ARRAY *findIdsStrictlyNegative() const;
124 bool checkAllIdsInRange(INT vmin, INT vmax) const;
125 static ARRAY *Aggregate(const ARRAY *a1, const ARRAY *a2, INT offsetA2);
126 static ARRAY *Meld(const ARRAY *a1, const ARRAY *a2);
127 static DataArrayIdType *MakePartition(const std::vector<const ARRAY *>& groups, mcIdType newNb, std::vector< std::vector<mcIdType> >& fidsOfGroups);
128 static ARRAY *BuildUnion(const std::vector<const ARRAY *>& arr);
129 static ARRAY *BuildIntersection(const std::vector<const ARRAY *>& arr);
130 static DataArrayIdType *FindPermutationFromFirstToSecond(const ARRAY *ids1, const ARRAY *ids2);
131 static DataArrayIdType *FindPermutationFromFirstToSecondDuplicate(const ARRAY *ids1, const ARRAY *ids2);
132 DataArrayIdType *buildComplement(mcIdType nbOfElement) const;
133 ARRAY *buildSubstraction(const ARRAY *other) const;
134 ARRAY *buildSubstractionOptimized(const ARRAY *other) const;
135 ARRAY *buildUnion(const ARRAY *other) const;
136 ARRAY *buildIntersection(const ARRAY *other) const;
137 DataArrayIdType *indexOfSameConsecutiveValueGroups() const;
138 ARRAY *buildUnique() const;
139 ARRAY *buildUniqueNotSorted() const;
140 ARRAY *deltaShiftIndex() const;
141 void computeOffsets();
142 void computeOffsetsFull();
143 ARRAY *buildExplicitArrByRanges(const ARRAY *offsets) const;
144 DataArrayIdType *findRangeIdForEachTuple(const ARRAY *ranges) const;
145 ARRAY *findIdInRangeForEachTuple(const ARRAY *ranges) const;
146 void sortEachPairToMakeALinkedList();
147 void sortToHaveConsecutivePairs();
148 ARRAY *duplicateEachTupleNTimes(mcIdType nbTimes) const;
149 ARRAY *getDifferentValues() const;
150 static ARRAY *Add(const ARRAY *a1, const ARRAY *a2);
151 void addEqual(const ARRAY *other);
152 static ARRAY *Substract(const ARRAY *a1, const ARRAY *a2);
153 void substractEqual(const ARRAY *other);
154 static ARRAY *Multiply(const ARRAY *a1, const ARRAY *a2);
155 void multiplyEqual(const ARRAY *other);
156 static ARRAY *Divide(const ARRAY *a1, const ARRAY *a2);
157 void divideEqual(const ARRAY *other);
158 static ARRAY *Modulus(const ARRAY *a1, const ARRAY *a2);
159 void modulusEqual(const ARRAY *other);
160 static ARRAY *Pow(const ARRAY *a1, const ARRAY *a2);
161 void powEqual(const ARRAY *other);
162 MCAuto<ARRAY> fromLinkedListOfPairToList() const;
163 MCAuto<DataArrayIdType> findIdsGreaterOrEqualTo(INT val) const;
164 MCAuto<DataArrayIdType> findIdsGreaterThan(INT val) const;
165 MCAuto<DataArrayIdType> findIdsLowerOrEqualTo(INT val) const;
166 MCAuto<DataArrayIdType> findIdsLowerThan(INT val) const;
167 MCAuto<ARRAY> selectPartDef(const PartDefinition* pd) const;
168 MCAuto<DataArrayDouble> convertToDblArr() const;
169 MCAuto<DataArrayFloat> convertToFloatArr() const;
171 static ARRAY *Range(INT begin, INT end, INT step);
179 static ARRAY *New(PyObject *elt0, PyObject *nbOfTuples=0, PyObject *nbOfComp=0)
181 const char *msgBase="MEDCoupling::ARRAY::New : Available API are : \n-ARRAY.New()\n-ARRAY.New([1,3,4])\n-ARRAY.New([1,3,4],3)\n-ARRAY.New([1,3,4,5],2,2)\n-ARRAY.New([1,3,4,5,7,8],3,2)\n-ARRAY.New([(1,3),(4,5),(7,8)])\n-ARRAY.New(5)\n-ARRAY.New(5,2)";
182 std::string msg(msgBase);
183 if ( MEDCouplingHasNumPyBindings() )
184 msg+="\n-ARRAY.New(numpy array with dtype=int32)";
187 if(PyList_Check(elt0) || PyTuple_Check(elt0))
191 if(PyInt_Check(nbOfTuples))
193 mcIdType nbOfTuples1=ToIdType(PyInt_AS_LONG(nbOfTuples));
195 throw INTERP_KERNEL::Exception("ARRAY::New : should be a positive set of allocated memory !");
198 if(PyInt_Check(nbOfComp))
199 {//ARRAY.New([1,3,4,5],2,2)
200 mcIdType nbOfCompo=ToIdType(PyInt_AS_LONG(nbOfComp));
202 throw INTERP_KERNEL::Exception("ARRAY::New : should be a positive number of components !");
203 MCAuto<ARRAY> ret=ARRAY::New();
204 std::vector<INT> tmp=fillArrayWithPyListInt2<INT>(elt0,nbOfTuples1,nbOfCompo);
205 ret->alloc(nbOfTuples1,nbOfCompo); std::copy(tmp.begin(),tmp.end(),ret->getPointer());
209 throw INTERP_KERNEL::Exception(msg.c_str());
212 {//ARRAY.New([1,3,4],3)
213 MCAuto<ARRAY> ret=ARRAY::New();
215 std::vector<INT> tmp=fillArrayWithPyListInt2<INT>(elt0,nbOfTuples1,tmpp1);
216 ret->alloc(nbOfTuples1,tmpp1); std::copy(tmp.begin(),tmp.end(),ret->getPointer());
221 throw INTERP_KERNEL::Exception(msg.c_str());
224 {// ARRAY.New([1,3,4])
225 MCAuto<ARRAY> ret=ARRAY::New();
226 mcIdType tmpp1=-1,tmpp2=-1;
227 std::vector<INT> tmp=fillArrayWithPyListInt2<INT>(elt0,tmpp1,tmpp2);
228 ret->alloc(tmpp1,tmpp2); std::copy(tmp.begin(),tmp.end(),ret->getPointer());
232 else if(PyInt_Check(elt0))
234 INT nbOfTuples1=(INT)PyInt_AS_LONG(elt0);
236 throw INTERP_KERNEL::Exception("ARRAY::New : should be a positive set of allocated memory !");
241 if(PyInt_Check(nbOfTuples))
243 INT nbOfCompo=(INT)PyInt_AS_LONG(nbOfTuples);
245 throw INTERP_KERNEL::Exception("ARRAY::New : should be a positive number of components !");
246 MCAuto<ARRAY> ret=ARRAY::New();
247 ret->alloc(nbOfTuples1,nbOfCompo);
251 throw INTERP_KERNEL::Exception(msg.c_str());
254 throw INTERP_KERNEL::Exception(msg.c_str());
258 MCAuto<ARRAY> ret=ARRAY::New();
259 ret->alloc(nbOfTuples1,1);
263 #if defined(WITH_NUMPY)
264 else if(MEDCouplingHasNumPyBindings() && PyArray_Check(elt0) && nbOfTuples==NULL && nbOfComp==NULL)
265 {//ARRAY.New(numpyArray)
266 return BuildNewInstance<ARRAY,INT>(elt0,NPYTraits<INT>::NPYObjectType,NPYTraits<INT>::NPYFunc,MEDCoupling::Traits<INT>::NPYStr);
270 throw INTERP_KERNEL::Exception(msg.c_str());
271 throw INTERP_KERNEL::Exception(msg.c_str());//to make g++ happy
274 ARRAY(PyObject *elt0, PyObject *nbOfTuples=0, PyObject *nbOfComp=0)
276 return MEDCoupling_ ## ARRAY ## _New__SWIG_1(elt0,nbOfTuples,nbOfComp);
279 std::string __str__() const
281 return self->reprNotTooLong();
284 mcIdType __len__() const
286 if(self->isAllocated())
288 return self->getNumberOfTuples();
292 throw INTERP_KERNEL::Exception("ARRAY::__len__ : Instance is NOT allocated !");
298 return self->intValue();
301 ARRAY ## Iterator *__iter__()
303 return self->iterator();
306 PyObject *accumulate() const
308 mcIdType sz=ToIdType(self->getNumberOfComponents());
309 INTERP_KERNEL::AutoPtr<INT> tmp=new INT[sz];
310 self->accumulate((INT *)tmp);
311 return convertIntArrToPyList((const INT *)tmp,sz);
314 ARRAY *accumulatePerChunck(PyObject *indexArr) const
317 std::vector<mcIdType> val2;
318 const mcIdType *bg=convertIntStarLikePyObjToCppIntStar(indexArr,sw,sz,val,val2);
319 return self->accumulatePerChunck(bg,bg+sz);
322 DataArrayIdType *findIdsEqualTuple(PyObject *inputTuple) const
326 std::vector<INT> val2;
327 const INT *bg(convertIntStarLikePyObjToCppIntStar(inputTuple,sw,sz,val,val2));
328 return self->findIdsEqualTuple(bg,bg+sz);
331 DataArrayIdType *findIdForEach(PyObject *vals) const
335 std::vector<INT> val2;
336 const INT *bg(convertIntStarLikePyObjToCppIntStar(vals,sw,sz,val,val2));
337 MCAuto<DataArrayIdType> ret(self->findIdForEach(bg,bg+sz));
341 PyObject *splitInBalancedSlices(mcIdType nbOfSlices) const
343 std::vector< std::pair<mcIdType,mcIdType> > slcs(self->splitInBalancedSlices(nbOfSlices));
344 PyObject *ret=PyList_New(slcs.size());
345 for(std::size_t i=0;i<slcs.size();i++)
346 PyList_SetItem(ret,i,PySlice_New(PyInt_FromLong(slcs[i].first),PyInt_FromLong(slcs[i].second),PyInt_FromLong(1)));
350 ARRAY *buildExplicitArrOfSliceOnScaledArr(PyObject *slic) const
352 if(!PySlice_Check(slic))
353 throw INTERP_KERNEL::Exception("ARRAY::buildExplicitArrOfSliceOnScaledArr (wrap) : expecting a pyslice as second (first) parameter !");
354 Py_ssize_t strt=2,stp=2,step=2;
355 GetIndicesOfSliceExplicitely(slic,&strt,&stp,&step,"ARRAY::buildExplicitArrOfSliceOnScaledArr (wrap) : the input slice is invalid !");
356 if(strt==std::numeric_limits<INT>::max() || stp==std::numeric_limits<INT>::max())
357 throw INTERP_KERNEL::Exception("ARRAY::buildExplicitArrOfSliceOnScaledArr (wrap) : the input slice contains some unknowns that can't be determined in static method ! Call DataArray::getSlice (non static) instead !");
358 return self->buildExplicitArrOfSliceOnScaledArr((INT)strt,(INT)stp,(INT)step);
361 PyObject *getMinMaxValues() const
364 self->getMinMaxValues(a,b);
365 PyObject *ret=PyTuple_New(2);
366 PyTuple_SetItem(ret,0,PyInt_FromLong(a));
367 PyTuple_SetItem(ret,1,PyInt_FromLong(b));
371 static PyObject *ConvertIndexArrayToO2N(mcIdType nbOfOldTuples, PyObject *arr, PyObject *arrI)
373 mcIdType newNbOfTuples=-1;
374 mcIdType szArr,szArrI,sw,iTypppArr,iTypppArrI;
375 std::vector<mcIdType> stdvecTyyppArr;
376 std::vector<mcIdType> stdvecTyyppArrI;
377 const mcIdType *arrPtr=convertIntStarLikePyObjToCppIntStar(arr,sw,szArr,iTypppArr,stdvecTyyppArr);
378 const mcIdType *arrIPtr=convertIntStarLikePyObjToCppIntStar(arrI,sw,szArrI,iTypppArrI,stdvecTyyppArrI);
379 DataArrayIdType *ret0=MEDCoupling::ARRAY::ConvertIndexArrayToO2N(nbOfOldTuples,arrPtr,arrIPtr,arrIPtr+szArrI,newNbOfTuples);
380 PyObject *ret=PyTuple_New(2);
381 PyTuple_SetItem(ret,0,SWIG_NewPointerObj((void*)ret0,SWIGTITraits<mcIdType>::TI,SWIG_POINTER_OWN | 0));
382 PyTuple_SetItem(ret,1,PyInt_FromLong(newNbOfTuples));
386 static DataArrayIdType *CheckAndPreparePermutation(PyObject *arr)
388 MCAuto<DataArrayIdType> ret(DataArrayIdType::New());
391 std::vector<INT> stdvecTyyppArr;
392 const INT *arrPtr(convertIntStarLikePyObjToCppIntStar(arr,sw,szArr,iTypppArr,stdvecTyyppArr));
393 mcIdType *pt(MEDCoupling::ARRAY::CheckAndPreparePermutation(arrPtr,arrPtr+szArr));
394 ret->useArray(pt,true,MEDCoupling::DeallocType::C_DEALLOC,szArr,1);
398 void setValues(PyObject *li, PyObject *nbOfTuples=0, PyObject *nbOfComp=0)
400 const char *msg="MEDCoupling::ARRAY::setValues : Available API are : \n-ARRAY.setValues([1,3,4])\n-ARRAY.setValues([1,3,4],3)\n-ARRAY.setValues([1,3,4,5],2,2)\n-ARRAY.New(5)\n !";
401 if(PyList_Check(li) || PyTuple_Check(li))
403 if(nbOfTuples && nbOfTuples != Py_None)
405 if(PyInt_Check(nbOfTuples))
407 mcIdType nbOfTuples1=ToIdType(PyInt_AS_LONG(nbOfTuples));
409 throw INTERP_KERNEL::Exception("ARRAY::setValue : should be a positive set of allocated memory !");
410 if(nbOfComp && nbOfComp != Py_None)
412 if(PyInt_Check(nbOfComp))
413 {//ARRAY.setValues([1,3,4,5],2,2)
414 mcIdType nbOfCompo=ToIdType(PyInt_AS_LONG(nbOfComp));
416 throw INTERP_KERNEL::Exception("ARRAY::setValue : should be a positive number of components !");
417 std::vector<INT> tmp=fillArrayWithPyListInt2<INT>(li,nbOfTuples1,nbOfCompo);
418 self->alloc(nbOfTuples1,nbOfCompo); std::copy(tmp.begin(),tmp.end(),self->getPointer());
421 throw INTERP_KERNEL::Exception(msg);
424 {//ARRAY.setValues([1,3,4],3)
426 std::vector<INT> tmp=fillArrayWithPyListInt2<INT>(li,nbOfTuples1,tmpp1);
427 self->alloc(nbOfTuples1,tmpp1); std::copy(tmp.begin(),tmp.end(),self->getPointer());
431 throw INTERP_KERNEL::Exception(msg);
434 {// ARRAY.setValues([1,3,4])
435 mcIdType tmpp1=-1,tmpp2=-1;
436 std::vector<INT> tmp=fillArrayWithPyListInt2<INT>(li,tmpp1,tmpp2);
437 self->alloc(tmpp1,tmpp2); std::copy(tmp.begin(),tmp.end(),self->getPointer());
441 throw INTERP_KERNEL::Exception(msg);
444 PyObject *getValues() const
446 const INT *vals=self->getConstPointer();
447 return convertIntArrToPyList(vals,self->getNbOfElems());
450 PyObject *isEqualIfNotWhy(const ARRAY& other) const
453 bool ret0=self->isEqualIfNotWhy(other,ret1);
454 PyObject *ret=PyTuple_New(2);
455 PyObject *ret0Py=ret0?Py_True:Py_False;
457 PyTuple_SetItem(ret,0,ret0Py);
458 PyTuple_SetItem(ret,1,PyString_FromString(ret1.c_str()));
462 PyObject *getValuesAsTuple() const
464 const INT *vals=self->getConstPointer();
465 mcIdType nbOfComp=ToIdType(self->getNumberOfComponents());
466 mcIdType nbOfTuples=self->getNumberOfTuples();
467 return convertIntArrToPyListOfTuple(vals,nbOfComp,nbOfTuples);
470 static PyObject *MakePartition(PyObject *gps, mcIdType newNb)
472 std::vector<const ARRAY *> groups;
473 std::vector< std::vector<mcIdType> > fidsOfGroups;
474 convertFromPyObjVectorOfObj(gps,SWIGTITraits<INT>::TI,"ARRAY",groups);
475 DataArrayIdType *ret0=MEDCoupling::ARRAY::MakePartition(groups,newNb,fidsOfGroups);
476 PyObject *ret = PyList_New(2);
477 PyList_SetItem(ret,0,SWIG_NewPointerObj(SWIG_as_voidptr(ret0),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
478 std::size_t sz=fidsOfGroups.size();
479 PyObject *ret1 = PyList_New(sz);
480 for(std::size_t i=0;i<sz;i++)
481 PyList_SetItem(ret1,i,convertIntArrToPyList2(fidsOfGroups[i]));
482 PyList_SetItem(ret,1,ret1);
486 DataArrayIdType *findIdsEqualList(PyObject *obj)
490 std::vector<INT> multiVal;
491 std::pair<mcIdType, std::pair<mcIdType,mcIdType> > slic;
493 convertIntStarOrSliceLikePyObjToCpp(obj,self->getNumberOfTuples(),sw,singleVal,multiVal,slic,daIntTyypp);
497 return self->findIdsEqualList(&singleVal,&singleVal+1);
499 return self->findIdsEqualList(&multiVal[0],&multiVal[0]+multiVal.size());
501 return self->findIdsEqualList(daIntTyypp->begin(),daIntTyypp->end());
503 throw INTERP_KERNEL::Exception("ARRAY::findIdsEqualList : unrecognized type entered, expected list of int, tuple of int or ARRAY !");
507 DataArrayIdType *findIdsNotEqualList(PyObject *obj)
511 std::vector<INT> multiVal;
512 std::pair<mcIdType, std::pair<mcIdType,mcIdType> > slic;
514 convertIntStarOrSliceLikePyObjToCpp(obj,self->getNumberOfTuples(),sw,singleVal,multiVal,slic,daIntTyypp);
518 return self->findIdsNotEqualList(&singleVal,&singleVal+1);
520 return self->findIdsNotEqualList(&multiVal[0],&multiVal[0]+multiVal.size());
522 return self->findIdsNotEqualList(daIntTyypp->begin(),daIntTyypp->end());
524 throw INTERP_KERNEL::Exception("ARRAY::findIdsNotEqualList : unrecognized type entered, expected list of int, tuple of int or ARRAY !");
528 PyObject *splitByValueRange(PyObject *li) const
530 ARRAY *ret0=0,*ret1=0,*ret2=0;
532 int res1=SWIG_ConvertPtr(li,&da,SWIGTITraits<INT>::TI, 0 | 0 );
533 if (!SWIG_IsOK(res1))
536 INTERP_KERNEL::AutoPtr<INT> tmp=convertPyToNewIntArr2<INT>(li,&size);
537 self->splitByValueRange(tmp,(INT *)tmp+size,ret0,ret1,ret2);
541 ARRAY *da2=reinterpret_cast< ARRAY * >(da);
543 throw INTERP_KERNEL::Exception("Not null ARRAY instance expected !");
544 da2->checkAllocated();
545 self->splitByValueRange(da2->begin(),da2->end(),ret0,ret1,ret2);
547 PyObject *ret = PyList_New(3);
548 PyList_SetItem(ret,0,SWIG_NewPointerObj(SWIG_as_voidptr(ret0),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 ));
549 PyList_SetItem(ret,1,SWIG_NewPointerObj(SWIG_as_voidptr(ret1),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 ));
550 PyList_SetItem(ret,2,SWIG_NewPointerObj(SWIG_as_voidptr(ret2),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 ));
554 DataArrayIdType *transformWithIndArrR(PyObject *li) const
557 int res1=SWIG_ConvertPtr(li,&da,SWIGTITraits<INT>::TI, 0 | 0 );
558 if (!SWIG_IsOK(res1))
561 INTERP_KERNEL::AutoPtr<INT> tmp=convertPyToNewIntArr2<INT>(li,&size);
562 return self->transformWithIndArrR(tmp,tmp+size);
566 ARRAY *da2=reinterpret_cast< ARRAY * >(da);
567 return self->transformWithIndArrR(da2->getConstPointer(),da2->getConstPointer()+da2->getNbOfElems());
571 ARRAY *renumberAndReduce(PyObject *li, mcIdType newNbOfTuple)
574 int res1=SWIG_ConvertPtr(li,&da,SWIGTITraits<mcIdType>::TI, 0 | 0 );
575 if (!SWIG_IsOK(res1))
578 INTERP_KERNEL::AutoPtr<mcIdType> tmp=convertPyToNewIntArr2(li,&size);
579 if(size!=self->getNumberOfTuples())
581 throw INTERP_KERNEL::Exception("Invalid list length ! Must be equal to number of tuples !");
583 return self->renumberAndReduce(tmp,newNbOfTuple);
587 DataArrayIdType *da2=reinterpret_cast< DataArrayIdType * >(da);
589 throw INTERP_KERNEL::Exception("Not null DataArrayInt instance expected !");
590 da2->checkAllocated();
591 mcIdType size=self->getNumberOfTuples();
592 if(size!=self->getNumberOfTuples())
594 throw INTERP_KERNEL::Exception("Invalid list length ! Must be equal to number of tuples !");
596 return self->renumberAndReduce(da2->getConstPointer(),newNbOfTuple);
600 ARRAY *renumber(PyObject *li)
603 int res1=SWIG_ConvertPtr(li,&da,SWIGTITraits<mcIdType>::TI, 0 | 0 );
604 if (!SWIG_IsOK(res1))
607 INTERP_KERNEL::AutoPtr<mcIdType> tmp=convertPyToNewIntArr2(li,&size);
608 if(size!=self->getNumberOfTuples())
610 throw INTERP_KERNEL::Exception("Invalid list length ! Must be equal to number of tuples !");
612 return self->renumber(tmp);
616 DataArrayIdType *da2=reinterpret_cast< DataArrayIdType * >(da);
618 throw INTERP_KERNEL::Exception("Not null DataArrayInt instance expected !");
619 da2->checkAllocated();
620 mcIdType size=self->getNumberOfTuples();
621 if(size!=self->getNumberOfTuples())
623 throw INTERP_KERNEL::Exception("Invalid list length ! Must be equal to number of tuples !");
625 return self->renumber(da2->getConstPointer());
629 ARRAY *renumberR(PyObject *li)
632 int res1=SWIG_ConvertPtr(li,&da,SWIGTITraits<mcIdType>::TI, 0 | 0 );
633 if (!SWIG_IsOK(res1))
636 INTERP_KERNEL::AutoPtr<mcIdType> tmp=convertPyToNewIntArr2(li,&size);
637 if(size!=self->getNumberOfTuples())
639 throw INTERP_KERNEL::Exception("Invalid list length ! Must be equal to number of tuples !");
641 return self->renumberR(tmp);
645 DataArrayIdType *da2=reinterpret_cast< DataArrayIdType * >(da);
647 throw INTERP_KERNEL::Exception("Not null DataArrayInt instance expected !");
648 da2->checkAllocated();
649 mcIdType size=self->getNumberOfTuples();
650 if(size!=self->getNumberOfTuples())
652 throw INTERP_KERNEL::Exception("Invalid list length ! Must be equal to number of tuples !");
654 return self->renumberR(da2->getConstPointer());
658 void setSelectedComponents(const ARRAY *a, PyObject *li)
660 std::vector<std::size_t> tmp;
661 convertPyToNewIntArr3(li,tmp);
662 self->setSelectedComponents(a,tmp);
665 PyObject *explodeComponents() const
667 std::vector< MCAuto<ARRAY> > retCpp(self->explodeComponents());
668 std::size_t sz(retCpp.size());
669 PyObject *res(PyList_New(sz));
670 for(std::size_t i=0;i<sz;i++)
671 PyList_SetItem(res,i,SWIG_NewPointerObj(SWIG_as_voidptr(retCpp[i].retn()),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
675 PyObject *getTuple(mcIdType tupleId)
677 mcIdType sz=ToIdType(self->getNumberOfComponents());
678 INTERP_KERNEL::AutoPtr<INT> tmp=new INT[sz];
679 self->getTuple(tupleId,tmp);
680 return convertIntArrToPyList((const INT*)tmp,sz);
683 PyObject *changeSurjectiveFormat(INT targetNb) const
685 DataArrayIdType *arr=0;
686 DataArrayIdType *arrI=0;
687 self->changeSurjectiveFormat(targetNb,arr,arrI);
688 PyObject *res = PyList_New(2);
689 PyList_SetItem(res,0,SWIG_NewPointerObj((void*)arr,SWIGTITraits<mcIdType>::TI,SWIG_POINTER_OWN | 0));
690 PyList_SetItem(res,1,SWIG_NewPointerObj((void*)arrI,SWIGTITraits<mcIdType>::TI,SWIG_POINTER_OWN | 0));
694 static ARRAY *Meld(PyObject *li)
696 std::vector<const ARRAY *> tmp;
697 convertFromPyObjVectorOfObj(li,SWIGTITraits<INT>::TI,"ARRAY",tmp);
698 return ARRAY::Meld(tmp);
701 static ARRAY *Aggregate(PyObject *li)
703 std::vector<const ARRAY *> tmp;
704 convertFromPyObjVectorOfObj(li,SWIGTITraits<INT>::TI,"ARRAY",tmp);
705 return ARRAY::Aggregate(tmp);
708 static ARRAY *AggregateIndexes(PyObject *li)
710 std::vector<const ARRAY *> tmp;
711 convertFromPyObjVectorOfObj(li,SWIGTITraits<INT>::TI,"ARRAY",tmp);
712 return ARRAY::AggregateIndexes(tmp);
715 static ARRAY *BuildUnion(PyObject *li)
717 std::vector<const ARRAY *> tmp;
718 convertFromPyObjVectorOfObj(li,SWIGTITraits<INT>::TI,"ARRAY",tmp);
719 return ARRAY::BuildUnion(tmp);
722 static ARRAY *BuildIntersection(PyObject *li)
724 std::vector<const ARRAY *> tmp;
725 convertFromPyObjVectorOfObj(li,SWIGTITraits<INT>::TI,"ARRAY",tmp);
726 return ARRAY::BuildIntersection(tmp);
729 PyObject *getMaxValue() const
732 INT r1=self->getMaxValue(tmp);
733 PyObject *ret=PyTuple_New(2);
734 PyTuple_SetItem(ret,0,PyInt_FromLong(r1));
735 PyTuple_SetItem(ret,1,PyInt_FromLong(tmp));
739 PyObject *getMaxAbsValue(std::size_t& tupleId) const
742 INT r1=self->getMaxAbsValue(tmp);
743 PyObject *ret=PyTuple_New(2);
744 PyTuple_SetItem(ret,0,PyInt_FromLong(r1));
745 PyTuple_SetItem(ret,1,PyInt_FromLong(tmp));
749 PyObject *getMinValue() const
752 INT r1=self->getMinValue(tmp);
753 PyObject *ret=PyTuple_New(2);
754 PyTuple_SetItem(ret,0,PyInt_FromLong(r1));
755 PyTuple_SetItem(ret,1,PyInt_FromLong(tmp));
759 mcIdType index(PyObject *obj) const
761 std::size_t nbOfCompo=self->getNumberOfComponents();
768 INT val=(INT)PyInt_AS_LONG(obj);
769 return self->findIdFirstEqual(val);
772 throw INTERP_KERNEL::Exception("ARRAY::index : 'this' contains one component and trying to find an element which is not an integer !");
776 std::vector<INT> arr;
777 convertPyToNewIntArr3(obj,arr);
778 return self->findIdFirstEqualTuple(arr);
783 bool __contains__(PyObject *obj) const
785 std::size_t nbOfCompo=self->getNumberOfComponents();
794 INT val=(INT)PyInt_AS_LONG(obj);
795 return self->presenceOfValue(val);
798 throw INTERP_KERNEL::Exception("ARRAY::__contains__ : 'this' contains one component and trying to find an element which is not an integer !");
802 std::vector<INT> arr;
803 convertPyToNewIntArr3(obj,arr);
804 return self->presenceOfTuple(arr);
809 PyObject *__getitem__(PyObject *obj)
811 const char msg[]="Unexpected situation in ARRAY::__getitem__ !";
812 const char msg2[]="ARRAY::__getitem__ : Mismatch of slice values in 2nd parameter (components) !";
813 self->checkAllocated();
814 mcIdType nbOfTuples=self->getNumberOfTuples();
815 std::size_t nbOfComponents=self->getNumberOfComponents();
818 std::vector<mcIdType> vt1;
819 std::vector<std::size_t> vc1;
820 std::pair<mcIdType, std::pair<mcIdType,mcIdType> > pt1,pc1;
821 DataArrayIdType *dt1=0,*dc1=0;
823 convertObjToPossibleCpp3(obj,nbOfTuples,(int)nbOfComponents,sw,it1,ic1,vt1,vc1,pt1,pc1,dt1,dc1);
829 if(nbOfComponents==1)
830 return PyInt_FromLong(self->getIJSafe(it1,0));
831 return SWIG_NewPointerObj(SWIG_as_voidptr(self->selectByTupleIdSafe(&it1,&it1+1)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
834 return SWIG_NewPointerObj(SWIG_as_voidptr(self->selectByTupleIdSafe(&vt1[0],&vt1[0]+vt1.size())),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
836 return SWIG_NewPointerObj(SWIG_as_voidptr(self->selectByTupleIdSafeSlice(pt1.first,pt1.second.first,pt1.second.second)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
838 return SWIG_NewPointerObj(SWIG_as_voidptr(self->selectByTupleIdSafe(dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems())),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
840 return PyInt_FromLong(self->getIJSafe(it1,ic1));
843 ret=self->selectByTupleIdSafe(&vt1[0],&vt1[0]+vt1.size());
844 std::vector<std::size_t> v2(1,ic1);
845 return SWIG_NewPointerObj(SWIG_as_voidptr(ret->keepSelectedComponents(v2)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
849 ret=self->selectByTupleIdSafeSlice(pt1.first,pt1.second.first,pt1.second.second);
850 std::vector<std::size_t> v2(1,ic1);
851 return SWIG_NewPointerObj(SWIG_as_voidptr(ret->keepSelectedComponents(v2)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
855 ret=self->selectByTupleIdSafe(dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems());
856 std::vector<std::size_t> v2(1,ic1);
857 return SWIG_NewPointerObj(SWIG_as_voidptr(ret->keepSelectedComponents(v2)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
861 ret=self->selectByTupleIdSafe(&it1,&it1+1);
862 return SWIG_NewPointerObj(SWIG_as_voidptr(ret->keepSelectedComponents(vc1)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
866 ret=self->selectByTupleIdSafe(&vt1[0],&vt1[0]+vt1.size());
867 return SWIG_NewPointerObj(SWIG_as_voidptr(ret->keepSelectedComponents(vc1)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
871 ret=self->selectByTupleIdSafeSlice(pt1.first,pt1.second.first,pt1.second.second);
872 return SWIG_NewPointerObj(SWIG_as_voidptr(ret->keepSelectedComponents(vc1)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
876 ret=self->selectByTupleIdSafe(dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems());
877 return SWIG_NewPointerObj(SWIG_as_voidptr(ret->keepSelectedComponents(vc1)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
881 ret=self->selectByTupleIdSafe(&it1,&it1+1);
882 mcIdType nbOfComp=DataArray::GetNumberOfItemGivenBESRelative(pc1.first,pc1.second.first,pc1.second.second,msg2);
883 std::vector<std::size_t> v2(nbOfComp);
884 for(INT i=0;i<nbOfComp;i++)
885 v2[i]=pc1.first+i*pc1.second.second;
886 return SWIG_NewPointerObj(SWIG_as_voidptr(ret->keepSelectedComponents(v2)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
890 ret=self->selectByTupleIdSafe(&vt1[0],&vt1[0]+vt1.size());
891 mcIdType nbOfComp=DataArray::GetNumberOfItemGivenBESRelative(pc1.first,pc1.second.first,pc1.second.second,msg2);
892 std::vector<std::size_t> v2(nbOfComp);
893 for(INT i=0;i<nbOfComp;i++)
894 v2[i]=pc1.first+i*pc1.second.second;
895 return SWIG_NewPointerObj(SWIG_as_voidptr(ret->keepSelectedComponents(v2)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
899 ret=self->selectByTupleIdSafeSlice(pt1.first,pt1.second.first,pt1.second.second);
900 mcIdType nbOfComp=DataArray::GetNumberOfItemGivenBESRelative(pc1.first,pc1.second.first,pc1.second.second,msg2);
901 std::vector<std::size_t> v2(nbOfComp);
902 for(mcIdType i=0;i<nbOfComp;i++)
903 v2[i]=pc1.first+i*pc1.second.second;
904 return SWIG_NewPointerObj(SWIG_as_voidptr(ret->keepSelectedComponents(v2)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
908 ret=self->selectByTupleIdSafe(dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems());
909 mcIdType nbOfComp=DataArray::GetNumberOfItemGivenBESRelative(pc1.first,pc1.second.first,pc1.second.second,msg2);
910 std::vector<std::size_t> v2(nbOfComp);
911 for(INT i=0;i<nbOfComp;i++)
912 v2[i]=pc1.first+i*pc1.second.second;
913 return SWIG_NewPointerObj(SWIG_as_voidptr(ret->keepSelectedComponents(v2)),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 );
916 throw INTERP_KERNEL::Exception(msg);
920 ARRAY *__setitem__(PyObject *obj, PyObject *value)
922 self->checkAllocated();
923 const char msg[]="Unexpected situation in __setitem__ !";
924 mcIdType nbOfTuples=self->getNumberOfTuples();
925 int nbOfComponents=(int)self->getNumberOfComponents();
930 ARRAY ## Tuple *dd1=0;
931 convertIntStarLikePyObjToCpp(value,sw1,i1,v1,d1,dd1);
933 std::vector<mcIdType> vt1,vc1;
934 std::pair<mcIdType, std::pair<mcIdType,mcIdType> > pt1,pc1;
935 DataArrayIdType *dt1=0,*dc1=0;
936 convertObjToPossibleCpp3(obj,nbOfTuples,nbOfComponents,sw2,it1,ic1,vt1,vc1,pt1,pc1,dt1,dc1);
945 self->setPartOfValuesSimple1(i1,it1,it1+1,1,0,nbOfComponents,1);
949 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
950 self->setPartOfValues1(tmp,it1,it1+1,1,0,nbOfComponents,1,false);
953 self->setPartOfValues1(d1,it1,it1+1,1,0,nbOfComponents,1);
956 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
957 self->setPartOfValues1(tmp,it1,it1+1,1,0,nbOfComponents,1);
960 throw INTERP_KERNEL::Exception(msg);
969 self->setPartOfValuesSimple3(i1,&vt1[0],&vt1[0]+vt1.size(),0,nbOfComponents,1);
973 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
974 self->setPartOfValues3(tmp,&vt1[0],&vt1[0]+vt1.size(),0,nbOfComponents,1,false);
977 self->setPartOfValues3(d1,&vt1[0],&vt1[0]+vt1.size(),0,nbOfComponents,1);
980 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
981 self->setPartOfValues3(tmp,&vt1[0],&vt1[0]+vt1.size(),0,nbOfComponents,1);
984 throw INTERP_KERNEL::Exception(msg);
993 self->setPartOfValuesSimple1(i1,pt1.first,pt1.second.first,pt1.second.second,0,nbOfComponents,1);
997 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
998 self->setPartOfValues1(tmp,pt1.first,pt1.second.first,pt1.second.second,0,nbOfComponents,1,false);
1001 self->setPartOfValues1(d1,pt1.first,pt1.second.first,pt1.second.second,0,nbOfComponents,1);
1004 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1005 self->setPartOfValues1(tmp,pt1.first,pt1.second.first,pt1.second.second,0,nbOfComponents,1);
1008 throw INTERP_KERNEL::Exception(msg);
1017 self->setPartOfValuesSimple3(i1,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),0,nbOfComponents,1);
1021 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1022 self->setPartOfValues3(tmp,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),0,nbOfComponents,1,false);
1025 self->setPartOfValues3(d1,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),0,nbOfComponents,1);
1028 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1029 self->setPartOfValues3(tmp,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),0,nbOfComponents,1);
1032 throw INTERP_KERNEL::Exception(msg);
1041 self->setPartOfValuesSimple1(i1,it1,it1+1,1,ic1,ic1+1,1);
1045 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1046 self->setPartOfValues1(tmp,it1,it1+1,1,ic1,ic1+1,1,false);
1049 self->setPartOfValues1(d1,it1,it1+1,1,ic1,ic1+1,1);
1052 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1053 self->setPartOfValues1(tmp,it1,it1+1,1,ic1,ic1+1,1);
1056 throw INTERP_KERNEL::Exception(msg);
1065 self->setPartOfValuesSimple3(i1,&vt1[0],&vt1[0]+vt1.size(),ic1,ic1+1,1);
1069 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1070 self->setPartOfValues3(tmp,&vt1[0],&vt1[0]+vt1.size(),ic1,ic1+1,1,false);
1073 self->setPartOfValues3(d1,&vt1[0],&vt1[0]+vt1.size(),ic1,ic1+1,1);
1076 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1077 self->setPartOfValues3(tmp,&vt1[0],&vt1[0]+vt1.size(),ic1,ic1+1,1);
1080 throw INTERP_KERNEL::Exception(msg);
1089 self->setPartOfValuesSimple1(i1,pt1.first,pt1.second.first,pt1.second.second,ic1,ic1+1,1);
1093 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1094 self->setPartOfValues1(tmp,pt1.first,pt1.second.first,pt1.second.second,ic1,ic1+1,1,false);
1097 self->setPartOfValues1(d1,pt1.first,pt1.second.first,pt1.second.second,ic1,ic1+1,1);
1100 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1101 self->setPartOfValues1(tmp,pt1.first,pt1.second.first,pt1.second.second,ic1,ic1+1,1);
1104 throw INTERP_KERNEL::Exception(msg);
1113 self->setPartOfValuesSimple3(i1,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),ic1,ic1+1,1);
1117 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1118 self->setPartOfValues3(tmp,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),ic1,ic1+1,1,false);
1121 self->setPartOfValues3(d1,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),ic1,ic1+1,1);
1124 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1125 self->setPartOfValues3(tmp,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),ic1,ic1+1,1);
1128 throw INTERP_KERNEL::Exception(msg);
1137 self->setPartOfValuesSimple2(i1,&it1,&it1+1,&vc1[0],&vc1[0]+vc1.size());
1141 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1142 self->setPartOfValues2(tmp,&it1,&it1+1,&vc1[0],&vc1[0]+vc1.size(),false);
1145 self->setPartOfValues2(d1,&it1,&it1+1,&vc1[0],&vc1[0]+vc1.size());
1148 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1149 self->setPartOfValues2(tmp,&it1,&it1+1,&vc1[0],&vc1[0]+vc1.size());
1152 throw INTERP_KERNEL::Exception(msg);
1161 self->setPartOfValuesSimple2(i1,&vt1[0],&vt1[0]+vt1.size(),&vc1[0],&vc1[0]+vc1.size());
1165 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1166 self->setPartOfValues2(tmp,&vt1[0],&vt1[0]+vt1.size(),&vc1[0],&vc1[0]+vc1.size(),false);
1169 self->setPartOfValues2(d1,&vt1[0],&vt1[0]+vt1.size(),&vc1[0],&vc1[0]+vc1.size());
1172 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1173 self->setPartOfValues2(tmp,&vt1[0],&vt1[0]+vt1.size(),&vc1[0],&vc1[0]+vc1.size());
1176 throw INTERP_KERNEL::Exception(msg);
1185 self->setPartOfValuesSimple4(i1,pt1.first,pt1.second.first,pt1.second.second,&vc1[0],&vc1[0]+vc1.size());
1189 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1190 self->setPartOfValues4(tmp,pt1.first,pt1.second.first,pt1.second.second,&vc1[0],&vc1[0]+vc1.size(),false);
1193 self->setPartOfValues4(d1,pt1.first,pt1.second.first,pt1.second.second,&vc1[0],&vc1[0]+vc1.size());
1196 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1197 self->setPartOfValues4(tmp,pt1.first,pt1.second.first,pt1.second.second,&vc1[0],&vc1[0]+vc1.size());
1200 throw INTERP_KERNEL::Exception(msg);
1209 self->setPartOfValuesSimple2(i1,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),&vc1[0],&vc1[0]+vc1.size());
1213 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1214 self->setPartOfValues2(tmp,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),&vc1[0],&vc1[0]+vc1.size(),false);
1217 self->setPartOfValues2(d1,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),&vc1[0],&vc1[0]+vc1.size());
1220 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1221 self->setPartOfValues2(tmp,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),&vc1[0],&vc1[0]+vc1.size());
1224 throw INTERP_KERNEL::Exception(msg);
1233 self->setPartOfValuesSimple1(i1,it1,it1+1,1,pc1.first,pc1.second.first,pc1.second.second);
1237 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1238 self->setPartOfValues1(tmp,it1,it1+1,1,pc1.first,pc1.second.first,pc1.second.second,false);
1241 self->setPartOfValues1(d1,it1,it1+1,1,pc1.first,pc1.second.first,pc1.second.second);
1244 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1245 self->setPartOfValues1(tmp,it1,it1+1,1,pc1.first,pc1.second.first,pc1.second.second);
1248 throw INTERP_KERNEL::Exception(msg);
1257 self->setPartOfValuesSimple3(i1,&vt1[0],&vt1[0]+vt1.size(),pc1.first,pc1.second.first,pc1.second.second);
1261 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1262 self->setPartOfValues3(tmp,&vt1[0],&vt1[0]+vt1.size(),pc1.first,pc1.second.first,pc1.second.second,false);
1265 self->setPartOfValues3(d1,&vt1[0],&vt1[0]+vt1.size(),pc1.first,pc1.second.first,pc1.second.second);
1268 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1269 self->setPartOfValues3(tmp,&vt1[0],&vt1[0]+vt1.size(),pc1.first,pc1.second.first,pc1.second.second);
1272 throw INTERP_KERNEL::Exception(msg);
1281 self->setPartOfValuesSimple1(i1,pt1.first,pt1.second.first,pt1.second.second,pc1.first,pc1.second.first,pc1.second.second);
1285 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1286 self->setPartOfValues1(tmp,pt1.first,pt1.second.first,pt1.second.second,pc1.first,pc1.second.first,pc1.second.second,false);
1289 self->setPartOfValues1(d1,pt1.first,pt1.second.first,pt1.second.second,pc1.first,pc1.second.first,pc1.second.second);
1292 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1293 self->setPartOfValues1(tmp,pt1.first,pt1.second.first,pt1.second.second,pc1.first,pc1.second.first,pc1.second.second);
1296 throw INTERP_KERNEL::Exception(msg);
1305 self->setPartOfValuesSimple3(i1,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),pc1.first,pc1.second.first,pc1.second.second);
1309 tmp->useArray(&v1[0],false,DeallocType::CPP_DEALLOC,1,v1.size());
1310 self->setPartOfValues3(tmp,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),pc1.first,pc1.second.first,pc1.second.second,false);
1313 self->setPartOfValues3(d1,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),pc1.first,pc1.second.first,pc1.second.second);
1316 tmp=dd1->buildDAInt(1,self->getNumberOfComponents());
1317 self->setPartOfValues3(tmp,dt1->getConstPointer(),dt1->getConstPointer()+dt1->getNbOfElems(),pc1.first,pc1.second.first,pc1.second.second);
1320 throw INTERP_KERNEL::Exception(msg);
1325 throw INTERP_KERNEL::Exception(msg);
1330 ARRAY *__neg__() const
1332 return self->negate();
1335 ARRAY *__add__(PyObject *obj)
1337 const char msg[]="Unexpected situation in __add__ !";
1340 std::vector<INT> aa;
1341 ARRAY ## Tuple *aaa;
1343 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1348 MCAuto<ARRAY> ret=self->deepCopy();
1349 ret->applyLin(1,val);
1354 MCAuto<ARRAY> aaaa=ARRAY::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1355 return ARRAY::Add(self,aaaa);
1359 return ARRAY::Add(self,a);
1363 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1364 return ARRAY::Add(self,aaaa);
1367 throw INTERP_KERNEL::Exception(msg);
1371 ARRAY *__radd__(PyObject *obj)
1373 const char msg[]="Unexpected situation in __radd__ !";
1376 std::vector<INT> aa;
1377 ARRAY ## Tuple *aaa;
1379 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1384 MCAuto<ARRAY> ret=self->deepCopy();
1385 ret->applyLin(1,val);
1390 MCAuto<ARRAY> aaaa=ARRAY::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1391 return ARRAY::Add(self,aaaa);
1395 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1396 return ARRAY::Add(self,aaaa);
1399 throw INTERP_KERNEL::Exception(msg);
1403 PyObject *___iadd___(PyObject *trueSelf, PyObject *obj)
1405 const char msg[]="Unexpected situation in __iadd__ !";
1408 std::vector<INT> aa;
1409 ARRAY ## Tuple *aaa;
1411 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1416 self->applyLin(1,val);
1417 Py_XINCREF(trueSelf);
1422 MCAuto<ARRAY> bb=ARRAY::New(); bb->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1424 Py_XINCREF(trueSelf);
1430 Py_XINCREF(trueSelf);
1435 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1436 self->addEqual(aaaa);
1437 Py_XINCREF(trueSelf);
1441 throw INTERP_KERNEL::Exception(msg);
1445 ARRAY *__sub__(PyObject *obj)
1447 const char msg[]="Unexpected situation in __sub__ !";
1450 std::vector<INT> aa;
1451 ARRAY ## Tuple *aaa;
1453 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1458 MCAuto<ARRAY> ret=self->deepCopy();
1459 ret->applyLin(1,-val);
1464 MCAuto<ARRAY> aaaa=ARRAY::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1465 return ARRAY::Substract(self,aaaa);
1469 return ARRAY::Substract(self,a);
1473 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1474 return ARRAY::Substract(self,aaaa);
1477 throw INTERP_KERNEL::Exception(msg);
1481 ARRAY *__rsub__(PyObject *obj)
1483 const char msg[]="Unexpected situation in __rsub__ !";
1486 std::vector<INT> aa;
1487 ARRAY ## Tuple *aaa;
1489 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1494 MCAuto<ARRAY> ret=self->deepCopy();
1495 ret->applyLin(-1,val);
1500 MCAuto<ARRAY> aaaa=ARRAY::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1501 return ARRAY::Substract(aaaa,self);
1505 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1506 return ARRAY::Substract(aaaa,self);
1509 throw INTERP_KERNEL::Exception(msg);
1513 PyObject *___isub___(PyObject *trueSelf, PyObject *obj)
1515 const char msg[]="Unexpected situation in __isub__ !";
1518 std::vector<INT> aa;
1519 ARRAY ## Tuple *aaa;
1521 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1526 self->applyLin(1,-val);
1527 Py_XINCREF(trueSelf);
1532 MCAuto<ARRAY> bb=ARRAY::New(); bb->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1533 self->substractEqual(bb);
1534 Py_XINCREF(trueSelf);
1539 self->substractEqual(a);
1540 Py_XINCREF(trueSelf);
1545 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1546 self->substractEqual(aaaa);
1547 Py_XINCREF(trueSelf);
1551 throw INTERP_KERNEL::Exception(msg);
1555 ARRAY *__mul__(PyObject *obj)
1557 const char msg[]="Unexpected situation in __mul__ !";
1560 std::vector<INT> aa;
1561 ARRAY ## Tuple *aaa;
1563 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1568 MCAuto<ARRAY> ret=self->deepCopy();
1569 ret->applyLin(val,0);
1574 MCAuto<ARRAY> aaaa=ARRAY::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1575 return ARRAY::Multiply(self,aaaa);
1579 return ARRAY::Multiply(self,a);
1583 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1584 return ARRAY::Multiply(self,aaaa);
1587 throw INTERP_KERNEL::Exception(msg);
1591 ARRAY *__rmul__(PyObject *obj)
1593 const char msg[]="Unexpected situation in __rmul__ !";
1596 std::vector<INT> aa;
1597 ARRAY ## Tuple *aaa;
1599 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1604 MCAuto<ARRAY> ret=self->deepCopy();
1605 ret->applyLin(val,0);
1610 MCAuto<ARRAY> aaaa=ARRAY::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1611 return ARRAY::Multiply(self,aaaa);
1615 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1616 return ARRAY::Multiply(self,aaaa);
1619 throw INTERP_KERNEL::Exception(msg);
1623 PyObject *___imul___(PyObject *trueSelf, PyObject *obj)
1625 const char msg[]="Unexpected situation in __imul__ !";
1628 std::vector<INT> aa;
1629 ARRAY ## Tuple *aaa;
1631 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1636 self->applyLin(val,0);
1637 Py_XINCREF(trueSelf);
1642 MCAuto<ARRAY> bb=ARRAY::New(); bb->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1643 self->multiplyEqual(bb);
1644 Py_XINCREF(trueSelf);
1649 self->multiplyEqual(a);
1650 Py_XINCREF(trueSelf);
1655 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1656 self->multiplyEqual(aaaa);
1657 Py_XINCREF(trueSelf);
1661 throw INTERP_KERNEL::Exception(msg);
1665 ARRAY *__div__(PyObject *obj)
1667 const char msg[]="Unexpected situation in __div__ !";
1670 std::vector<INT> aa;
1671 ARRAY ## Tuple *aaa;
1673 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1678 MCAuto<ARRAY> ret=self->deepCopy();
1679 ret->applyDivideBy(val);
1684 MCAuto<ARRAY> aaaa=ARRAY::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1685 return ARRAY::Divide(self,aaaa);
1689 return ARRAY::Divide(self,a);
1693 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1694 return ARRAY::Divide(self,aaaa);
1697 throw INTERP_KERNEL::Exception(msg);
1701 ARRAY *__rdiv__(PyObject *obj)
1703 const char msg[]="Unexpected situation in __rdiv__ !";
1706 std::vector<INT> aa;
1707 ARRAY ## Tuple *aaa;
1709 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1714 MCAuto<ARRAY> ret=self->deepCopy();
1720 MCAuto<ARRAY> aaaa=ARRAY::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1721 return ARRAY::Divide(aaaa,self);
1725 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1726 return ARRAY::Divide(aaaa,self);
1729 throw INTERP_KERNEL::Exception(msg);
1733 PyObject *___idiv___(PyObject *trueSelf, PyObject *obj)
1735 const char msg[]="Unexpected situation in __idiv__ !";
1738 std::vector<INT> aa;
1739 ARRAY ## Tuple *aaa;
1741 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1746 self->applyDivideBy(val);
1747 Py_XINCREF(trueSelf);
1752 MCAuto<ARRAY> bb=ARRAY::New(); bb->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1753 self->divideEqual(bb);
1754 Py_XINCREF(trueSelf);
1759 self->divideEqual(a);
1760 Py_XINCREF(trueSelf);
1765 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1766 self->divideEqual(aaaa);
1767 Py_XINCREF(trueSelf);
1771 throw INTERP_KERNEL::Exception(msg);
1775 ARRAY *__mod__(PyObject *obj)
1777 const char msg[]="Unexpected situation in __mod__ !";
1780 std::vector<INT> aa;
1781 ARRAY ## Tuple *aaa;
1783 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1788 MCAuto<ARRAY> ret=self->deepCopy();
1789 ret->applyModulus(val);
1794 MCAuto<ARRAY> aaaa=ARRAY::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1795 return ARRAY::Modulus(self,aaaa);
1799 return ARRAY::Modulus(self,a);
1803 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1804 return ARRAY::Modulus(self,aaaa);
1807 throw INTERP_KERNEL::Exception(msg);
1811 ARRAY *__rmod__(PyObject *obj)
1813 const char msg[]="Unexpected situation in __rmod__ !";
1816 std::vector<INT> aa;
1817 ARRAY ## Tuple *aaa;
1819 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1824 MCAuto<ARRAY> ret=self->deepCopy();
1825 ret->applyRModulus(val);
1830 MCAuto<ARRAY> aaaa=ARRAY::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1831 return ARRAY::Modulus(aaaa,self);
1835 return ARRAY::Modulus(a,self);
1839 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1840 return ARRAY::Modulus(aaaa,self);
1843 throw INTERP_KERNEL::Exception(msg);
1847 PyObject *___imod___(PyObject *trueSelf, PyObject *obj)
1849 const char msg[]="Unexpected situation in __imod__ !";
1852 std::vector<INT> aa;
1853 ARRAY ## Tuple *aaa;
1855 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1860 self->applyModulus(val);
1861 Py_XINCREF(trueSelf);
1866 self->modulusEqual(a);
1867 Py_XINCREF(trueSelf);
1872 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1873 self->modulusEqual(aaaa);
1874 Py_XINCREF(trueSelf);
1878 throw INTERP_KERNEL::Exception(msg);
1882 ARRAY *__pow__(PyObject *obj)
1884 const char msg[]="Unexpected situation in __pow__ !";
1887 std::vector<INT> aa;
1888 ARRAY ## Tuple *aaa;
1890 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1895 MCAuto<ARRAY> ret=self->deepCopy();
1901 MCAuto<ARRAY> aaaa=ARRAY::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1902 return ARRAY::Pow(self,aaaa);
1906 return ARRAY::Pow(self,a);
1910 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1911 return ARRAY::Pow(self,aaaa);
1914 throw INTERP_KERNEL::Exception(msg);
1918 ARRAY *__rpow__(PyObject *obj)
1920 const char msg[]="Unexpected situation in __rpow__ !";
1923 std::vector<INT> aa;
1924 ARRAY ## Tuple *aaa;
1926 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1931 MCAuto<ARRAY> ret=self->deepCopy();
1932 ret->applyRPow(val);
1937 MCAuto<ARRAY> aaaa=ARRAY::New(); aaaa->useArray(&aa[0],false,DeallocType::CPP_DEALLOC,1,aa.size());
1938 return ARRAY::Pow(aaaa,self);
1942 return ARRAY::Pow(a,self);
1946 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1947 return ARRAY::Pow(aaaa,self);
1950 throw INTERP_KERNEL::Exception(msg);
1954 PyObject *___ipow___(PyObject *trueSelf, PyObject *obj)
1956 const char msg[]="Unexpected situation in __ipow__ !";
1959 std::vector<INT> aa;
1960 ARRAY ## Tuple *aaa;
1962 convertIntStarLikePyObjToCpp(obj,sw,val,aa,a,aaa);
1967 self->applyPow(val);
1968 Py_XINCREF(trueSelf);
1974 Py_XINCREF(trueSelf);
1979 MCAuto<ARRAY> aaaa=aaa->buildDAInt(1,self->getNumberOfComponents());
1980 self->powEqual(aaaa);
1981 Py_XINCREF(trueSelf);
1985 throw INTERP_KERNEL::Exception(msg);
1989 std::string __repr__() const
1991 std::ostringstream oss;
1992 self->reprQuickOverview(oss);
1996 void pushBackValsSilent(PyObject *li)
2000 std::vector<INT> stdvecTyyppArr;
2001 const INT *tmp=convertIntStarLikePyObjToCppIntStar(li,sw,szArr,iTypppArr,stdvecTyyppArr);
2002 self->pushBackValsSilent(tmp,tmp+szArr);
2005 PyObject *partitionByDifferentValues() const
2007 std::vector<INT> ret1;
2008 std::vector<DataArrayIdType *> ret0=self->partitionByDifferentValues(ret1);
2009 std::size_t sz=ret0.size();
2010 PyObject *pyRet=PyTuple_New(2);
2011 PyObject *pyRet0=PyList_New((INT)sz);
2012 PyObject *pyRet1=PyList_New((INT)sz);
2013 for(std::size_t i=0;i<sz;i++)
2015 PyList_SetItem(pyRet0,i,SWIG_NewPointerObj(SWIG_as_voidptr(ret0[i]),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2016 PyList_SetItem(pyRet1,i,PyInt_FromLong(ret1[i]));
2018 PyTuple_SetItem(pyRet,0,pyRet0);
2019 PyTuple_SetItem(pyRet,1,pyRet1);
2023 DataArrayIdType *locateComponentId(const ARRAY *valToSearchIntoTuples, const DataArrayIdType *tupleIdHint) const
2025 return self->locateComponentId(valToSearchIntoTuples,tupleIdHint);
2028 PyObject *findIdsRangesInListOfIds(const ARRAY *listOfIds) const
2030 DataArrayIdType *ret0=0;
2032 self->findIdsRangesInListOfIds(listOfIds,ret0,ret1);
2033 PyObject *pyRet=PyTuple_New(2);
2034 PyTuple_SetItem(pyRet,0,SWIG_NewPointerObj(SWIG_as_voidptr(ret0),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2035 PyTuple_SetItem(pyRet,1,SWIG_NewPointerObj(SWIG_as_voidptr(ret1),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 ));
2039 PyObject *forThisAsPartitionBuildReduction(DataArrayIdType *commonEntities, DataArrayIdType *commonEntitiesIndex) const
2041 MCAuto<DataArrayIdType> ceCpp( MCAuto<DataArrayIdType>::TakeRef(commonEntities) );
2042 MCAuto<DataArrayIdType> ceiCpp( MCAuto<DataArrayIdType>::TakeRef(commonEntitiesIndex) );
2044 MCAuto<DataArrayIdType> ret2;
2045 MCAuto<ARRAY> ret0 = self->forThisAsPartitionBuildReduction(ceCpp,ceiCpp,ret1,ret2);
2046 PyObject *pyRet( PyTuple_New(3) );
2047 PyTuple_SetItem(pyRet,0,SWIG_NewPointerObj(SWIG_as_voidptr(ret0.retn()),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 ));
2048 PyTuple_SetItem(pyRet,1,SWIG_NewPointerObj(SWIG_as_voidptr(ret1.retn()),SWIGTITraits<INT>::TI, SWIG_POINTER_OWN | 0 ));
2049 PyTuple_SetItem(pyRet,2,SWIG_NewPointerObj(SWIG_as_voidptr(ret2.retn()),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2053 PyObject *isRange() const
2056 bool ret(self->isRange(a,b,c));
2057 PyObject *pyRet=PyTuple_New(2);
2058 PyObject *ret0Py=ret?Py_True:Py_False,*ret1Py(0);
2060 PyTuple_SetItem(pyRet,0,ret0Py);
2062 ret1Py=PySlice_New(PyInt_FromLong(a),PyInt_FromLong(b),PyInt_FromLong(c));
2068 PyTuple_SetItem(pyRet,1,ret1Py);
2072 static bool RemoveIdsFromIndexedArrays(PyObject *li, ARRAY *arr, DataArrayIdType *arrIndx, mcIdType offsetForRemoval=0) throw(INTERP_KERNEL::Exception)
2076 std::vector<INT> multiVal;
2077 std::pair<mcIdType, std::pair<mcIdType,mcIdType> > slic;
2078 MEDCoupling::ARRAY *daIntTyypp=0;
2080 throw INTERP_KERNEL::Exception("ARRAY::RemoveIdsFromIndexedArrays : null pointer as arrIndex !");
2081 convertIntStarOrSliceLikePyObjToCpp(li,arrIndx->getNumberOfTuples()-1,sw,singleVal,multiVal,slic,daIntTyypp);
2085 return ARRAY::RemoveIdsFromIndexedArrays(&singleVal,&singleVal+1,arr,arrIndx,offsetForRemoval);
2087 return ARRAY::RemoveIdsFromIndexedArrays(&multiVal[0],&multiVal[0]+multiVal.size(),arr,arrIndx,offsetForRemoval);
2089 return ARRAY::RemoveIdsFromIndexedArrays(daIntTyypp->begin(),daIntTyypp->end(),arr,arrIndx,offsetForRemoval);
2091 throw INTERP_KERNEL::Exception("MEDCouplingUMesh::RemoveIdsFromIndexedArrays : unrecognized type entered, expected list of int, tuple of int or ARRAY !");
2095 PyObject *findCommonTuples(mcIdType limitNodeId=-1) const
2097 MCAuto<DataArrayIdType> comm,commIndex;
2098 self->findCommonTuples(limitNodeId,comm,commIndex);
2099 PyObject *res = PyList_New(2);
2100 PyList_SetItem(res,0,SWIG_NewPointerObj(SWIG_as_voidptr(comm.retn()),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2101 PyList_SetItem(res,1,SWIG_NewPointerObj(SWIG_as_voidptr(commIndex.retn()),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2105 static PyObject *ExtractFromIndexedArrays(PyObject *li, const ARRAY *arrIn, const DataArrayIdType *arrIndxIn) throw(INTERP_KERNEL::Exception)
2108 DataArrayIdType *arrIndexOut=0;
2111 std::vector<mcIdType> multiVal;
2112 std::pair<mcIdType, std::pair<mcIdType,mcIdType> > slic;
2113 MEDCoupling::DataArrayIdType *daIntTyypp=0;
2115 throw INTERP_KERNEL::Exception("ARRAY::ExtractFromIndexedArrays : null pointer as arrIndxIn !");
2116 convertIntStarOrSliceLikePyObjToCpp(li,arrIndxIn->getNumberOfTuples()-1,sw,singleVal,multiVal,slic,daIntTyypp);
2121 ARRAY::ExtractFromIndexedArrays(&singleVal,&singleVal+1,arrIn,arrIndxIn,arrOut,arrIndexOut);
2126 ARRAY::ExtractFromIndexedArrays(&multiVal[0],&multiVal[0]+multiVal.size(),arrIn,arrIndxIn,arrOut,arrIndexOut);
2131 ARRAY::ExtractFromIndexedArrays(daIntTyypp->begin(),daIntTyypp->end(),arrIn,arrIndxIn,arrOut,arrIndexOut);
2135 throw INTERP_KERNEL::Exception("ARRAY::ExtractFromIndexedArrays : unrecognized type entered, expected list of int, tuple of int or ARRAY !");
2137 PyObject *ret=PyTuple_New(2);
2138 PyTuple_SetItem(ret,0,SWIG_NewPointerObj(SWIG_as_voidptr(arrOut),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2139 PyTuple_SetItem(ret,1,SWIG_NewPointerObj(SWIG_as_voidptr(arrIndexOut),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2143 static PyObject *ExtractFromIndexedArraysSlice(mcIdType strt, mcIdType stp, mcIdType step, const ARRAY *arrIn, const DataArrayIdType *arrIndxIn) throw(INTERP_KERNEL::Exception)
2146 DataArrayIdType *arrIndexOut=0;
2147 ARRAY::ExtractFromIndexedArraysSlice(strt,stp,step,arrIn,arrIndxIn,arrOut,arrIndexOut);
2148 PyObject *ret=PyTuple_New(2);
2149 PyTuple_SetItem(ret,0,SWIG_NewPointerObj(SWIG_as_voidptr(arrOut),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2150 PyTuple_SetItem(ret,1,SWIG_NewPointerObj(SWIG_as_voidptr(arrIndexOut),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2154 static PyObject *ExtractFromIndexedArraysSlice(PyObject *slic, const ARRAY *arrIn, const DataArrayIdType *arrIndxIn) throw(INTERP_KERNEL::Exception)
2156 if(!PySlice_Check(slic))
2157 throw INTERP_KERNEL::Exception("ExtractFromIndexedArraysSlice (wrap) : the first param is not a pyslice !");
2158 Py_ssize_t strt=2,stp=2,step=2;
2160 throw INTERP_KERNEL::Exception("ExtractFromIndexedArraysSlice (wrap) : last array is null !");
2161 arrIndxIn->checkAllocated();
2162 if(arrIndxIn->getNumberOfComponents()!=1)
2163 throw INTERP_KERNEL::Exception("ExtractFromIndexedArraysSlice (wrap) : number of components of last argument must be equal to one !");
2164 GetIndicesOfSlice(slic,arrIndxIn->getNumberOfTuples(),&strt,&stp,&step,"ExtractFromIndexedArraysSlice (wrap) : Invalid slice regarding nb of elements !");
2166 DataArrayIdType *arrIndexOut=0;
2167 ARRAY::ExtractFromIndexedArraysSlice(ToIdType(strt),ToIdType(stp),ToIdType(step),arrIn,arrIndxIn,arrOut,arrIndexOut);
2168 PyObject *ret=PyTuple_New(2);
2169 PyTuple_SetItem(ret,0,SWIG_NewPointerObj(SWIG_as_voidptr(arrOut),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2170 PyTuple_SetItem(ret,1,SWIG_NewPointerObj(SWIG_as_voidptr(arrIndexOut),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2174 static PyObject *SetPartOfIndexedArrays(PyObject *li,
2175 const ARRAY *arrIn, const DataArrayIdType *arrIndxIn,
2176 const ARRAY *srcArr, const DataArrayIdType *srcArrIndex) throw(INTERP_KERNEL::Exception)
2179 DataArrayIdType *arrIndexOut=0;
2182 std::vector<mcIdType> multiVal;
2183 std::pair<mcIdType, std::pair<mcIdType,mcIdType> > slic;
2184 MEDCoupling::DataArrayIdType *daIntTyypp=0;
2186 throw INTERP_KERNEL::Exception("ARRAY::SetPartOfIndexedArrays : null pointer as arrIndex !");
2187 convertIntStarOrSliceLikePyObjToCpp(li,arrIndxIn->getNumberOfTuples()-1,sw,singleVal,multiVal,slic,daIntTyypp);
2192 ARRAY::SetPartOfIndexedArrays(&singleVal,&singleVal+1,arrIn,arrIndxIn,srcArr,srcArrIndex,arrOut,arrIndexOut);
2197 ARRAY::SetPartOfIndexedArrays(&multiVal[0],&multiVal[0]+multiVal.size(),arrIn,arrIndxIn,srcArr,srcArrIndex,arrOut,arrIndexOut);
2202 ARRAY::SetPartOfIndexedArrays(daIntTyypp->begin(),daIntTyypp->end(),arrIn,arrIndxIn,srcArr,srcArrIndex,arrOut,arrIndexOut);
2206 throw INTERP_KERNEL::Exception("ARRAY::SetPartOfIndexedArrays : unrecognized type entered, expected list of int, tuple of int or ARRAY !");
2208 PyObject *ret=PyTuple_New(2);
2209 PyTuple_SetItem(ret,0,SWIG_NewPointerObj(SWIG_as_voidptr(arrOut),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2210 PyTuple_SetItem(ret,1,SWIG_NewPointerObj(SWIG_as_voidptr(arrIndexOut),SWIGTITraits<mcIdType>::TI, SWIG_POINTER_OWN | 0 ));
2214 static void SetPartOfIndexedArraysSameIdx(PyObject *li, ARRAY *arrIn, const DataArrayIdType *arrIndxIn,
2215 const ARRAY *srcArr, const DataArrayIdType *srcArrIndex) throw(INTERP_KERNEL::Exception)
2219 std::vector<mcIdType> multiVal;
2220 std::pair<mcIdType, std::pair<mcIdType,mcIdType> > slic;
2221 MEDCoupling::DataArrayIdType *daIntTyypp=0;
2223 throw INTERP_KERNEL::Exception("ARRAY::SetPartOfIndexedArraysSameIdx : null pointer as arrIndex !");
2224 convertIntStarOrSliceLikePyObjToCpp(li,arrIndxIn->getNumberOfTuples()-1,sw,singleVal,multiVal,slic,daIntTyypp);
2229 ARRAY::SetPartOfIndexedArraysSameIdx(&singleVal,&singleVal+1,arrIn,arrIndxIn,srcArr,srcArrIndex);
2234 ARRAY::SetPartOfIndexedArraysSameIdx(&multiVal[0],&multiVal[0]+multiVal.size(),arrIn,arrIndxIn,srcArr,srcArrIndex);
2239 ARRAY::SetPartOfIndexedArraysSameIdx(daIntTyypp->begin(),daIntTyypp->end(),arrIn,arrIndxIn,srcArr,srcArrIndex);
2243 throw INTERP_KERNEL::Exception("ARRAY::SetPartOfIndexedArraysSameIdx : unrecognized type entered, expected list of int, tuple of int or ARRAY !");
2250 class ARRAY ## Tuple;
2252 class ARRAY ## Iterator
2255 ARRAY ## Iterator(ARRAY *da);
2256 ~ARRAY ## Iterator();
2261 ARRAY ## Tuple *ret=self->nextt();
2263 return SWIG_NewPointerObj(SWIG_as_voidptr(ret),SWIGTYPE_p_MEDCoupling__ ## ARRAY ## Tuple,SWIG_POINTER_OWN | 0);
2266 PyErr_SetString(PyExc_StopIteration,"No more data.");
2273 class ARRAY ## Tuple
2276 std::size_t getNumberOfCompo() const;
2277 ARRAY *buildDAInt(INT nbOfTuples, INT nbOfCompo) const;
2280 std::string __str__() const
2282 return self->repr();
2287 return self->intValue();
2292 return self->buildDAInt(1,self->getNumberOfCompo());
2295 PyObject *___iadd___(PyObject *trueSelf, PyObject *obj)
2297 MCAuto<ARRAY> ret=self->buildDAInt(1,self->getNumberOfCompo());
2298 MEDCoupling_ ## ARRAY ## ____iadd___(ret,0,obj);
2299 Py_XINCREF(trueSelf);
2303 PyObject *___isub___(PyObject *trueSelf, PyObject *obj)
2305 MCAuto<ARRAY> ret=self->buildDAInt(1,self->getNumberOfCompo());
2306 MEDCoupling_ ## ARRAY ## ____isub___(ret,0,obj);
2307 Py_XINCREF(trueSelf);
2311 PyObject *___imul___(PyObject *trueSelf, PyObject *obj)
2313 MCAuto<ARRAY> ret=self->buildDAInt(1,self->getNumberOfCompo());
2314 MEDCoupling_ ## ARRAY ## ____imul___(ret,0,obj);
2315 Py_XINCREF(trueSelf);
2318 PyObject *___idiv___(PyObject *trueSelf, PyObject *obj)
2320 MCAuto<ARRAY> ret=self->buildDAInt(1,self->getNumberOfCompo());
2321 MEDCoupling_ ## ARRAY ## ____idiv___(ret,0,obj);
2322 Py_XINCREF(trueSelf);
2326 PyObject *___imod___(PyObject *trueSelf, PyObject *obj)
2328 MCAuto<ARRAY> ret=self->buildDAInt(1,self->getNumberOfCompo());
2329 MEDCoupling_ ## ARRAY ## ____imod___(ret,0,obj);
2330 Py_XINCREF(trueSelf);
2336 return PyInt_FromLong(self->getNumberOfCompo());
2339 PyObject *__getitem__(PyObject *obj)
2341 const char msg2[]="ARRAY ## Tuple::__getitem__ : Mismatch of slice values in 2nd parameter (components) !";
2344 std::vector<INT> multiVal;
2345 std::pair<mcIdType, std::pair<mcIdType,mcIdType> > slic;
2346 MEDCoupling::DataArrayIdType *daIntTyypp=0;
2347 const INT *pt=self->getConstPointer();
2348 INT nbc=(INT)self->getNumberOfCompo();
2349 convertIntStarOrSliceLikePyObjToCppWithNegIntInterp(obj,ToIdType(nbc),sw,singleVal,multiVal,slic,daIntTyypp);
2354 if(singleVal>=(INT)nbc)
2356 std::ostringstream oss;
2357 oss << "Requesting for id " << singleVal << " having only " << nbc << " components !";
2358 PyErr_SetString(PyExc_StopIteration,oss.str().c_str());
2362 return PyInt_FromLong(pt[singleVal]);
2366 return PyInt_FromLong(pt[nbc+singleVal]);
2369 std::ostringstream oss;
2370 oss << "Requesting for id " << singleVal << " having only " << nbc << " components !";
2371 throw INTERP_KERNEL::Exception(oss.str().c_str());
2377 PyObject *t=PyTuple_New(multiVal.size());
2378 for(std::size_t j=0;j<multiVal.size();j++)
2380 INT cid=multiVal[j];
2383 std::ostringstream oss;
2384 oss << "Requesting for id #" << cid << " having only " << nbc << " components !";
2385 throw INTERP_KERNEL::Exception(oss.str().c_str());
2387 PyTuple_SetItem(t,j,PyInt_FromLong(pt[cid]));
2393 mcIdType sz=DataArray::GetNumberOfItemGivenBES(slic.first,slic.second.first,slic.second.second,msg2);
2394 PyObject *t=PyTuple_New(sz);
2395 for(INT j=0;j<sz;j++)
2396 PyTuple_SetItem(t,j,PyInt_FromLong(pt[slic.first+j*slic.second.second]));
2400 throw INTERP_KERNEL::Exception("ARRAY ## Tuple::__getitem__ : unrecognized type entered !");
2404 ARRAY ## Tuple *__setitem__(PyObject *obj, PyObject *value)
2406 const char msg[]="DataArrayIntTuple::__setitem__ : unrecognized type entered, int, slice, list<int>, tuple<int> !";
2407 const char msg2[]="DataArrayIntTuple::__setitem__ : Mismatch of slice values in 2nd parameter (components) !";
2409 mcIdType singleValV;
2410 std::vector<mcIdType> multiValV;
2411 std::pair<mcIdType, std::pair<mcIdType,mcIdType> > slicV;
2412 MEDCoupling::ARRAY ## Tuple *daIntTyyppV=0;
2413 mcIdType nbc=ToIdType(self->getNumberOfCompo());
2414 convertObjToPossibleCpp22<INT>(value,nbc,sw1,singleValV,multiValV,slicV,daIntTyyppV);
2416 std::vector<INT> multiVal;
2417 std::pair<mcIdType, std::pair<mcIdType,mcIdType> > slic;
2418 MEDCoupling::ARRAY *daIntTyypp=0;
2419 INT *pt=self->getPointer();
2420 convertIntStarOrSliceLikePyObjToCppWithNegIntInterp(obj,nbc,sw2,singleVal,multiVal,slic,daIntTyypp);
2427 std::ostringstream oss;
2428 oss << "Requesting for setting id # " << singleVal << " having only " << nbc << " components !";
2429 throw INTERP_KERNEL::Exception(oss.str().c_str());
2435 pt[singleVal]=(INT)singleValV;
2440 if(multiValV.size()!=1)
2442 std::ostringstream oss;
2443 oss << "Requesting for setting id # " << singleVal << " with a list or tuple with size != 1 ! ";
2444 throw INTERP_KERNEL::Exception(oss.str().c_str());
2446 pt[singleVal]=(INT)multiValV[0];
2451 pt[singleVal]=daIntTyyppV->getConstPointer()[0];
2455 throw INTERP_KERNEL::Exception(msg);
2464 for(std::vector<INT>::const_iterator it=multiVal.begin();it!=multiVal.end();it++)
2468 std::ostringstream oss;
2469 oss << "Requesting for setting id # " << *it << " having only " << nbc << " components !";
2470 throw INTERP_KERNEL::Exception(oss.str().c_str());
2472 pt[*it]=(INT)singleValV;
2478 if(multiVal.size()!=multiValV.size())
2480 std::ostringstream oss;
2481 oss << "Mismatch length of during assignment : " << multiValV.size() << " != " << multiVal.size() << " !";
2482 throw INTERP_KERNEL::Exception(oss.str().c_str());
2484 for(INT i=0;i<(INT)multiVal.size();i++)
2486 INT pos=multiVal[i];
2489 std::ostringstream oss;
2490 oss << "Requesting for setting id # " << pos << " having only " << nbc << " components !";
2491 throw INTERP_KERNEL::Exception(oss.str().c_str());
2493 pt[multiVal[i]]=(INT)multiValV[i];
2499 const INT *ptV=daIntTyyppV->getConstPointer();
2500 if(nbc>(INT)daIntTyyppV->getNumberOfCompo())
2502 std::ostringstream oss;
2503 oss << "Mismatch length of during assignment : " << nbc << " != " << daIntTyyppV->getNumberOfCompo() << " !";
2504 throw INTERP_KERNEL::Exception(oss.str().c_str());
2506 std::copy(ptV,ptV+nbc,pt);
2510 throw INTERP_KERNEL::Exception(msg);
2515 std::size_t sz=DataArray::GetNumberOfItemGivenBES(slic.first,slic.second.first,slic.second.second,msg2);
2520 for(std::size_t j=0;j<sz;j++)
2521 pt[slic.first+j*slic.second.second]=(INT)singleValV;
2526 if(sz!=multiValV.size())
2528 std::ostringstream oss;
2529 oss << "Mismatch length of during assignment : " << multiValV.size() << " != " << sz << " !";
2530 throw INTERP_KERNEL::Exception(oss.str().c_str());
2532 for(std::size_t j=0;j<sz;j++)
2533 pt[slic.first+j*slic.second.second]=(INT)multiValV[j];
2538 const INT *ptV=daIntTyyppV->getConstPointer();
2539 if(sz>daIntTyyppV->getNumberOfCompo())
2541 std::ostringstream oss;
2542 oss << "Mismatch length of during assignment : " << nbc << " != " << daIntTyyppV->getNumberOfCompo() << " !";
2543 throw INTERP_KERNEL::Exception(oss.str().c_str());
2545 for(std::size_t j=0;j<sz;j++)
2546 pt[slic.first+j*slic.second.second]=ptV[j];
2550 throw INTERP_KERNEL::Exception(msg);
2554 throw INTERP_KERNEL::Exception(msg);
2563 %define TRANSFORMWITHINDARR( ARRAY, INT )
2564 void transformWithIndArr(PyObject *li)
2567 int res1(SWIG_ConvertPtr(li,&da,SWIGTITraits<INT>::TI, 0 | 0 ));
2568 if (!SWIG_IsOK(res1))
2570 int res2(SWIG_ConvertPtr(li,&da,SWIGTYPE_p_MEDCoupling__MapII, 0 | 0 ));
2573 MapII *m=reinterpret_cast<MapII *>(da);
2574 self->transformWithIndArr(*m);
2579 INTERP_KERNEL::AutoPtr<INT> tmp=convertPyToNewIntArr2<INT>(li,&size);
2580 self->transformWithIndArr(tmp,tmp+size);
2585 ARRAY *da2=reinterpret_cast< ARRAY * >(da);
2586 self->transformWithIndArr(da2->getConstPointer(),da2->getConstPointer()+da2->getNbOfElems());
2591 namespace MEDCoupling
2595 typedef long long Int64;
2597 typedef long int Int64;
2600 class DataArrayInt32Iterator;
2602 class DataArrayInt32 : public DataArray
2604 ARRAYDEF( DataArrayInt32, Int32 )
2606 %extend DataArrayInt32 {
2607 DataArrayInt64 *convertToInt64Arr() const
2609 MCAuto<DataArrayInt64> ret(self->convertToInt64Arr());
2613 PyObject *toNumPyArray() // not const. It is not a bug !
2615 return ToNumPyArray<DataArrayInt32,MEDCoupling::Int32>(self,NPY_INT32,"DataArrayInt32");
2618 #ifndef MEDCOUPLING_USE_64BIT_IDS
2619 MCAuto< MapII > invertArrayN2O2O2NOptimized()
2621 return self->invertArrayN2O2O2NOptimized();
2623 MCAuto< MapII > giveN2OOptimized()
2625 return self->giveN2OOptimized();
2627 TRANSFORMWITHINDARR( DataArrayInt32, Int32 )
2631 class DataArrayInt64Iterator;
2633 class DataArrayInt64 : public DataArray
2635 ARRAYDEF( DataArrayInt64, Int64 )
2637 %extend DataArrayInt64 {
2638 DataArrayInt32 *convertToInt32Arr() const
2640 MCAuto<DataArrayInt32> ret(self->convertToInt32Arr());
2644 PyObject *toNumPyArray() // not const. It is not a bug !
2646 return ToNumPyArray<DataArrayInt64,MEDCoupling::Int64>(self,NPY_INT64,"DataArrayInt64");
2649 #ifdef MEDCOUPLING_USE_64BIT_IDS
2650 MCAuto< MapII > invertArrayN2O2O2NOptimized()
2652 return self->invertArrayN2O2O2NOptimized();
2654 MCAuto< MapII > giveN2OOptimized()
2656 return self->giveN2OOptimized();
2658 TRANSFORMWITHINDARR( DataArrayInt64, Int64 )