xref: /petsc/src/binding/petsc4py/test/test_viewer_py.py (revision 22d6dc081b2bdf689b9a42b21f546588ee2028de)
1*22d6dc08SStefano Zampini# --------------------------------------------------------------------
2*22d6dc08SStefano Zampini
3*22d6dc08SStefano Zampinifrom petsc4py import PETSc
4*22d6dc08SStefano Zampiniimport unittest
5*22d6dc08SStefano Zampini
6*22d6dc08SStefano Zampini# --------------------------------------------------------------------
7*22d6dc08SStefano Zampini
8*22d6dc08SStefano Zampini
9*22d6dc08SStefano Zampiniclass EmptyViewer:
10*22d6dc08SStefano Zampini    def setUp(self, viewer):
11*22d6dc08SStefano Zampini        pass
12*22d6dc08SStefano Zampini
13*22d6dc08SStefano Zampini    def view(self, viewer, outviewer):
14*22d6dc08SStefano Zampini        pass
15*22d6dc08SStefano Zampini
16*22d6dc08SStefano Zampini    def setfromoptions(self, viewer):
17*22d6dc08SStefano Zampini        pass
18*22d6dc08SStefano Zampini
19*22d6dc08SStefano Zampini    def flush(self, viewer):
20*22d6dc08SStefano Zampini        pass
21*22d6dc08SStefano Zampini
22*22d6dc08SStefano Zampini
23*22d6dc08SStefano Zampiniclass PythonViewer(EmptyViewer):
24*22d6dc08SStefano Zampini    obj_viewed = []
25*22d6dc08SStefano Zampini
26*22d6dc08SStefano Zampini    def viewObject(self, viewer, pobj):
27*22d6dc08SStefano Zampini        self.obj_viewed.append(pobj.klass)
28*22d6dc08SStefano Zampini
29*22d6dc08SStefano Zampini
30*22d6dc08SStefano Zampini# --------------------------------------------------------------------
31*22d6dc08SStefano Zampini
32*22d6dc08SStefano Zampini
33*22d6dc08SStefano Zampiniclass BaseTestViewPYTHON:
34*22d6dc08SStefano Zampini    ContextClass = None
35*22d6dc08SStefano Zampini    ContextName = None
36*22d6dc08SStefano Zampini
37*22d6dc08SStefano Zampini    def setUp(self):
38*22d6dc08SStefano Zampini        viewer = PETSc.Viewer()
39*22d6dc08SStefano Zampini        viewer.create(PETSc.COMM_SELF)
40*22d6dc08SStefano Zampini        viewer.setType(PETSc.Viewer.Type.PYTHON)
41*22d6dc08SStefano Zampini        self.viewer = viewer
42*22d6dc08SStefano Zampini        if self.ContextClass is not None:
43*22d6dc08SStefano Zampini            ctx = self.ContextClass()
44*22d6dc08SStefano Zampini            self.viewer.setPythonContext(ctx)
45*22d6dc08SStefano Zampini        elif self.ContextName is not None:
46*22d6dc08SStefano Zampini            self.viewer.setPythonType(self.ContextName)
47*22d6dc08SStefano Zampini
48*22d6dc08SStefano Zampini    def tearDown(self):
49*22d6dc08SStefano Zampini        self.viewer.destroy()
50*22d6dc08SStefano Zampini        PETSc.garbage_cleanup()
51*22d6dc08SStefano Zampini
52*22d6dc08SStefano Zampini    def testGetType(self):
53*22d6dc08SStefano Zampini        ctx = self.viewer.getPythonContext()
54*22d6dc08SStefano Zampini        pytype = None
55*22d6dc08SStefano Zampini        if ctx is not None:
56*22d6dc08SStefano Zampini            pytype = f'{ctx.__module__}.{type(ctx).__name__}'
57*22d6dc08SStefano Zampini        self.assertTrue(self.viewer.getPythonType() == pytype)
58*22d6dc08SStefano Zampini
59*22d6dc08SStefano Zampini    def testViewObject(self):
60*22d6dc08SStefano Zampini        v = PETSc.Vec().create(PETSc.COMM_SELF)
61*22d6dc08SStefano Zampini        self.viewer.viewObjectPython(v)
62*22d6dc08SStefano Zampini        v.destroy()
63*22d6dc08SStefano Zampini        v = PETSc.KSP().create(PETSc.COMM_SELF)
64*22d6dc08SStefano Zampini        self.viewer.viewObjectPython(v)
65*22d6dc08SStefano Zampini        v.destroy()
66*22d6dc08SStefano Zampini        v = PETSc.DM().create(PETSc.COMM_SELF)
67*22d6dc08SStefano Zampini        v.setFromOptions()
68*22d6dc08SStefano Zampini        self.viewer.viewObjectPython(v)
69*22d6dc08SStefano Zampini        v.destroy()
70*22d6dc08SStefano Zampini        ctx = self.viewer.getPythonContext()
71*22d6dc08SStefano Zampini        if ctx is not None and hasattr(ctx, 'obj_viewed'):
72*22d6dc08SStefano Zampini            ov = ctx.obj_viewed
73*22d6dc08SStefano Zampini            self.assertTrue(len(ov) == 3)
74*22d6dc08SStefano Zampini            self.assertTrue(ov[0] == 'Vec')
75*22d6dc08SStefano Zampini            self.assertTrue(ov[1] == 'KSP')
76*22d6dc08SStefano Zampini            self.assertTrue(ov[2] == 'DM')
77*22d6dc08SStefano Zampini
78*22d6dc08SStefano Zampini    # def testView(self):
79*22d6dc08SStefano Zampini    #     self.viewer.view()
80*22d6dc08SStefano Zampini
81*22d6dc08SStefano Zampini
82*22d6dc08SStefano Zampiniclass TestNone(BaseTestViewPYTHON, unittest.TestCase):
83*22d6dc08SStefano Zampini    ContextClass = None
84*22d6dc08SStefano Zampini
85*22d6dc08SStefano Zampini
86*22d6dc08SStefano Zampiniclass TestEmptyViewer(BaseTestViewPYTHON, unittest.TestCase):
87*22d6dc08SStefano Zampini    ContextClass = EmptyViewer
88*22d6dc08SStefano Zampini
89*22d6dc08SStefano Zampini
90*22d6dc08SStefano Zampiniclass TestPythonView(BaseTestViewPYTHON, unittest.TestCase):
91*22d6dc08SStefano Zampini    ContextClass = PythonViewer
92*22d6dc08SStefano Zampini
93*22d6dc08SStefano Zampini
94*22d6dc08SStefano Zampini# --------------------------------------------------------------------
95*22d6dc08SStefano Zampini
96*22d6dc08SStefano Zampiniif __name__ == '__main__':
97*22d6dc08SStefano Zampini    unittest.main()
98