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