[cig-commits] r13086 - in cs/cigma/trunk: . src tests/libcigma tests/pytests
luis at geodynamics.org
luis at geodynamics.org
Wed Oct 15 12:07:15 PDT 2008
Author: luis
Date: 2008-10-15 12:07:14 -0700 (Wed, 15 Oct 2008)
New Revision: 13086
Added:
cs/cigma/trunk/src/py_FileReader.h
cs/cigma/trunk/tests/pytests/test_reader.py
Modified:
cs/cigma/trunk/Makefile.am
cs/cigma/trunk/src/py_FileReader.cpp
cs/cigma/trunk/src/py_cigma_module.cpp
cs/cigma/trunk/src/py_cigma_setup.py
cs/cigma/trunk/tests/libcigma/ReaderTest.cpp
cs/cigma/trunk/tests/libcigma/ReaderTest.h
Log:
Python bindings for abstract class cigma::FileReader
Note that pyFileReader also derives from wrapper<FileReader>,
which allows us to define new readers at runtime (from Python)
Modified: cs/cigma/trunk/Makefile.am
===================================================================
--- cs/cigma/trunk/Makefile.am 2008-10-15 18:28:01 UTC (rev 13085)
+++ cs/cigma/trunk/Makefile.am 2008-10-15 19:07:14 UTC (rev 13086)
@@ -230,6 +230,7 @@
src/py_ElementBlock.cpp \
src/py_NodeCoordinates.cpp \
src/py_Function.cpp \
+ src/py_FileReader.cpp \
src/py_Misc.cpp \
src/py_cigma_module.cpp
Modified: cs/cigma/trunk/src/py_FileReader.cpp
===================================================================
--- cs/cigma/trunk/src/py_FileReader.cpp 2008-10-15 18:28:01 UTC (rev 13085)
+++ cs/cigma/trunk/src/py_FileReader.cpp 2008-10-15 19:07:14 UTC (rev 13086)
@@ -1,68 +1,113 @@
-#include "io_file_reader.h"
-#include "io_null_reader.h"
-#include "io_text_reader.h"
+#include "py_FileReader.h"
+#include "numpy_util.h"
-#ifdef HAVE_HDF5
-#include "io_hdf5_reader.h"
-#endif
+using namespace cigma;
+using namespace boost::python;
-#ifdef HAVE_VTK
-#include "io_vtk_reader.h"
-#include "io_ucd_reader.h"
-#endif
+// ----------------------------------------------------------------------------
-#include <boost/python.hpp>
+FileReader::ReaderType pyFileReader::getReaderType()
+{
+ return this->get_override("getReaderType")();
+}
-using namespace boost::python;
+int pyFileReader::open(const char *filename)
+{
+ return this->get_override("open")(filename);
+}
-struct pyFileReader : FileReader, wrapper<FileReader>
+int pyFileReader::close()
{
-};
+ return this->get_override("close")();
+}
-class pyNullReader : NullReader
+int pyFileReader::getDataset(const char *loc, double **data, int *num, int *dim)
{
-};
+ return 0;
+}
-class pyTextReader : TextReader
+int pyFileReader::getCoordinates(const char *loc, double **coordinates, int *nno, int *nsd)
{
-};
+ return 0;
+}
-/* Wrap the HDF5 reader */
-#ifdef HAVE_HDF5
-class pyHDF5Reader : HDF5_Reader
+int pyFileReader::getConnectivity(const char *loc, int **connectivity, int *nel, int *ndofs)
{
-};
-#endif
+ return 0;
+}
-/* Wrap the VTK reader */
-#ifdef HAVE_VTK
-class pyVTKReader : VtkReader
+// ----------------------------------------------------------------------------
+
+int pyNullReader::open(const char *filename)
{
-};
-class pyUCDReader : UCD_Reader
+ // XXX: use std::ostringstream to put filename in error string
+ PyErr_SetString(PyExc_IOError, "Cannot open <filename> with NullReader");
+ throw_error_already_set();
+ return -1;
+}
+
+int pyNullReader::close()
{
-};
+ PyErr_SetString(PyExc_IOError, "Cannot close a NullReader instance");
+ throw_error_already_set();
+ return -1;
+}
+
+// ----------------------------------------------------------------------------
+
+int pyTextReader::open(const char *filename)
+{
+ // anything to do? (validation-wise)
+ return TextReader::open(filename);
+}
+
+int pyTextReader::close()
+{
+ // anything to do? (validation-wise)
+ return TextReader::close();
+}
+
+// ----------------------------------------------------------------------------
+
+#ifdef HAVE_HDF5
#endif
+// ----------------------------------------------------------------------------
+#ifdef HAVE_VTK
+#endif
+
+// ----------------------------------------------------------------------------
+
void export_FileReader()
{
+ using namespace cigma;
using namespace boost::python;
+ enum_<FileReader::ReaderType>("FileReaderType")
+ .value("NULL_READER", FileReader::NULL_FILE_READER)
+ .value("HDF5_READER", FileReader::HDF5_FILE_READER)
+ .value("VTK_READER", FileReader::VTK_FILE_READER)
+ .value("TEXT_READER", FileReader::TEXT_FILE_READER)
+ //.export_values()
+ ;
- class_<pyNullReader>("NullReader")
- .def(init<std::string>())
+ class_<pyFileReader, boost::noncopyable>("FileReader")
+ .def("open", pure_virtual(&FileReader::open))
+ .def("close", pure_virtual(&FileReader::close))
+ .def("type", pure_virtual(&FileReader::getReaderType))
+ ;
+
+ class_<pyNullReader, boost::noncopyable>("NullReader")
.def("open", &pyNullReader::open)
- .def("close", &pyVtkReader::close)
+ .def("close", &pyNullReader::close)
;
- class_<pyTextReader>("TextReader")
- .def(init<std::string>())
+ class_<pyTextReader, boost::noncopyable>("TextReader")
.def("open", &pyTextReader::open)
.def("close", &pyTextReader::close)
;
-/* Class definitions for HDF5 */
#ifdef HAVE_HDF5
class_<pyHDF5Reader>("HDF5Reader")
.def(init<std::string>())
@@ -71,7 +116,6 @@
;
#endif
-/* Class definitions for VTK readers */
#ifdef HAVE_VTK
class_<pyVTKReader>("VTKReader")
.def(init<std::string>())
Added: cs/cigma/trunk/src/py_FileReader.h
===================================================================
--- cs/cigma/trunk/src/py_FileReader.h (rev 0)
+++ cs/cigma/trunk/src/py_FileReader.h 2008-10-15 19:07:14 UTC (rev 13086)
@@ -0,0 +1,62 @@
+#ifndef __PY_FILE_READER_H__
+#define __PY_FILE_READER_H__
+
+#include "io_file_reader.h"
+#include "io_null_reader.h"
+#include "io_text_reader.h"
+
+#ifdef HAVE_HDF5
+#include "io_hdf5_reader.h"
+#endif
+
+#ifdef HAVE_VTK
+#include "io_vtk_reader.h"
+#include "io_ucd_reader.h"
+#endif
+
+#include <boost/python.hpp>
+
+
+struct pyFileReader : cigma::FileReader, boost::python::wrapper<cigma::FileReader>
+{
+ cigma::FileReader::ReaderType getReaderType();
+
+ int open(const char *filename);
+ int close();
+
+ int getDataset(const char *loc, double **data, int *num, int *dim);
+ int getCoordinates(const char *loc, double **coordinates, int *nno, int *nsd);
+ int getConnectivity(const char *loc, int **connectivity, int *nel, int *ndofs);
+};
+
+struct pyNullReader : cigma::NullReader
+{
+ int open(const char *filename);
+ int close();
+};
+
+struct pyTextReader : cigma::TextReader
+{
+ int open(const char *filename);
+ int close();
+};
+
+/* Wrap the HDF5 reader */
+#ifdef HAVE_HDF5
+struct pyHDF5Reader : cigma::HDF5_Reader
+{
+};
+#endif
+
+/* Wrap the VTK reader */
+#ifdef HAVE_VTK
+struct pyVTKReader : cigma::VtkReader
+{
+};
+struct pyUCDReader : cigma::UCD_Reader
+{
+};
+#endif
+
+
+#endif /* __PY_FILE_READER_H__ */
Modified: cs/cigma/trunk/src/py_cigma_module.cpp
===================================================================
--- cs/cigma/trunk/src/py_cigma_module.cpp 2008-10-15 18:28:01 UTC (rev 13085)
+++ cs/cigma/trunk/src/py_cigma_module.cpp 2008-10-15 19:07:14 UTC (rev 13086)
@@ -15,6 +15,7 @@
extern void export_ElementBlock();
extern void export_NodeCoordinates();
extern void export_Function();
+extern void export_FileReader();
extern void export_Misc();
using namespace boost::python;
@@ -36,6 +37,7 @@
export_ElementBlock();
export_NodeCoordinates();
export_Function();
+ export_FileReader();
export_Misc();
}
Modified: cs/cigma/trunk/src/py_cigma_setup.py
===================================================================
--- cs/cigma/trunk/src/py_cigma_setup.py 2008-10-15 18:28:01 UTC (rev 13085)
+++ cs/cigma/trunk/src/py_cigma_setup.py 2008-10-15 19:07:14 UTC (rev 13086)
@@ -29,6 +29,7 @@
'py_ElementBlock.cpp',
'py_NodeCoordinates.cpp',
'py_Function.cpp',
+ 'py_FileReader.cpp',
'py_Misc.cpp',
]
Modified: cs/cigma/trunk/tests/libcigma/ReaderTest.cpp
===================================================================
--- cs/cigma/trunk/tests/libcigma/ReaderTest.cpp 2008-10-15 18:28:01 UTC (rev 13085)
+++ cs/cigma/trunk/tests/libcigma/ReaderTest.cpp 2008-10-15 19:07:14 UTC (rev 13086)
@@ -1,12 +1,15 @@
#include "ReaderTest.h"
+using namespace libcigma;
+
+#include "io_file_reader.h"
+#include "io_null_reader.h"
+#include "io_text_reader.h"
+using namespace cigma;
+
//#include <boost/filesystem.hpp>
//#include <iostream>
-using namespace libcigma;
-ReaderTest::ReaderTest() {}
-ReaderTest::~ReaderTest() {}
-
void ReaderTest::test_something()
{
/*
@@ -16,3 +19,15 @@
cout << endl << full_path.string() << endl;
*/
}
+
+void ReaderTest::test_null_reader()
+{
+ NullReader reader;
+ CPPUNIT_ASSERT_EQUAL(reader.getReaderType(), FileReader::NULL_FILE_READER);
+}
+
+void ReaderTest::test_text_reader()
+{
+ TextReader reader;
+ CPPUNIT_ASSERT_EQUAL(reader.getReaderType(), FileReader::TEXT_FILE_READER);
+}
Modified: cs/cigma/trunk/tests/libcigma/ReaderTest.h
===================================================================
--- cs/cigma/trunk/tests/libcigma/ReaderTest.h 2008-10-15 18:28:01 UTC (rev 13085)
+++ cs/cigma/trunk/tests/libcigma/ReaderTest.h 2008-10-15 19:07:14 UTC (rev 13086)
@@ -11,14 +11,17 @@
{
CPPUNIT_TEST_SUITE(ReaderTest);
CPPUNIT_TEST(test_something);
+ CPPUNIT_TEST(test_null_reader);
+ CPPUNIT_TEST(test_text_reader);
CPPUNIT_TEST_SUITE_END();
public:
- ReaderTest();
- virtual ~ReaderTest();
+ ReaderTest() {}
+ ~ReaderTest() {}
void test_something();
-
+ void test_null_reader();
+ void test_text_reader();
};
};
Added: cs/cigma/trunk/tests/pytests/test_reader.py
===================================================================
--- cs/cigma/trunk/tests/pytests/test_reader.py (rev 0)
+++ cs/cigma/trunk/tests/pytests/test_reader.py 2008-10-15 19:07:14 UTC (rev 13086)
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+
+from _cigma import FileReader, NullReader, TextReader
+
+class MyFileReader(FileReader):
+ def __init__(self):
+ FileReader.__init__(self)
+ def open(self, filename):
+ return 0
+ def close(self):
+ return 0
+
+import unittest
+class ReaderTest(unittest.TestCase):
+ def __init__(self, *args):
+ unittest.TestCase.__init__(self, *args)
+ def test_reader_custom(self):
+ reader = MyFileReader()
+ def test_reader_null(self):
+ reader = NullReader()
+ def test_reader_text(self):
+ reader = TextReader()
+
+def create_suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(ReaderTest))
+ return suite
+
More information about the cig-commits
mailing list