1*5808f684SSatish Balayfrom petsc4py import PETSc 2*5808f684SSatish Balayimport unittest 3*5808f684SSatish Balay 4*5808f684SSatish Balay# -------------------------------------------------------------------- 5*5808f684SSatish Balay 6*5808f684SSatish Balayclass BaseTestObject(object): 7*5808f684SSatish Balay 8*5808f684SSatish Balay CLASS, FACTORY = None, None 9*5808f684SSatish Balay TARGS, KARGS = (), {} 10*5808f684SSatish Balay BUILD = None 11*5808f684SSatish Balay def setUp(self): 12*5808f684SSatish Balay self.obj = self.CLASS() 13*5808f684SSatish Balay getattr(self.obj,self.FACTORY)(*self.TARGS, **self.KARGS) 14*5808f684SSatish Balay if not self.obj: self.obj.create() 15*5808f684SSatish Balay 16*5808f684SSatish Balay def tearDown(self): 17*5808f684SSatish Balay self.obj = None 18*5808f684SSatish Balay 19*5808f684SSatish Balay def testTypeRegistry(self): 20*5808f684SSatish Balay type_reg = PETSc.__type_registry__ 21*5808f684SSatish Balay classid = self.obj.getClassId() 22*5808f684SSatish Balay typeobj = self.CLASS 23*5808f684SSatish Balay if isinstance(self.obj, PETSc.DMDA): 24*5808f684SSatish Balay typeobj = PETSc.DM 25*5808f684SSatish Balay self.assertTrue(type_reg[classid] is typeobj ) 26*5808f684SSatish Balay 27*5808f684SSatish Balay def testLogClass(self): 28*5808f684SSatish Balay name = self.CLASS.__name__ 29*5808f684SSatish Balay if name == 'DMDA': name = 'DM' 30*5808f684SSatish Balay logcls = PETSc.Log.Class(name) 31*5808f684SSatish Balay classid = self.obj.getClassId() 32*5808f684SSatish Balay self.assertEqual(logcls.id, classid) 33*5808f684SSatish Balay 34*5808f684SSatish Balay def testClass(self): 35*5808f684SSatish Balay self.assertTrue(isinstance(self.obj, self.CLASS)) 36*5808f684SSatish Balay self.assertTrue(type(self.obj) is self.CLASS) 37*5808f684SSatish Balay 38*5808f684SSatish Balay def testNonZero(self): 39*5808f684SSatish Balay self.assertTrue(bool(self.obj)) 40*5808f684SSatish Balay 41*5808f684SSatish Balay def testDestroy(self): 42*5808f684SSatish Balay self.assertTrue(bool(self.obj)) 43*5808f684SSatish Balay self.obj.destroy() 44*5808f684SSatish Balay self.assertFalse(bool(self.obj)) 45*5808f684SSatish Balay ## self.assertRaises(PETSc.Error, self.obj.destroy) 46*5808f684SSatish Balay ## self.assertTrue(self.obj.this is this) 47*5808f684SSatish Balay 48*5808f684SSatish Balay def testOptions(self): 49*5808f684SSatish Balay self.assertFalse(self.obj.getOptionsPrefix()) 50*5808f684SSatish Balay prefix1 = 'my_' 51*5808f684SSatish Balay self.obj.setOptionsPrefix(prefix1) 52*5808f684SSatish Balay self.assertEqual(self.obj.getOptionsPrefix(), prefix1) 53*5808f684SSatish Balay prefix2 = 'opt_' 54*5808f684SSatish Balay self.obj.setOptionsPrefix(prefix2) 55*5808f684SSatish Balay self.assertEqual(self.obj.getOptionsPrefix(), prefix2) 56*5808f684SSatish Balay ## self.obj.appendOptionsPrefix(prefix1) 57*5808f684SSatish Balay ## self.assertEqual(self.obj.getOptionsPrefix(), 58*5808f684SSatish Balay ## prefix2 + prefix1) 59*5808f684SSatish Balay ## self.obj.prependOptionsPrefix(prefix1) 60*5808f684SSatish Balay ## self.assertEqual(self.obj.getOptionsPrefix(), 61*5808f684SSatish Balay ## prefix1 + prefix2 + prefix1) 62*5808f684SSatish Balay self.obj.setFromOptions() 63*5808f684SSatish Balay 64*5808f684SSatish Balay def testName(self): 65*5808f684SSatish Balay oldname = self.obj.getName() 66*5808f684SSatish Balay newname = '%s-%s' %(oldname, oldname) 67*5808f684SSatish Balay self.obj.setName(newname) 68*5808f684SSatish Balay self.assertEqual(self.obj.getName(), newname) 69*5808f684SSatish Balay self.obj.setName(oldname) 70*5808f684SSatish Balay self.assertEqual(self.obj.getName(), oldname) 71*5808f684SSatish Balay 72*5808f684SSatish Balay def testComm(self): 73*5808f684SSatish Balay comm = self.obj.getComm() 74*5808f684SSatish Balay self.assertTrue(isinstance(comm, PETSc.Comm)) 75*5808f684SSatish Balay self.assertTrue(comm in [PETSc.COMM_SELF, PETSc.COMM_WORLD]) 76*5808f684SSatish Balay 77*5808f684SSatish Balay def testRefCount(self): 78*5808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 1) 79*5808f684SSatish Balay self.obj.incRef() 80*5808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 2) 81*5808f684SSatish Balay self.obj.incRef() 82*5808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 3) 83*5808f684SSatish Balay self.obj.decRef() 84*5808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 2) 85*5808f684SSatish Balay self.obj.decRef() 86*5808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 1) 87*5808f684SSatish Balay self.obj.decRef() 88*5808f684SSatish Balay self.assertFalse(bool(self.obj)) 89*5808f684SSatish Balay 90*5808f684SSatish Balay def testHandle(self): 91*5808f684SSatish Balay self.assertTrue(self.obj.handle) 92*5808f684SSatish Balay self.assertTrue(self.obj.fortran) 93*5808f684SSatish Balay h, f = self.obj.handle, self.obj.fortran 94*5808f684SSatish Balay if (h>0 and f>0) or (h<0 and f<0): 95*5808f684SSatish Balay self.assertEqual(h, f) 96*5808f684SSatish Balay self.obj.destroy() 97*5808f684SSatish Balay self.assertFalse(self.obj.handle) 98*5808f684SSatish Balay self.assertFalse(self.obj.fortran) 99*5808f684SSatish Balay 100*5808f684SSatish Balay def testComposeQuery(self): 101*5808f684SSatish Balay import copy 102*5808f684SSatish Balay try: 103*5808f684SSatish Balay myobj = copy.deepcopy(self.obj) 104*5808f684SSatish Balay except NotImplementedError: 105*5808f684SSatish Balay return 106*5808f684SSatish Balay self.assertEqual(myobj.getRefCount(), 1) 107*5808f684SSatish Balay self.obj.compose('myobj', myobj) 108*5808f684SSatish Balay self.assertTrue(type(self.obj.query('myobj')) is self.CLASS) 109*5808f684SSatish Balay self.assertEqual(self.obj.query('myobj'), myobj) 110*5808f684SSatish Balay self.assertEqual(myobj.getRefCount(), 2) 111*5808f684SSatish Balay self.obj.compose('myobj', None) 112*5808f684SSatish Balay self.assertEqual(myobj.getRefCount(), 1) 113*5808f684SSatish Balay self.assertEqual(self.obj.query('myobj'), None) 114*5808f684SSatish Balay myobj.destroy() 115*5808f684SSatish Balay 116*5808f684SSatish Balay def testProperties(self): 117*5808f684SSatish Balay self.assertEqual(self.obj.getClassId(), self.obj.classid) 118*5808f684SSatish Balay self.assertEqual(self.obj.getClassName(), self.obj.klass) 119*5808f684SSatish Balay self.assertEqual(self.obj.getType(), self.obj.type) 120*5808f684SSatish Balay self.assertEqual(self.obj.getName(), self.obj.name) 121*5808f684SSatish Balay self.assertEqual(self.obj.getComm(), self.obj.comm) 122*5808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), self.obj.refcount) 123*5808f684SSatish Balay 124*5808f684SSatish Balay def testShallowCopy(self): 125*5808f684SSatish Balay import copy 126*5808f684SSatish Balay rc = self.obj.getRefCount() 127*5808f684SSatish Balay obj = copy.copy(self.obj) 128*5808f684SSatish Balay self.assertTrue(obj is not self.obj) 129*5808f684SSatish Balay self.assertTrue(obj == self.obj) 130*5808f684SSatish Balay self.assertTrue(type(obj) is type(self.obj)) 131*5808f684SSatish Balay self.assertEqual(obj.getRefCount(), rc+1) 132*5808f684SSatish Balay del obj 133*5808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), rc) 134*5808f684SSatish Balay 135*5808f684SSatish Balay def testDeepCopy(self): 136*5808f684SSatish Balay import copy 137*5808f684SSatish Balay rc = self.obj.getRefCount() 138*5808f684SSatish Balay try: 139*5808f684SSatish Balay obj = copy.deepcopy(self.obj) 140*5808f684SSatish Balay except NotImplementedError: 141*5808f684SSatish Balay return 142*5808f684SSatish Balay self.assertTrue(obj is not self.obj) 143*5808f684SSatish Balay self.assertTrue(obj != self.obj) 144*5808f684SSatish Balay self.assertTrue(type(obj) is type(self.obj)) 145*5808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), rc) 146*5808f684SSatish Balay self.assertEqual(obj.getRefCount(), 1) 147*5808f684SSatish Balay del obj 148*5808f684SSatish Balay 149*5808f684SSatish Balay# -------------------------------------------------------------------- 150*5808f684SSatish Balay 151*5808f684SSatish Balayclass TestObjectRandom(BaseTestObject, unittest.TestCase): 152*5808f684SSatish Balay CLASS = PETSc.Random 153*5808f684SSatish Balay FACTORY = 'create' 154*5808f684SSatish Balay 155*5808f684SSatish Balayclass TestObjectViewer(BaseTestObject, unittest.TestCase): 156*5808f684SSatish Balay CLASS = PETSc.Viewer 157*5808f684SSatish Balay FACTORY = 'create' 158*5808f684SSatish Balay 159*5808f684SSatish Balayclass TestObjectIS(BaseTestObject, unittest.TestCase): 160*5808f684SSatish Balay CLASS = PETSc.IS 161*5808f684SSatish Balay FACTORY = 'createGeneral' 162*5808f684SSatish Balay TARGS = ([],) 163*5808f684SSatish Balay 164*5808f684SSatish Balayclass TestObjectLGMap(BaseTestObject, unittest.TestCase): 165*5808f684SSatish Balay CLASS = PETSc.LGMap 166*5808f684SSatish Balay FACTORY = 'create' 167*5808f684SSatish Balay TARGS = ([],) 168*5808f684SSatish Balay 169*5808f684SSatish Balayclass TestObjectAO(BaseTestObject, unittest.TestCase): 170*5808f684SSatish Balay CLASS = PETSc.AO 171*5808f684SSatish Balay FACTORY = 'createMapping' 172*5808f684SSatish Balay TARGS = ([], []) 173*5808f684SSatish Balay 174*5808f684SSatish Balayclass TestObjectDMDA(BaseTestObject, unittest.TestCase): 175*5808f684SSatish Balay CLASS = PETSc.DMDA 176*5808f684SSatish Balay FACTORY = 'create' 177*5808f684SSatish Balay TARGS = ([3,3,3],) 178*5808f684SSatish Balay 179*5808f684SSatish Balayclass TestObjectDS(BaseTestObject, unittest.TestCase): 180*5808f684SSatish Balay CLASS = PETSc.DS 181*5808f684SSatish Balay FACTORY = 'create' 182*5808f684SSatish Balay 183*5808f684SSatish Balayclass TestObjectVec(BaseTestObject, unittest.TestCase): 184*5808f684SSatish Balay CLASS = PETSc.Vec 185*5808f684SSatish Balay FACTORY = 'createSeq' 186*5808f684SSatish Balay TARGS = (0,) 187*5808f684SSatish Balay 188*5808f684SSatish Balay def setUp(self): 189*5808f684SSatish Balay BaseTestObject.setUp(self) 190*5808f684SSatish Balay self.obj.assemble() 191*5808f684SSatish Balay 192*5808f684SSatish Balayclass TestObjectScatter(BaseTestObject, unittest.TestCase): 193*5808f684SSatish Balay CLASS = PETSc.Scatter 194*5808f684SSatish Balay FACTORY = 'create' 195*5808f684SSatish Balay def setUp(self): 196*5808f684SSatish Balay v1, v2 = PETSc.Vec().createSeq(0), PETSc.Vec().createSeq(0) 197*5808f684SSatish Balay i1, i2 = PETSc.IS().createGeneral([]), PETSc.IS().createGeneral([]) 198*5808f684SSatish Balay self.obj = PETSc.Scatter().create(v1, i1, v2, i2) 199*5808f684SSatish Balay del v1, v2, i1, i2 200*5808f684SSatish Balay 201*5808f684SSatish Balayclass TestObjectMat(BaseTestObject, unittest.TestCase): 202*5808f684SSatish Balay CLASS = PETSc.Mat 203*5808f684SSatish Balay FACTORY = 'createAIJ' 204*5808f684SSatish Balay TARGS = (0,) 205*5808f684SSatish Balay KARGS = {'nnz':0, 'comm': PETSc.COMM_SELF} 206*5808f684SSatish Balay 207*5808f684SSatish Balay def setUp(self): 208*5808f684SSatish Balay BaseTestObject.setUp(self) 209*5808f684SSatish Balay self.obj.assemble() 210*5808f684SSatish Balay 211*5808f684SSatish Balayclass TestObjectNullSpace(BaseTestObject, unittest.TestCase): 212*5808f684SSatish Balay CLASS = PETSc.NullSpace 213*5808f684SSatish Balay FACTORY = 'create' 214*5808f684SSatish Balay TARGS = (True, []) 215*5808f684SSatish Balay 216*5808f684SSatish Balayclass TestObjectKSP(BaseTestObject, unittest.TestCase): 217*5808f684SSatish Balay CLASS = PETSc.KSP 218*5808f684SSatish Balay FACTORY = 'create' 219*5808f684SSatish Balay 220*5808f684SSatish Balayclass TestObjectPC(BaseTestObject, unittest.TestCase): 221*5808f684SSatish Balay CLASS = PETSc.PC 222*5808f684SSatish Balay FACTORY = 'create' 223*5808f684SSatish Balay 224*5808f684SSatish Balayclass TestObjectSNES(BaseTestObject, unittest.TestCase): 225*5808f684SSatish Balay CLASS = PETSc.SNES 226*5808f684SSatish Balay FACTORY = 'create' 227*5808f684SSatish Balay 228*5808f684SSatish Balayclass TestObjectTS(BaseTestObject, unittest.TestCase): 229*5808f684SSatish Balay CLASS = PETSc.TS 230*5808f684SSatish Balay FACTORY = 'create' 231*5808f684SSatish Balay def setUp(self): 232*5808f684SSatish Balay super(TestObjectTS, self).setUp() 233*5808f684SSatish Balay self.obj.setProblemType(PETSc.TS.ProblemType.NONLINEAR) 234*5808f684SSatish Balay self.obj.setType(PETSc.TS.Type.BEULER) 235*5808f684SSatish Balay 236*5808f684SSatish Balayclass TestObjectTAO(BaseTestObject, unittest.TestCase): 237*5808f684SSatish Balay CLASS = PETSc.TAO 238*5808f684SSatish Balay FACTORY = 'create' 239*5808f684SSatish Balay 240*5808f684SSatish Balayclass TestObjectAOBasic(BaseTestObject, unittest.TestCase): 241*5808f684SSatish Balay CLASS = PETSc.AO 242*5808f684SSatish Balay FACTORY = 'createBasic' 243*5808f684SSatish Balay TARGS = ([], []) 244*5808f684SSatish Balay 245*5808f684SSatish Balayclass TestObjectAOMapping(BaseTestObject, unittest.TestCase): 246*5808f684SSatish Balay CLASS = PETSc.AO 247*5808f684SSatish Balay FACTORY = 'createMapping' 248*5808f684SSatish Balay TARGS = ([], []) 249*5808f684SSatish Balay 250*5808f684SSatish Balay# class TestObjectFE(BaseTestObject, unittest.TestCase): 251*5808f684SSatish Balay# CLASS = PETSc.FE 252*5808f684SSatish Balay# FACTORY = 'create' 253*5808f684SSatish Balay# 254*5808f684SSatish Balay# class TestObjectQuad(BaseTestObject, unittest.TestCase): 255*5808f684SSatish Balay# CLASS = PETSc.Quad 256*5808f684SSatish Balay# FACTORY = 'create' 257*5808f684SSatish Balay 258*5808f684SSatish Balayclass TestObjectDMLabel(BaseTestObject, unittest.TestCase): 259*5808f684SSatish Balay CLASS = PETSc.DMLabel 260*5808f684SSatish Balay FACTORY = 'create' 261*5808f684SSatish Balay TARGS = ("test",) 262*5808f684SSatish Balay 263*5808f684SSatish Balay# -------------------------------------------------------------------- 264*5808f684SSatish Balay 265*5808f684SSatish Balayimport numpy 266*5808f684SSatish Balayif numpy.iscomplexobj(PETSc.ScalarType()): 267*5808f684SSatish Balay del TestObjectTAO 268*5808f684SSatish Balay 269*5808f684SSatish Balayif __name__ == '__main__': 270*5808f684SSatish Balay unittest.main() 271