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