[Yt-svn] yt-commit r401 - trunk/yt/raven

mturk at wrangler.dreamhost.com mturk at wrangler.dreamhost.com
Mon Apr 14 14:42:02 PDT 2008


Author: mturk
Date: Mon Apr 14 14:42:01 2008
New Revision: 401
URL: http://yt.spacepope.org/changeset/401

Log:
Okay, this fixes #64.  I have rewritten the pixelize function to, among other
things, not leak memory like a sieve.  Previously it was allocating buffers and
then not passing on the OWNDATA flag to the subsequent PyArrayObject* that was
using those buffers.  Additionally, it broke with 



Modified:
   trunk/yt/raven/PlotCollection.py
   trunk/yt/raven/PlotTypes.py
   trunk/yt/raven/_MPL.c
   trunk/yt/raven/__init__.py

Modified: trunk/yt/raven/PlotCollection.py
==============================================================================
--- trunk/yt/raven/PlotCollection.py	(original)
+++ trunk/yt/raven/PlotCollection.py	Mon Apr 14 14:42:01 2008
@@ -168,3 +168,8 @@
         p["Unit"] = unit
         p["Axis"] = None
         return p
+
+    def clear_plots(self):
+        for i in range(len(self.plots)):
+            del self.plots[i].data
+            del self.plots[i]

Modified: trunk/yt/raven/PlotTypes.py
==============================================================================
--- trunk/yt/raven/PlotTypes.py	(original)
+++ trunk/yt/raven/PlotTypes.py	Mon Apr 14 14:42:01 2008
@@ -91,9 +91,6 @@
     return fig
 
 engineVals = {}
-skipAxes = ["X WIDTH", "Y WIDTH", "WEIGHT (OPTIONAL)", "DX", "DY"]
-
-axisFieldDict = {'X':'Field1', 'Y':'Field2', 'Z':'Field3'}
 
 def Initialize(*args, **kwargs):
     engineVals["initialized"] = True

Modified: trunk/yt/raven/_MPL.c
==============================================================================
--- trunk/yt/raven/_MPL.c	(original)
+++ trunk/yt/raven/_MPL.c	Mon Apr 14 14:42:01 2008
@@ -72,38 +72,36 @@
   // Get numeric arrays
   PyArrayObject *x = (PyArrayObject *) PyArray_FromAny(xp,
             PyArray_DescrFromType(NPY_FLOAT64), 1, 1, NPY_C_CONTIGUOUS, NULL);
-  if (x == NULL)
+  if (x == NULL) {
       PyErr_Format( _pixelizeError, "x is of incorrect type (wanted 1D float)");
+      goto _fail;
+  }
+
   PyArrayObject *y = (PyArrayObject *) PyArray_FromAny(yp,
             PyArray_DescrFromType(NPY_FLOAT64), 1, 1, NPY_C_CONTIGUOUS, NULL);
