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