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