xref: /petsc/src/binding/petsc4py/test/test_object.py (revision 62e5d2d2208a68fdbd23dac44110783534664de8)
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