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