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