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