-  if (y == NULL) {
-      Py_XDECREF(x);
+  if ((y == NULL) || (PyArray_SIZE(y) != PyArray_SIZE(x))) {
       PyErr_Format( _pixelizeError, "y is of incorrect type (wanted 1D float)");
+      goto _fail;
   }
+
   PyArrayObject *d = (PyArrayObject *) PyArray_FromAny(dp,
             PyArray_DescrFromType(NPY_FLOAT64), 1, 1, NPY_C_CONTIGUOUS, NULL);
-  if (d == NULL) {
-      Py_XDECREF(x);
-      Py_XDECREF(y);
+  if ((d == NULL) || (PyArray_SIZE(d) != PyArray_SIZE(x))) {
       PyErr_Format( _pixelizeError, "data is of incorrect type (wanted 1D float)");
+      goto _fail;
   }
 
   PyArrayObject *dx = (PyArrayObject *) PyArray_FromAny(dxp,
             PyArray_DescrFromType(NPY_FLOAT64), 1, 1, NPY_C_CONTIGUOUS, NULL);
-  if (x == NULL) {
-      Py_XDECREF(x);
-      Py_XDECREF(y);
-      Py_XDECREF(d);
+  if ((dx == NULL) || (PyArray_SIZE(dx) != PyArray_SIZE(x))) {
       PyErr_Format( _pixelizeError, "dx is of incorrect type (wanted 1D float)");
+      goto _fail;
   }
   PyArrayObject *dy = (PyArrayObject *) PyArray_FromAny(dyp,
             PyArray_DescrFromType(NPY_FLOAT64), 1, 1, NPY_C_CONTIGUOUS, NULL);
-  if (x == NULL) {
-      Py_XDECREF(x);
-      Py_XDECREF(y);
-      Py_XDECREF(d);
-      Py_XDECREF(dx);
+  if ((dy == NULL) || (PyArray_SIZE(dy) != PyArray_SIZE(x))) {
       PyErr_Format( _pixelizeError, "dy is of incorrect type (wanted 1D float)");
+      goto _fail;
   }
 
   // Check dimensions match
@@ -111,25 +109,12 @@
   int ny = y->dimensions[0];
   int ndx = dx->dimensions[0];
   int ndy = dy->dimensions[0];
-  if (nx != d->dimensions[0] || ny != d->dimensions[0] ||
-      ndx != d->dimensions[0] || ndy != d->dimensions[0]) {
-      Py_XDECREF(x);
-      Py_XDECREF(y);
-      Py_XDECREF(d);
-      Py_XDECREF(dx);
-      Py_XDECREF(dy);
-      PyErr_Format( _pixelizeError, "data and axis dimensions do not match");
-  }
 
   npy_float64 *gridded;
     gridded = malloc(sizeof(npy_float64)*rows*cols);
   if (gridded == NULL) {
-      Py_XDECREF(x);
-      Py_XDECREF(y);
-      Py_XDECREF(d);
-      Py_XDECREF(dx);
-      Py_XDECREF(dy);
       PyErr_Format(_pixelizeError, "Could not allocate memory for image");
+      goto _fail;
   }
 
   // Calculate the pointer arrays to map input x to output x
@@ -142,8 +127,13 @@
   npy_float64 *dys = (npy_float64 *) PyArray_GETPTR1(dy, 0);
   npy_float64 *ds = (npy_float64 *) PyArray_GETPTR1(d, 0); // We check this above
 
-  //printf("ROWS: %i COLS: %i\n", rows, cols);
-  for (p=0;p<cols*rows;p++) gridded[p] = 0.0;
+  npy_intp dims[] = {rows, cols};
+  PyArrayObject *my_array =
+    (PyArrayObject *) PyArray_SimpleNewFromDescr(2, dims,
+              PyArray_DescrFromType(NPY_FLOAT64));
+  gridded = (npy_float64 *) my_array->data;
+
+  for(p=0;p<cols*rows;p++)gridded[p]=0.0;
   for(p=0;p<nx;p++)
   {
     if(((xs[p]+dxs[p]<x_min) ||
@@ -168,28 +158,32 @@
     }
   }
 
-  /*for (p = 0 ; p < cols * rows ; p++)
-    printf("%0.3e\n", gridded[p]);*/
-
-
   // Attatch output buffer to output buffer
 
-  Py_XDECREF(x);
-  Py_XDECREF(y);
-  Py_XDECREF(d);
-  Py_XDECREF(dx);
-  Py_XDECREF(dy);
-
-  int dims[] = {rows, cols};
-
-  PyObject* gridret = PyArray_FromDimsAndData(
-        2, dims, NPY_FLOAT64, (char *) gridded);
+  Py_DECREF(x);
+  Py_DECREF(y);
+  Py_DECREF(d);
+  Py_DECREF(dx);
+  Py_DECREF(dy);
+
+  PyObject *return_value = Py_BuildValue("N", my_array);
+
+  return return_value;
+
+  _fail:
+
+    Py_XDECREF(x);
+    Py_XDECREF(y);
+    Py_XDECREF(d);
+    Py_XDECREF(dx);
+    Py_XDECREF(dy);
+    return NULL;
 
-  return gridret;
 }
 
 static PyMethodDef __MPLMethods[] = {
     {"Pixelize", Py_Pixelize, METH_VARARGS, _pixelizeDocstring},
+    //{"CPixelize", Py_CPixelize, METH_VARARGS, NULL},
     {NULL, NULL} /* Sentinel */
 };
 

Modified: trunk/yt/raven/__init__.py
==============================================================================
--- trunk/yt/raven/__init__.py	(original)
+++ trunk/yt/raven/__init__.py	Mon Apr 14 14:42:01 2008
@@ -46,7 +46,11 @@
 
 vm_axis_names = {0:'x', 1:'y', 2:'z', 3:'dx', 4:'dy'}
 
+
 import PlotTypes
 import PlotTypes as be
+
+color_maps = PlotTypes.matplotlib.cm.cmapnames
+
 from PlotCollection import *
 from PlotConfig import *



More information about the yt-svn mailing list