[cig-commits] r13038 - in cs/cigma/trunk: . pysrc

luis at geodynamics.org luis at geodynamics.org
Wed Oct 15 02:07:25 PDT 2008


Author: luis
Date: 2008-10-15 02:07:25 -0700 (Wed, 15 Oct 2008)
New Revision: 13038

Added:
   cs/cigma/trunk/pysrc/Py_Hello.cpp
   cs/cigma/trunk/pysrc/Py_Misc.cpp
   cs/cigma/trunk/pysrc/Py_NodeCoordinates.cpp
Modified:
   cs/cigma/trunk/Makefile.am
   cs/cigma/trunk/pysrc/_cigma_module.cpp
   cs/cigma/trunk/pysrc/setup.py
Log:
Wrapper for cigma::NodeCoordinates

Other functions were added to the _cigma module in order to
test various aspects of the Boost.Python bindings. Note the
implicit conversions of std::string to a Python string object,
and of numeric::array into a numpy array object.

Modified: cs/cigma/trunk/Makefile.am
===================================================================
--- cs/cigma/trunk/Makefile.am	2008-10-15 09:07:23 UTC (rev 13037)
+++ cs/cigma/trunk/Makefile.am	2008-10-15 09:07:25 UTC (rev 13038)
@@ -3,7 +3,7 @@
 ###############################################################################
 
 AUTOMAKE_OPTIONS = foreign
-ACLOCAL_AMFLAGS = -I ./m4
+ACLOCAL_AMFLAGS = -I ./m4 -I ./config
 
 # Directories to build
 #SUBDIRS = src
@@ -94,6 +94,8 @@
 	src/Common.h \
 	src/Numeric.h \
 	src/Numeric.cpp \
+	src/NodeCoordinates.h \
+	src/NodeCoordinates.cpp \
 	src/DataPath.h \
 	src/DataPath.cpp \
 	src/core_base_op.h \
@@ -178,7 +180,11 @@
 _cigma_so_LDADD += libcigma.a
 
 _cigma_so_SOURCES = \
+	pysrc/numpy_util.h \
+	pysrc/numpy_util.cpp \
 	pysrc/Py_DataPath.cpp \
+	pysrc/Py_NodeCoordinates.cpp \
+	pysrc/Py_Misc.cpp \
 	pysrc/_cigma_module.cpp
 
 
@@ -212,6 +218,8 @@
 	tests/simple/SimpleTest.cpp \
 	tests/libcigma/DataPathTest.h \
 	tests/libcigma/DataPathTest.cpp \
+	tests/libcigma/NodeCoordinatesTest.h \
+	tests/libcigma/NodeCoordinatesTest.cpp \
 	tests/test_registry.cpp \
 	tests/main.cpp
 

Added: cs/cigma/trunk/pysrc/Py_Hello.cpp
===================================================================
--- cs/cigma/trunk/pysrc/Py_Hello.cpp	                        (rev 0)
+++ cs/cigma/trunk/pysrc/Py_Hello.cpp	2008-10-15 09:07:25 UTC (rev 13038)
@@ -0,0 +1,14 @@
+#include <boost/python.hpp>
+
+using namespace boost::python;
+
+std::string hello()
+{
+    return std::string("Hello World!");
+}
+
+void export_Hello()
+{
+    def("hello", hello);
+}
+

Added: cs/cigma/trunk/pysrc/Py_Misc.cpp
===================================================================
--- cs/cigma/trunk/pysrc/Py_Misc.cpp	                        (rev 0)
+++ cs/cigma/trunk/pysrc/Py_Misc.cpp	2008-10-15 09:07:25 UTC (rev 13038)
@@ -0,0 +1,29 @@
+#include "numpy_util.h"
+#include <boost/python.hpp>
+#include "/usr/include/python2.5/numpy/ndarrayobject.h"
+
+using namespace boost::python;
+
+numeric::array new_array()
+{
+    return numeric::array(
+        make_tuple(
+            make_tuple(1,2,3),
+            make_tuple(4,5,6),
+            make_tuple(7,8,9)
+        )
+    );
+}
+
+
+numeric::array new_array2()
+{
+    return numpy_util::makeArray(new_array());
+}
+
+void export_Misc()
+{
+    def("new_array", &new_array);
+    def("new_array2", &new_array2);
+}
+

