[cig-commits] r14664 - in short/3D/PyLith/branches/pylith-swig: . modulesrc/meshio pylith/meshio unittests/pytests/meshio
brad at geodynamics.org
brad at geodynamics.org
Fri Apr 10 17:13:37 PDT 2009
Author: brad
Date: 2009-04-10 17:13:36 -0700 (Fri, 10 Apr 2009)
New Revision: 14664
Added:
short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestDataWriterVTK.py
Modified:
short/3D/PyLith/branches/pylith-swig/TODO
short/3D/PyLith/branches/pylith-swig/modulesrc/meshio/Makefile.am
short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilter.py
short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilterAvg.py
short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriter.py
short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriterVTK.py
short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputManager.py
short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputSolnSubset.py
short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilter.py
short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilterVecNorm.py
short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestCellFilterAvg.py
short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestVertexFilterVecNorm.py
short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/testmeshio.py
Log:
Worked on updating Python output unit tests.
Modified: short/3D/PyLith/branches/pylith-swig/TODO
===================================================================
--- short/3D/PyLith/branches/pylith-swig/TODO 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/TODO 2009-04-11 00:13:36 UTC (rev 14664)
@@ -39,6 +39,8 @@
Eliminate use of Inventory class.
+ add test_factory() methods to Python unit tests
+
Cleanup error checking on PETSc calls.
FaultCohesiveKin
DataWriterVTK
@@ -47,6 +49,9 @@
Add _cleanup() to components to deallocate local data structures.
Add cleanup() to non-components to deallocate local data structures.
+ Create createModuleObj() methods to Python objects as standard way
+ of creating handle to C++ object.
+
Add check before calling newSection() when want to enforce at
least 1 value.
Modified: short/3D/PyLith/branches/pylith-swig/modulesrc/meshio/Makefile.am
===================================================================
--- short/3D/PyLith/branches/pylith-swig/modulesrc/meshio/Makefile.am 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/modulesrc/meshio/Makefile.am 2009-04-11 00:13:36 UTC (rev 14664)
@@ -27,7 +27,8 @@
VertexFilterVecNorm.i \
DataWriter.i \
DataWriterVTK.i \
- OutputManager.i
+ OutputManager.i \
+ OutputSolnSubset.i
swig_generated = \
meshio_wrap.cxx \
Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilter.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilter.py 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilter.py 2009-04-11 00:13:36 UTC (rev 14664)
@@ -17,10 +17,10 @@
##
## Factory: output_cell_filter
-from pyre.components.Component import Component
+from pylith.utils.PetscComponent import PetscComponent
# CellFilter class
-class CellFilter(Component):
+class CellFilter(PetscComponent):
"""
Python abstract base class for filtering cell fields when writing
finite-element data.
@@ -28,33 +28,13 @@
Factory: output_cell_filter
"""
- # INVENTORY //////////////////////////////////////////////////////////
-
- class Inventory(Component.Inventory):
- """
- Python object for managing CellFilter facilities and properties.
- """
-
- ## @class Inventory
- ## Python object for managing CellFilter facilities and properties.
- ##
- ## \b Properties
- ## @li None
- ##
- ## \b Facilities
- ## @li None
-
- import pyre.inventory
-
-
# PUBLIC METHODS /////////////////////////////////////////////////////
def __init__(self, name="cellfilter"):
"""
Constructor.
"""
- Component.__init__(self, name, facility="cellfilter")
- self.cppHandle = None
+ PetscComponent.__init__(self, name, facility="cellfilter")
return
@@ -69,33 +49,9 @@
"""
Initialize output manager.
"""
- self._createCppHandle()
-
- if None != self.cppHandle and quadrature != None:
- # Only set quadrature if filter is specified and quadrature is
- # provided.
- assert(None != self.cppHandle)
- self.cppHandle.quadrature = quadrature.cppHandle
return
- # PRIVATE METHODS ////////////////////////////////////////////////////
-
- def _configure(self):
- """
- Set members based using inventory.
- """
- Component._configure(self)
- return
-
-
- def _createCppHandle(self):
- """
- Create handle to C++ object.
- """
- return
-
-
# FACTORIES ////////////////////////////////////////////////////////////
def output_cell_filter():
Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilterAvg.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilterAvg.py 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/CellFilterAvg.py 2009-04-11 00:13:36 UTC (rev 14664)
@@ -18,45 +18,79 @@
## Factory: output_cell_filter
from CellFilter import CellFilter
+from meshio import MeshCellFilterAvg as ModuleMeshObject
+from meshio import SubMeshCellFilterAvg as ModuleSubMeshObject
-# CellFilterAvg class
-class CellFilterAvg(CellFilter):
+# MeshCellFilterAvg class
+class MeshCellFilterAvg(CellFilter, ModuleMeshObject):
"""
Python class for average cell fields over each cell's quadrature
points when writing finite-element data.
- Factory: output_cell_filter
+ Factory: mesh_output_cell_filter
"""
# PUBLIC METHODS /////////////////////////////////////////////////////
- def __init__(self, name="cellfilteravg"):
+ def __init__(self, name="meshcellfilteravg"):
"""
Constructor.
"""
CellFilter.__init__(self, name)
+ ModuleMeshObject.__init__(self)
return
- # PRIVATE METHODS ////////////////////////////////////////////////////
+ def initialize(self, quadrature):
+ """
+ Initialize output manager.
+ """
+ self.quadrature(quadrature)
+ return
- def _createCppHandle(self):
+
+# SubMeshCellFilterAvg class
+class SubMeshCellFilterAvg(CellFilter, ModuleSubMeshObject):
+ """
+ Python class for average cell fields over each cell's quadrature
+ points when writing finite-element data.
+
+ Factory: submesh_output_cell_filter
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="submeshcellfilteravg"):
"""
- Create handle to C++ object.
+ Constructor.
"""
- if None == self.cppHandle:
- import meshio as bindings
- self.cppHandle = bindings.CellFilterAvg()
+ CellFilter.__init__(self, name)
+ ModuleSubMeshObject.__init__(self)
return
-
+
+ def initialize(self, quadrature):
+ """
+ Initialize output manager.
+ """
+ self.quadrature(quadrature)
+ return
+
+
# FACTORIES ////////////////////////////////////////////////////////////
-def output_cell_filter():
+def mesh_output_cell_filter():
"""
Factory associated with CellFilter.
"""
- return CellFilterAvg()
+ return MeshCellFilterAvg()
+def submesh_output_cell_filter():
+ """
+ Factory associated with CellFilter.
+ """
+ return SubMeshCellFilterAvg()
+
+
# End of file
Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriter.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriter.py 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriter.py 2009-04-11 00:13:36 UTC (rev 14664)
@@ -16,41 +16,25 @@
##
## Factory: output_data_writer
-from pyre.components.Component import Component
+from pylith.utils.PetscComponent import PetscComponent
# DataWriter class
-class DataWriter(Component):
+class DataWriter(PetscComponent):
"""
Python abstract base class for writing finite-element data.
"""
# INVENTORY //////////////////////////////////////////////////////////
+
+ # None
- class Inventory(Component.Inventory):
- """
- Python object for managing DataWriter facilities and properties.
- """
-
- ## @class Inventory
- ## Python object for managing DataWriter facilities and properties.
- ##
- ## \b Properties
- ## @li None
- ##
- ## \b Facilities
- ## @li None
-
- import pyre.inventory
-
-
# PUBLIC METHODS /////////////////////////////////////////////////////
def __init__(self, name="datawriter"):
"""
Constructor.
"""
- Component.__init__(self, name, facility="datawriter")
- self.cppHandle = None
+ PetscComponent.__init__(self, name, facility="datawriter")
return
@@ -65,27 +49,7 @@
"""
Initialize writer.
"""
- self._createCppHandle()
-
return
- # PRIVATE METHODS ////////////////////////////////////////////////////
-
- def _configure(self):
- """
- Set members based using inventory.
- """
- Component._configure(self)
- return
-
-
- def _createCppHandle(self):
- """
- Create handle to corresponding C++ object.
- """
- raise NotImplementedError("Please implement _createCppHandle() in " \
- "derived class.")
-
-
# End of file
Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriterVTK.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriterVTK.py 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/DataWriterVTK.py 2009-04-11 00:13:36 UTC (rev 14664)
@@ -13,54 +13,46 @@
## @file pyre/meshio/DataWriterVTK.py
##
## @brief Python object for writing finite-element data to VTK file.
-##
-## Factory: output_data_writer
from DataWriter import DataWriter
+from meshio import MeshDataWriterVTK as ModuleMeshObject
+from meshio import SubMeshDataWriterVTK as ModuleSubMeshObject
# DataWriterVTK class
class DataWriterVTK(DataWriter):
"""
Python object for writing finite-element data to VTK file.
- Factory: output_data_writer
+ Inventory
+
+ \b Properties
+ @li \b filename Name of VTK file.
+ @li \b time_format C style format string for time stamp in filename.
+ @li \b time_constant Value used to normalize time stamp in filename.
+
+ \b Facilities
+ @li None
"""
# INVENTORY //////////////////////////////////////////////////////////
- class Inventory(DataWriter.Inventory):
- """
- Python object for managing DataWriterVTK facilities and properties.
- """
+ import pyre.inventory
- ## @class Inventory
- ## Python object for managing DataWriterVTK facilities and properties.
- ##
- ## \b Properties
- ## @li \b filename Name of VTK file.
- ## @li \b time_format C style format string for time stamp in filename.
- ## @li \b time_constant Value used to normalize time stamp in filename.
- ##
- ## \b Facilities
- ## @li None
+ filename = pyre.inventory.str("filename", default="output.vtk")
+ filename.meta['tip'] = "Name of VTK file."
- import pyre.inventory
+ timeFormat = pyre.inventory.str("time_format", default="%f")
+ timeFormat.meta['tip'] = "C style format string for time stamp in filename."
- filename = pyre.inventory.str("filename", default="output.vtk")
- filename.meta['tip'] = "Name of VTK file."
+ from pyre.units.time import second
+ timeConstant = pyre.inventory.dimensional("time_constant",
+ default=1.0*second,
+ validator=pyre.inventory.greater(0.0*second))
+ timeConstant.meta['tip'] = "Values used to normalize time stamp in filename."
- timeFormat = pyre.inventory.str("time_format", default="%f")
- timeFormat.meta['tip'] = "C style format string for time stamp in filename."
-
- from pyre.units.time import second
- timeConstant = pyre.inventory.dimensional("time_constant",
- default=1.0*second,
- validator=pyre.inventory.greater(0.0*second))
- timeConstant.meta['tip'] = "Values used to normalize time stamp in filename."
-
# PUBLIC METHODS /////////////////////////////////////////////////////
- def __init__(self, name="solutioniovtk"):
+ def __init__(self, name="datawritervtk"):
"""
Constructor.
"""
@@ -78,43 +70,89 @@
timeScale = normalizer.timeScale()
self.timeConstant = normalizer.nondimensionalize(self.timeConstant,
timeScale)
-
- self.cppHandle.filename = self.filename
- self.cppHandle.timeFormat = self.timeFormat
- self.cppHandle.timeConstant = self.timeConstant
return
- # PRIVATE METHODS ////////////////////////////////////////////////////
+# MeshDataWriterVTK class
+class MeshDataWriterVTK(DataWriterVTK, ModuleMeshObject):
+ """
+ Python object for writing finite-element data to VTK file.
- def _configure(self):
+ Inventory
+
+ Factory: mesh_output_data_writer
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="meshdatawritervtk"):
"""
- Set members based using inventory.
+ Constructor.
"""
- DataWriter._configure(self)
- self.filename = self.inventory.filename
- self.timeFormat = self.inventory.timeFormat
- self.timeConstant = self.inventory.timeConstant
+ DataWriterVTK.__init__(self, name)
+ ModuleMeshObject.__init__(self)
return
- def _createCppHandle(self):
+ def initialize(self, normalizer):
"""
- Create handle to corresponding C++ object.
+ Initialize writer.
"""
- if None == self.cppHandle:
- import pylith.meshio.meshio as bindings
- self.cppHandle = bindings.DataWriterVTK()
+ DataWriterVTK.initialize(self, normalizer)
+
+ ModuleMeshObject.filename(self, self.filename)
+ ModuleMeshObject.timeFormat(self, self.timeFormat)
+ ModuleMeshObject.timeConstant(self, self.timeConstant.value)
return
+# SubMeshDataWriterVTK class
+class SubMeshDataWriterVTK(DataWriterVTK, ModuleSubMeshObject):
+ """
+ Python object for writing finite-element data to VTK file.
+
+ Inventory
+
+ Factory: submesh_output_data_writer
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="submeshdatawritervtk"):
+ """
+ Constructor.
+ """
+ DataWriterVTK.__init__(self, name)
+ ModuleSubMeshObject.__init__(self)
+ return
+
+
+ def initialize(self, normalizer):
+ """
+ Initialize writer.
+ """
+ DataWriterVTK.initialize(self, normalizer)
+
+ ModuleSubMeshObject.filename(self, self.filename)
+ ModuleSubMeshObject.timeFormat(self, self.timeFormat)
+ ModuleSubMeshObject.timeConstant(self, self.timeConstant.value)
+ return
+
+
# FACTORIES ////////////////////////////////////////////////////////////
-def output_data_writer():
+def mesh_output_data_writer():
"""
- Factory associated with DataWriterVTK.
+ Factory associated with MeshDataWriterVTK.
"""
- return DataWriterVTK()
+ return MeshDataWriterVTK()
+def submesh_output_data_writer():
+ """
+ Factory associated with SubMeshDataWriterVTK.
+ """
+ return SubMeshDataWriterVTK()
+
+
# End of file
Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputManager.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputManager.py 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputManager.py 2009-04-11 00:13:36 UTC (rev 14664)
@@ -18,6 +18,8 @@
## Factory: output_manager
from pyre.components.Component import Component
+from meshio import MeshOutputManager as ModuleMeshObject
+from meshio import SubMeshOutputManager as ModuleSubMeshObject
# OutputManager class
class OutputManager(Component):
@@ -25,69 +27,33 @@
Python abstract base class for managing output of finite-element
information.
- Factory: output_manager
+ \b Properties
+ @li \b output_freq Flag indicating whether to use 'time_step' or 'skip'
+ to set frequency of solution output.
+ @li \b time_step Time step between solution output.
+ @li \b skip Number of time steps to skip between solution output.
+
+ \b Facilities
+ @li \b coordsys Coordinate system for output.
"""
# INVENTORY //////////////////////////////////////////////////////////
- class Inventory(Component.Inventory):
- """
- Python object for managing OutputManager facilities and properties.
- """
+ import pyre.inventory
- ## @class Inventory
- ## Python object for managing OutputManager facilities and properties.
- ##
- ## \b Properties
- ## @li \b output_freq Flag indicating whether to use 'time_step' or 'skip'
- ## to set frequency of solution output.
- ## @li \b time_step Time step between solution output.
- ## @li \b skip Number of time steps to skip between solution output.
- ##
- ## \b Facilities
- ## @li \b writer Writer for data.
- ## @li \b coordsys Coordinate system for output.
- ## @li \b vertex_filter Filter for vertex data.
- ## @li \b cell_filter Filter for cell data.
-
- import pyre.inventory
-
- outputFreq = pyre.inventory.str("output_freq", default="skip",
- validator=pyre.inventory.choice(["skip", "time_step"]))
- outputFreq.meta['tip'] = "Flag indicating whether to use 'time_step' " \
- "or 'skip' to set frequency of output."
-
- from pyre.units.time import s
- dt = pyre.inventory.dimensional("time_step", default=1.0*s)
- dt.meta['tip'] = "Time step between output."
-
- skip = pyre.inventory.int("skip", default=0,
- validator=pyre.inventory.greaterEqual(0))
- skip.meta['tip'] = "Number of time steps to skip between output."
-
- from DataWriterVTK import DataWriterVTK
- writer = pyre.inventory.facility("writer", factory=DataWriterVTK,
- family="data_writer")
- writer.meta['tip'] = "Writer for data."
-
- from spatialdata.geocoords.CSCart import CSCart
- coordsys = pyre.inventory.facility("coordsys", family="coordsys",
- factory=CSCart)
- coordsys.meta['tip'] = "Coordinate system for output."
+ outputFreq = pyre.inventory.str("output_freq", default="skip",
+ validator=pyre.inventory.choice(["skip", "time_step"]))
+ outputFreq.meta['tip'] = "Flag indicating whether to use 'time_step' " \
+ "or 'skip' to set frequency of output."
- from VertexFilter import VertexFilter
- vertexFilter = pyre.inventory.facility("vertex_filter",
- factory=VertexFilter,
- family="output_vertex_filter")
- vertexFilter.meta['tip'] = "Filter for vertex data."
-
- from CellFilter import CellFilter
- cellFilter = pyre.inventory.facility("cell_filter",
- factory=CellFilter,
- family="output_cell_filter")
- cellFilter.meta['tip'] = "Filter for cell data."
-
-
+ from pyre.units.time import s
+ dt = pyre.inventory.dimensional("time_step", default=1.0*s)
+ dt.meta['tip'] = "Time step between output."
+
+ skip = pyre.inventory.int("skip", default=0,
+ validator=pyre.inventory.greaterEqual(0))
+ skip.meta['tip'] = "Number of time steps to skip between output."
+
# PUBLIC METHODS /////////////////////////////////////////////////////
def __init__(self, name="outputmanager"):
@@ -96,7 +62,6 @@
"""
Component.__init__(self, name, facility="outputmanager")
self._loggingPrefix = "OutM "
- self.cppHandle = None
self._stepCur = 0
self._stepWrite = None
self._tWrite = None
@@ -105,12 +70,14 @@
self.vertexDataFields = []
self.cellInfoFields = []
self.cellDataFields = []
+
+ self._createModuleObj()
return
def preinitialize(self, dataProvider):
"""
- Do
+ Setup output manager.
"""
self._setupLogging()
self.dataProvider = dataProvider
@@ -156,7 +123,6 @@
self.cellFilter.initialize(quadrature)
self.writer.initialize(normalizer)
- self._sync()
self._logger.eventEnd(logEvent)
return
@@ -176,13 +142,9 @@
nsteps = 1 + int(totalTime / self.dt)
(mesh, label, labelId) = self.dataProvider.getDataMesh()
-
- assert(None != self.cppHandle)
- assert(None != mesh.cppHandle)
- assert(None != mesh.coordsys.cppHandle)
- self.cppHandle.open(mesh.cppHandle, mesh.coordsys.cppHandle,
- nsteps, label, labelId)
+ ModuleOutputManager.open(self, mesh, nsteps, label, labelId)
+
self._logger.eventEnd(logEvent)
return
@@ -194,8 +156,7 @@
logEvent = "%sclose" % self._loggingPrefix
self._logger.eventBegin(logEvent)
- assert(None != self.cppHandle)
- self.cppHandle.close()
+ ModuleOutputManager.close(self)
self._logger.eventEnd(logEvent)
return
@@ -212,21 +173,17 @@
t = 0.0
self.open(totalTime=0.0, numTimeSteps=0)
(mesh, label, labelId) = self.dataProvider.getDataMesh()
- self.cppHandle.openTimeStep(t,
- mesh.cppHandle, mesh.coordsys.cppHandle,
- label, labelId)
+ ModuleOutputManager.openTimeStep(self, t, mesh, label, labelId)
for name in self.vertexInfoFields:
(field, fieldType) = self.dataProvider.getVertexField(name)
- self.cppHandle.appendVertexField(t, name, field, fieldType,
- mesh.cppHandle)
+ ModuleOutputManager.appendVertexField(self, t, field)
for name in self.cellInfoFields:
(field, fieldType) = self.dataProvider.getCellField(name)
- self.cppHandle.appendCellField(t, name, field, fieldType,
- mesh.cppHandle, label, labelId)
+ ModuleOutputManager.appendCellField(self, t, field, label, labelId)
- self.cppHandle.closeTimeStep()
+ ModuleOutputManager.closeTimeStep(self)
self.close()
self._logger.eventEnd(logEvent)
@@ -245,21 +202,17 @@
len(self.cellDataFields) ) > 0:
(mesh, label, labelId) = self.dataProvider.getDataMesh()
- self.cppHandle.openTimeStep(t,
- mesh.cppHandle, mesh.coordsys.cppHandle,
- label, labelId)
+ ModuleOutputManager.openTimeStep(self, t, mesh, label, labelId)
for name in self.vertexDataFields:
(field, fieldType) = self.dataProvider.getVertexField(name, fields)
- self.cppHandle.appendVertexField(t, name, field, fieldType,
- mesh.cppHandle)
+ ModuleOutputManager.appendVertexField(self, t, field)
for name in self.cellDataFields:
(field, fieldType) = self.dataProvider.getCellField(name, fields)
- self.cppHandle.appendCellField(t, name, field, fieldType,
- mesh.cppHandle, label, labelId)
+ ModuleOutputManager.appendCellField(self, t, field)
- self.cppHandle.closeTimeStep()
+ ModuleOutputManager.closeTimeStep(self)
self._logger.eventEnd(logEvent)
return
@@ -271,32 +224,16 @@
"""
Set members based using inventory.
"""
- Component._configure(self)
- self.outputFreq = self.inventory.outputFreq
- self.dt = self.inventory.dt
- self.skip = self.inventory.skip
- self.coordsys = self.inventory.coordsys
- self.writer = self.inventory.writer
- self.vertexFilter = self.inventory.vertexFilter
- self.cellFilter = self.inventory.cellFilter
+ PetscComponent._configure(self)
+ ModuleOutputManager.coordsys(self, self.coordsys)
return
- def _sync(self):
+ def _createModuleObj(self):
"""
- Force synchronization between Python and C++.
+ Create handle to C++ object.
"""
- if None == self.cppHandle:
- import pylith.meshio.meshio as bindings
- self.cppHandle = bindings.OutputManager()
-
- assert(self.coordsys.cppHandle != None)
- assert(self.writer.cppHandle != None)
-
- self.cppHandle.coordsys = self.coordsys.cppHandle
- self.cppHandle.writer = self.writer.cppHandle
- self.cppHandle.vertexFilter = self.vertexFilter.cppHandle
- self.cppHandle.cellFilter = self.cellFilter.cppHandle
+ ModuleOutputManager.__init__(self)
return
@@ -399,13 +336,162 @@
return
+# MeshOutputManager class
+class MeshOutputManager(OutputManager, ModuleMeshObject):
+ """
+ Python abstract base class for managing output of finite-element
+ information.
+
+ \b Properties
+ @li None
+
+ \b Facilities
+ @li \b writer Writer for data.
+ @li \b vertex_filter Filter for vertex data.
+ @li \b cell_filter Filter for cell data.
+
+ Factory: mesh_output_manager
+ """
+
+ # INVENTORY //////////////////////////////////////////////////////////
+
+ import pyre.inventory
+
+ from DataWriterVTK import MeshDataWriterVTK
+ writer = pyre.inventory.facility("writer", factory=MeshDataWriterVTK,
+ family="mesh_data_writer")
+ writer.meta['tip'] = "Writer for data."
+
+ from VertexFilter import MeshVertexFilter
+ vertexFilter = pyre.inventory.facility("vertex_filter",
+ factory=MeshVertexFilter,
+ family="mesh_output_vertex_filter")
+ vertexFilter.meta['tip'] = "Filter for vertex data."
+
+ from CellFilter import MeshCellFilter
+ cellFilter = pyre.inventory.facility("cell_filter",
+ factory=MeshCellFilter,
+ family="mesh_output_cell_filter")
+ cellFilter.meta['tip'] = "Filter for cell data."
+
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="outputmanager"):
+ """
+ Constructor.
+ """
+ OutputManager.__init__(self, name, facility="meshoutputmanager")
+ self._createModuleObj()
+ return
+
+
+ # PRIVATE METHODS ////////////////////////////////////////////////////
+
+ def _configure(self):
+ """
+ Set members based using inventory.
+ """
+ OutputManager._configure(self)
+ ModuleMeshObject.writer(self.writer)
+ ModuleMeshObject.vertexFilter(self.vertexFilter)
+ ModuleMeshObject.cellFilter(self.cellFilter)
+ return
+
+
+ def _createModuleObj(self):
+ """
+ Create handle to C++ object.
+ """
+ ModuleMeshObject.__init__(self)
+ return
+
+
+# SubMeshOutputManager class
+class SubMeshOutputManager(OutputManager, ModuleSubMeshObject):
+ """
+ Python abstract base class for managing output of finite-element
+ information.
+
+ \b Properties
+ @li None
+
+ \b Facilities
+ @li \b writer Writer for data.
+ @li \b vertex_filter Filter for vertex data.
+ @li \b cell_filter Filter for cell data.
+
+ Factory: mesh_output_manager
+ """
+
+ # INVENTORY //////////////////////////////////////////////////////////
+
+ import pyre.inventory
+
+ from DataWriterVTK import SubMeshDataWriterVTK
+ writer = pyre.inventory.facility("writer", factory=SubMeshDataWriterVTK,
+ family="mesh_data_writer")
+ writer.meta['tip'] = "Writer for data."
+
+ from VertexFilter import SubMeshVertexFilter
+ vertexFilter = pyre.inventory.facility("vertex_filter",
+ factory=SubMeshVertexFilter,
+ family="mesh_output_vertex_filter")
+ vertexFilter.meta['tip'] = "Filter for vertex data."
+
+ from CellFilter import SubMeshCellFilter
+ cellFilter = pyre.inventory.facility("cell_filter",
+ factory=SubMeshCellFilter,
+ family="mesh_output_cell_filter")
+ cellFilter.meta['tip'] = "Filter for cell data."
+
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="outputmanager"):
+ """
+ Constructor.
+ """
+ OutputManager.__init__(self, name, facility="meshoutputmanager")
+ self._createModuleObj()
+ return
+
+
+ # PRIVATE METHODS ////////////////////////////////////////////////////
+
+ def _configure(self):
+ """
+ Set members based using inventory.
+ """
+ OutputManager._configure(self)
+ ModuleSubMeshObject.writer(self.writer)
+ ModuleSubMeshObject.vertexFilter(self.vertexFilter)
+ ModuleSubMeshObject.cellFilter(self.cellFilter)
+ return
+
+
+ def _createModuleObj(self):
+ """
+ Create handle to C++ object.
+ """
+ ModuleSubMeshObject.__init__(self)
+ return
+
+
# FACTORIES ////////////////////////////////////////////////////////////
-def output_manager():
+def mesh_output_manager():
"""
- Factory associated with OutputManager.
+ Factory associated with MeshOutputManager.
"""
- return OutputManager()
+ return MeshOutputManager()
+def submesh_output_manager():
+ """
+ Factory associated with SubMeshOutputManager.
+ """
+ return SubMeshOutputManager()
+
+
# End of file
Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputSolnSubset.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputSolnSubset.py 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/OutputSolnSubset.py 2009-04-11 00:13:36 UTC (rev 14664)
@@ -18,6 +18,7 @@
## Factory: output_manager
from OutputManager import OutputManager
+from meshio import OutputSolnSubset as ModuleOutputSolnSubset
# OutputSolnSubset class
class OutputSolnSubset(OutputManager):
@@ -25,36 +26,31 @@
Python object for managing output of finite-element solution
information over a subdomain.
+ @class Inventory
+ Python object for managing OutputSolnSubset facilities and properties.
+
+ \b Properties
+ @li \b vertex_data_fields Names of vertex data fields to output.
+ @li \b label Name identifier for subdomain.
+
+ \b Facilities
+ @li None
+
Factory: output_manager
"""
# INVENTORY //////////////////////////////////////////////////////////
- class Inventory(OutputManager.Inventory):
- """
- Python object for managing OutputSolnSubset facilities and properties.
- """
+ import pyre.inventory
- ## @class Inventory
- ## Python object for managing OutputSolnSubset facilities and properties.
- ##
- ## \b Properties
- ## @li \b vertex_data_fields Names of vertex data fields to output.
- ## @li \b label Name identifier for subdomain.
- ##
- ## \b Facilities
- ## @li None
+ vertexDataFields = pyre.inventory.list("vertex_data_fields",
+ default=["displacements"])
+ vertexDataFields.meta['tip'] = "Names of vertex data fields to output."
+
+ label = pyre.inventory.str("label", default="")
+ label.meta['tip'] = "Label identifier for subdomain."
- import pyre.inventory
- vertexDataFields = pyre.inventory.list("vertex_data_fields",
- default=["displacements"])
- vertexDataFields.meta['tip'] = "Names of vertex data fields to output."
-
- label = pyre.inventory.str("label", default="")
- label.meta['tip'] = "Label identifier for subdomain."
-
-
# PUBLIC METHODS /////////////////////////////////////////////////////
def __init__(self, name="outputsolnsubset"):
@@ -78,9 +74,6 @@
Do
"""
OutputManager.preinitialize(self, dataProvider=self)
- import meshio as bindings
- self.cppHandle = bindings.OutputSolnSubset()
- self.cppHandle.label = self.label
return
@@ -89,8 +82,7 @@
Verify compatibility of configuration.
"""
OutputManager.verifyConfiguration(self, mesh)
- assert(None != self.cppHandle);
- self.cppHandle.verifyConfiguration(mesh.cppHandle)
+ ModuleOutputSolnSubset(self, mesh)
return
@@ -101,12 +93,7 @@
logEvent = "%sinit" % self._loggingPrefix
self._logger.eventBegin(logEvent)
- from pylith.topology.Mesh import Mesh
- self.mesh = Mesh()
- self.mesh.initialize(mesh.coordsys)
- assert(None != self.cppHandle)
- self.cppHandle.mesh(self.mesh.cppHandle, mesh.cppHandle)
-
+ self.submesh = seld.subdomainMesh(mesh)
OutputManager.initialize(self, normalizer)
self._logger.eventEnd(logEvent)
@@ -127,11 +114,10 @@
field = None
fieldType = None
if name == "displacements":
- field = fields.getSolution()
- fieldType = 1 # vector field
+ field = fields.solution()
else:
raise ValueError, "Vertex field '%s' not available." % name
- return (field, fieldType)
+ return field
# PRIVATE METHODS ////////////////////////////////////////////////////
@@ -141,11 +127,18 @@
Set members based using inventory.
"""
OutputManager._configure(self)
- self.vertexDataFields = self.inventory.vertexDataFields
- self.label = self.inventory.label
+ ModuleOutputSolnSubset.label(self, self.label)
return
+ def _createModuleObj(self):
+ """
+ Create handle to C++ object.
+ """
+ ModuleOutputSolnSubset.___init__(self)
+ return
+
+
# FACTORIES ////////////////////////////////////////////////////////////
def output_manager():
Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilter.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilter.py 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilter.py 2009-04-11 00:13:36 UTC (rev 14664)
@@ -17,10 +17,10 @@
##
## Factory: output_vertex_filter
-from pyre.components.Component import Component
+from pylith.utils.PetscComponent import PetscComponent
# VertexFilter class
-class VertexFilter(Component):
+class VertexFilter(PetscComponent):
"""
Python abstract base class for filtering cell fields when writing
finite-element data.
@@ -30,31 +30,15 @@
# INVENTORY //////////////////////////////////////////////////////////
- class Inventory(Component.Inventory):
- """
- Python object for managing VertexFilter facilities and properties.
- """
+ # None
- ## @class Inventory
- ## Python object for managing VertexFilter facilities and properties.
- ##
- ## \b Properties
- ## @li None
- ##
- ## \b Facilities
- ## @li None
-
- import pyre.inventory
-
-
# PUBLIC METHODS /////////////////////////////////////////////////////
def __init__(self, name="vertexfilter"):
"""
Constructor.
"""
- Component.__init__(self, name, facility="vertexfilter")
- self.cppHandle = None
+ PetscComponent.__init__(self, name, facility="vertexfilter")
return
@@ -69,27 +53,9 @@
"""
Initialize output manager.
"""
- self._createCppHandle()
return
- # PRIVATE METHODS ////////////////////////////////////////////////////
-
- def _configure(self):
- """
- Set members based using inventory.
- """
- Component._configure(self)
- return
-
-
- def _createCppHandle(self):
- """
- Create handle to C++ object.
- """
- return
-
-
# FACTORIES ////////////////////////////////////////////////////////////
def output_vertex_filter():
Modified: short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilterVecNorm.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilterVecNorm.py 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/pylith/meshio/VertexFilterVecNorm.py 2009-04-11 00:13:36 UTC (rev 14664)
@@ -18,9 +18,11 @@
## Factory: output_vertex_filter
from VertexFilter import VertexFilter
+from meshio import MeshVertexFilterVecNorm as ModuleMeshObject
+from meshio import SubMeshVertexFilterVecNorm as ModuleSubMeshObject
-# VertexFilterVecNorm class
-class VertexFilterVecNorm(VertexFilter):
+# MeshVertexFilterVecNorm class
+class MeshVertexFilterVecNorm(VertexFilter, ModuleMeshObject):
"""
Python class for computing vector norm for each vertex for field
over vertices when writing finite-element data.
@@ -30,33 +32,58 @@
# PUBLIC METHODS /////////////////////////////////////////////////////
- def __init__(self, name="vertexfiltervecnorm"):
+ def __init__(self, name="meshvertexfiltervecnorm"):
"""
Constructor.
"""
VertexFilter.__init__(self, name)
+ ModuleMeshObject.__init__(self)
return
- # PRIVATE METHODS ////////////////////////////////////////////////////
+# FACTORIES ////////////////////////////////////////////////////////////
- def _createCppHandle(self):
+def mesh_output_vertex_filter():
+ """
+ Factory associated with VertexFilter.
+ """
+ return MeshVertexFilterVecNorm()
+
+
+# SubMeshVertexFilterVecNorm class
+class SubMeshVertexFilterVecNorm(VertexFilter, ModuleSubMeshObject):
+ """
+ Python class for computing vector norm for each vertex for field
+ over vertices when writing finite-element data.
+
+ Factory: output_vertex_filter
+ """
+
+ # PUBLIC METHODS /////////////////////////////////////////////////////
+
+ def __init__(self, name="meshvertexfiltervecnorm"):
"""
- Create handle to C++ object.
+ Constructor.
"""
- if None == self.cppHandle:
- import meshio as bindings
- self.cppHandle = bindings.VertexFilterVecNorm()
+ VertexFilter.__init__(self, name)
+ ModuleSubMeshObject.__init__(self)
return
-
+
# FACTORIES ////////////////////////////////////////////////////////////
-def output_vertex_filter():
+def mesh_output_vertex_filter():
"""
Factory associated with VertexFilter.
"""
- return VertexFilterVecNorm()
+ return MeshVertexFilterVecNorm()
+def submesh_output_vertex_filter():
+ """
+ Factory associated with VertexFilter.
+ """
+ return SubMeshVertexFilterVecNorm()
+
+
# End of file
Modified: short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestCellFilterAvg.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestCellFilterAvg.py 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestCellFilterAvg.py 2009-04-11 00:13:36 UTC (rev 14664)
@@ -16,10 +16,11 @@
import unittest
-from pylith.meshio.CellFilterAvg import CellFilterAvg
+from pylith.meshio.CellFilterAvg import MeshCellFilterAvg
+from pylith.meshio.CellFilterAvg import SubMeshCellFilterAvg
# ----------------------------------------------------------------------
-class TestCellFilterAvg(unittest.TestCase):
+class TestMeshCellFilterAvg(unittest.TestCase):
"""
Unit testing of Python CellFilterAvg object.
"""
@@ -28,7 +29,7 @@
"""
Test constructor.
"""
- filter = CellFilterAvg()
+ filter = MeshCellFilterAvg()
filter._configure()
return
@@ -37,24 +38,25 @@
"""
Test constructor.
"""
- from pylith.feassemble.quadrature.Quadrature1D import Quadrature1D
+ spaceDim = 1
from pylith.feassemble.FIATSimplex import FIATSimplex
cell = FIATSimplex()
- cell.shape = "line"
- cell.degree = 2
- cell.order = 2
+ cell.inventory.shape = "line"
+ cell.inventory.degree = 2
+ cell.inventory.order = 2
+ cell._configure()
- quadrature = Quadrature1D()
+ from pylith.feassemble.Quadrature import MeshQuadrature
+ quadrature = MeshQuadrature()
+ quadrature.inventory.cell = cell
quadrature._configure()
- quadrature.cell = cell
- quadrature.preinitialize()
+ quadrature.preinitialize(spaceDim)
quadrature.initialize()
- filter = CellFilterAvg()
+ filter = MeshCellFilterAvg()
filter._configure()
filter.initialize(quadrature)
- self.assertNotEqual(None, filter.cppHandle)
return
@@ -62,9 +64,59 @@
"""
Test factory method.
"""
- from pylith.meshio.CellFilterAvg import output_cell_filter
- filter = output_cell_filter()
+ from pylith.meshio.CellFilterAvg import mesh_output_cell_filter
+ filter = mesh_output_cell_filter()
return
+# ----------------------------------------------------------------------
+class TestSubMeshCellFilterAvg(unittest.TestCase):
+ """
+ Unit testing of Python CellFilterAvg object.
+ """
+
+ def test_constructor(self):
+ """
+ Test constructor.
+ """
+ filter = SubMeshCellFilterAvg()
+ filter._configure()
+ return
+
+
+ def test_initialize(self):
+ """
+ Test constructor.
+ """
+ spaceDim = 2
+
+ from pylith.feassemble.FIATSimplex import FIATSimplex
+ cell = FIATSimplex()
+ cell.inventory.shape = "line"
+ cell.inventory.degree = 2
+ cell.inventory.order = 2
+ cell._configure()
+
+ from pylith.feassemble.Quadrature import SubMeshQuadrature
+ quadrature = SubMeshQuadrature()
+ quadrature.inventory.cell = cell
+ quadrature._configure()
+ quadrature.preinitialize(spaceDim)
+ quadrature.initialize()
+
+ filter = SubMeshCellFilterAvg()
+ filter._configure()
+ filter.initialize(quadrature)
+ return
+
+
+ def test_factory(self):
+ """
+ Test factory method.
+ """
+ from pylith.meshio.CellFilterAvg import mesh_output_cell_filter
+ filter = mesh_output_cell_filter()
+ return
+
+
# End of file
Added: short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestDataWriterVTK.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestDataWriterVTK.py (rev 0)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestDataWriterVTK.py 2009-04-11 00:13:36 UTC (rev 14664)
@@ -0,0 +1,96 @@
+#!/usr/bin/env python
+#
+# ======================================================================
+#
+# Brad T. Aagaard
+# U.S. Geological Survey
+#
+# {LicenseText}
+#
+# ======================================================================
+#
+
+## @file unittests/pytests/meshio/TestDataWriterVTK.py
+
+## @brief Unit testing of Python DataWriterVTK object.
+
+import unittest
+
+from pylith.meshio.DataWriterVTK import MeshDataWriterVTK
+from pylith.meshio.DataWriterVTK import SubMeshDataWriterVTK
+
+# ----------------------------------------------------------------------
+class TestMeshDataWriterVTK(unittest.TestCase):
+ """
+ Unit testing of Python DataWriterVTK object.
+ """
+
+ def test_constructor(self):
+ """
+ Test constructor.
+ """
+ filter = MeshDataWriterVTK()
+ filter._configure()
+ return
+
+
+ def test_initialize(self):
+ """
+ Test constructor.
+ """
+ filter = MeshDataWriterVTK()
+ filter._configure()
+
+ from spatialdata.units.Nondimensional import Nondimensional
+ normalizer = Nondimensional()
+ filter.initialize(normalizer)
+ return
+
+
+ def test_factory(self):
+ """
+ Test factory method.
+ """
+ from pylith.meshio.DataWriterVTK import mesh_output_data_writer
+ filter = mesh_output_data_writer()
+ return
+
+
+# ----------------------------------------------------------------------
+class TestSubMeshDataWriterVTK(unittest.TestCase):
+ """
+ Unit testing of Python DataWriterVTK object.
+ """
+
+ def test_constructor(self):
+ """
+ Test constructor.
+ """
+ filter = SubMeshDataWriterVTK()
+ filter._configure()
+ return
+
+
+ def test_initialize(self):
+ """
+ Test constructor.
+ """
+ filter = SubMeshDataWriterVTK()
+ filter._configure()
+
+ from spatialdata.units.Nondimensional import Nondimensional
+ normalizer = Nondimensional()
+ filter.initialize(normalizer)
+ return
+
+
+ def test_factory(self):
+ """
+ Test factory method.
+ """
+ from pylith.meshio.DataWriterVTK import submesh_output_data_writer
+ filter = submesh_output_data_writer()
+ return
+
+
+# End of file
Modified: short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestVertexFilterVecNorm.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestVertexFilterVecNorm.py 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/TestVertexFilterVecNorm.py 2009-04-11 00:13:36 UTC (rev 14664)
@@ -16,10 +16,11 @@
import unittest
-from pylith.meshio.VertexFilterVecNorm import VertexFilterVecNorm
+from pylith.meshio.VertexFilterVecNorm import MeshVertexFilterVecNorm
+from pylith.meshio.VertexFilterVecNorm import SubMeshVertexFilterVecNorm
# ----------------------------------------------------------------------
-class TestVertexFilterVecNorm(unittest.TestCase):
+class TestMeshVertexFilterVecNorm(unittest.TestCase):
"""
Unit testing of Python VertexFilterVecNorm object.
"""
@@ -28,7 +29,7 @@
"""
Test constructor.
"""
- filter = VertexFilterVecNorm()
+ filter = MeshVertexFilterVecNorm()
filter._configure()
return
@@ -37,10 +38,9 @@
"""
Test constructor.
"""
- filter = VertexFilterVecNorm()
+ filter = MeshVertexFilterVecNorm()
filter._configure()
filter.initialize()
- self.assertNotEqual(None, filter.cppHandle)
return
@@ -48,9 +48,43 @@
"""
Test factory method.
"""
- from pylith.meshio.VertexFilterVecNorm import output_vertex_filter
- filter = output_vertex_filter()
+ from pylith.meshio.VertexFilterVecNorm import mesh_output_vertex_filter
+ filter = mesh_output_vertex_filter()
return
+# ----------------------------------------------------------------------
+class TestSubMeshVertexFilterVecNorm(unittest.TestCase):
+ """
+ Unit testing of Python VertexFilterVecNorm object.
+ """
+
+ def test_constructor(self):
+ """
+ Test constructor.
+ """
+ filter = SubMeshVertexFilterVecNorm()
+ filter._configure()
+ return
+
+
+ def test_initialize(self):
+ """
+ Test constructor.
+ """
+ filter = SubMeshVertexFilterVecNorm()
+ filter._configure()
+ filter.initialize()
+ return
+
+
+ def test_factory(self):
+ """
+ Test factory method.
+ """
+ from pylith.meshio.VertexFilterVecNorm import submesh_output_vertex_filter
+ filter = submesh_output_vertex_filter()
+ return
+
+
# End of file
Modified: short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/testmeshio.py
===================================================================
--- short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/testmeshio.py 2009-04-10 22:41:54 UTC (rev 14663)
+++ short/3D/PyLith/branches/pylith-swig/unittests/pytests/meshio/testmeshio.py 2009-04-11 00:13:36 UTC (rev 14664)
@@ -62,12 +62,24 @@
from TestMeshIOLagrit import TestMeshIOLagrit
suite.addTest(unittest.makeSuite(TestMeshIOLagrit))
- #from TestVertexFilterVecNorm import TestVertexFilterVecNorm
- #suite.addTest(unittest.makeSuite(TestVertexFilterVecNorm))
+ from TestVertexFilterVecNorm import TestMeshVertexFilterVecNorm
+ suite.addTest(unittest.makeSuite(TestMeshVertexFilterVecNorm))
- #from TestCellFilterAvg import TestCellFilterAvg
- #suite.addTest(unittest.makeSuite(TestCellFilterAvg))
+ from TestVertexFilterVecNorm import TestSubMeshVertexFilterVecNorm
+ suite.addTest(unittest.makeSuite(TestSubMeshVertexFilterVecNorm))
+ from TestCellFilterAvg import TestMeshCellFilterAvg
+ suite.addTest(unittest.makeSuite(TestMeshCellFilterAvg))
+
+ from TestCellFilterAvg import TestSubMeshCellFilterAvg
+ suite.addTest(unittest.makeSuite(TestSubMeshCellFilterAvg))
+
+ from TestDataWriterVTK import TestMeshDataWriterVTK
+ suite.addTest(unittest.makeSuite(TestMeshDataWriterVTK))
+
+ from TestDataWriterVTK import TestSubMeshDataWriterVTK
+ suite.addTest(unittest.makeSuite(TestSubMeshDataWriterVTK))
+
#from TestOutputManager import TestOutputManager
#suite.addTest(unittest.makeSuite(TestOutputManager))
More information about the CIG-COMMITS
mailing list