xref: /petsc/src/binding/petsc4py/test/test_object.py (revision af20bb8eac6a8aa7996ad69ba6dce21d53d93035)
15808f684SSatish Balayfrom petsc4py import PETSc
25808f684SSatish Balayimport unittest
35808f684SSatish Balay
45808f684SSatish Balay# --------------------------------------------------------------------
55808f684SSatish Balay
65808f684SSatish Balayclass BaseTestObject(object):
75808f684SSatish Balay
85808f684SSatish Balay    CLASS, FACTORY = None, None
95808f684SSatish Balay    TARGS, KARGS = (), {}
105808f684SSatish Balay    BUILD = None
115808f684SSatish Balay    def setUp(self):
125808f684SSatish Balay        self.obj = self.CLASS()
135808f684SSatish Balay        getattr(self.obj,self.FACTORY)(*self.TARGS, **self.KARGS)
145808f684SSatish Balay        if not self.obj: self.obj.create()
155808f684SSatish Balay
165808f684SSatish Balay    def tearDown(self):
175808f684SSatish Balay        self.obj = None
185808f684SSatish Balay
195808f684SSatish Balay    def testTypeRegistry(self):
205808f684SSatish Balay        type_reg = PETSc.__type_registry__
215808f684SSatish Balay        classid = self.obj.getClassId()
225808f684SSatish Balay        typeobj = self.CLASS
235808f684SSatish Balay        if isinstance(self.obj, PETSc.DMDA):
245808f684SSatish Balay            typeobj = PETSc.DM
255808f684SSatish Balay        self.assertTrue(type_reg[classid] is typeobj )
265808f684SSatish Balay
275808f684SSatish Balay    def testLogClass(self):
285808f684SSatish Balay        name = self.CLASS.__name__
295808f684SSatish Balay        if name == 'DMDA': name = 'DM'
305808f684SSatish Balay        logcls = PETSc.Log.Class(name)
315808f684SSatish Balay        classid = self.obj.getClassId()
325808f684SSatish Balay        self.assertEqual(logcls.id, classid)
335808f684SSatish Balay
345808f684SSatish Balay    def testClass(self):
355808f684SSatish Balay        self.assertTrue(isinstance(self.obj, self.CLASS))
365808f684SSatish Balay        self.assertTrue(type(self.obj) is self.CLASS)
375808f684SSatish Balay
385808f684SSatish Balay    def testNonZero(self):
395808f684SSatish Balay        self.assertTrue(bool(self.obj))
405808f684SSatish Balay
415808f684SSatish Balay    def testDestroy(self):
425808f684SSatish Balay        self.assertTrue(bool(self.obj))
435808f684SSatish Balay        self.obj.destroy()
445808f684SSatish Balay        self.assertFalse(bool(self.obj))
455808f684SSatish Balay        ## self.assertRaises(PETSc.Error, self.obj.destroy)
465808f684SSatish Balay        ## self.assertTrue(self.obj.this is this)
475808f684SSatish Balay
485808f684SSatish Balay    def testOptions(self):
495808f684SSatish Balay        self.assertFalse(self.obj.getOptionsPrefix())
505808f684SSatish Balay        prefix1 = 'my_'
515808f684SSatish Balay        self.obj.setOptionsPrefix(prefix1)
525808f684SSatish Balay        self.assertEqual(self.obj.getOptionsPrefix(), prefix1)
535808f684SSatish Balay        prefix2 = 'opt_'
545808f684SSatish Balay        self.obj.setOptionsPrefix(prefix2)
555808f684SSatish Balay        self.assertEqual(self.obj.getOptionsPrefix(), prefix2)
565808f684SSatish Balay        ## self.obj.appendOptionsPrefix(prefix1)
575808f684SSatish Balay        ## self.assertEqual(self.obj.getOptionsPrefix(),
585808f684SSatish Balay        ##                  prefix2 + prefix1)
595808f684SSatish Balay        ## self.obj.prependOptionsPrefix(prefix1)
605808f684SSatish Balay        ## self.assertEqual(self.obj.getOptionsPrefix(),
615808f684SSatish Balay        ##                  prefix1 + prefix2 + prefix1)
625808f684SSatish Balay        self.obj.setFromOptions()
635808f684SSatish Balay
645808f684SSatish Balay    def testName(self):
655808f684SSatish Balay        oldname = self.obj.getName()
665808f684SSatish Balay        newname = '%s-%s' %(oldname, oldname)
675808f684SSatish Balay        self.obj.setName(newname)
685808f684SSatish Balay        self.assertEqual(self.obj.getName(), newname)
695808f684SSatish Balay        self.obj.setName(oldname)
705808f684SSatish Balay        self.assertEqual(self.obj.getName(), oldname)
715808f684SSatish Balay
725808f684SSatish Balay    def testComm(self):
735808f684SSatish Balay        comm = self.obj.getComm()
745808f684SSatish Balay        self.assertTrue(isinstance(comm, PETSc.Comm))
755808f684SSatish Balay        self.assertTrue(comm in [PETSc.COMM_SELF, PETSc.COMM_WORLD])
765808f684SSatish Balay
775808f684SSatish Balay    def testRefCount(self):
785808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), 1)
795808f684SSatish Balay        self.obj.incRef()
805808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), 2)
815808f684SSatish Balay        self.obj.incRef()
825808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), 3)
835808f684SSatish Balay        self.obj.decRef()
845808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), 2)
855808f684SSatish Balay        self.obj.decRef()
865808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), 1)
875808f684SSatish Balay        self.obj.decRef()
885808f684SSatish Balay        self.assertFalse(bool(self.obj))
895808f684SSatish Balay
905808f684SSatish Balay    def testHandle(self):
915808f684SSatish Balay        self.assertTrue(self.obj.handle)
925808f684SSatish Balay        self.assertTrue(self.obj.fortran)
935808f684SSatish Balay        h, f = self.obj.handle, self.obj.fortran
945808f684SSatish Balay        if (h>0 and f>0) or (h<0 and f<0):
955808f684SSatish Balay            self.assertEqual(h, f)
965808f684SSatish Balay        self.obj.destroy()
975808f684SSatish Balay        self.assertFalse(self.obj.handle)
985808f684SSatish Balay        self.assertFalse(self.obj.fortran)
995808f684SSatish Balay
1005808f684SSatish Balay    def testComposeQuery(self):
1015808f684SSatish Balay        import copy
1025808f684SSatish Balay        try:
1035808f684SSatish Balay            myobj = copy.deepcopy(self.obj)
1045808f684SSatish Balay        except NotImplementedError:
1055808f684SSatish Balay            return
1065808f684SSatish Balay        self.assertEqual(myobj.getRefCount(), 1)
1075808f684SSatish Balay        self.obj.compose('myobj', myobj)
1085808f684SSatish Balay        self.assertTrue(type(self.obj.query('myobj')) is self.CLASS)
1095808f684SSatish Balay        self.assertEqual(self.obj.query('myobj'), myobj)
1105808f684SSatish Balay        self.assertEqual(myobj.getRefCount(), 2)
1115808f684SSatish Balay        self.obj.compose('myobj', None)
1125808f684SSatish Balay        self.assertEqual(myobj.getRefCount(), 1)
1135808f684SSatish Balay        self.assertEqual(self.obj.query('myobj'), None)
1145808f684SSatish Balay        myobj.destroy()
1155808f684SSatish Balay
1165808f684SSatish Balay    def testProperties(self):
1175808f684SSatish Balay        self.assertEqual(self.obj.getClassId(),   self.obj.classid)
1185808f684SSatish Balay        self.assertEqual(self.obj.getClassName(), self.obj.klass)
1195808f684SSatish Balay        self.assertEqual(self.obj.getType(),      self.obj.type)
1205808f684SSatish Balay        self.assertEqual(self.obj.getName(),      self.obj.name)
1215808f684SSatish Balay        self.assertEqual(self.obj.getComm(),      self.obj.comm)
1225808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(),  self.obj.refcount)
1235808f684SSatish Balay
1245808f684SSatish Balay    def testShallowCopy(self):
1255808f684SSatish Balay        import copy
1265808f684SSatish Balay        rc = self.obj.getRefCount()
1275808f684SSatish Balay        obj = copy.copy(self.obj)
1285808f684SSatish Balay        self.assertTrue(obj is not self.obj)
1295808f684SSatish Balay        self.assertTrue(obj == self.obj)
1305808f684SSatish Balay        self.assertTrue(type(obj) is type(self.obj))
1315808f684SSatish Balay        self.assertEqual(obj.getRefCount(), rc+1)
1325808f684SSatish Balay        del obj
1335808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), rc)
1345808f684SSatish Balay
1355808f684SSatish Balay    def testDeepCopy(self):
1365808f684SSatish Balay        import copy
1375808f684SSatish Balay        rc = self.obj.getRefCount()
1385808f684SSatish Balay        try:
1395808f684SSatish Balay            obj = copy.deepcopy(self.obj)
1405808f684SSatish Balay        except NotImplementedError:
1415808f684SSatish Balay            return
1425808f684SSatish Balay        self.assertTrue(obj is not self.obj)
1435808f684SSatish Balay        self.assertTrue(obj != self.obj)
1445808f684SSatish Balay        self.assertTrue(type(obj) is type(self.obj))
1455808f684SSatish Balay        self.assertEqual(self.obj.getRefCount(), rc)
1465808f684SSatish Balay        self.assertEqual(obj.getRefCount(), 1)
1475808f684SSatish Balay        del obj
1485808f684SSatish Balay
1495808f684SSatish Balay# --------------------------------------------------------------------
1505808f684SSatish Balay
1515808f684SSatish Balayclass TestObjectRandom(BaseTestObject, unittest.TestCase):
1525808f684SSatish Balay    CLASS = PETSc.Random
1535808f684SSatish Balay    FACTORY = 'create'
1545808f684SSatish Balay
1555808f684SSatish Balayclass TestObjectViewer(BaseTestObject, unittest.TestCase):
1565808f684SSatish Balay    CLASS = PETSc.Viewer
1575808f684SSatish Balay    FACTORY = 'create'
1585808f684SSatish Balay
1595808f684SSatish Balayclass TestObjectIS(BaseTestObject, unittest.TestCase):
1605808f684SSatish Balay    CLASS  = PETSc.IS
1615808f684SSatish Balay    FACTORY = 'createGeneral'
1625808f684SSatish Balay    TARGS = ([],)
1635808f684SSatish Balay
1645808f684SSatish Balayclass TestObjectLGMap(BaseTestObject, unittest.TestCase):
1655808f684SSatish Balay    CLASS = PETSc.LGMap
1665808f684SSatish Balay    FACTORY = 'create'
1675808f684SSatish Balay    TARGS = ([],)
1685808f684SSatish Balay
1695808f684SSatish Balayclass TestObjectAO(BaseTestObject, unittest.TestCase):
1705808f684SSatish Balay    CLASS  = PETSc.AO
1715808f684SSatish Balay    FACTORY = 'createMapping'
1725808f684SSatish Balay    TARGS = ([], [])
1735808f684SSatish Balay
1745808f684SSatish Balayclass TestObjectDMDA(BaseTestObject, unittest.TestCase):
1755808f684SSatish Balay    CLASS  = PETSc.DMDA
1765808f684SSatish Balay    FACTORY = 'create'
1775808f684SSatish Balay    TARGS = ([3,3,3],)
1785808f684SSatish Balay
1795808f684SSatish Balayclass TestObjectDS(BaseTestObject, unittest.TestCase):
1805808f684SSatish Balay    CLASS  = PETSc.DS
1815808f684SSatish Balay    FACTORY = 'create'
1825808f684SSatish Balay
1835808f684SSatish Balayclass TestObjectVec(BaseTestObject, unittest.TestCase):
1845808f684SSatish Balay    CLASS   = PETSc.Vec
1855808f684SSatish Balay    FACTORY = 'createSeq'
1865808f684SSatish Balay    TARGS   = (0,)
1875808f684SSatish Balay
1885808f684SSatish Balay    def setUp(self):
1895808f684SSatish Balay        BaseTestObject.setUp(self)
1905808f684SSatish Balay        self.obj.assemble()
1915808f684SSatish Balay
1925808f684SSatish Balayclass TestObjectMat(BaseTestObject, unittest.TestCase):
1935808f684SSatish Balay    CLASS  = PETSc.Mat
1945808f684SSatish Balay    FACTORY = 'createAIJ'
1955808f684SSatish Balay    TARGS = (0,)
1965808f684SSatish Balay    KARGS   = {'nnz':0, 'comm': PETSc.COMM_SELF}
1975808f684SSatish Balay
1985808f684SSatish Balay    def setUp(self):
1995808f684SSatish Balay        BaseTestObject.setUp(self)
2005808f684SSatish Balay        self.obj.assemble()
2015808f684SSatish Balay
202*af20bb8eSPierre Jolivetclass TestObjectMatPartitioning(BaseTestObject, unittest.TestCase):
203*af20bb8eSPierre Jolivet    CLASS  = PETSc.MatPartitioning
204*af20bb8eSPierre Jolivet    FACTORY = 'create'
205*af20bb8eSPierre Jolivet
2065808f684SSatish Balayclass TestObjectNullSpace(BaseTestObject, unittest.TestCase):
2075808f684SSatish Balay    CLASS  = PETSc.NullSpace
2085808f684SSatish Balay    FACTORY = 'create'
2095808f684SSatish Balay    TARGS = (True, [])
2105808f684SSatish Balay
2115808f684SSatish Balayclass TestObjectKSP(BaseTestObject, unittest.TestCase):
2125808f684SSatish Balay    CLASS = PETSc.KSP
2135808f684SSatish Balay    FACTORY = 'create'
2145808f684SSatish Balay
2155808f684SSatish Balayclass TestObjectPC(BaseTestObject, unittest.TestCase):
2165808f684SSatish Balay    CLASS = PETSc.PC
2175808f684SSatish Balay    FACTORY = 'create'
2185808f684SSatish Balay
2195808f684SSatish Balayclass TestObjectSNES(BaseTestObject, unittest.TestCase):
2205808f684SSatish Balay    CLASS = PETSc.SNES
2215808f684SSatish Balay    FACTORY = 'create'
2225808f684SSatish Balay
2235808f684SSatish Balayclass TestObjectTS(BaseTestObject, unittest.TestCase):
2245808f684SSatish Balay    CLASS  = PETSc.TS
2255808f684SSatish Balay    FACTORY = 'create'
2265808f684SSatish Balay    def setUp(self):
2275808f684SSatish Balay        super(TestObjectTS, self).setUp()
2285808f684SSatish Balay        self.obj.setProblemType(PETSc.TS.ProblemType.NONLINEAR)
2295808f684SSatish Balay        self.obj.setType(PETSc.TS.Type.BEULER)
2305808f684SSatish Balay
2315808f684SSatish Balayclass TestObjectTAO(BaseTestObject, unittest.TestCase):
2325808f684SSatish Balay    CLASS  = PETSc.TAO
2335808f684SSatish Balay    FACTORY = 'create'
2345808f684SSatish Balay
2355808f684SSatish Balayclass TestObjectAOBasic(BaseTestObject, unittest.TestCase):
2365808f684SSatish Balay    CLASS  = PETSc.AO
2375808f684SSatish Balay    FACTORY = 'createBasic'
2385808f684SSatish Balay    TARGS = ([], [])
2395808f684SSatish Balay
2405808f684SSatish Balayclass TestObjectAOMapping(BaseTestObject, unittest.TestCase):
2415808f684SSatish Balay    CLASS  = PETSc.AO
2425808f684SSatish Balay    FACTORY = 'createMapping'
2435808f684SSatish Balay    TARGS = ([], [])
2445808f684SSatish Balay
2455808f684SSatish Balay# class TestObjectFE(BaseTestObject, unittest.TestCase):
2465808f684SSatish Balay#     CLASS  = PETSc.FE
2475808f684SSatish Balay#     FACTORY = 'create'
2485808f684SSatish Balay#
2495808f684SSatish Balay# class TestObjectQuad(BaseTestObject, unittest.TestCase):
2505808f684SSatish Balay#     CLASS  = PETSc.Quad
2515808f684SSatish Balay#     FACTORY = 'create'
2525808f684SSatish Balay
2535808f684SSatish Balayclass TestObjectDMLabel(BaseTestObject, unittest.TestCase):
2545808f684SSatish Balay    CLASS  = PETSc.DMLabel
2555808f684SSatish Balay    FACTORY = 'create'
2565808f684SSatish Balay    TARGS = ("test",)
2575808f684SSatish Balay
2585808f684SSatish Balay# --------------------------------------------------------------------
2595808f684SSatish Balay
2605808f684SSatish Balayimport numpy
2615808f684SSatish Balayif numpy.iscomplexobj(PETSc.ScalarType()):
2625808f684SSatish Balay    del TestObjectTAO
2635808f684SSatish Balay
2645808f684SSatish Balayif __name__ == '__main__':
2655808f684SSatish Balay    unittest.main()
266