[cig-commits] r3984 - in cs/spatialdata-0.1/trunk: .
libsrc/spatialdb modulesrc/spatialdb spatialdata
spatialdata/spatialdb tests/pytests/spatialdb
baagaard at geodynamics.org
baagaard at geodynamics.org
Fri Jul 7 15:53:02 PDT 2006
Author: baagaard
Date: 2006-07-07 15:53:02 -0700 (Fri, 07 Jul 2006)
New Revision: 3984
Modified:
cs/spatialdata-0.1/trunk/TODO
cs/spatialdata-0.1/trunk/libsrc/spatialdb/SpatialDB.hh
cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe
cs/spatialdata-0.1/trunk/spatialdata/__init__.py
cs/spatialdata-0.1/trunk/spatialdata/spatialdb/SpatialDB.py
cs/spatialdata-0.1/trunk/tests/pytests/spatialdb/TestSpatialDB.py
Log:
Made query() method accessible in Python. Added testing of query from Python.
Modified: cs/spatialdata-0.1/trunk/TODO
===================================================================
--- cs/spatialdata-0.1/trunk/TODO 2006-07-07 22:35:14 UTC (rev 3983)
+++ cs/spatialdata-0.1/trunk/TODO 2006-07-07 22:53:02 UTC (rev 3984)
@@ -1,12 +1,17 @@
-CONFIGURE
+GEOCOORDS
- Add version number to libraries
- Put python stuff in correct dirs (pythia-0.8/common.am)
+ Make it possible to pickle/unpickle to/from file like in C++?
-GEOCOORDS
+ Clean up number of coordinates issues. Use numbers instead of is2D flag?
SPATIALDB
+ Testing
+ Test C and Fortran wrappers (use in combination with C++ to get
+ around passing array of strings)
+
+ Test generator code.
+
Get units by parsing header with Python
Cleanup SimpleDB::DataStruct, SimpleDBTypes
Modified: cs/spatialdata-0.1/trunk/libsrc/spatialdb/SpatialDB.hh
===================================================================
--- cs/spatialdata-0.1/trunk/libsrc/spatialdb/SpatialDB.hh 2006-07-07 22:35:14 UTC (rev 3983)
+++ cs/spatialdata-0.1/trunk/libsrc/spatialdb/SpatialDB.hh 2006-07-07 22:53:02 UTC (rev 3984)
@@ -52,6 +52,12 @@
*/
void label(const char* label);
+ /** Get label of spatial database.
+ *
+ * @returns Label for database
+ */
+ const char* label(void) const;
+
/// Open the database and prepare for querying.
virtual void open(void) = 0;
@@ -70,6 +76,8 @@
/** Query the database.
*
+ * @note pVals should be preallocated to accommodate numVals values.
+ *
* @pre Must call open() before query()
*
* @param pVals Pointer to computed values (output from query)
@@ -88,15 +96,6 @@
const double z,
const spatialdata::geocoords::CoordSys* pCSQuery) = 0;
-protected :
- // PROTECTED METHODS //////////////////////////////////////////////////
-
- /** Get label of spatial database.
- *
- * @returns Label of spatial database
- */
- const char* label(void) const;
-
private :
// PRIVATE METHODS ////////////////////////////////////////////////////
Modified: cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe 2006-07-07 22:35:14 UTC (rev 3983)
+++ cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe 2006-07-07 22:53:02 UTC (rev 3984)
@@ -15,6 +15,8 @@
#include "spatialdata/spatialdb/SimpleDB.hh"
#include "spatialdata/spatialdb/SimpleIO.hh"
#include "spatialdata/spatialdb/SimpleIOAscii.hh"
+
+#include "spatialdata/geocoords/CoordSys.hh"
#}header
# ----------------------------------------------------------------------
@@ -49,17 +51,26 @@
return
- def label(self, name):
- """Set label of spatial database."""
- # create shim for method 'label'
- #embed{ void SpatialDB_label(void* pObj, char* name)
- ((spatialdata::spatialdb::SpatialDB*) pObj)->label(name);
- #}embed
+ property label:
+ def __set__(self, name):
+ """Set label of spatial database."""
+ # create shim for method 'label'
+ #embed{ void SpatialDB_label_set(void* pObj, char* name)
+ ((spatialdata::spatialdb::SpatialDB*) pObj)->label(name);
+ #}embed
- SpatialDB_label(self.thisptr, name)
- return
+ SpatialDB_label_set(self.thisptr, name)
+ def __get__(self):
+ """Get label of spatial database."""
+ # create shim for method 'label'
+ #embed{ char* SpatialDB_label_get(void* pObj)
+ return (char*) ((spatialdata::spatialdb::SpatialDB*) pObj)->label();
+ #}embed
+ return SpatialDB_label_get(self.thisptr)
+
+
def open(self):
"""Open database and prepare for querying."""
# create shim for method 'open'
@@ -108,6 +119,61 @@
return
+ def query(self, locs, cs, nvals):
+ """Query db to get values at locations."""
+ # create shim for method 'query'
+ #embed{ void SpatialDB_query(void* pObj, double** pVals, int nvals, double x, double y, double z, void* csObj)
+ spatialdata::geocoords::CoordSys* pCS =
+ (spatialdata::geocoords::CoordSys*) csObj;
+ ((spatialdata::spatialdb::SpatialDB*) pObj)->query(pVals, nvals, x, y, z,
+ pCS);
+ #}embed
+
+ if not locs.name == "spatialdata_utils_SimpleArray":
+ raise TypeError, \
+ "Argument 'locs' must be of type 'SimpleArray'."
+ if not locs.isCompatible(nd=2,
+ simpletype="double",
+ contiguous=True,
+ notswapped=True):
+ raise TypeError, \
+ "Argument 'locs' must be a contiguous, 2-D array of type double."
+
+ if not cs.name == "spatialdata_geocoords_CoordSys":
+ raise TypeError, \
+ "Argument 'cs' must be extension module type 'CoordSys'."
+ if nvals < 1:
+ raise TypeError, \
+ "Argument 'nvals' must be a positive integer."
+
+ (nlocs, ncoords) = locs.shape
+ if not ncoords == 3:
+ raise ValueError, \
+ "Argument 'locs' must have 3 coordinates per location."
+
+ cdef double* pLocs
+ pLocs = <double*> PyCObject_AsVoidPtr(locs.data)
+
+ cdef double* pVals
+ pVals = <double*> malloc(nlocs*nvals*sizeof(double))
+
+ cdef double* valbuffer
+ valbuffer = <double*> malloc(nvals*sizeof(double))
+
+ for iloc from 0 <= iloc < nlocs:
+ SpatialDB_query(self.thisptr, &valbuffer, nvals,
+ pLocs[ncoords*iloc ],
+ pLocs[ncoords*iloc+1],
+ pLocs[ncoords*iloc+2], ptrFromHandle(cs))
+ for ival from 0 <= ival < nvals:
+ pVals[nvals*iloc+ival] = valbuffer[ival]
+ free(<void*> valbuffer)
+
+ dims = [nlocs, nvals]
+ import spatialdata.utils.utils
+ return spatialdata.utils.utils.SimpleCppArray(<object> pVals, dims, "double")
+
+
def _createHandle(self):
"""Wrap pointer to C++ object in PyCObject."""
# create shim for destructor
Modified: cs/spatialdata-0.1/trunk/spatialdata/__init__.py
===================================================================
--- cs/spatialdata-0.1/trunk/spatialdata/__init__.py 2006-07-07 22:35:14 UTC (rev 3983)
+++ cs/spatialdata-0.1/trunk/spatialdata/__init__.py 2006-07-07 22:53:02 UTC (rev 3984)
@@ -10,10 +10,9 @@
# ----------------------------------------------------------------------
#
-## @file pkgs/pyre/__init__.py
+## @file spatialdata/__init__.py
## @brief Python top-level SpatialData module initialization
-# version
-__id__ = "$Id: __init__.py,v 1.1 2005/05/25 18:40:19 baagaard Exp $"
+__all__ = []
# End of file
Modified: cs/spatialdata-0.1/trunk/spatialdata/spatialdb/SpatialDB.py
===================================================================
--- cs/spatialdata-0.1/trunk/spatialdata/spatialdb/SpatialDB.py 2006-07-07 22:35:14 UTC (rev 3983)
+++ cs/spatialdata-0.1/trunk/spatialdata/spatialdb/SpatialDB.py 2006-07-07 22:53:02 UTC (rev 3984)
@@ -45,7 +45,7 @@
def initialize(self):
"""Initialize database."""
- self.cppHandle.label(self.label)
+ self.cppHandle.label = self.label
return
@@ -67,6 +67,11 @@
return
+ def query(self, locs, cs, numvals):
+ """Perform query of db to get values at locations."""
+ return self.cppHandle.query(locs, cs.cppHandle, numvals)
+
+
def __init__(self, name="spatialdb"):
"""Constructor."""
Component.__init__(self, name, facility="spatialdb")
Modified: cs/spatialdata-0.1/trunk/tests/pytests/spatialdb/TestSpatialDB.py
===================================================================
--- cs/spatialdata-0.1/trunk/tests/pytests/spatialdb/TestSpatialDB.py 2006-07-07 22:35:14 UTC (rev 3983)
+++ cs/spatialdata-0.1/trunk/tests/pytests/spatialdb/TestSpatialDB.py 2006-07-07 22:53:02 UTC (rev 3984)
@@ -12,6 +12,10 @@
import unittest
+import numpy as numeric
+import spatialdata.utils.utils as simplearray
+from spatialdata.geocoords.CSCart import CSCart
+
class TestSpatialDB(unittest.TestCase):
def setUp(self):
@@ -31,10 +35,23 @@
def test_database(self):
self._db.open()
self._db.queryVals(["two", "one"])
+
+ locs = numeric.array( [[1.0, 2.0, 3.0],
+ [5.6, 4.2, 8.6]], numeric.Float64)
+ cs = CSCart()
+ cs.toMeters = 1.0
+
+ valsE = numeric.array( [[4.7, 6.3]]*2, numeric.Float64)
+ vals = numeric.array(self._db.query(simplearray.SimplePyArray(locs),
+ cs, 2))
+ self.assertEqual(2, len(vals.shape))
+ for dE, d in zip(valsE.shape, vals.shape):
+ self.assertEqual(dE, d)
+ for vE, v in zip(numeric.reshape(valsE, -1), numeric.reshape(vals, -1)):
+ self.assertAlmostEqual(vE, v, 6)
+
self._db.close()
return
-# version
-__id__ = "$Id: TestSpatialDB.py,v 1.1 2005/05/25 18:43:08 baagaard Exp $"
# End of file
More information about the cig-commits
mailing list