1*5808f684SSatish Balayfrom petsc4py import PETSc 2*5808f684SSatish Balayimport unittest 3*5808f684SSatish Balayimport random 4*5808f684SSatish Balay 5*5808f684SSatish Balay# -------------------------------------------------------------------- 6*5808f684SSatish Balay 7*5808f684SSatish Balayclass BaseTestIS(object): 8*5808f684SSatish Balay 9*5808f684SSatish Balay TYPE = None 10*5808f684SSatish Balay 11*5808f684SSatish Balay def tearDown(self): 12*5808f684SSatish Balay self.iset = None 13*5808f684SSatish Balay 14*5808f684SSatish Balay def testGetType(self): 15*5808f684SSatish Balay istype = self.iset.getType() 16*5808f684SSatish Balay self.assertEqual(istype, self.TYPE) 17*5808f684SSatish Balay 18*5808f684SSatish Balay def testGetSize(self): 19*5808f684SSatish Balay lsize = self.iset.getLocalSize() 20*5808f684SSatish Balay gsize = self.iset.getSize() 21*5808f684SSatish Balay self.assertTrue(lsize <= gsize) 22*5808f684SSatish Balay 23*5808f684SSatish Balay def testDuplicate(self): 24*5808f684SSatish Balay iset = self.iset.duplicate() 25*5808f684SSatish Balay self.assertTrue(self.iset.equal(iset)) 26*5808f684SSatish Balay del iset 27*5808f684SSatish Balay 28*5808f684SSatish Balay def testCopy(self): 29*5808f684SSatish Balay iset = self.iset.copy() 30*5808f684SSatish Balay self.assertTrue(self.iset.equal(iset)) 31*5808f684SSatish Balay del iset 32*5808f684SSatish Balay 33*5808f684SSatish Balay def testEqual(self): 34*5808f684SSatish Balay self.assertTrue(self.iset.equal(self.iset)) 35*5808f684SSatish Balay iset = self.iset.duplicate() 36*5808f684SSatish Balay self.assertTrue(self.iset.equal(iset)) 37*5808f684SSatish Balay del iset 38*5808f684SSatish Balay 39*5808f684SSatish Balay def testSort(self): 40*5808f684SSatish Balay self.iset.sort() 41*5808f684SSatish Balay self.assertTrue(self.iset.isSorted()) 42*5808f684SSatish Balay 43*5808f684SSatish Balay def testDifference(self): 44*5808f684SSatish Balay iset = self.iset.difference(self.iset) 45*5808f684SSatish Balay self.assertEqual(iset.getLocalSize(), 0) 46*5808f684SSatish Balay del iset 47*5808f684SSatish Balay 48*5808f684SSatish Balay def testComplement(self): 49*5808f684SSatish Balay self.iset.sort() 50*5808f684SSatish Balay nmin = self.iset.getIndices().min() 51*5808f684SSatish Balay nmax = self.iset.getIndices().max() 52*5808f684SSatish Balay iset = self.iset.complement(nmin, nmax+1) 53*5808f684SSatish Balay iset.complement(nmin, nmax+1) 54*5808f684SSatish Balay del iset 55*5808f684SSatish Balay 56*5808f684SSatish Balay def testSum(self): 57*5808f684SSatish Balay if self.iset.getComm().getSize() > 1: 58*5808f684SSatish Balay return 59*5808f684SSatish Balay self.iset.sort() 60*5808f684SSatish Balay iset = self.iset.duplicate() 61*5808f684SSatish Balay iset.sum(self.iset) 62*5808f684SSatish Balay self.assertTrue(self.iset.equal(iset)) 63*5808f684SSatish Balay del iset 64*5808f684SSatish Balay 65*5808f684SSatish Balay def testExpand(self): 66*5808f684SSatish Balay iset = self.iset.expand(self.iset) 67*5808f684SSatish Balay if self.iset.type == iset.type: 68*5808f684SSatish Balay self.assertTrue(self.iset.equal(iset)) 69*5808f684SSatish Balay del iset 70*5808f684SSatish Balay 71*5808f684SSatish Balay def testRenumber(self): 72*5808f684SSatish Balay (n1,is1) = self.iset.renumber() 73*5808f684SSatish Balay (n2,is2) = self.iset.renumber(self.iset) 74*5808f684SSatish Balay del is1 75*5808f684SSatish Balay del is2 76*5808f684SSatish Balay 77*5808f684SSatish Balay def testProperties(self): 78*5808f684SSatish Balay proplist = ['sizes', 'size', 'local_size', 'indices', 79*5808f684SSatish Balay 'permutation', 'identity', 'sorted'] 80*5808f684SSatish Balay for prop in proplist: 81*5808f684SSatish Balay self.assertTrue(hasattr(self.iset, prop)) 82*5808f684SSatish Balay 83*5808f684SSatish Balay def testArray(self): 84*5808f684SSatish Balay import numpy 85*5808f684SSatish Balay refs = self.iset.getRefCount() 86*5808f684SSatish Balay arr1 = numpy.asarray(self.iset) 87*5808f684SSatish Balay self.assertEqual(self.iset.getRefCount(), refs+1) 88*5808f684SSatish Balay arr2 = self.iset.array 89*5808f684SSatish Balay self.assertEqual(self.iset.getRefCount(), refs+2) 90*5808f684SSatish Balay self.assertTrue((arr1 == arr2).all()) 91*5808f684SSatish Balay del arr2 92*5808f684SSatish Balay self.assertEqual(self.iset.getRefCount(), refs+1) 93*5808f684SSatish Balay del arr1 94*5808f684SSatish Balay self.assertEqual(self.iset.getRefCount(), refs) 95*5808f684SSatish Balay 96*5808f684SSatish Balay 97*5808f684SSatish Balay# -------------------------------------------------------------------- 98*5808f684SSatish Balay 99*5808f684SSatish Balayclass TestISGeneral(BaseTestIS, unittest.TestCase): 100*5808f684SSatish Balay 101*5808f684SSatish Balay TYPE = PETSc.IS.Type.GENERAL 102*5808f684SSatish Balay 103*5808f684SSatish Balay def setUp(self): 104*5808f684SSatish Balay self.idx = list(range(10)) 105*5808f684SSatish Balay random.shuffle(self.idx) 106*5808f684SSatish Balay self.iset = PETSc.IS().createGeneral(self.idx) 107*5808f684SSatish Balay 108*5808f684SSatish Balay def testGetIndices(self): 109*5808f684SSatish Balay idx = self.iset.getIndices() 110*5808f684SSatish Balay self.assertEqual(self.idx, list(idx)) 111*5808f684SSatish Balay 112*5808f684SSatish Balay 113*5808f684SSatish Balayclass TestISStride(BaseTestIS, unittest.TestCase): 114*5808f684SSatish Balay 115*5808f684SSatish Balay TYPE = PETSc.IS.Type.STRIDE 116*5808f684SSatish Balay 117*5808f684SSatish Balay def setUp(self): 118*5808f684SSatish Balay self.info = (10, 7, 3) 119*5808f684SSatish Balay size, start, step = self.info 120*5808f684SSatish Balay self.iset = PETSc.IS().createStride(size, start, step) 121*5808f684SSatish Balay 122*5808f684SSatish Balay def testGetIndices(self): 123*5808f684SSatish Balay size, start, step = self.info 124*5808f684SSatish Balay indices = [start+i*step for i in range(size)] 125*5808f684SSatish Balay self.assertEqual(list(self.iset.getIndices()), indices) 126*5808f684SSatish Balay 127*5808f684SSatish Balay def testToGeneral(self): 128*5808f684SSatish Balay self.iset.toGeneral() 129*5808f684SSatish Balay self.assertEqual(self.iset.getType(), PETSc.IS.Type.GENERAL) 130*5808f684SSatish Balay 131*5808f684SSatish Balay 132*5808f684SSatish Balayclass TestISBlock(BaseTestIS, unittest.TestCase): 133*5808f684SSatish Balay 134*5808f684SSatish Balay TYPE = PETSc.IS.Type.BLOCK 135*5808f684SSatish Balay 136*5808f684SSatish Balay def setUp(self): 137*5808f684SSatish Balay self.bsize = 3 138*5808f684SSatish Balay self.index = list(range(0,10,2)) 139*5808f684SSatish Balay random.shuffle(self.index) 140*5808f684SSatish Balay self.iset = PETSc.IS().createBlock(self.bsize, self.index) 141*5808f684SSatish Balay self.assertEqual(self.iset.getType(), PETSc.IS.Type.BLOCK) 142*5808f684SSatish Balay 143*5808f684SSatish Balay def testGetSize(self): 144*5808f684SSatish Balay lsize = self.iset.getLocalSize() 145*5808f684SSatish Balay self.assertEqual(lsize/self.bsize, len(self.index)) 146*5808f684SSatish Balay 147*5808f684SSatish Balay def testGetBlockSize(self): 148*5808f684SSatish Balay bs = self.iset.getBlockSize() 149*5808f684SSatish Balay self.assertEqual(bs, self.bsize) 150*5808f684SSatish Balay 151*5808f684SSatish Balay def testGetBlockIndices(self): 152*5808f684SSatish Balay index = list(self.iset.getBlockIndices()) 153*5808f684SSatish Balay self.assertEqual(index, self.index) 154*5808f684SSatish Balay 155*5808f684SSatish Balay def testGetIndices(self): 156*5808f684SSatish Balay bs = self.bsize 157*5808f684SSatish Balay idx = [] 158*5808f684SSatish Balay for i in self.iset.getBlockIndices(): 159*5808f684SSatish Balay for j in range(bs): 160*5808f684SSatish Balay idx.append(i*bs+j) 161*5808f684SSatish Balay index = list(self.iset.getIndices()) 162*5808f684SSatish Balay #self.assertEqual(index, idx) 163*5808f684SSatish Balay 164*5808f684SSatish Balay 165*5808f684SSatish Balay# -------------------------------------------------------------------- 166*5808f684SSatish Balay 167*5808f684SSatish Balayif __name__ == '__main__': 168*5808f684SSatish Balay unittest.main() 169