Added: cs/cigma/trunk/pysrc/Py_NodeCoordinates.cpp
===================================================================
--- cs/cigma/trunk/pysrc/Py_NodeCoordinates.cpp	                        (rev 0)
+++ cs/cigma/trunk/pysrc/Py_NodeCoordinates.cpp	2008-10-15 09:07:25 UTC (rev 13038)
@@ -0,0 +1,41 @@
+#include "NodeCoordinates.h"
+#include <boost/python.hpp>
+#include <boost/python/numeric.hpp>
+#include <boost/python/tuple.hpp>
+
+using namespace cigma;
+using namespace boost::python;
+
+
+/*
+class NodeCoordinatesWrapper : public NodeCoordinates
+{
+public:
+    NodeCoordinatesWrapper(numeric::array &x)
+    {
+        tuple t = x.factory.getshape();
+        int rank = len(t);
+        if (rank == 2)
+        {
+            std::cout << "rank two!\n";
+        }
+    }
+    ~NodeCoordinatesWrapper()
+    {
+    }
+private:
+    numeric::array _data;
+}; */
+
+
+void export_NodeCoordinates()
+{
+    //typedef NodeCoordinatesWrapper X;
+    typedef NodeCoordinates X;
+
+    class_<X,boost::noncopyable>("NodeCoordinates", no_init)
+        .def_readonly("npts", &X::n_points)
+        .def_readonly("ndim", &X::n_dim)
+        .def("getPoint", &X::getPoint)
+        ;
+}

Modified: cs/cigma/trunk/pysrc/_cigma_module.cpp
===================================================================
--- cs/cigma/trunk/pysrc/_cigma_module.cpp	2008-10-15 09:07:23 UTC (rev 13037)
+++ cs/cigma/trunk/pysrc/_cigma_module.cpp	2008-10-15 09:07:25 UTC (rev 13038)
@@ -1,3 +1,5 @@
+#define PY_ARRAY_UNIQUE_SYMBOL PyArrayHandle
+#include "numpy_util.h"
 #include <boost/python.hpp>
 #include <boost/cstdint.hpp>
 
@@ -2,3 +4,6 @@
 extern void export_Exception();
+extern void export_Hello();
 extern void export_DataPath();
+extern void export_NodeCoordinates();
+extern void export_Misc();
 
@@ -8,7 +13,14 @@
 
 BOOST_PYTHON_MODULE(_cigma)
 {
+    import_array();
+    numeric::array::set_module_and_type("numpy", "ndarray");
+
     export_Exception();
+
+    export_Hello();
     export_DataPath();
+    export_NodeCoordinates();
+    export_Misc();
 }
 

Modified: cs/cigma/trunk/pysrc/setup.py
===================================================================
--- cs/cigma/trunk/pysrc/setup.py	2008-10-15 09:07:23 UTC (rev 13037)
+++ cs/cigma/trunk/pysrc/setup.py	2008-10-15 09:07:25 UTC (rev 13038)
@@ -9,7 +9,15 @@
 #libs = os.environ["PYLIBS"].split()
 libs = ['boost_filesystem', 'boost_python']
 
-sources = ['_cigma_module.cpp', 'Py_Exception.cpp', 'Py_DataPath.cpp']
+sources = [
+    '_cigma_module.cpp',
+    'numpy_util.cpp',
+    'Py_Exception.cpp',
+    'Py_Hello.cpp',
+    'Py_DataPath.cpp',
+    'Py_NodeCoordinates.cpp',
+    'Py_Misc.cpp',
+]
 
 setup(name          = "_cigma",
       version       = "1.0",



More information about the cig-commits mailing list