15808f684SSatish Balayimport unittest 25808f684SSatish Balay 384f2ad6dSLawrence Mitchellfrom petsc4py import PETSc 4*6f336411SStefano Zampiniimport numpy 584f2ad6dSLawrence Mitchell 65808f684SSatish Balay# -------------------------------------------------------------------- 75808f684SSatish Balay 85808f684SSatish Balay 9*6f336411SStefano Zampiniclass BaseTestObject: 105808f684SSatish Balay CLASS, FACTORY = None, None 115808f684SSatish Balay TARGS, KARGS = (), {} 125808f684SSatish Balay BUILD = None 13*6f336411SStefano Zampini 145808f684SSatish Balay def setUp(self): 155808f684SSatish Balay self.obj = self.CLASS() 165808f684SSatish Balay getattr(self.obj, self.FACTORY)(*self.TARGS, **self.KARGS) 17*6f336411SStefano Zampini if not self.obj: 18*6f336411SStefano 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__ 34*6f336411SStefano Zampini if name == 'DMDA': 35*6f336411SStefano 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 445808f684SSatish Balay def testNonZero(self): 455808f684SSatish Balay self.assertTrue(bool(self.obj)) 465808f684SSatish Balay 475808f684SSatish Balay def testDestroy(self): 485808f684SSatish Balay self.assertTrue(bool(self.obj)) 495808f684SSatish Balay self.obj.destroy() 505808f684SSatish Balay self.assertFalse(bool(self.obj)) 515808f684SSatish Balay ## self.assertRaises(PETSc.Error, self.obj.destroy) 525808f684SSatish Balay ## self.assertTrue(self.obj.this is this) 535808f684SSatish Balay 545808f684SSatish Balay def testOptions(self): 555808f684SSatish Balay self.assertFalse(self.obj.getOptionsPrefix()) 565808f684SSatish Balay prefix1 = 'my_' 575808f684SSatish Balay self.obj.setOptionsPrefix(prefix1) 585808f684SSatish Balay self.assertEqual(self.obj.getOptionsPrefix(), prefix1) 595808f684SSatish Balay prefix2 = 'opt_' 605808f684SSatish Balay self.obj.setOptionsPrefix(prefix2) 615808f684SSatish Balay self.assertEqual(self.obj.getOptionsPrefix(), prefix2) 62*6f336411SStefano Zampini self.obj.appendOptionsPrefix(prefix1) 63*6f336411SStefano Zampini self.assertEqual(self.obj.getOptionsPrefix(), prefix2 + prefix1) 64*6f336411SStefano Zampini self.obj.setOptionsPrefix(None) 65*6f336411SStefano Zampini self.assertEqual(self.obj.getOptionsPrefix(), None) 665808f684SSatish Balay self.obj.setFromOptions() 675808f684SSatish Balay 685808f684SSatish Balay def testName(self): 695808f684SSatish Balay oldname = self.obj.getName() 70*6f336411SStefano Zampini newname = f'{oldname}-{oldname}' 715808f684SSatish Balay self.obj.setName(newname) 725808f684SSatish Balay self.assertEqual(self.obj.getName(), newname) 735808f684SSatish Balay self.obj.setName(oldname) 745808f684SSatish Balay self.assertEqual(self.obj.getName(), oldname) 755808f684SSatish Balay 765808f684SSatish Balay def testComm(self): 775808f684SSatish Balay comm = self.obj.getComm() 785808f684SSatish Balay self.assertTrue(isinstance(comm, PETSc.Comm)) 795808f684SSatish Balay self.assertTrue(comm in [PETSc.COMM_SELF, PETSc.COMM_WORLD]) 805808f684SSatish Balay 815808f684SSatish Balay def testRefCount(self): 825808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 1) 835808f684SSatish Balay self.obj.incRef() 845808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 2) 855808f684SSatish Balay self.obj.incRef() 865808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 3) 875808f684SSatish Balay self.obj.decRef() 885808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 2) 895808f684SSatish Balay self.obj.decRef() 905808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), 1) 915808f684SSatish Balay self.obj.decRef() 925808f684SSatish Balay self.assertFalse(bool(self.obj)) 935808f684SSatish Balay 945808f684SSatish Balay def testHandle(self): 955808f684SSatish Balay self.assertTrue(self.obj.handle) 965808f684SSatish Balay self.assertTrue(self.obj.fortran) 975808f684SSatish Balay h, f = self.obj.handle, self.obj.fortran 985808f684SSatish Balay if (h > 0 and f > 0) or (h < 0 and f < 0): 995808f684SSatish Balay self.assertEqual(h, f) 1005808f684SSatish Balay self.obj.destroy() 1015808f684SSatish Balay self.assertFalse(self.obj.handle) 1025808f684SSatish Balay self.assertFalse(self.obj.fortran) 1035808f684SSatish Balay 1045808f684SSatish Balay def testComposeQuery(self): 1055808f684SSatish Balay import copy 106*6f336411SStefano Zampini 1075808f684SSatish Balay try: 1085808f684SSatish Balay myobj = copy.deepcopy(self.obj) 1095808f684SSatish Balay except NotImplementedError: 1105808f684SSatish Balay return 1115808f684SSatish Balay self.assertEqual(myobj.getRefCount(), 1) 1125808f684SSatish Balay self.obj.compose('myobj', myobj) 1135808f684SSatish Balay self.assertTrue(type(self.obj.query('myobj')) is self.CLASS) 1145808f684SSatish Balay self.assertEqual(self.obj.query('myobj'), myobj) 1155808f684SSatish Balay self.assertEqual(myobj.getRefCount(), 2) 1165808f684SSatish Balay self.obj.compose('myobj', None) 1175808f684SSatish Balay self.assertEqual(myobj.getRefCount(), 1) 1185808f684SSatish Balay self.assertEqual(self.obj.query('myobj'), None) 1195808f684SSatish Balay myobj.destroy() 1205808f684SSatish Balay 1215808f684SSatish Balay def testProperties(self): 1225808f684SSatish Balay self.assertEqual(self.obj.getClassId(), self.obj.classid) 1235808f684SSatish Balay self.assertEqual(self.obj.getClassName(), self.obj.klass) 1245808f684SSatish Balay self.assertEqual(self.obj.getType(), self.obj.type) 1255808f684SSatish Balay self.assertEqual(self.obj.getName(), self.obj.name) 1265808f684SSatish Balay self.assertEqual(self.obj.getComm(), self.obj.comm) 1275808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), self.obj.refcount) 1285808f684SSatish Balay 1295808f684SSatish Balay def testShallowCopy(self): 1305808f684SSatish Balay import copy 131*6f336411SStefano Zampini 1325808f684SSatish Balay rc = self.obj.getRefCount() 1335808f684SSatish Balay obj = copy.copy(self.obj) 1345808f684SSatish Balay self.assertTrue(obj is not self.obj) 1355808f684SSatish Balay self.assertTrue(obj == self.obj) 136*6f336411SStefano Zampini self.assertTrue(isinstance(obj, type(self.obj))) 1375808f684SSatish Balay self.assertEqual(obj.getRefCount(), rc + 1) 1385808f684SSatish Balay del obj 1395808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), rc) 1405808f684SSatish Balay 1415808f684SSatish Balay def testDeepCopy(self): 1425808f684SSatish Balay import copy 143*6f336411SStefano Zampini 1445808f684SSatish Balay rc = self.obj.getRefCount() 1455808f684SSatish Balay try: 1465808f684SSatish Balay obj = copy.deepcopy(self.obj) 1475808f684SSatish Balay except NotImplementedError: 1485808f684SSatish Balay return 1495808f684SSatish Balay self.assertTrue(obj is not self.obj) 1505808f684SSatish Balay self.assertTrue(obj != self.obj) 151*6f336411SStefano Zampini self.assertTrue(isinstance(obj, type(self.obj))) 1525808f684SSatish Balay self.assertEqual(self.obj.getRefCount(), rc) 1535808f684SSatish Balay self.assertEqual(obj.getRefCount(), 1) 1545808f684SSatish Balay del obj 1555808f684SSatish Balay 15684f2ad6dSLawrence Mitchell def testStateInspection(self): 15784f2ad6dSLawrence Mitchell state = self.obj.stateGet() 15884f2ad6dSLawrence Mitchell self.obj.stateIncrease() 15984f2ad6dSLawrence Mitchell self.assertTrue(state < self.obj.stateGet()) 16084f2ad6dSLawrence Mitchell self.obj.stateSet(0) 16184f2ad6dSLawrence Mitchell self.assertTrue(self.obj.stateGet() == 0) 16284f2ad6dSLawrence Mitchell self.obj.stateSet(state) 16384f2ad6dSLawrence Mitchell self.assertTrue(self.obj.stateGet() == state) 16484f2ad6dSLawrence Mitchell 16584f2ad6dSLawrence Mitchell 1665808f684SSatish Balay# -------------------------------------------------------------------- 1675808f684SSatish Balay 168*6f336411SStefano Zampini 1695808f684SSatish Balayclass TestObjectRandom(BaseTestObject, unittest.TestCase): 1705808f684SSatish Balay CLASS = PETSc.Random 1715808f684SSatish Balay FACTORY = 'create' 1725808f684SSatish Balay 173*6f336411SStefano Zampini 1745808f684SSatish Balayclass TestObjectViewer(BaseTestObject, unittest.TestCase): 1755808f684SSatish Balay CLASS = PETSc.Viewer 1765808f684SSatish Balay FACTORY = 'create' 1775808f684SSatish Balay 178*6f336411SStefano Zampini 1795808f684SSatish Balayclass TestObjectIS(BaseTestObject, unittest.TestCase): 1805808f684SSatish Balay CLASS = PETSc.IS 1815808f684SSatish Balay FACTORY = 'createGeneral' 1825808f684SSatish Balay TARGS = ([],) 1835808f684SSatish Balay 184*6f336411SStefano Zampini 1855808f684SSatish Balayclass TestObjectLGMap(BaseTestObject, unittest.TestCase): 1865808f684SSatish Balay CLASS = PETSc.LGMap 1875808f684SSatish Balay FACTORY = 'create' 1885808f684SSatish Balay TARGS = ([],) 1895808f684SSatish Balay 190*6f336411SStefano Zampini 1915808f684SSatish Balayclass TestObjectAO(BaseTestObject, unittest.TestCase): 1925808f684SSatish Balay CLASS = PETSc.AO 1935808f684SSatish Balay FACTORY = 'createMapping' 1945808f684SSatish Balay TARGS = ([], []) 1955808f684SSatish Balay 196*6f336411SStefano Zampini 1975808f684SSatish Balayclass TestObjectDMDA(BaseTestObject, unittest.TestCase): 1985808f684SSatish Balay CLASS = PETSc.DMDA 1995808f684SSatish Balay FACTORY = 'create' 2005808f684SSatish Balay TARGS = ([3, 3, 3],) 2015808f684SSatish Balay 202*6f336411SStefano Zampini 2035808f684SSatish Balayclass TestObjectDS(BaseTestObject, unittest.TestCase): 2045808f684SSatish Balay CLASS = PETSc.DS 2055808f684SSatish Balay FACTORY = 'create' 2065808f684SSatish Balay 207*6f336411SStefano Zampini 2085808f684SSatish Balayclass TestObjectVec(BaseTestObject, unittest.TestCase): 2095808f684SSatish Balay CLASS = PETSc.Vec 2105808f684SSatish Balay FACTORY = 'createSeq' 2115808f684SSatish Balay TARGS = (0,) 2125808f684SSatish Balay 2135808f684SSatish Balay def setUp(self): 2145808f684SSatish Balay BaseTestObject.setUp(self) 2155808f684SSatish Balay self.obj.assemble() 2165808f684SSatish Balay 217*6f336411SStefano Zampini 2185808f684SSatish Balayclass TestObjectMat(BaseTestObject, unittest.TestCase): 2195808f684SSatish Balay CLASS = PETSc.Mat 2205808f684SSatish Balay FACTORY = 'createAIJ' 2215808f684SSatish Balay TARGS = (0,) 2225808f684SSatish Balay KARGS = {'nnz': 0, 'comm': PETSc.COMM_SELF} 2235808f684SSatish Balay 2245808f684SSatish Balay def setUp(self): 2255808f684SSatish Balay BaseTestObject.setUp(self) 2265808f684SSatish Balay self.obj.assemble() 2275808f684SSatish Balay 228*6f336411SStefano Zampini 229af20bb8eSPierre Jolivetclass TestObjectMatPartitioning(BaseTestObject, unittest.TestCase): 230af20bb8eSPierre Jolivet CLASS = PETSc.MatPartitioning 231af20bb8eSPierre Jolivet FACTORY = 'create' 232af20bb8eSPierre Jolivet 233*6f336411SStefano Zampini 2345808f684SSatish Balayclass TestObjectNullSpace(BaseTestObject, unittest.TestCase): 2355808f684SSatish Balay CLASS = PETSc.NullSpace 2365808f684SSatish Balay FACTORY = 'create' 2375808f684SSatish Balay TARGS = (True, []) 2385808f684SSatish Balay 239*6f336411SStefano Zampini 2405808f684SSatish Balayclass TestObjectKSP(BaseTestObject, unittest.TestCase): 2415808f684SSatish Balay CLASS = PETSc.KSP 2425808f684SSatish Balay FACTORY = 'create' 2435808f684SSatish Balay 244*6f336411SStefano Zampini 2455808f684SSatish Balayclass TestObjectPC(BaseTestObject, unittest.TestCase): 2465808f684SSatish Balay CLASS = PETSc.PC 2475808f684SSatish Balay FACTORY = 'create' 2485808f684SSatish Balay 249*6f336411SStefano Zampini 2505808f684SSatish Balayclass TestObjectSNES(BaseTestObject, unittest.TestCase): 2515808f684SSatish Balay CLASS = PETSc.SNES 2525808f684SSatish Balay FACTORY = 'create' 2535808f684SSatish Balay 254*6f336411SStefano Zampini 2555808f684SSatish Balayclass TestObjectTS(BaseTestObject, unittest.TestCase): 2565808f684SSatish Balay CLASS = PETSc.TS 2575808f684SSatish Balay FACTORY = 'create' 258*6f336411SStefano Zampini 2595808f684SSatish Balay def setUp(self): 260*6f336411SStefano Zampini super().setUp() 2615808f684SSatish Balay self.obj.setProblemType(PETSc.TS.ProblemType.NONLINEAR) 2625808f684SSatish Balay self.obj.setType(PETSc.TS.Type.BEULER) 2635808f684SSatish Balay 264*6f336411SStefano Zampini 2655808f684SSatish Balayclass TestObjectTAO(BaseTestObject, unittest.TestCase): 2665808f684SSatish Balay CLASS = PETSc.TAO 2675808f684SSatish Balay FACTORY = 'create' 2685808f684SSatish Balay 269*6f336411SStefano Zampini 2705808f684SSatish Balayclass TestObjectAOBasic(BaseTestObject, unittest.TestCase): 2715808f684SSatish Balay CLASS = PETSc.AO 2725808f684SSatish Balay FACTORY = 'createBasic' 2735808f684SSatish Balay TARGS = ([], []) 2745808f684SSatish Balay 275*6f336411SStefano Zampini 2765808f684SSatish Balayclass TestObjectAOMapping(BaseTestObject, unittest.TestCase): 2775808f684SSatish Balay CLASS = PETSc.AO 2785808f684SSatish Balay FACTORY = 'createMapping' 2795808f684SSatish Balay TARGS = ([], []) 2805808f684SSatish Balay 281*6f336411SStefano Zampini 2825808f684SSatish Balay# class TestObjectFE(BaseTestObject, unittest.TestCase): 2835808f684SSatish Balay# CLASS = PETSc.FE 2845808f684SSatish Balay# FACTORY = 'create' 2855808f684SSatish Balay# 2865808f684SSatish Balay# class TestObjectQuad(BaseTestObject, unittest.TestCase): 2875808f684SSatish Balay# CLASS = PETSc.Quad 2885808f684SSatish Balay# FACTORY = 'create' 2895808f684SSatish Balay 290*6f336411SStefano Zampini 2915808f684SSatish Balayclass TestObjectDMLabel(BaseTestObject, unittest.TestCase): 2925808f684SSatish Balay CLASS = PETSc.DMLabel 2935808f684SSatish Balay FACTORY = 'create' 294*6f336411SStefano Zampini TARGS = ('test',) 295*6f336411SStefano Zampini 2965808f684SSatish Balay 297aa712e9bSRomain Beucherclass TestObjectSpace(BaseTestObject, unittest.TestCase): 298aa712e9bSRomain Beucher CLASS = PETSc.Space 299aa712e9bSRomain Beucher FACTORY = 'create' 300aa712e9bSRomain Beucher 301*6f336411SStefano Zampini 302aa712e9bSRomain Beucherclass TestObjectDualSpace(BaseTestObject, unittest.TestCase): 303aa712e9bSRomain Beucher CLASS = PETSc.DualSpace 304aa712e9bSRomain Beucher FACTORY = 'create' 305aa712e9bSRomain Beucher 3065808f684SSatish Balay 307*6f336411SStefano Zampini# -------------------------------------------------------------------- 30884f2ad6dSLawrence Mitchell 3095808f684SSatish Balayif numpy.iscomplexobj(PETSc.ScalarType()): 3105808f684SSatish Balay del TestObjectTAO 3115808f684SSatish Balay 3125808f684SSatish Balayif __name__ == '__main__': 3135808f684SSatish Balay unittest.main() 314