1 # -*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2016 CEA/DEN, EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License, or (at your option) any later version.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 if sys.platform == "win32":
24 from MEDCouplingCompat import *
26 from MEDCoupling import *
28 if MEDCouplingHasNumPyBindings():
32 from platform import architecture
33 from sys import getrefcount
35 import os,gc,weakref,unittest
37 class MEDCouplingNumPyTest(unittest.TestCase):
39 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
42 a=array(0,dtype=int32)
45 self.assertEqual(getrefcount(a),2)
46 a=a.cumsum(dtype=int32)
47 a=array(a,dtype=int64) ; a=array(a,dtype=int32)
48 self.assertEqual(getrefcount(a),2)
52 e=DataArrayInt(sz) ; e.fillWithValue(2)
53 self.assertTrue(d.isEqual(e))
55 a[:]=4 ; e.fillWithValue(4)
56 self.assertTrue(d.isEqual(e))
59 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
62 a=array(0,dtype=int32)
64 self.assertEqual(getrefcount(a),2)
66 self.assertEqual(getrefcount(a),3)
67 self.assertEqual(getrefcount(b),2)
71 e=DataArrayInt(sz*2) ; e.fillWithValue(5)
72 self.assertTrue(d.isEqual(e))
75 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
78 a=array(0,dtype=int32)
85 self.assertTrue(d.isEqual(DataArrayInt([6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,6,6,6])))
87 a=zeros((10,2),dtype=int32)
93 self.assertTrue(d.isEqual(DataArrayInt([0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10])))
96 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
98 a=zeros(20,dtype=int32)
100 self.assertRaises(InterpKernelException,DataArrayInt.New,b) # b is not contiguous in memory
103 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
105 a=arange(20,dtype=int32)
106 self.assertEqual(weakref.getweakrefcount(a),0)
108 self.assertEqual(weakref.getweakrefcount(a),1)
109 self.assertTrue(not a.flags["OWNDATA"])
110 self.assertTrue(d.isIota(20))
111 a[:]=2 # modifying a and d because a and d share the same chunk of data
112 self.assertTrue(d.isUniform(2))
113 del d # d is destroyed, a retrieves its ownership of its initial chunk of data
114 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
117 self.assertTrue(a.flags["OWNDATA"])
118 a[:]=4 # a can be used has usual
119 self.assertTrue(DataArrayInt(a).isUniform(4))
122 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
124 a=arange(20,dtype=int32)
125 d=DataArrayInt(a) # d owns data of a
126 e=DataArrayInt(a) # a not owned -> e only an access to chunk of a
127 self.assertTrue(d.isIota(d.getNumberOfTuples()))
128 self.assertTrue(e.isIota(e.getNumberOfTuples()))
130 self.assertTrue(d.isUniform(6))
131 self.assertTrue(e.isUniform(6))
132 del a # a destroyed -> d no change because owned and e array is has no more data set
133 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
136 self.assertTrue(d.isUniform(6))
137 self.assertTrue(not e.isAllocated())
140 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
142 a=array(0,dtype=int32) ; a.resize(10,2)
145 d=DataArrayInt(b) # d owns data of a
146 e=DataArrayInt(b) # a not owned -> e only an access to chunk of a
147 f=DataArrayInt(b) # a not owned -> e only an access to chunk of a
148 del d # d removed -> a ownes again data
149 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
152 self.assertTrue(e.isUniform(0))
154 self.assertTrue(e.isUniform(6))
155 self.assertTrue(f.isUniform(6))
156 self.assertEqual(b.tolist(),[6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6])
157 self.assertEqual(a.tolist(),[[6,6],[6,6],[6,6],[6,6],[6,6],[6,6],[6,6],[6,6],[6,6],[6,6]])
159 del b # no impact on e and f because a is the base of a.
160 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
162 self.assertTrue(f.isIota(f.getNumberOfTuples()))
163 self.assertTrue(e.isIota(e.getNumberOfTuples()))
164 del a # a destroyed, but as c has its base set to a, a exists -> e and f not allocated
165 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
167 self.assertTrue(f.isIota(f.getNumberOfTuples()))
168 self.assertTrue(e.isIota(e.getNumberOfTuples()))
169 del c # c killed -> a killed -> e and d are put into not allocated state
170 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
172 self.assertTrue(not e.isAllocated())
173 self.assertTrue(not f.isAllocated())
176 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
178 a=arange(20,dtype=int32)
179 self.assertTrue(a.flags["OWNDATA"])
180 d=DataArrayInt(a) # d owns data of a
181 self.assertTrue(not a.flags["OWNDATA"])
182 d.pushBackSilent(20)# d pushBack so release of chunk of data -> a becomes owner of its data again
183 self.assertTrue(a.flags["OWNDATA"])
184 self.assertTrue(d.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20])))
185 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])
188 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
191 a=array(0,dtype=float64)
194 self.assertEqual(getrefcount(a),2)
195 a=a.cumsum(dtype=float64)
196 self.assertEqual(getrefcount(a),2)
200 e=DataArrayDouble(sz) ; e.fillWithValue(2)
201 self.assertTrue(d.isEqual(e,1e-14))
203 a[:]=4 ; e.fillWithValue(4)
204 self.assertTrue(d.isEqual(e,1e-14))
207 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
210 a=array(0,dtype=float64)
212 self.assertEqual(getrefcount(a),2)
214 self.assertEqual(getrefcount(a),3)
215 self.assertEqual(getrefcount(b),2)
219 e=DataArrayDouble(sz*2) ; e.fillWithValue(5)
220 self.assertTrue(d.isEqual(e,1e-14))
223 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
226 a=array(0,dtype=float64)
233 self.assertTrue(d.isEqual(DataArrayDouble([6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,6,6,6]),1e-14))
235 a=zeros((10,2),dtype=float64)
241 self.assertTrue(d.isEqual(DataArrayDouble([0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]),1e-14))
244 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
246 a=zeros(20,dtype=float64)
248 self.assertRaises(InterpKernelException,DataArrayDouble.New,b) # b is not contiguous in memory
251 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
253 a=arange(20,dtype=float64)
254 self.assertEqual(weakref.getweakrefcount(a),0)
256 self.assertEqual(weakref.getweakrefcount(a),1)
257 self.assertTrue(not a.flags["OWNDATA"])
258 self.assertTrue(d.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-14))
259 self.assertEqual(len(d),20)
260 a[:]=2 # modifying a and d because a and d share the same chunk of data
261 self.assertTrue(d.isUniform(2,1e-14))
262 del d # d is destroyed, a retrieves its ownership of its initial chunk of data
263 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
266 self.assertTrue(a.flags["OWNDATA"])
267 a[:]=4 # a can be used has usual
268 self.assertTrue(DataArrayDouble(a).isUniform(4,1e-14))
271 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
273 a=arange(20,dtype=float64)
274 d=DataArrayDouble(a) # d owns data of a
275 e=DataArrayDouble(a) # a not owned -> e only an access to chunk of a
276 self.assertTrue(d.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-14))
277 self.assertTrue(e.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-14))
279 self.assertTrue(d.isUniform(6,1e-14))
280 self.assertTrue(e.isUniform(6,1e-14))
281 del a # a destroyed -> d no change because owned and e array is has no more data set
282 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
285 self.assertTrue(d.isUniform(6,1e-14))
286 self.assertTrue(not e.isAllocated())
289 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
291 a=array(0,dtype=float64) ; a.resize(10,2)
294 d=DataArrayDouble(b) # d owns data of a
295 e=DataArrayDouble(b) # a not owned -> e only an access to chunk of a
296 f=DataArrayDouble(b) # a not owned -> e only an access to chunk of a
297 del d # d removed -> a ownes again data
298 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
301 self.assertTrue(e.isUniform(0,1e-14))
303 self.assertTrue(e.isUniform(6,1e-14))
304 self.assertTrue(f.isUniform(6,1e-14))
305 self.assertEqual(b.tolist(),[6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6])
306 self.assertEqual(a.tolist(),[[6,6],[6,6],[6,6],[6,6],[6,6],[6,6],[6,6],[6,6],[6,6],[6,6]])
308 del b # no impact on e and f because a is the base of a.
309 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
311 self.assertTrue(f.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-14))
312 self.assertTrue(e.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-14))
313 del a # a destroyed, but as c has its base set to a, a exists -> e and f not allocated
314 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
316 self.assertTrue(f.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-14))
317 self.assertTrue(e.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-14))
318 del c # c killed -> a killed -> e and d are put into not allocated state
319 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
321 self.assertTrue(not e.isAllocated())
322 self.assertTrue(not f.isAllocated())
325 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
327 a=arange(20,dtype=float64)
328 self.assertTrue(a.flags["OWNDATA"])
329 d=DataArrayDouble(a) # d owns data of a
330 self.assertTrue(not a.flags["OWNDATA"])
331 d.pushBackSilent(20)# d pushBack so release of chunk of data -> a becomes owner of its data again
332 self.assertTrue(a.flags["OWNDATA"])
333 self.assertTrue(d.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]),1e-14))
334 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])
337 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
339 d=DataArrayInt.Range(0,20,1)
341 self.assertTrue(not a.flags["OWNDATA"])
343 self.assertTrue(d.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,100,100])))
344 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,100,100])
346 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
349 self.assertTrue(d.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,100,100])))
353 self.assertTrue(not a.flags["OWNDATA"])
355 self.assertTrue(d.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,200,200,200,200],10,2)))
356 self.assertEqual(a.tolist(),[[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[200,200],[200,200]])
358 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
360 self.assertTrue(d.isEqual(DataArrayInt([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,200,200,200,200],10,2)))
363 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
365 d=DataArrayInt.Range(0,20,1)
366 d=d.convertToDblArr()
368 self.assertTrue(not a.flags["OWNDATA"])
370 self.assertTrue(d.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,100,100]),1e-14))
371 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,100,100])
373 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
376 self.assertTrue(d.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,100,100]),1e-14))
380 self.assertTrue(not a.flags["OWNDATA"])
382 self.assertTrue(d.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,200,200,200,200],10,2),1e-14))
383 self.assertEqual(a.tolist(),[[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[200,200],[200,200]])
385 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
387 self.assertTrue(d.isEqual(DataArrayDouble([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,200,200,200,200],10,2),1e-14))
390 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
393 a=array(0,dtype=int32)
396 self.assertEqual(getrefcount(a),2)
398 self.assertEqual(10,d.getNumberOfTuples())
399 self.assertEqual(2,d.getNumberOfComponents())
400 self.assertEqual(sz,d.getNbOfElems())
401 self.assertTrue(d.isEqual(DataArrayInt([(4,4),(4,4),(4,4),(4,4),(4,4),(4,4),(4,4),(4,4),(4,4),(4,4)])))
403 self.assertTrue(d.isEqual(DataArrayInt([(7,7),(7,7),(7,7),(7,7),(7,7),(7,7),(7,7),(7,7),(7,7),(7,7)])))
406 self.assertRaises(InterpKernelException,DataArrayInt.New,b) # b has not dimension in [0,1] !
409 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
412 a=array(0,dtype=float64)
415 self.assertEqual(getrefcount(a),2)
417 self.assertEqual(10,d.getNumberOfTuples())
418 self.assertEqual(2,d.getNumberOfComponents())
419 self.assertEqual(sz,d.getNbOfElems())
420 self.assertTrue(d.isEqual(DataArrayDouble([(4.,4.),(4.,4.),(4.,4.),(4.,4.),(4.,4.),(4.,4.),(4.,4.),(4.,4.),(4.,4.),(4.,4.)]),1e-14))
422 self.assertTrue(d.isEqual(DataArrayDouble([(7.,7.),(7.,7.),(7.,7.),(7.,7.),(7.,7.),(7.,7.),(7.,7.),(7.,7.),(7.,7.),(7.,7.)]),1e-14))
425 self.assertRaises(InterpKernelException,DataArrayDouble.New,b) # b has not dimension in [0,1] !
428 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
430 #tests that only DataArray*(npArray) constructor is available
431 a=array(0,dtype=int32)
434 self.assertRaises(InterpKernelException,DataArrayInt.New,a,20)
435 self.assertRaises(InterpKernelException,DataArrayInt.New,a,20,1)
436 a=array(0,dtype=float64)
439 self.assertRaises(InterpKernelException,DataArrayDouble.New,a,20)
440 self.assertRaises(InterpKernelException,DataArrayDouble.New,a,20,1)
443 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
445 d=DataArrayDouble(10)
448 self.assertTrue(not a.flags["OWNDATA"])
451 self.assertTrue(a.flags["OWNDATA"])
452 self.assertEqual(a.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
457 self.assertTrue(not a.flags["OWNDATA"])
460 self.assertTrue(a.flags["OWNDATA"])
461 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9])
464 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
466 d=DataArrayDouble(10)
471 self.assertTrue(not a.flags["OWNDATA"])
472 self.assertTrue(not b.flags["OWNDATA"])
473 self.assertTrue(not c.flags["OWNDATA"])
474 self.assertEqual(a.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
475 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
476 self.assertEqual(c.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
479 self.assertTrue(a.flags["OWNDATA"])
480 self.assertTrue(not b.flags["OWNDATA"])
481 self.assertTrue(not c.flags["OWNDATA"])
482 self.assertEqual(a.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
483 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
484 self.assertEqual(c.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
491 self.assertTrue(not a.flags["OWNDATA"])
492 self.assertTrue(not b.flags["OWNDATA"])
493 self.assertTrue(not c.flags["OWNDATA"])
494 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9])
495 self.assertEqual(b.tolist(),[0,1,2,3,4,5,6,7,8,9])
496 self.assertEqual(c.tolist(),[0,1,2,3,4,5,6,7,8,9])
499 self.assertTrue(a.flags["OWNDATA"])
500 self.assertTrue(not b.flags["OWNDATA"])
501 self.assertTrue(not c.flags["OWNDATA"])
502 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9])
503 self.assertEqual(b.tolist(),[0,1,2,3,4,5,6,7,8,9])
504 self.assertEqual(c.tolist(),[0,1,2,3,4,5,6,7,8,9])
507 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
509 d=DataArrayDouble(10)
512 self.assertEqual(a.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
513 self.assertTrue(not a.flags["OWNDATA"])
514 self.assertTrue(a.base is None)
518 self.assertEqual(a.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
519 self.assertTrue(not a.flags["OWNDATA"])
520 self.assertTrue(a.base is None)
522 self.assertEqual(a.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
523 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
524 self.assertTrue(not a.flags["OWNDATA"])
525 self.assertTrue(not b.flags["OWNDATA"])
526 self.assertTrue(b.base is a)
529 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
530 self.assertTrue(not b.flags["OWNDATA"])
533 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
534 self.assertTrue(not b.flags["OWNDATA"])
539 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9])
540 self.assertTrue(not a.flags["OWNDATA"])
541 self.assertTrue(a.base is None)
545 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9])
546 self.assertTrue(not a.flags["OWNDATA"])
547 self.assertTrue(a.base is None)
549 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9])
550 self.assertEqual(b.tolist(),[0,1,2,3,4,5,6,7,8,9])
551 self.assertTrue(not a.flags["OWNDATA"])
552 self.assertTrue(not b.flags["OWNDATA"])
553 self.assertTrue(b.base is a)
556 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
557 self.assertTrue(not b.flags["OWNDATA"])
560 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
561 self.assertTrue(not b.flags["OWNDATA"])
564 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
566 a=arange(10,dtype=int32)
570 self.assertTrue(b.isIota(10))
571 self.assertTrue(c.isIota(10))
572 self.assertTrue(d.isIota(10))
573 c.pushBackSilent(10) # c and a,b are dissociated
574 self.assertTrue(b.isIota(10))
575 self.assertTrue(c.isIota(11))
576 self.assertTrue(d.isIota(10))
579 self.assertTrue(b.isIota(10))
580 self.assertTrue(c.isIota(11))
581 self.assertTrue(not d.isAllocated())
584 self.assertTrue(c.isIota(11))
586 a=arange(10,dtype=int32)
589 self.assertTrue(b.isIota(10))
590 self.assertTrue(c.isIota(10))
591 b.pushBackSilent(10) # c and a,b are dissociated
592 self.assertTrue(b.isIota(11))
593 self.assertTrue(c.isIota(10))
596 self.assertTrue(b.isIota(11))
597 self.assertTrue(not c.isAllocated())
600 self.assertTrue(not c.isAllocated())
602 a=float64(arange(5,dtype=int32))
606 self.assertTrue(b.isEqual(DataArrayDouble([0.,1.,2.,3.,4.]),1e-12))
607 self.assertTrue(c.isEqual(DataArrayDouble([0.,1.,2.,3.,4.]),1e-12))
608 self.assertTrue(d.isEqual(DataArrayDouble([0.,1.,2.,3.,4.]),1e-12))
609 c.pushBackSilent(10.) # c and a,b are dissociated
610 self.assertTrue(b.isEqual(DataArrayDouble([0.,1.,2.,3.,4.]),1e-12))
611 self.assertTrue(c.isEqual(DataArrayDouble([0.,1.,2.,3.,4.,10.]),1e-12))
612 self.assertTrue(d.isEqual(DataArrayDouble([0.,1.,2.,3.,4.]),1e-12))
615 self.assertTrue(b.isEqual(DataArrayDouble([0.,1.,2.,3.,4.]),1e-12))
616 self.assertTrue(c.isEqual(DataArrayDouble([0.,1.,2.,3.,4.,10.]),1e-12))
617 self.assertTrue(not d.isAllocated())
620 self.assertTrue(c.isEqual(DataArrayDouble([0.,1.,2.,3.,4.,10.]),1e-12))
622 a=float64(arange(5,dtype=int32))
625 self.assertTrue(b.isEqual(DataArrayDouble([0.,1.,2.,3.,4.]),1e-12))
626 self.assertTrue(c.isEqual(DataArrayDouble([0.,1.,2.,3.,4.]),1e-12))
627 b.pushBackSilent(10.) # c and a,b are dissociated
628 self.assertTrue(b.isEqual(DataArrayDouble([0.,1.,2.,3.,4.,10.]),1e-12))
629 self.assertTrue(c.isEqual(DataArrayDouble([0.,1.,2.,3.,4.]),1e-12))
632 self.assertTrue(b.isEqual(DataArrayDouble([0.,1.,2.,3.,4.,10.]),1e-12))
633 self.assertTrue(not c.isAllocated())
636 self.assertTrue(not c.isAllocated())
639 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
641 d=DataArrayInt(15) ; d.iota()
644 self.assertEqual(a.ndim,2)
645 self.assertEqual(a.size,15)
646 self.assertEqual(a.shape,(5,3))
647 self.assertEqual(a.strides,(12,4))
648 self.assertEqual(a.nbytes,60)
649 self.assertEqual(a.itemsize,4)
650 self.assertEqual(a.tolist(),[[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14]])
652 d2=d.convertToDblArr()
654 self.assertEqual(a2.ndim,2)
655 self.assertEqual(a2.size,15)
656 self.assertEqual(a2.shape,(5,3))
657 self.assertEqual(a2.strides,(24,8))
658 self.assertEqual(a2.nbytes,120)
659 self.assertEqual(a2.itemsize,8)
660 self.assertEqual(a2.tolist(),[[0.,1.,2.],[3.,4.,5.],[6.,7.,8.],[9.,10.,11.],[12.,13.,14.]])
663 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
665 m0=DenseMatrix(DataArrayDouble([2,3,4,5,1,6]),2,3)
666 m0np=m0.toNumPyMatrix()
667 self.assertEqual(m0np.shape,(2,3))
668 self.assertEqual(m0np.tolist(),[[2.0,3.0,4.0],[5.0,1.0,6.0]])
671 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
673 """Test on DataArrayBytes"""
676 for i in range(len(d)):
680 for i in range(len(d)):
681 self.assertEqual(int(arr[i]),-128+i)
684 self.assertEqual(int(arr[0]),7)
686 self.assertEqual(int(d.getIJ(0,0)),8)
693 for i in range(len(d)):
697 for i in range(len(d)):
698 self.assertEqual(int(arr[i]),-128+i)
706 for i in range(len(d)):
709 arr1=d.toNumPyArray()
710 arr2=d.toNumPyArray()
711 arr3=d.toNumPyArray()
713 self.assertEqual(int(arr1[0]),10) ; self.assertEqual(int(arr2[0]),10) ; self.assertEqual(int(arr3[0]),10)
714 arr2[0]=15 ; self.assertEqual(int(d.getIJ(0,0)),15) ; self.assertEqual(int(arr1[0]),15) ; self.assertEqual(int(arr3[0]),15)
716 for i in range(len(d)):
717 self.assertEqual(int(arr1[i]),-128+i)
718 self.assertEqual(int(arr2[i]),-128+i)
719 self.assertEqual(int(arr3[i]),-128+i)
723 for i in range(len(d)):
724 self.assertEqual(int(arr1[i]),-128+i)
725 self.assertEqual(int(arr3[i]),-128+i)
729 for i in range(len(d)):
730 self.assertEqual(int(arr3[i]),-128+i)
735 arr=array(0,dtype=int8)
742 self.assertEqual(int(d.getIJ(i,0)),-128+i)
749 arr=array(0,dtype=int8)
756 self.assertEqual(int(d.getIJ(i,0)),-128+i)
764 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
766 """Same as test9 with float32"""
768 a=array(0,dtype=float32)
771 self.assertEqual(getrefcount(a),2)
772 a=a.cumsum(dtype=float32)
773 self.assertEqual(getrefcount(a),2)
777 e=DataArrayFloat(sz) ; e.fillWithValue(2)
778 self.assertTrue(d.isEqual(e,1e-7))
780 a[:]=4 ; e.fillWithValue(4)
781 self.assertTrue(d.isEqual(e,1e-7))
784 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
786 """Same as test10 with float32"""
788 a=array(0,dtype=float32)
790 self.assertEqual(getrefcount(a),2)
792 self.assertEqual(getrefcount(a),3)
793 self.assertEqual(getrefcount(b),2)
797 e=DataArrayFloat(sz*2) ; e.fillWithValue(5)
798 self.assertTrue(d.isEqual(e,1e-7))
801 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
803 """Same as test11 with float32"""
805 a=array(0,dtype=float32)
812 self.assertTrue(d.isEqual(DataArrayFloat([6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,6,6,6]),1e-7))
814 a=zeros((10,2),dtype=float32)
820 self.assertTrue(d.isEqual(DataArrayFloat([0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]),1e-7))
823 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
825 """Same as test12 with float32"""
826 a=zeros(20,dtype=float32)
828 self.assertRaises(InterpKernelException,DataArrayFloat.New,b) # b is not contiguous in memory
831 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
833 """Same as test13 with float32"""
834 a=arange(20,dtype=float32)
835 self.assertEqual(weakref.getweakrefcount(a),0)
837 self.assertEqual(weakref.getweakrefcount(a),1)
838 self.assertTrue(not a.flags["OWNDATA"])
839 self.assertTrue(d.isEqual(DataArrayFloat([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-7))
840 self.assertEqual(len(d),20)
841 a[:]=2 # modifying a and d because a and d share the same chunk of data
842 self.assertTrue(d.isUniform(2,1e-7))
843 del d # d is destroyed, a retrieves its ownership of its initial chunk of data
844 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
847 self.assertTrue(a.flags["OWNDATA"])
848 a[:]=4 # a can be used has usual
849 self.assertTrue(DataArrayFloat(a).isUniform(4,1e-7))
852 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
854 """Same as test14 with float32"""
855 a=arange(20,dtype=float32)
856 d=DataArrayFloat(a) # d owns data of a
857 e=DataArrayFloat(a) # a not owned -> e only an access to chunk of a
858 self.assertTrue(d.isEqual(DataArrayFloat([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-7))
859 self.assertTrue(e.isEqual(DataArrayFloat([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-7))
861 self.assertTrue(d.isUniform(6,1e-7))
862 self.assertTrue(e.isUniform(6,1e-7))
863 del a # a destroyed -> d no change because owned and e array is has no more data set
864 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
867 self.assertTrue(d.isUniform(6,1e-7))
868 self.assertTrue(not e.isAllocated())
871 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
873 """Same as test15 with float32"""
874 a=array(0,dtype=float32) ; a.resize(10,2)
877 d=DataArrayFloat(b) # d owns data of a
878 e=DataArrayFloat(b) # a not owned -> e only an access to chunk of a
879 f=DataArrayFloat(b) # a not owned -> e only an access to chunk of a
880 del d # d removed -> a ownes again data
881 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
884 self.assertTrue(e.isUniform(0,1e-7))
886 self.assertTrue(e.isUniform(6,1e-7))
887 self.assertTrue(f.isUniform(6,1e-7))
888 self.assertEqual(b.tolist(),[6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6])
889 self.assertEqual(a.tolist(),[[6,6],[6,6],[6,6],[6,6],[6,6],[6,6],[6,6],[6,6],[6,6],[6,6]])
891 del b # no impact on e and f because a is the base of a.
892 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
894 self.assertTrue(f.isEqual(DataArrayFloat([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-7))
895 self.assertTrue(e.isEqual(DataArrayFloat([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-7))
896 del a # a destroyed, but as c has its base set to a, a exists -> e and f not allocated
897 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
899 self.assertTrue(f.isEqual(DataArrayFloat([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-7))
900 self.assertTrue(e.isEqual(DataArrayFloat([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),1e-7))
901 del c # c killed -> a killed -> e and d are put into not allocated state
902 ##@@ Ensure a pass of the garbage collector so that the de-allocator of d is called
904 self.assertTrue(not e.isAllocated())
905 self.assertTrue(not f.isAllocated())
908 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
910 """Same as test16 with float32"""
911 a=arange(20,dtype=float32)
912 self.assertTrue(a.flags["OWNDATA"])
913 d=DataArrayFloat(a) # d owns data of a
914 self.assertTrue(not a.flags["OWNDATA"])
915 d.pushBackSilent(20)# d pushBack so release of chunk of data -> a becomes owner of its data again
916 self.assertTrue(a.flags["OWNDATA"])
917 self.assertTrue(d.isEqual(DataArrayFloat([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]),1e-7))
918 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])
921 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
923 """Same as test20 with float32"""
925 a=array(0,dtype=float32)
928 self.assertEqual(getrefcount(a),2)
930 self.assertEqual(10,d.getNumberOfTuples())
931 self.assertEqual(2,d.getNumberOfComponents())
932 self.assertEqual(sz,d.getNbOfElems())
933 self.assertTrue(d.isEqual(DataArrayFloat([(4.,4.),(4.,4.),(4.,4.),(4.,4.),(4.,4.),(4.,4.),(4.,4.),(4.,4.),(4.,4.),(4.,4.)]),1e-7))
935 self.assertTrue(d.isEqual(DataArrayFloat([(7.,7.),(7.,7.),(7.,7.),(7.,7.),(7.,7.),(7.,7.),(7.,7.),(7.,7.),(7.,7.),(7.,7.)]),1e-7))
938 self.assertRaises(InterpKernelException,DataArrayFloat.New,b) # b has not dimension in [0,1] !
941 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
943 """Same as test22 with float32"""
947 self.assertTrue(not a.flags["OWNDATA"])
950 self.assertTrue(a.flags["OWNDATA"])
951 self.assertEqual(a.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
956 self.assertTrue(not a.flags["OWNDATA"])
959 self.assertTrue(a.flags["OWNDATA"])
960 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9])
963 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
965 """Same as test23 with float32"""
971 self.assertTrue(not a.flags["OWNDATA"])
972 self.assertTrue(not b.flags["OWNDATA"])
973 self.assertTrue(not c.flags["OWNDATA"])
974 self.assertEqual(a.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
975 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
976 self.assertEqual(c.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
979 self.assertTrue(a.flags["OWNDATA"])
980 self.assertTrue(not b.flags["OWNDATA"])
981 self.assertTrue(not c.flags["OWNDATA"])
982 self.assertEqual(a.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
983 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
984 self.assertEqual(c.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
991 self.assertTrue(not a.flags["OWNDATA"])
992 self.assertTrue(not b.flags["OWNDATA"])
993 self.assertTrue(not c.flags["OWNDATA"])
994 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9])
995 self.assertEqual(b.tolist(),[0,1,2,3,4,5,6,7,8,9])
996 self.assertEqual(c.tolist(),[0,1,2,3,4,5,6,7,8,9])
999 self.assertTrue(a.flags["OWNDATA"])
1000 self.assertTrue(not b.flags["OWNDATA"])
1001 self.assertTrue(not c.flags["OWNDATA"])
1002 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9])
1003 self.assertEqual(b.tolist(),[0,1,2,3,4,5,6,7,8,9])
1004 self.assertEqual(c.tolist(),[0,1,2,3,4,5,6,7,8,9])
1007 @unittest.skipUnless(MEDCouplingHasNumPyBindings(),"requires numpy")
1009 """Same as test24 with float32"""
1010 d=DataArrayFloat(10)
1013 self.assertEqual(a.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
1014 self.assertTrue(not a.flags["OWNDATA"])
1015 self.assertTrue(a.base is None)
1019 self.assertEqual(a.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
1020 self.assertTrue(not a.flags["OWNDATA"])
1021 self.assertTrue(a.base is None)
1023 self.assertEqual(a.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
1024 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
1025 self.assertTrue(not a.flags["OWNDATA"])
1026 self.assertTrue(not b.flags["OWNDATA"])
1027 self.assertTrue(b.base is a)
1030 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
1031 self.assertTrue(not b.flags["OWNDATA"])
1034 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
1035 self.assertTrue(not b.flags["OWNDATA"])
1040 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9])
1041 self.assertTrue(not a.flags["OWNDATA"])
1042 self.assertTrue(a.base is None)
1046 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9])
1047 self.assertTrue(not a.flags["OWNDATA"])
1048 self.assertTrue(a.base is None)
1050 self.assertEqual(a.tolist(),[0,1,2,3,4,5,6,7,8,9])
1051 self.assertEqual(b.tolist(),[0,1,2,3,4,5,6,7,8,9])
1052 self.assertTrue(not a.flags["OWNDATA"])
1053 self.assertTrue(not b.flags["OWNDATA"])
1054 self.assertTrue(b.base is a)
1057 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
1058 self.assertTrue(not b.flags["OWNDATA"])
1061 self.assertEqual(b.tolist(),[0.,1.,2.,3.,4.,5.,6.,7.,8.,9.])
1062 self.assertTrue(not b.flags["OWNDATA"])
1069 #gc.set_debug(gc.DEBUG_LEAK)