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