15808f684SSatish Balayimport unittest 25808f684SSatish Balay 384f2ad6dSLawrence Mitchellfrom petsc4py import PETSc 46f336411SStefano Zampiniimport numpy 584f2ad6dSLawrence Mitchell 65808f684SSatish Balay# -------------------------------------------------------------------- 75808f684SSatish Balay 85808f684SSatish Balay 96f336411SStefano Zampiniclass BaseTestObject: 105808f684SSatish Balay CLASS, FACTORY = None, None 115808f684SSatish Balay TARGS, KARGS = (), {} 125808f684SSatish Balay BUILD = None 136f336411SStefano Zampini 145808f684SSatish Balay def setUp(self): 155808f684SSatish Balay self.obj = self.CLASS() 165808f684SSatish Balay getattr(self.obj, self.FACTORY)(*self.TARGS, **self.KARGS) 176f336411SStefano Zampini if not self.obj: 186f336411SStefano Zampini self.obj.create() 195808f684SSatish Balay 205808f684SSatish Balay def tearDown(self): 215808f684SSatish Balay self.obj = None 2262e5d2d2SJDBetteridge PETSc.garbage_cleanup() 235808f684SSatish Balay 245808f684SSatish Balay def testTypeRegistry(self): 255808f684SSatish Balay type_reg = PETSc.__type_registry__ 265808f684SSatish Balay classid = self.obj.getClassId() 275808f684SSatish Balay typeobj = self.CLASS 285808f684SSatish Balay if isinstance(self.obj, PETSc.DMDA): 295808f684SSatish Balay typeobj = PETSc.DM 305808f684SSatish Balay self.assertTrue(type_reg[classid] is typeobj) 315808f684SSatish Balay 325808f684SSatish Balay def testLogClass(self): 335808f684SSatish Balay name = self.CLASS.__name__ 346f336411SStefano Zampini if name == 'DMDA': 356f336411SStefano Zampini name = 'DM' 365808f684SSatish Balay logcls = PETSc.Log.Class(name) 375808f684SSatish Balay classid = self.obj.getClassId() 385808f684SSatish Balay self.assertEqual(logcls.id, classid) 395808f684SSatish Balay 405808f684SSatish Balay def testClass(self): 415808f684SSatish Balay self.assertTrue(isinstance(self.obj, self.CLASS)) 425808f684SSatish Balay self.assertTrue(type(self.obj) is self.CLASS) 435808f684SSatish Balay 44*3a028a11SStefano Zampini def testId(self): 45*3a028a11SStefano Zampini oid = self.obj.getId() 46*3a028a11SStefano Zampini self.assertTrue(oid > 0) 47*3a028a11SStefano Zampini self.assertEqual(self.obj.id, oid) 48*3a028a11SStefano Zampini 495808f684SSatish Balay def testNonZero(self): 505808f684SSatish Balay self.assertTrue(bool(self.obj)) 515808f684SSatish Balay 525808f684SSatish Balay def testDestroy(self): 535808f684SSatish Balay self.assertTrue(bool(self.obj)) 545808f684SSatish Balay self.obj.destroy() 555808f684SSatish Balay self.assertFalse(bool(self.obj)) 565808f684SSatish Balay ## self.assertRaises(PETSc.Error, self.obj.destroy) 575808f684SSatish Balay ## self.assertTrue(self.obj.this is this) 585808f684SSatish Balay 595808f684SSatish Balay def testOptions(self): 605808f684SSatish Balay self.assertFalse(self.obj.getOptionsPrefix()) 615808f684SSatish Balay prefix1 = 'my_' 625808f684SSatish Balay self.obj.setOptionsPrefix(prefix1) 635808f684SSatish Balay self.assertEqual(self.obj.getOptionsPrefix(), prefix1) 645808f684SSatish Balay prefix2 = 'opt_' 655808f684SSatish Balay self.obj.setOptionsPrefix(prefix2) 665808f684SSatish Balay self.assertEqual(self.obj.getOptionsPrefix(), prefix2) 676f336411SStefano Zampini self.obj.appendOptionsPrefix(prefix1) 686f336411SStefano Zampini self.assertEqual(self.obj.getOptionsPrefix(), prefix2 + prefix1) 696f336411SStefano Zampini self.obj.setOptionsPrefix(None) 706f336411SStefano Zampini self.assertEqual(self.obj.getOptionsPrefix(), None) 715808f684SSatish Balay self.obj.setFromOptions() 725808f684SSatish Balay 735808f684SSatish Balay def testName(self): 745808f684SSatish Balay oldname = self.obj.getName() 756f336411SStefano Zampini newname = f'{oldname}-{oldname}' 765808f684SSatish Balay self.obj.setName(newname) 775808f684SSatish Balay self.assertEqual(self.obj.getName(), newname) 785808f684SSatish Balay self.obj.setName(oldname) 795808f684SSatish Balay self.assertEqual(self.obj.getName(), oldname) 805808f684SSatish Balay 815808f684SSatish Balay def testComm(self): 825808f684SSatish Balay comm = self.obj.getComm() 835808f684SSatish Balay self.assertTrue(isinstance(comm, PETSc.Comm)) 845808f684SSatish Balay self.assertTrue(comm in [PETSc.COMM_SELF, PETSc.COMM_WORLD]) 855808f684SSatish Balay 865808f684SSatish Balay def testRefCount(self): 875808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 1) 885808f684SSatish Balay self.obj.incRef() 895808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 2) 905808f684SSatish Balay self.obj.incRef() 915808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 3) 925808f684SSatish Balay self.obj.decRef() 935808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 2) 945808f684SSatish Balay self.obj.decRef() 955808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 1) 965808f684SSatish Balay self.obj.decRef() 975808f684SSatish Balay self.assertFalse(bool(self.obj)) 985808f684SSatish Balay 995808f684SSatish Balay def testHandle(self): 1005808f684SSatish Balay self.assertTrue(self.obj.handle) 1015808f684SSatish Balay self.assertTrue(self.obj.fortran) 1025808f684SSatish Balay h, f = self.obj.handle, self.obj.fortran 1035808f684SSatish Balay if (h > 0 and f > 0) or (h < 0 and f < 0): 1045808f684SSatish Balay self.assertEqual(h, f) 1055808f684SSatish Balay self.obj.destroy() 1065808f684SSatish Balay self.assertFalse(self.obj.handle) 1075808f684SSatish Balay self.assertFalse(self.obj.fortran) 1085808f684SSatish Balay 1095808f684SSatish Balay def testComposeQuery(self): 1105808f684SSatish Balay import copy 1116f336411SStefano Zampini 1125808f684SSatish Balay try: 1135808f684SSatish Balay myobj = copy.deepcopy(self.obj) 1145808f684SSatish Balay except NotImplementedError: 1155808f684SSatish Balay return 1165808f684SSatish Balay self.assertEqual(myobj.getRefCount(), 1) 1175808f684SSatish Balay self.obj.compose('myobj', myobj) 1185808f684SSatish Balay self.assertTrue(type(self.obj.query('myobj')) is self.CLASS) 1195808f684SSatish Balay self.assertEqual(self.obj.query('myobj'), myobj) 1205808f684SSatish Balay self.assertEqual(myobj.getRefCount(), 2) 1215808f684SSatish Balay self.obj.compose('myobj', None) 1225808f684SSatish Balay self.assertEqual(myobj.getRefCount(), 1) 1235808f684SSatish Balay self.assertEqual(self.obj.query('myobj'), None) 1245808f684SSatish Balay myobj.destroy() 1255808f684SSatish Balay 1265808f684SSatish Balay def testProperties(self): 1275808f684SSatish Balay self.assertEqual(self.obj.getClassId(), self.obj.classid) 1285808f684SSatish Balay self.assertEqual(self.obj.getClassName(), self.obj.klass) 1295808f684SSatish Balay self.assertEqual(self.obj.getType(), self.obj.type) 1305808f684SSatish Balay self.assertEqual(self.obj.getName(), self.obj.name) 1315808f684SSatish Balay self.assertEqual(self.obj.getComm(), self.obj.comm) 1325808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), self.obj.refcount) 1335808f684SSatish Balay 1345808f684SSatish Balay def testShallowCopy(self): 1355808f684SSatish Balay import copy 1366f336411SStefano Zampini 1375808f684SSatish Balay rc = self.obj.getRefCount() 1385808f684SSatish Balay obj = copy.copy(self.obj) 1395808f684SSatish Balay self.assertTrue(obj is not self.obj) 1405808f684SSatish Balay self.assertTrue(obj == self.obj) 1416f336411SStefano Zampini self.assertTrue(isinstance(obj, type(self.obj))) 1425808f684SSatish Balay self.assertEqual(obj.getRefCount(), rc + 1) 1435808f684SSatish Balay del obj 1445808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), rc) 1455808f684SSatish Balay 1465808f684SSatish Balay def testDeepCopy(self): 1475808f684SSatish Balay import copy 1486f336411SStefano Zampini 1495808f684SSatish Balay rc = self.obj.getRefCount() 1505808f684SSatish Balay try: 1515808f684SSatish Balay obj = copy.deepcopy(self.obj) 1525808f684SSatish Balay except NotImplementedError: 1535808f684SSatish Balay return 1545808f684SSatish Balay self.assertTrue(obj is not self.obj) 1555808f684SSatish Balay self.assertTrue(obj != self.obj) 1566f336411SStefano Zampini self.assertTrue(isinstance(obj, type(self.obj))) 1575808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), rc) 1585808f684SSatish Balay self.assertEqual(obj.getRefCount(), 1) 1595808f684SSatish Balay del obj 1605808f684SSatish Balay 16184f2ad6dSLawrence Mitchell def testStateInspection(self): 16284f2ad6dSLawrence Mitchell state = self.obj.stateGet() 16384f2ad6dSLawrence Mitchell self.obj.stateIncrease() 16484f2ad6dSLawrence Mitchell self.assertTrue(state < self.obj.stateGet()) 16584f2ad6dSLawrence Mitchell self.obj.stateSet(0) 16684f2ad6dSLawrence Mitchell self.assertTrue(self.obj.stateGet() == 0) 16784f2ad6dSLawrence Mitchell self.obj.stateSet(state) 16884f2ad6dSLawrence Mitchell self.assertTrue(self.obj.stateGet() == state) 16984f2ad6dSLawrence Mitchell 17084f2ad6dSLawrence Mitchell 1715808f684SSatish Balay# -------------------------------------------------------------------- 1725808f684SSatish Balay 1736f336411SStefano Zampini 1745808f684SSatish Balayclass TestObjectRandom(BaseTestObject, unittest.TestCase): 1755808f684SSatish Balay CLASS = PETSc.Random 1765808f684SSatish Balay FACTORY = 'create' 1775808f684SSatish Balay 1786f336411SStefano Zampini 1795808f684SSatish Balayclass TestObjectViewer(BaseTestObject, unittest.TestCase): 1805808f684SSatish Balay CLASS = PETSc.Viewer 1815808f684SSatish Balay FACTORY = 'create' 1825808f684SSatish Balay 1836f336411SStefano Zampini 1845808f684SSatish Balayclass TestObjectIS(BaseTestObject, unittest.TestCase): 1855808f684SSatish Balay CLASS = PETSc.IS 1865808f684SSatish Balay FACTORY = 'createGeneral' 1875808f684SSatish Balay TARGS = ([],) 1885808f684SSatish Balay 1896f336411SStefano Zampini 1905808f684SSatish Balayclass TestObjectLGMap(BaseTestObject, unittest.TestCase): 1915808f684SSatish Balay CLASS = PETSc.LGMap 1925808f684SSatish Balay FACTORY = 'create' 1935808f684SSatish Balay TARGS = ([],) 1945808f684SSatish Balay 1956f336411SStefano Zampini 1965808f684SSatish Balayclass TestObjectAO(BaseTestObject, unittest.TestCase): 1975808f684SSatish Balay CLASS = PETSc.AO 1985808f684SSatish Balay FACTORY = 'createMapping' 1995808f684SSatish Balay TARGS = ([], []) 2005808f684SSatish Balay 2016f336411SStefano Zampini 2025808f684SSatish Balayclass TestObjectDMDA(BaseTestObject, unittest.TestCase): 2035808f684SSatish Balay CLASS = PETSc.DMDA 2045808f684SSatish Balay FACTORY = 'create' 2055808f684SSatish Balay TARGS = ([3, 3, 3],) 2065808f684SSatish Balay 2076f336411SStefano Zampini 2085808f684SSatish Balayclass TestObjectDS(BaseTestObject, unittest.TestCase): 2095808f684SSatish Balay CLASS = PETSc.DS 2105808f684SSatish Balay FACTORY = 'create' 2115808f684SSatish Balay 2126f336411SStefano Zampini 2135808f684SSatish Balayclass TestObjectVec(BaseTestObject, unittest.TestCase): 2145808f684SSatish Balay CLASS = PETSc.Vec 2155808f684SSatish Balay FACTORY = 'createSeq' 2165808f684SSatish Balay TARGS = (0,) 2175808f684SSatish Balay 2185808f684SSatish Balay def setUp(self): 2195808f684SSatish Balay BaseTestObject.setUp(self) 2205808f684SSatish Balay self.obj.assemble() 2215808f684SSatish Balay 2226f336411SStefano Zampini 2235808f684SSatish Balayclass TestObjectMat(BaseTestObject, unittest.TestCase): 2245808f684SSatish Balay CLASS = PETSc.Mat 2255808f684SSatish Balay FACTORY = 'createAIJ' 2265808f684SSatish Balay TARGS = (0,) 2275808f684SSatish Balay KARGS = {'nnz': 0, 'comm': PETSc.COMM_SELF} 2285808f684SSatish Balay 2295808f684SSatish Balay def setUp(self): 2305808f684SSatish Balay BaseTestObject.setUp(self) 2315808f684SSatish Balay self.obj.assemble() 2325808f684SSatish Balay 2336f336411SStefano Zampini 234af20bb8eSPierre Jolivetclass TestObjectMatPartitioning(BaseTestObject, unittest.TestCase): 235af20bb8eSPierre Jolivet CLASS = PETSc.MatPartitioning 236af20bb8eSPierre Jolivet FACTORY = 'create' 237af20bb8eSPierre Jolivet 2386f336411SStefano Zampini 2395808f684SSatish Balayclass TestObjectNullSpace(BaseTestObject, unittest.TestCase): 2405808f684SSatish Balay CLASS = PETSc.NullSpace 2415808f684SSatish Balay FACTORY = 'create' 2425808f684SSatish Balay TARGS = (True, []) 2435808f684SSatish Balay 2446f336411SStefano Zampini 2455808f684SSatish Balayclass TestObjectKSP(BaseTestObject, unittest.TestCase): 2465808f684SSatish Balay CLASS = PETSc.KSP 2475808f684SSatish Balay FACTORY = 'create' 2485808f684SSatish Balay 2496f336411SStefano Zampini 2505808f684SSatish Balayclass TestObjectPC(BaseTestObject, unittest.TestCase): 2515808f684SSatish Balay CLASS = PETSc.PC 2525808f684SSatish Balay FACTORY = 'create' 2535808f684SSatish Balay 2546f336411SStefano Zampini 2555808f684SSatish Balayclass TestObjectSNES(BaseTestObject, unittest.TestCase): 2565808f684SSatish Balay CLASS = PETSc.SNES 2575808f684SSatish Balay FACTORY = 'create' 2585808f684SSatish Balay 2596f336411SStefano Zampini 2605808f684SSatish Balayclass TestObjectTS(BaseTestObject, unittest.TestCase): 2615808f684SSatish Balay CLASS = PETSc.TS 2625808f684SSatish Balay FACTORY = 'create' 2636f336411SStefano Zampini 2645808f684SSatish Balay def setUp(self): 2656f336411SStefano Zampini super().setUp() 2665808f684SSatish Balay self.obj.setProblemType(PETSc.TS.ProblemType.NONLINEAR) 2675808f684SSatish Balay self.obj.setType(PETSc.TS.Type.BEULER) 2685808f684SSatish Balay 2696f336411SStefano Zampini 2705808f684SSatish Balayclass TestObjectTAO(BaseTestObject, unittest.TestCase): 2715808f684SSatish Balay CLASS = PETSc.TAO 2725808f684SSatish Balay FACTORY = 'create' 2735808f684SSatish Balay 2746f336411SStefano Zampini 2755808f684SSatish Balayclass TestObjectAOBasic(BaseTestObject, unittest.TestCase): 2765808f684SSatish Balay CLASS = PETSc.AO 2775808f684SSatish Balay FACTORY = 'createBasic' 2785808f684SSatish Balay TARGS = ([], []) 2795808f684SSatish Balay 2806f336411SStefano Zampini 2815808f684SSatish Balayclass TestObjectAOMapping(BaseTestObject, unittest.TestCase): 2825808f684SSatish Balay CLASS = PETSc.AO 2835808f684SSatish Balay FACTORY = 'createMapping' 2845808f684SSatish Balay TARGS = ([], []) 2855808f684SSatish Balay 2866f336411SStefano Zampini 2875808f684SSatish Balay# class TestObjectFE(BaseTestObject, unittest.TestCase): 2885808f684SSatish Balay# CLASS = PETSc.FE 2895808f684SSatish Balay# FACTORY = 'create' 2905808f684SSatish Balay# 2915808f684SSatish Balay# class TestObjectQuad(BaseTestObject, unittest.TestCase): 2925808f684SSatish Balay# CLASS = PETSc.Quad 2935808f684SSatish Balay# FACTORY = 'create' 2945808f684SSatish Balay 2956f336411SStefano Zampini 2965808f684SSatish Balayclass TestObjectDMLabel(BaseTestObject, unittest.TestCase): 2975808f684SSatish Balay CLASS = PETSc.DMLabel 2985808f684SSatish Balay FACTORY = 'create' 2996f336411SStefano Zampini TARGS = ('test',) 3006f336411SStefano Zampini 3015808f684SSatish Balay 302aa712e9bSRomain Beucherclass TestObjectSpace(BaseTestObject, unittest.TestCase): 303aa712e9bSRomain Beucher CLASS = PETSc.Space 304aa712e9bSRomain Beucher FACTORY = 'create' 305aa712e9bSRomain Beucher 3066f336411SStefano Zampini 307aa712e9bSRomain Beucherclass TestObjectDualSpace(BaseTestObject, unittest.TestCase): 308aa712e9bSRomain Beucher CLASS = PETSc.DualSpace 309aa712e9bSRomain Beucher FACTORY = 'create' 310aa712e9bSRomain Beucher 3115808f684SSatish Balay 3126f336411SStefano Zampini# -------------------------------------------------------------------- 31384f2ad6dSLawrence Mitchell 3145808f684SSatish Balayif numpy.iscomplexobj(PETSc.ScalarType()): 3155808f684SSatish Balay del TestObjectTAO 3165808f684SSatish Balay 3175808f684SSatish Balayif __name__ == '__main__': 3185808f684SSatish Balay unittest.main() 319