xref: /petsc/src/binding/petsc4py/test/test_viewer_py.py (revision 2a0542af5b96679e15dcb3eb4597efe0e4f4a185) !
122d6dc08SStefano Zampini# --------------------------------------------------------------------
222d6dc08SStefano Zampini
322d6dc08SStefano Zampinifrom petsc4py import PETSc
422d6dc08SStefano Zampiniimport unittest
522d6dc08SStefano Zampini
622d6dc08SStefano Zampini# --------------------------------------------------------------------
722d6dc08SStefano Zampini
822d6dc08SStefano Zampini
922d6dc08SStefano Zampiniclass EmptyViewer:
10*27380327SStefano Zampini    def __init__(self):
11*27380327SStefano Zampini        self.log = {}
12*27380327SStefano Zampini
13*27380327SStefano Zampini    def _log(self, method, *args):
14*27380327SStefano Zampini        self.log.setdefault(method, 0)
15*27380327SStefano Zampini        self.log[method] += 1
16*27380327SStefano Zampini
1722d6dc08SStefano Zampini    def setUp(self, viewer):
18*27380327SStefano Zampini        self._log('setUp')
1922d6dc08SStefano Zampini
2022d6dc08SStefano Zampini    def view(self, viewer, outviewer):
21*27380327SStefano Zampini        self._log('view')
2222d6dc08SStefano Zampini
23*27380327SStefano Zampini    def setFromOptions(self, viewer):
24*27380327SStefano Zampini        self._log('setFromOptions')
2522d6dc08SStefano Zampini
2622d6dc08SStefano Zampini    def flush(self, viewer):
27*27380327SStefano Zampini        self._log('flush')
2822d6dc08SStefano Zampini
2922d6dc08SStefano Zampini
3022d6dc08SStefano Zampiniclass PythonViewer(EmptyViewer):
3122d6dc08SStefano Zampini    obj_viewed = []
3222d6dc08SStefano Zampini
3322d6dc08SStefano Zampini    def viewObject(self, viewer, pobj):
3422d6dc08SStefano Zampini        self.obj_viewed.append(pobj.klass)
3522d6dc08SStefano Zampini
3622d6dc08SStefano Zampini
3722d6dc08SStefano Zampini# --------------------------------------------------------------------
3822d6dc08SStefano Zampini
3922d6dc08SStefano Zampini
4022d6dc08SStefano Zampiniclass BaseTestViewPYTHON:
4122d6dc08SStefano Zampini    ContextClass = None
4222d6dc08SStefano Zampini    ContextName = None
4322d6dc08SStefano Zampini
4422d6dc08SStefano Zampini    def setUp(self):
45*27380327SStefano Zampini        self.viewer = PETSc.Viewer()
46*27380327SStefano Zampini        self.viewer.create(PETSc.COMM_SELF)
47*27380327SStefano Zampini        self.viewer.setType(PETSc.Viewer.Type.PYTHON)
4822d6dc08SStefano Zampini        if self.ContextClass is not None:
4922d6dc08SStefano Zampini            ctx = self.ContextClass()
5022d6dc08SStefano Zampini            self.viewer.setPythonContext(ctx)
51*27380327SStefano Zampini            self.viewer.setFromOptions()
52*27380327SStefano Zampini            self.viewer.setUp()
5322d6dc08SStefano Zampini        elif self.ContextName is not None:
5422d6dc08SStefano Zampini            self.viewer.setPythonType(self.ContextName)
55*27380327SStefano Zampini            self.viewer.setFromOptions()
56*27380327SStefano Zampini            self.viewer.setUp()
57*27380327SStefano Zampini        ctx = self.viewer.getPythonContext()
58*27380327SStefano Zampini        if ctx is not None:
59*27380327SStefano Zampini            self.assertTrue(ctx.log['setFromOptions'] == 1)
60*27380327SStefano Zampini            self.assertTrue(ctx.log['setUp'] == 1)
6122d6dc08SStefano Zampini
6222d6dc08SStefano Zampini    def tearDown(self):
6322d6dc08SStefano Zampini        self.viewer.destroy()
6422d6dc08SStefano Zampini        PETSc.garbage_cleanup()
6522d6dc08SStefano Zampini
6622d6dc08SStefano Zampini    def testGetType(self):
6722d6dc08SStefano Zampini        ctx = self.viewer.getPythonContext()
6822d6dc08SStefano Zampini        pytype = None
6922d6dc08SStefano Zampini        if ctx is not None:
7022d6dc08SStefano Zampini            pytype = f'{ctx.__module__}.{type(ctx).__name__}'
7122d6dc08SStefano Zampini        self.assertTrue(self.viewer.getPythonType() == pytype)
7222d6dc08SStefano Zampini
7322d6dc08SStefano Zampini    def testViewObject(self):
7422d6dc08SStefano Zampini        v = PETSc.Vec().create(PETSc.COMM_SELF)
7522d6dc08SStefano Zampini        self.viewer.viewObjectPython(v)
7622d6dc08SStefano Zampini        v.destroy()
7722d6dc08SStefano Zampini        v = PETSc.KSP().create(PETSc.COMM_SELF)
7822d6dc08SStefano Zampini        self.viewer.viewObjectPython(v)
7922d6dc08SStefano Zampini        v.destroy()
8022d6dc08SStefano Zampini        v = PETSc.DM().create(PETSc.COMM_SELF)
8122d6dc08SStefano Zampini        v.setFromOptions()
8222d6dc08SStefano Zampini        self.viewer.viewObjectPython(v)
8322d6dc08SStefano Zampini        v.destroy()
8422d6dc08SStefano Zampini        ctx = self.viewer.getPythonContext()
8522d6dc08SStefano Zampini        if ctx is not None and hasattr(ctx, 'obj_viewed'):
8622d6dc08SStefano Zampini            ov = ctx.obj_viewed
8722d6dc08SStefano Zampini            self.assertTrue(len(ov) == 3)
8822d6dc08SStefano Zampini            self.assertTrue(ov[0] == 'Vec')
8922d6dc08SStefano Zampini            self.assertTrue(ov[1] == 'KSP')
9022d6dc08SStefano Zampini            self.assertTrue(ov[2] == 'DM')
9122d6dc08SStefano Zampini
9222d6dc08SStefano Zampini    # def testView(self):
9322d6dc08SStefano Zampini    #     self.viewer.view()
9422d6dc08SStefano Zampini
9522d6dc08SStefano Zampini
9622d6dc08SStefano Zampiniclass TestNone(BaseTestViewPYTHON, unittest.TestCase):
9722d6dc08SStefano Zampini    ContextClass = None
9822d6dc08SStefano Zampini
9922d6dc08SStefano Zampini
10022d6dc08SStefano Zampiniclass TestEmptyViewer(BaseTestViewPYTHON, unittest.TestCase):
10122d6dc08SStefano Zampini    ContextClass = EmptyViewer
10222d6dc08SStefano Zampini
10322d6dc08SStefano Zampini
10422d6dc08SStefano Zampiniclass TestPythonView(BaseTestViewPYTHON, unittest.TestCase):
10522d6dc08SStefano Zampini    ContextClass = PythonViewer
10622d6dc08SStefano Zampini
10722d6dc08SStefano Zampini
10822d6dc08SStefano Zampini# --------------------------------------------------------------------
10922d6dc08SStefano Zampini
11022d6dc08SStefano Zampiniif __name__ == '__main__':
11122d6dc08SStefano Zampini    unittest.main()
112