xref: /petsc/src/binding/petsc4py/test/test_is.py (revision 552edb6364df478b294b3111f33a8f37ca096b20)
15808f684SSatish Balayfrom petsc4py import PETSc
25808f684SSatish Balayimport unittest
35808f684SSatish Balayimport random
45808f684SSatish Balay
55808f684SSatish Balay# --------------------------------------------------------------------
65808f684SSatish Balay
75808f684SSatish Balay
8*6f336411SStefano Zampiniclass BaseTestIS:
95808f684SSatish Balay    TYPE = None
105808f684SSatish Balay
115808f684SSatish Balay    def tearDown(self):
125808f684SSatish Balay        self.iset = None
1362e5d2d2SJDBetteridge        PETSc.garbage_cleanup()
145808f684SSatish Balay
155808f684SSatish Balay    def testGetType(self):
165808f684SSatish Balay        istype = self.iset.getType()
175808f684SSatish Balay        self.assertEqual(istype, self.TYPE)
185808f684SSatish Balay
195808f684SSatish Balay    def testGetSize(self):
205808f684SSatish Balay        lsize = self.iset.getLocalSize()
215808f684SSatish Balay        gsize = self.iset.getSize()
225808f684SSatish Balay        self.assertTrue(lsize <= gsize)
235808f684SSatish Balay
245808f684SSatish Balay    def testDuplicate(self):
255808f684SSatish Balay        iset = self.iset.duplicate()
265808f684SSatish Balay        self.assertTrue(self.iset.equal(iset))
275808f684SSatish Balay        del iset
285808f684SSatish Balay
295808f684SSatish Balay    def testCopy(self):
305808f684SSatish Balay        iset = self.iset.copy()
315808f684SSatish Balay        self.assertTrue(self.iset.equal(iset))
325808f684SSatish Balay        del iset
335808f684SSatish Balay
345808f684SSatish Balay    def testEqual(self):
355808f684SSatish Balay        self.assertTrue(self.iset.equal(self.iset))
365808f684SSatish Balay        iset = self.iset.duplicate()
375808f684SSatish Balay        self.assertTrue(self.iset.equal(iset))
385808f684SSatish Balay        del iset
395808f684SSatish Balay
405808f684SSatish Balay    def testSort(self):
415808f684SSatish Balay        self.iset.sort()
425808f684SSatish Balay        self.assertTrue(self.iset.isSorted())
435808f684SSatish Balay
445808f684SSatish Balay    def testDifference(self):
455808f684SSatish Balay        iset = self.iset.difference(self.iset)
465808f684SSatish Balay        self.assertEqual(iset.getLocalSize(), 0)
475808f684SSatish Balay        del iset
485808f684SSatish Balay
495808f684SSatish Balay    def testComplement(self):
505808f684SSatish Balay        self.iset.sort()
515808f684SSatish Balay        nmin = self.iset.getIndices().min()
525808f684SSatish Balay        nmax = self.iset.getIndices().max()
535808f684SSatish Balay        iset = self.iset.complement(nmin, nmax + 1)
545808f684SSatish Balay        iset.complement(nmin, nmax + 1)
555808f684SSatish Balay        del iset
565808f684SSatish Balay
575808f684SSatish Balay    def testSum(self):
585808f684SSatish Balay        if self.iset.getComm().getSize() > 1:
595808f684SSatish Balay            return
605808f684SSatish Balay        self.iset.sort()
615808f684SSatish Balay        iset = self.iset.duplicate()
625808f684SSatish Balay        iset.sum(self.iset)
635808f684SSatish Balay        self.assertTrue(self.iset.equal(iset))
645808f684SSatish Balay        del iset
655808f684SSatish Balay
665808f684SSatish Balay    def testExpand(self):
675808f684SSatish Balay        iset = self.iset.expand(self.iset)
685808f684SSatish Balay        if self.iset.type == iset.type:
695808f684SSatish Balay            self.assertTrue(self.iset.equal(iset))
705808f684SSatish Balay        del iset
715808f684SSatish Balay
725808f684SSatish Balay    def testRenumber(self):
735808f684SSatish Balay        (n1, is1) = self.iset.renumber()
745808f684SSatish Balay        (n2, is2) = self.iset.renumber(self.iset)
755808f684SSatish Balay        del is1
765808f684SSatish Balay        del is2
775808f684SSatish Balay
785808f684SSatish Balay    def testProperties(self):
79*6f336411SStefano Zampini        proplist = [
80*6f336411SStefano Zampini            'sizes',
81*6f336411SStefano Zampini            'size',
82*6f336411SStefano Zampini            'local_size',
83*6f336411SStefano Zampini            'indices',
84*6f336411SStefano Zampini            'permutation',
85*6f336411SStefano Zampini            'identity',
86*6f336411SStefano Zampini            'sorted',
87*6f336411SStefano Zampini        ]
885808f684SSatish Balay        for prop in proplist:
895808f684SSatish Balay            self.assertTrue(hasattr(self.iset, prop))
905808f684SSatish Balay
915808f684SSatish Balay    def testArray(self):
925808f684SSatish Balay        import numpy
93*6f336411SStefano Zampini
945808f684SSatish Balay        refs = self.iset.getRefCount()
955808f684SSatish Balay        arr1 = numpy.asarray(self.iset)
965808f684SSatish Balay        self.assertEqual(self.iset.getRefCount(), refs + 1)
975808f684SSatish Balay        arr2 = self.iset.array
985808f684SSatish Balay        self.assertEqual(self.iset.getRefCount(), refs + 2)
995808f684SSatish Balay        self.assertTrue((arr1 == arr2).all())
1005808f684SSatish Balay        del arr2
1015808f684SSatish Balay        self.assertEqual(self.iset.getRefCount(), refs + 1)
1025808f684SSatish Balay        del arr1
1035808f684SSatish Balay        self.assertEqual(self.iset.getRefCount(), refs)
1045808f684SSatish Balay
1055808f684SSatish Balay
1065808f684SSatish Balay# --------------------------------------------------------------------
1075808f684SSatish Balay
1085808f684SSatish Balay
109*6f336411SStefano Zampiniclass TestISGeneral(BaseTestIS, unittest.TestCase):
1105808f684SSatish Balay    TYPE = PETSc.IS.Type.GENERAL
1115808f684SSatish Balay
1125808f684SSatish Balay    def setUp(self):
1135808f684SSatish Balay        self.idx = list(range(10))
1145808f684SSatish Balay        random.shuffle(self.idx)
1155808f684SSatish Balay        self.iset = PETSc.IS().createGeneral(self.idx)
1165808f684SSatish Balay
1175808f684SSatish Balay    def testGetIndices(self):
1185808f684SSatish Balay        idx = self.iset.getIndices()
1195808f684SSatish Balay        self.assertEqual(self.idx, list(idx))
1205808f684SSatish Balay
1215808f684SSatish Balay
1225808f684SSatish Balayclass TestISStride(BaseTestIS, unittest.TestCase):
1235808f684SSatish Balay    TYPE = PETSc.IS.Type.STRIDE
1245808f684SSatish Balay
1255808f684SSatish Balay    def setUp(self):
1265808f684SSatish Balay        self.info = (10, 7, 3)
1275808f684SSatish Balay        size, start, step = self.info
1285808f684SSatish Balay        self.iset = PETSc.IS().createStride(size, start, step)
1295808f684SSatish Balay
1305808f684SSatish Balay    def testGetIndices(self):
1315808f684SSatish Balay        size, start, step = self.info
1325808f684SSatish Balay        indices = [start + i * step for i in range(size)]
1335808f684SSatish Balay        self.assertEqual(list(self.iset.getIndices()), indices)
1345808f684SSatish Balay
1355808f684SSatish Balay    def testToGeneral(self):
1365808f684SSatish Balay        self.iset.toGeneral()
1375808f684SSatish Balay        self.assertEqual(self.iset.getType(), PETSc.IS.Type.GENERAL)
1385808f684SSatish Balay
1395808f684SSatish Balay
1405808f684SSatish Balayclass TestISBlock(BaseTestIS, unittest.TestCase):
1415808f684SSatish Balay    TYPE = PETSc.IS.Type.BLOCK
1425808f684SSatish Balay
1435808f684SSatish Balay    def setUp(self):
1445808f684SSatish Balay        self.bsize = 3
1455808f684SSatish Balay        self.index = list(range(0, 10, 2))
1465808f684SSatish Balay        random.shuffle(self.index)
1475808f684SSatish Balay        self.iset = PETSc.IS().createBlock(self.bsize, self.index)
1485808f684SSatish Balay        self.assertEqual(self.iset.getType(), PETSc.IS.Type.BLOCK)
1495808f684SSatish Balay
1505808f684SSatish Balay    def testGetSize(self):
1515808f684SSatish Balay        lsize = self.iset.getLocalSize()
1525808f684SSatish Balay        self.assertEqual(lsize / self.bsize, len(self.index))
1535808f684SSatish Balay
1545808f684SSatish Balay    def testGetBlockSize(self):
1555808f684SSatish Balay        bs = self.iset.getBlockSize()
1565808f684SSatish Balay        self.assertEqual(bs, self.bsize)
1575808f684SSatish Balay
1585808f684SSatish Balay    def testGetBlockIndices(self):
1595808f684SSatish Balay        index = list(self.iset.getBlockIndices())
1605808f684SSatish Balay        self.assertEqual(index, self.index)
1615808f684SSatish Balay
1625808f684SSatish Balay    def testGetIndices(self):
1635808f684SSatish Balay        bs = self.bsize
1645808f684SSatish Balay        idx = []
1655808f684SSatish Balay        for i in self.iset.getBlockIndices():
1665808f684SSatish Balay            for j in range(bs):
1675808f684SSatish Balay                idx.append(i * bs + j)
1685808f684SSatish Balay        index = list(self.iset.getIndices())
169*6f336411SStefano Zampini        self.assertEqual(index, idx)
1705808f684SSatish Balay
1715808f684SSatish Balay
1725808f684SSatish Balay# --------------------------------------------------------------------
1735808f684SSatish Balay
1745808f684SSatish Balayif __name__ == '__main__':
1755808f684SSatish Balay    unittest.main()
176