15808f684SSatish Balayfrom petsc4py import PETSc 25808f684SSatish Balayimport unittest 35808f684SSatish Balay 45808f684SSatish Balay# -------------------------------------------------------------------- 55808f684SSatish Balay 65808f684SSatish Balayclass BaseTestObject(object): 75808f684SSatish Balay 85808f684SSatish Balay CLASS, FACTORY = None, None 95808f684SSatish Balay TARGS, KARGS = (), {} 105808f684SSatish Balay BUILD = None 115808f684SSatish Balay def setUp(self): 125808f684SSatish Balay self.obj = self.CLASS() 135808f684SSatish Balay getattr(self.obj,self.FACTORY)(*self.TARGS, **self.KARGS) 145808f684SSatish Balay if not self.obj: self.obj.create() 155808f684SSatish Balay 165808f684SSatish Balay def tearDown(self): 175808f684SSatish Balay self.obj = None 185808f684SSatish Balay 195808f684SSatish Balay def testTypeRegistry(self): 205808f684SSatish Balay type_reg = PETSc.__type_registry__ 215808f684SSatish Balay classid = self.obj.getClassId() 225808f684SSatish Balay typeobj = self.CLASS 235808f684SSatish Balay if isinstance(self.obj, PETSc.DMDA): 245808f684SSatish Balay typeobj = PETSc.DM 255808f684SSatish Balay self.assertTrue(type_reg[classid] is typeobj ) 265808f684SSatish Balay 275808f684SSatish Balay def testLogClass(self): 285808f684SSatish Balay name = self.CLASS.__name__ 295808f684SSatish Balay if name == 'DMDA': name = 'DM' 305808f684SSatish Balay logcls = PETSc.Log.Class(name) 315808f684SSatish Balay classid = self.obj.getClassId() 325808f684SSatish Balay self.assertEqual(logcls.id, classid) 335808f684SSatish Balay 345808f684SSatish Balay def testClass(self): 355808f684SSatish Balay self.assertTrue(isinstance(self.obj, self.CLASS)) 365808f684SSatish Balay self.assertTrue(type(self.obj) is self.CLASS) 375808f684SSatish Balay 385808f684SSatish Balay def testNonZero(self): 395808f684SSatish Balay self.assertTrue(bool(self.obj)) 405808f684SSatish Balay 415808f684SSatish Balay def testDestroy(self): 425808f684SSatish Balay self.assertTrue(bool(self.obj)) 435808f684SSatish Balay self.obj.destroy() 445808f684SSatish Balay self.assertFalse(bool(self.obj)) 455808f684SSatish Balay ## self.assertRaises(PETSc.Error, self.obj.destroy) 465808f684SSatish Balay ## self.assertTrue(self.obj.this is this) 475808f684SSatish Balay 485808f684SSatish Balay def testOptions(self): 495808f684SSatish Balay self.assertFalse(self.obj.getOptionsPrefix()) 505808f684SSatish Balay prefix1 = 'my_' 515808f684SSatish Balay self.obj.setOptionsPrefix(prefix1) 525808f684SSatish Balay self.assertEqual(self.obj.getOptionsPrefix(), prefix1) 535808f684SSatish Balay prefix2 = 'opt_' 545808f684SSatish Balay self.obj.setOptionsPrefix(prefix2) 555808f684SSatish Balay self.assertEqual(self.obj.getOptionsPrefix(), prefix2) 565808f684SSatish Balay ## self.obj.appendOptionsPrefix(prefix1) 575808f684SSatish Balay ## self.assertEqual(self.obj.getOptionsPrefix(), 585808f684SSatish Balay ## prefix2 + prefix1) 595808f684SSatish Balay ## self.obj.prependOptionsPrefix(prefix1) 605808f684SSatish Balay ## self.assertEqual(self.obj.getOptionsPrefix(), 615808f684SSatish Balay ## prefix1 + prefix2 + prefix1) 625808f684SSatish Balay self.obj.setFromOptions() 635808f684SSatish Balay 645808f684SSatish Balay def testName(self): 655808f684SSatish Balay oldname = self.obj.getName() 665808f684SSatish Balay newname = '%s-%s' %(oldname, oldname) 675808f684SSatish Balay self.obj.setName(newname) 685808f684SSatish Balay self.assertEqual(self.obj.getName(), newname) 695808f684SSatish Balay self.obj.setName(oldname) 705808f684SSatish Balay self.assertEqual(self.obj.getName(), oldname) 715808f684SSatish Balay 725808f684SSatish Balay def testComm(self): 735808f684SSatish Balay comm = self.obj.getComm() 745808f684SSatish Balay self.assertTrue(isinstance(comm, PETSc.Comm)) 755808f684SSatish Balay self.assertTrue(comm in [PETSc.COMM_SELF, PETSc.COMM_WORLD]) 765808f684SSatish Balay 775808f684SSatish Balay def testRefCount(self): 785808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 1) 795808f684SSatish Balay self.obj.incRef() 805808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 2) 815808f684SSatish Balay self.obj.incRef() 825808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 3) 835808f684SSatish Balay self.obj.decRef() 845808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 2) 855808f684SSatish Balay self.obj.decRef() 865808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 1) 875808f684SSatish Balay self.obj.decRef() 885808f684SSatish Balay self.assertFalse(bool(self.obj)) 895808f684SSatish Balay 905808f684SSatish Balay def testHandle(self): 915808f684SSatish Balay self.assertTrue(self.obj.handle) 925808f684SSatish Balay self.assertTrue(self.obj.fortran) 935808f684SSatish Balay h, f = self.obj.handle, self.obj.fortran 945808f684SSatish Balay if (h>0 and f>0) or (h<0 and f<0): 955808f684SSatish Balay self.assertEqual(h, f) 965808f684SSatish Balay self.obj.destroy() 975808f684SSatish Balay self.assertFalse(self.obj.handle) 985808f684SSatish Balay self.assertFalse(self.obj.fortran) 995808f684SSatish Balay 1005808f684SSatish Balay def testComposeQuery(self): 1015808f684SSatish Balay import copy 1025808f684SSatish Balay try: 1035808f684SSatish Balay myobj = copy.deepcopy(self.obj) 1045808f684SSatish Balay except NotImplementedError: 1055808f684SSatish Balay return 1065808f684SSatish Balay self.assertEqual(myobj.getRefCount(), 1) 1075808f684SSatish Balay self.obj.compose('myobj', myobj) 1085808f684SSatish Balay self.assertTrue(type(self.obj.query('myobj')) is self.CLASS) 1095808f684SSatish Balay self.assertEqual(self.obj.query('myobj'), myobj) 1105808f684SSatish Balay self.assertEqual(myobj.getRefCount(), 2) 1115808f684SSatish Balay self.obj.compose('myobj', None) 1125808f684SSatish Balay self.assertEqual(myobj.getRefCount(), 1) 1135808f684SSatish Balay self.assertEqual(self.obj.query('myobj'), None) 1145808f684SSatish Balay myobj.destroy() 1155808f684SSatish Balay 1165808f684SSatish Balay def testProperties(self): 1175808f684SSatish Balay self.assertEqual(self.obj.getClassId(), self.obj.classid) 1185808f684SSatish Balay self.assertEqual(self.obj.getClassName(), self.obj.klass) 1195808f684SSatish Balay self.assertEqual(self.obj.getType(), self.obj.type) 1205808f684SSatish Balay self.assertEqual(self.obj.getName(), self.obj.name) 1215808f684SSatish Balay self.assertEqual(self.obj.getComm(), self.obj.comm) 1225808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), self.obj.refcount) 1235808f684SSatish Balay 1245808f684SSatish Balay def testShallowCopy(self): 1255808f684SSatish Balay import copy 1265808f684SSatish Balay rc = self.obj.getRefCount() 1275808f684SSatish Balay obj = copy.copy(self.obj) 1285808f684SSatish Balay self.assertTrue(obj is not self.obj) 1295808f684SSatish Balay self.assertTrue(obj == self.obj) 1305808f684SSatish Balay self.assertTrue(type(obj) is type(self.obj)) 1315808f684SSatish Balay self.assertEqual(obj.getRefCount(), rc+1) 1325808f684SSatish Balay del obj 1335808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), rc) 1345808f684SSatish Balay 1355808f684SSatish Balay def testDeepCopy(self): 1365808f684SSatish Balay import copy 1375808f684SSatish Balay rc = self.obj.getRefCount() 1385808f684SSatish Balay try: 1395808f684SSatish Balay obj = copy.deepcopy(self.obj) 1405808f684SSatish Balay except NotImplementedError: 1415808f684SSatish Balay return 1425808f684SSatish Balay self.assertTrue(obj is not self.obj) 1435808f684SSatish Balay self.assertTrue(obj != self.obj) 1445808f684SSatish Balay self.assertTrue(type(obj) is type(self.obj)) 1455808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), rc) 1465808f684SSatish Balay self.assertEqual(obj.getRefCount(), 1) 1475808f684SSatish Balay del obj 1485808f684SSatish Balay 1495808f684SSatish Balay# -------------------------------------------------------------------- 1505808f684SSatish Balay 1515808f684SSatish Balayclass TestObjectRandom(BaseTestObject, unittest.TestCase): 1525808f684SSatish Balay CLASS = PETSc.Random 1535808f684SSatish Balay FACTORY = 'create' 1545808f684SSatish Balay 1555808f684SSatish Balayclass TestObjectViewer(BaseTestObject, unittest.TestCase): 1565808f684SSatish Balay CLASS = PETSc.Viewer 1575808f684SSatish Balay FACTORY = 'create' 1585808f684SSatish Balay 1595808f684SSatish Balayclass TestObjectIS(BaseTestObject, unittest.TestCase): 1605808f684SSatish Balay CLASS = PETSc.IS 1615808f684SSatish Balay FACTORY = 'createGeneral' 1625808f684SSatish Balay TARGS = ([],) 1635808f684SSatish Balay 1645808f684SSatish Balayclass TestObjectLGMap(BaseTestObject, unittest.TestCase): 1655808f684SSatish Balay CLASS = PETSc.LGMap 1665808f684SSatish Balay FACTORY = 'create' 1675808f684SSatish Balay TARGS = ([],) 1685808f684SSatish Balay 1695808f684SSatish Balayclass TestObjectAO(BaseTestObject, unittest.TestCase): 1705808f684SSatish Balay CLASS = PETSc.AO 1715808f684SSatish Balay FACTORY = 'createMapping' 1725808f684SSatish Balay TARGS = ([], []) 1735808f684SSatish Balay 1745808f684SSatish Balayclass TestObjectDMDA(BaseTestObject, unittest.TestCase): 1755808f684SSatish Balay CLASS = PETSc.DMDA 1765808f684SSatish Balay FACTORY = 'create' 1775808f684SSatish Balay TARGS = ([3,3,3],) 1785808f684SSatish Balay 1795808f684SSatish Balayclass TestObjectDS(BaseTestObject, unittest.TestCase): 1805808f684SSatish Balay CLASS = PETSc.DS 1815808f684SSatish Balay FACTORY = 'create' 1825808f684SSatish Balay 1835808f684SSatish Balayclass TestObjectVec(BaseTestObject, unittest.TestCase): 1845808f684SSatish Balay CLASS = PETSc.Vec 1855808f684SSatish Balay FACTORY = 'createSeq' 1865808f684SSatish Balay TARGS = (0,) 1875808f684SSatish Balay 1885808f684SSatish Balay def setUp(self): 1895808f684SSatish Balay BaseTestObject.setUp(self) 1905808f684SSatish Balay self.obj.assemble() 1915808f684SSatish Balay 1925808f684SSatish Balayclass TestObjectMat(BaseTestObject, unittest.TestCase): 1935808f684SSatish Balay CLASS = PETSc.Mat 1945808f684SSatish Balay FACTORY = 'createAIJ' 1955808f684SSatish Balay TARGS = (0,) 1965808f684SSatish Balay KARGS = {'nnz':0, 'comm': PETSc.COMM_SELF} 1975808f684SSatish Balay 1985808f684SSatish Balay def setUp(self): 1995808f684SSatish Balay BaseTestObject.setUp(self) 2005808f684SSatish Balay self.obj.assemble() 2015808f684SSatish Balay 202*af20bb8eSPierre Jolivetclass TestObjectMatPartitioning(BaseTestObject, unittest.TestCase): 203*af20bb8eSPierre Jolivet CLASS = PETSc.MatPartitioning 204*af20bb8eSPierre Jolivet FACTORY = 'create' 205*af20bb8eSPierre Jolivet 2065808f684SSatish Balayclass TestObjectNullSpace(BaseTestObject, unittest.TestCase): 2075808f684SSatish Balay CLASS = PETSc.NullSpace 2085808f684SSatish Balay FACTORY = 'create' 2095808f684SSatish Balay TARGS = (True, []) 2105808f684SSatish Balay 2115808f684SSatish Balayclass TestObjectKSP(BaseTestObject, unittest.TestCase): 2125808f684SSatish Balay CLASS = PETSc.KSP 2135808f684SSatish Balay FACTORY = 'create' 2145808f684SSatish Balay 2155808f684SSatish Balayclass TestObjectPC(BaseTestObject, unittest.TestCase): 2165808f684SSatish Balay CLASS = PETSc.PC 2175808f684SSatish Balay FACTORY = 'create' 2185808f684SSatish Balay 2195808f684SSatish Balayclass TestObjectSNES(BaseTestObject, unittest.TestCase): 2205808f684SSatish Balay CLASS = PETSc.SNES 2215808f684SSatish Balay FACTORY = 'create' 2225808f684SSatish Balay 2235808f684SSatish Balayclass TestObjectTS(BaseTestObject, unittest.TestCase): 2245808f684SSatish Balay CLASS = PETSc.TS 2255808f684SSatish Balay FACTORY = 'create' 2265808f684SSatish Balay def setUp(self): 2275808f684SSatish Balay super(TestObjectTS, self).setUp() 2285808f684SSatish Balay self.obj.setProblemType(PETSc.TS.ProblemType.NONLINEAR) 2295808f684SSatish Balay self.obj.setType(PETSc.TS.Type.BEULER) 2305808f684SSatish Balay 2315808f684SSatish Balayclass TestObjectTAO(BaseTestObject, unittest.TestCase): 2325808f684SSatish Balay CLASS = PETSc.TAO 2335808f684SSatish Balay FACTORY = 'create' 2345808f684SSatish Balay 2355808f684SSatish Balayclass TestObjectAOBasic(BaseTestObject, unittest.TestCase): 2365808f684SSatish Balay CLASS = PETSc.AO 2375808f684SSatish Balay FACTORY = 'createBasic' 2385808f684SSatish Balay TARGS = ([], []) 2395808f684SSatish Balay 2405808f684SSatish Balayclass TestObjectAOMapping(BaseTestObject, unittest.TestCase): 2415808f684SSatish Balay CLASS = PETSc.AO 2425808f684SSatish Balay FACTORY = 'createMapping' 2435808f684SSatish Balay TARGS = ([], []) 2445808f684SSatish Balay 2455808f684SSatish Balay# class TestObjectFE(BaseTestObject, unittest.TestCase): 2465808f684SSatish Balay# CLASS = PETSc.FE 2475808f684SSatish Balay# FACTORY = 'create' 2485808f684SSatish Balay# 2495808f684SSatish Balay# class TestObjectQuad(BaseTestObject, unittest.TestCase): 2505808f684SSatish Balay# CLASS = PETSc.Quad 2515808f684SSatish Balay# FACTORY = 'create' 2525808f684SSatish Balay 2535808f684SSatish Balayclass TestObjectDMLabel(BaseTestObject, unittest.TestCase): 2545808f684SSatish Balay CLASS = PETSc.DMLabel 2555808f684SSatish Balay FACTORY = 'create' 2565808f684SSatish Balay TARGS = ("test",) 2575808f684SSatish Balay 2585808f684SSatish Balay# -------------------------------------------------------------------- 2595808f684SSatish Balay 2605808f684SSatish Balayimport numpy 2615808f684SSatish Balayif numpy.iscomplexobj(PETSc.ScalarType()): 2625808f684SSatish Balay del TestObjectTAO 2635808f684SSatish Balay 2645808f684SSatish Balayif __name__ == '__main__': 2655808f684SSatish Balay unittest.main() 266