[Scipy-svn] r5038 - in trunk/scipy: spatial stats

scipy-svn@scip... scipy-svn@scip...
Mon Nov 10 07:20:57 CST 2008


Author: cdavid
Date: 2008-11-10 07:20:36 -0600 (Mon, 10 Nov 2008)
New Revision: 5038

Modified:
   trunk/scipy/spatial/ckdtree.c
   trunk/scipy/stats/vonmises_cython.c
Log:
Regenerate cython files with a cython handling sizeof(Py_ssize_t) != sizeof(npy_intp).

Modified: trunk/scipy/spatial/ckdtree.c
===================================================================
--- trunk/scipy/spatial/ckdtree.c	2008-11-10 12:36:01 UTC (rev 5037)
+++ trunk/scipy/spatial/ckdtree.c	2008-11-10 13:20:36 UTC (rev 5038)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.9.8.1.1 on Mon Oct 13 11:57:06 2008 */
+/* Generated by Cython 0.10 on Mon Nov 10 22:15:02 2008 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -31,14 +31,15 @@
 
   typedef struct {
        void *buf;
+       PyObject *obj;
        Py_ssize_t len;
+       Py_ssize_t itemsize;
        int readonly;
-       const char *format;
        int ndim;
+       char *format;
        Py_ssize_t *shape;
        Py_ssize_t *strides;
        Py_ssize_t *suboffsets;
-       Py_ssize_t itemsize;
        void *internal;
   } Py_buffer;
 
@@ -63,6 +64,9 @@
   #define Py_TPFLAGS_CHECKTYPES 0
   #define Py_TPFLAGS_HAVE_INDEX 0
 #endif
+#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
+  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+#endif
 #if PY_MAJOR_VERSION >= 3
   #define PyBaseString_Type            PyUnicode_Type
   #define PyString_Type                PyBytes_Type
@@ -104,8 +108,8 @@
 #endif
 #include <math.h>
 #define __PYX_HAVE_API__scipy__spatial__ckdtree
+#include "stdlib.h"
 #include "numpy/arrayobject.h"
-#include "stdlib.h"
 
 
 #ifdef __GNUC__
@@ -175,48 +179,31 @@
 static const char * __pyx_cfilenm= __FILE__;
 static const char *__pyx_filename;
 static const char **__pyx_f;
-static INLINE void __Pyx_SafeReleaseBuffer(PyObject* obj, Py_buffer* info);
+
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name, PyObject* kw_name); /*proto*/
+
+static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
+    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
+
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*proto*/
+static INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info);
 static INLINE void __Pyx_ZeroBuffer(Py_buffer* buf); /*proto*/
 static INLINE const char* __Pyx_ConsumeWhitespace(const char* ts); /*proto*/
-static INLINE const char* __Pyx_BufferTypestringCheckEndian(const char* ts); /*proto*/
 static void __Pyx_BufferNdimError(Py_buffer* buffer, int expected_ndim); /*proto*/
-static const char* __Pyx_BufferTypestringCheck_item_double(const char* ts); /*proto*/
+static const char* __Pyx_DescribeTokenInFormatString(const char* ts); /*proto*/
+static const char* __Pyx_CheckTypestring_double(const char* ts); /*proto*/
 
-static int __Pyx_GetBuffer_double(PyObject* obj, Py_buffer* buf, int flags, int nd); /*proto*/
+static int __Pyx_GetBuffer_double(PyObject* obj, Py_buffer* buf, int flags, int nd, int cast); /*proto*/
 
 static void __Pyx_RaiseBufferFallbackError(void); /*proto*/
-static const char* __Pyx_BufferTypestringCheck_item_nn___pyx_t_5numpy_int32_t(const char* ts); /*proto*/
+static const char* __Pyx_CheckTypestring_nn___pyx_t_5numpy_int32_t(const char* ts); /*proto*/
 
-static int __Pyx_GetBuffer_nn___pyx_t_5numpy_int32_t(PyObject* obj, Py_buffer* buf, int flags, int nd); /*proto*/
-static const char* __Pyx_BufferTypestringCheck_item_int(const char* ts); /*proto*/
+static int __Pyx_GetBuffer_nn___pyx_t_5numpy_int32_t(PyObject* obj, Py_buffer* buf, int flags, int nd, int cast); /*proto*/
 
-static int __Pyx_GetBuffer_int(PyObject* obj, Py_buffer* buf, int flags, int nd); /*proto*/
-static void __Pyx_RaiseBufferIndexError(int axis); /*proto*/
-#define __Pyx_BufPtrStrided2d(buf, i0, s0, i1, s1) ((char*)buf + i0 * s0 + i1 * s1)
+static INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+static INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
 
-static INLINE void __Pyx_RaiseArgtupleTooLong(Py_ssize_t num_expected, Py_ssize_t num_found); /*proto*/
-#if (PY_MAJOR_VERSION < 3) && !(Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_NEWBUFFER)
-static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
-static void __Pyx_ReleaseBuffer(PyObject *obj, Py_buffer *view);
-#else
-#define __Pyx_GetBuffer PyObject_GetBuffer
-#define __Pyx_ReleaseBuffer PyObject_ReleaseBuffer
-#endif
-
-Py_ssize_t __Pyx_zeros[] = {0, 0};
-Py_ssize_t __Pyx_minusones[] = {-1, -1};
-
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
-
-static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
-
-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
-
-static PyObject *__Pyx_UnpackItem(PyObject *, Py_ssize_t index); /*proto*/
-static int __Pyx_EndUnpack(PyObject *); /*proto*/
-
-static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
-
 static INLINE PyObject *__Pyx_GetItemInt(PyObject *o, Py_ssize_t i, int is_unsigned) {
     PyObject *r;
     if (PyList_CheckExact(o) && 0 <= i && i < PyList_GET_SIZE(o)) {
@@ -238,14 +225,45 @@
     }
     return r;
 }
+static const char* __Pyx_CheckTypestring_int(const char* ts); /*proto*/
 
+static int __Pyx_GetBuffer_int(PyObject* obj, Py_buffer* buf, int flags, int nd, int cast); /*proto*/
+static void __Pyx_RaiseBufferIndexError(int axis); /*proto*/
+#define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1)
+#if PY_MAJOR_VERSION < 3
+static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
+static void __Pyx_ReleaseBuffer(Py_buffer *view);
+#else
+#define __Pyx_GetBuffer PyObject_GetBuffer
+#define __Pyx_ReleaseBuffer PyBuffer_Release
+#endif
+
+Py_ssize_t __Pyx_zeros[] = {0, 0};
+Py_ssize_t __Pyx_minusones[] = {-1, -1};
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
+
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
+
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+
+static PyObject *__Pyx_UnpackItem(PyObject *, Py_ssize_t index); /*proto*/
+static int __Pyx_EndUnpack(PyObject *); /*proto*/
+
+static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
+
+static INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
+static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
+
 static void __Pyx_WriteUnraisable(const char *name); /*proto*/
 
 static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
 
-static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size);  /*proto*/
+static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, long size);  /*proto*/
 
-static PyObject *__Pyx_ImportModule(char *name); /*proto*/
+static PyObject *__Pyx_ImportModule(const char *name); /*proto*/
 
 static void __Pyx_AddTraceback(const char *funcname); /*proto*/
 
@@ -287,22 +305,60 @@
 
 typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
 
+typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
+
+typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
+
+typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
+
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":15
+ * 
+ * # priority queue
+ * cdef union heapcontents:             # <<<<<<<<<<<<<<
+ *     int intdata
+ *     char* ptrdata
+ */
+
 union __pyx_t_5scipy_7spatial_7ckdtree_heapcontents {
   int intdata;
   char *ptrdata;
 };
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":19
+ *     char* ptrdata
+ * 
+ * cdef struct heapitem:             # <<<<<<<<<<<<<<
+ *     double priority
+ *     heapcontents contents
+ */
+
 struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem {
   double priority;
   union __pyx_t_5scipy_7spatial_7ckdtree_heapcontents contents;
 };
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":23
+ *     heapcontents contents
+ * 
+ * cdef struct heap:             # <<<<<<<<<<<<<<
+ *     int n
+ *     heapitem* heap
+ */
+
 struct __pyx_t_5scipy_7spatial_7ckdtree_heap {
   int n;
   struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem *heap;
   int space;
 };
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":139
+ * 
+ * # Tree structure
+ * cdef struct innernode:             # <<<<<<<<<<<<<<
+ *     int split_dim
+ *     int n_points
+ */
+
 struct __pyx_t_5scipy_7spatial_7ckdtree_innernode {
   int split_dim;
   int n_points;
@@ -311,6 +367,14 @@
   struct __pyx_t_5scipy_7spatial_7ckdtree_innernode *greater;
 };
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":145
+ *     innernode* less
+ *     innernode* greater
+ * cdef struct leafnode:             # <<<<<<<<<<<<<<
+ *     int split_dim
+ *     int n_points
+ */
+
 struct __pyx_t_5scipy_7spatial_7ckdtree_leafnode {
   int split_dim;
   int n_points;
@@ -318,11 +382,27 @@
   int end_idx;
 };
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":153
+ * # this is the standard trick for variable-size arrays:
+ * # malloc sizeof(nodeinfo)+self.m*sizeof(double) bytes.
+ * cdef struct nodeinfo:             # <<<<<<<<<<<<<<
+ *     innernode* node
+ *     double side_distances[0]
+ */
+
 struct __pyx_t_5scipy_7spatial_7ckdtree_nodeinfo {
   struct __pyx_t_5scipy_7spatial_7ckdtree_innernode *node;
   double side_distances[0];
 };
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":157
+ *     double side_distances[0]
+ * 
+ * cdef class cKDTree:             # <<<<<<<<<<<<<<
+ *     """kd-tree for quick nearest-neighbor lookup
+ * 
+ */
+
 struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree {
   PyObject_HEAD
   struct __pyx_vtabstruct_5scipy_7spatial_7ckdtree_cKDTree *__pyx_vtab;
@@ -347,18 +427,21 @@
   void (*__query)(struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *, double *, int *, double *, int, double, double, double);
 };
 static struct __pyx_vtabstruct_5scipy_7spatial_7ckdtree_cKDTree *__pyx_vtabptr_5scipy_7spatial_7ckdtree_cKDTree;
+/* Module declarations from python_buffer */
+
+/* Module declarations from stdlib */
+
 /* Module declarations from numpy */
 
 /* Module declarations from numpy */
 
+static PyTypeObject *__pyx_ptype_5numpy_dtype = 0;
 static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
-/* Module declarations from stdlib */
-
 /* Module declarations from scipy.spatial.ckdtree */
 
 static PyTypeObject *__pyx_ptype_5scipy_7spatial_7ckdtree_cKDTree = 0;
 static double __pyx_v_5scipy_7spatial_7ckdtree_infinity;
-static double __pyx_k_17;
+static double __pyx_k_24;
 static PyObject *__pyx_f_5scipy_7spatial_7ckdtree_heapcreate(struct __pyx_t_5scipy_7spatial_7ckdtree_heap *, int); /*proto*/
 static PyObject *__pyx_f_5scipy_7spatial_7ckdtree_heapdestroy(struct __pyx_t_5scipy_7spatial_7ckdtree_heap *); /*proto*/
 static PyObject *__pyx_f_5scipy_7spatial_7ckdtree_heapresize(struct __pyx_t_5scipy_7spatial_7ckdtree_heap *, int); /*proto*/
@@ -379,6 +462,20 @@
 static PyObject *__pyx_kp___dealloc__;
 static char __pyx_k_query[] = "query";
 static PyObject *__pyx_kp_query;
+static char __pyx_k_data[] = "data";
+static PyObject *__pyx_kp_data;
+static char __pyx_k_leafsize[] = "leafsize";
+static PyObject *__pyx_kp_leafsize;
+static char __pyx_k_x[] = "x";
+static PyObject *__pyx_kp_x;
+static char __pyx_k_k[] = "k";
+static PyObject *__pyx_kp_k;
+static char __pyx_k_eps[] = "eps";
+static PyObject *__pyx_kp_eps;
+static char __pyx_k_p[] = "p";
+static PyObject *__pyx_kp_p;
+static char __pyx_k_23[] = "distance_upper_bound";
+static PyObject *__pyx_kp_23;
 static char __pyx_k_numpy[] = "numpy";
 static PyObject *__pyx_kp_numpy;
 static char __pyx_k_np[] = "np";
@@ -405,8 +502,8 @@
 static PyObject *__pyx_kp_amin;
 static char __pyx_k_arange[] = "arange";
 static PyObject *__pyx_kp_arange;
-static char __pyx_k_int[] = "int";
-static PyObject *__pyx_kp_int;
+static char __pyx_k_27[] = "int32";
+static PyObject *__pyx_kp_27;
 static char __pyx_k_asarray[] = "asarray";
 static PyObject *__pyx_kp_asarray;
 static char __pyx_k_astype[] = "astype";
@@ -421,67 +518,164 @@
 static PyObject *__pyx_kp_empty;
 static char __pyx_k_fill[] = "fill";
 static PyObject *__pyx_kp_fill;
-static char __pyx_k_22[] = "i";
-static PyObject *__pyx_kp_22;
+static char __pyx_k_30[] = "i";
+static PyObject *__pyx_kp_30;
 static PyObject *__pyx_builtin_ValueError;
-static PyObject *__pyx_kp_18;
-static char __pyx_k_18[] = "Heap containing %d items cannot be resized to %d";
-static PyObject *__pyx_kp_19;
-static char __pyx_k_19[] = "leafsize must be at least 1";
-static PyObject *__pyx_kp_20;
-static PyObject *__pyx_kp_21;
-static char __pyx_k_20[] = "x must consist of vectors of length %d but has shape %s";
-static char __pyx_k_21[] = "Only p-norms with 1<=p<=infinity permitted";
+static PyObject *__pyx_kp_25;
+static char __pyx_k_25[] = "Heap containing %d items cannot be resized to %d";
+static PyObject *__pyx_kp_26;
+static char __pyx_k_26[] = "leafsize must be at least 1";
+static PyObject *__pyx_kp_28;
+static PyObject *__pyx_kp_29;
+static char __pyx_k_28[] = "x must consist of vectors of length %d but has shape %s";
+static char __pyx_k_29[] = "Only p-norms with 1<=p<=infinity permitted";
 static char __pyx_k___getbuffer__[] = "__getbuffer__";
 static PyObject *__pyx_kp___getbuffer__;
+static char __pyx_k___releasebuffer__[] = "__releasebuffer__";
+static PyObject *__pyx_kp___releasebuffer__;
+static char __pyx_k_info[] = "info";
+static PyObject *__pyx_kp_info;
+static char __pyx_k_flags[] = "flags";
+static PyObject *__pyx_kp_flags;
+static char __pyx_k_iteritems[] = "iteritems";
+static PyObject *__pyx_kp_iteritems;
+static char __pyx_k_next[] = "next";
+static PyObject *__pyx_kp_next;
+static char __pyx_k_StopIteration[] = "StopIteration";
+static PyObject *__pyx_kp_StopIteration;
+static char __pyx_k_pop[] = "pop";
+static PyObject *__pyx_kp_pop;
 static char __pyx_k_RuntimeError[] = "RuntimeError";
 static PyObject *__pyx_kp_RuntimeError;
 static PyObject *__pyx_kp_1;
-static PyObject *__pyx_kp_16;
+static PyObject *__pyx_kp_2;
+static PyObject *__pyx_kp_20;
+static PyObject *__pyx_kp_21;
+static PyObject *__pyx_kp_22;
+static PyObject *__pyx_builtin_StopIteration;
 static PyObject *__pyx_builtin_RuntimeError;
-static char __pyx_k_1[] = "Py_intptr_t and Py_ssize_t differs in size, numpy.pxd does not support this";
-static char __pyx_k_2[] = "b";
-static char __pyx_k_3[] = "B";
-static char __pyx_k_4[] = "h";
-static char __pyx_k_5[] = "H";
-static char __pyx_k_6[] = "i";
-static char __pyx_k_7[] = "I";
-static char __pyx_k_8[] = "l";
-static char __pyx_k_9[] = "L";
-static char __pyx_k_10[] = "q";
-static char __pyx_k_11[] = "Q";
-static char __pyx_k_12[] = "f";
-static char __pyx_k_13[] = "d";
-static char __pyx_k_14[] = "g";
-static char __pyx_k_15[] = "O";
-static char __pyx_k_16[] = "only objects, int and float dtypes supported for ndarray buffer access so far (dtype is %d)";
+static char __pyx_k_1[] = "ndarray is not C contiguous";
+static char __pyx_k_2[] = "ndarray is not Fortran contiguous";
+static char __pyx_k_3[] = "b";
+static char __pyx_k_4[] = "B";
+static char __pyx_k_5[] = "h";
+static char __pyx_k_6[] = "H";
+static char __pyx_k_7[] = "i";
+static char __pyx_k_8[] = "I";
+static char __pyx_k_9[] = "l";
+static char __pyx_k_10[] = "L";
+static char __pyx_k_11[] = "q";
+static char __pyx_k_12[] = "Q";
+static char __pyx_k_13[] = "f";
+static char __pyx_k_14[] = "d";
+static char __pyx_k_15[] = "g";
+static char __pyx_k_16[] = "Zf";
+static char __pyx_k_17[] = "Zd";
+static char __pyx_k_18[] = "Zg";
+static char __pyx_k_19[] = "O";
+static char __pyx_k_20[] = "unknown dtype code in numpy.pxd (%d)";
+static char __pyx_k_21[] = "Format string allocated too short.";
+static char __pyx_k_22[] = "unknown dtype code in numpy.pxd (%d)";
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":28
+ *     int space
+ * 
+ * cdef inline heapcreate(heap* self,int initial_size):             # <<<<<<<<<<<<<<
+ *     self.space = initial_size
+ *     self.heap = <heapitem*>stdlib.malloc(sizeof(heapitem)*self.space)
+ */
+
 static INLINE PyObject *__pyx_f_5scipy_7spatial_7ckdtree_heapcreate(struct __pyx_t_5scipy_7spatial_7ckdtree_heap *__pyx_v_self, int __pyx_v_initial_size) {
   PyObject *__pyx_r;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":29
+ * 
+ * cdef inline heapcreate(heap* self,int initial_size):
+ *     self.space = initial_size             # <<<<<<<<<<<<<<
+ *     self.heap = <heapitem*>stdlib.malloc(sizeof(heapitem)*self.space)
+ *     self.n=0
+ */
   __pyx_v_self->space = __pyx_v_initial_size;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":30
+ * cdef inline heapcreate(heap* self,int initial_size):
+ *     self.space = initial_size
+ *     self.heap = <heapitem*>stdlib.malloc(sizeof(heapitem)*self.space)             # <<<<<<<<<<<<<<
+ *     self.n=0
+ * 
+ */
   __pyx_v_self->heap = ((struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem *)malloc(((sizeof(struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem)) * __pyx_v_self->space)));
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":31
+ *     self.space = initial_size
+ *     self.heap = <heapitem*>stdlib.malloc(sizeof(heapitem)*self.space)
+ *     self.n=0             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline heapdestroy(heap* self):
+ */
   __pyx_v_self->n = 0;
 
   __pyx_r = Py_None; Py_INCREF(Py_None);
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":33
+ *     self.n=0
+ * 
+ * cdef inline heapdestroy(heap* self):             # <<<<<<<<<<<<<<
+ *     stdlib.free(self.heap)
+ * 
+ */
+
 static INLINE PyObject *__pyx_f_5scipy_7spatial_7ckdtree_heapdestroy(struct __pyx_t_5scipy_7spatial_7ckdtree_heap *__pyx_v_self) {
   PyObject *__pyx_r;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":34
+ * 
+ * cdef inline heapdestroy(heap* self):
+ *     stdlib.free(self.heap)             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline heapresize(heap* self, int new_space):
+ */
   free(__pyx_v_self->heap);
 
   __pyx_r = Py_None; Py_INCREF(Py_None);
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":36
+ *     stdlib.free(self.heap)
+ * 
+ * cdef inline heapresize(heap* self, int new_space):             # <<<<<<<<<<<<<<
+ *     if new_space<self.n:
+ *         raise ValueError("Heap containing %d items cannot be resized to %d" % (self.n, new_space))
+ */
+
 static INLINE PyObject *__pyx_f_5scipy_7spatial_7ckdtree_heapresize(struct __pyx_t_5scipy_7spatial_7ckdtree_heap *__pyx_v_self, int __pyx_v_new_space) {
   PyObject *__pyx_r;
   int __pyx_1;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   PyObject *__pyx_4 = 0;
+  PyObject *__pyx_t_1 = NULL;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":37
+ * 
+ * cdef inline heapresize(heap* self, int new_space):
+ *     if new_space<self.n:             # <<<<<<<<<<<<<<
+ *         raise ValueError("Heap containing %d items cannot be resized to %d" % (self.n, new_space))
+ *     self.space = new_space
+ */
   __pyx_1 = (__pyx_v_new_space < __pyx_v_self->n);
   if (__pyx_1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":38
+ * cdef inline heapresize(heap* self, int new_space):
+ *     if new_space<self.n:
+ *         raise ValueError("Heap containing %d items cannot be resized to %d" % (self.n, new_space))             # <<<<<<<<<<<<<<
+ *     self.space = new_space
+ *     self.heap = <heapitem*>stdlib.realloc(<void*>self.heap,new_space*sizeof(heapitem))
+ */
     __pyx_2 = PyInt_FromLong(__pyx_v_self->n); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_3 = PyInt_FromLong(__pyx_v_new_space); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -489,20 +683,36 @@
     PyTuple_SET_ITEM(__pyx_4, 1, __pyx_3);
     __pyx_2 = 0;
     __pyx_3 = 0;
-    __pyx_2 = PyNumber_Remainder(__pyx_kp_18, ((PyObject *)__pyx_4)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyNumber_Remainder(__pyx_kp_25, ((PyObject *)__pyx_4)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
-    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
-    __pyx_2 = 0;
-    __pyx_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-    __Pyx_Raise(__pyx_4, 0, 0);
-    Py_DECREF(__pyx_4); __pyx_4 = 0;
+    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+    __Pyx_Raise(__pyx_3, 0, 0);
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
     {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":39
+ *     if new_space<self.n:
+ *         raise ValueError("Heap containing %d items cannot be resized to %d" % (self.n, new_space))
+ *     self.space = new_space             # <<<<<<<<<<<<<<
+ *     self.heap = <heapitem*>stdlib.realloc(<void*>self.heap,new_space*sizeof(heapitem))
+ * 
+ */
   __pyx_v_self->space = __pyx_v_new_space;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":40
+ *         raise ValueError("Heap containing %d items cannot be resized to %d" % (self.n, new_space))
+ *     self.space = new_space
+ *     self.heap = <heapitem*>stdlib.realloc(<void*>self.heap,new_space*sizeof(heapitem))             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline heappush(heap* self, heapitem item):
+ */
   __pyx_v_self->heap = ((struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem *)realloc(((void *)__pyx_v_self->heap), (__pyx_v_new_space * (sizeof(struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem)))));
 
   __pyx_r = Py_None; Py_INCREF(Py_None);
@@ -517,31 +727,119 @@
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":42
+ *     self.heap = <heapitem*>stdlib.realloc(<void*>self.heap,new_space*sizeof(heapitem))
+ * 
+ * cdef inline heappush(heap* self, heapitem item):             # <<<<<<<<<<<<<<
+ *     cdef int i
+ *     cdef heapitem t
+ */
+
 static INLINE PyObject *__pyx_f_5scipy_7spatial_7ckdtree_heappush(struct __pyx_t_5scipy_7spatial_7ckdtree_heap *__pyx_v_self, struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem __pyx_v_item) {
   int __pyx_v_i;
   struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem __pyx_v_t;
   PyObject *__pyx_r;
   int __pyx_1;
   PyObject *__pyx_2 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":46
+ *     cdef heapitem t
+ * 
+ *     self.n += 1             # <<<<<<<<<<<<<<
+ *     if self.n>self.space:
+ *         heapresize(self,2*self.space+1)
+ */
   __pyx_v_self->n += 1;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":47
+ * 
+ *     self.n += 1
+ *     if self.n>self.space:             # <<<<<<<<<<<<<<
+ *         heapresize(self,2*self.space+1)
+ * 
+ */
   __pyx_1 = (__pyx_v_self->n > __pyx_v_self->space);
   if (__pyx_1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":48
+ *     self.n += 1
+ *     if self.n>self.space:
+ *         heapresize(self,2*self.space+1)             # <<<<<<<<<<<<<<
+ * 
+ *     i = self.n-1
+ */
     __pyx_2 = __pyx_f_5scipy_7spatial_7ckdtree_heapresize(__pyx_v_self, ((2 * __pyx_v_self->space) + 1)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
     goto __pyx_L3;
   }
   __pyx_L3:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":50
+ *         heapresize(self,2*self.space+1)
+ * 
+ *     i = self.n-1             # <<<<<<<<<<<<<<
+ *     self.heap[i] = item
+ *     while i>0 and self.heap[i].priority<self.heap[(i-1)//2].priority:
+ */
   __pyx_v_i = (__pyx_v_self->n - 1);
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":51
+ * 
+ *     i = self.n-1
+ *     self.heap[i] = item             # <<<<<<<<<<<<<<
+ *     while i>0 and self.heap[i].priority<self.heap[(i-1)//2].priority:
+ *         t = self.heap[(i-1)//2]
+ */
   (__pyx_v_self->heap[__pyx_v_i]) = __pyx_v_item;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":52
+ *     i = self.n-1
+ *     self.heap[i] = item
+ *     while i>0 and self.heap[i].priority<self.heap[(i-1)//2].priority:             # <<<<<<<<<<<<<<
+ *         t = self.heap[(i-1)//2]
+ *         self.heap[(i-1)//2] = self.heap[i]
+ */
   while (1) {
     __pyx_1 = (__pyx_v_i > 0);
     if (__pyx_1) {
       __pyx_1 = ((__pyx_v_self->heap[__pyx_v_i]).priority < (__pyx_v_self->heap[((__pyx_v_i - 1) / 2)]).priority);
     }
     if (!__pyx_1) break;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":53
+ *     self.heap[i] = item
+ *     while i>0 and self.heap[i].priority<self.heap[(i-1)//2].priority:
+ *         t = self.heap[(i-1)//2]             # <<<<<<<<<<<<<<
+ *         self.heap[(i-1)//2] = self.heap[i]
+ *         self.heap[i] = t
+ */
     __pyx_v_t = (__pyx_v_self->heap[((__pyx_v_i - 1) / 2)]);
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":54
+ *     while i>0 and self.heap[i].priority<self.heap[(i-1)//2].priority:
+ *         t = self.heap[(i-1)//2]
+ *         self.heap[(i-1)//2] = self.heap[i]             # <<<<<<<<<<<<<<
+ *         self.heap[i] = t
+ *         i = (i-1)//2
+ */
     (__pyx_v_self->heap[((__pyx_v_i - 1) / 2)]) = (__pyx_v_self->heap[__pyx_v_i]);
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":55
+ *         t = self.heap[(i-1)//2]
+ *         self.heap[(i-1)//2] = self.heap[i]
+ *         self.heap[i] = t             # <<<<<<<<<<<<<<
+ *         i = (i-1)//2
+ * 
+ */
     (__pyx_v_self->heap[__pyx_v_i]) = __pyx_v_t;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":56
+ *         self.heap[(i-1)//2] = self.heap[i]
+ *         self.heap[i] = t
+ *         i = (i-1)//2             # <<<<<<<<<<<<<<
+ * 
+ * cdef heapitem heappeek(heap* self):
+ */
     __pyx_v_i = ((__pyx_v_i - 1) / 2);
   }
 
@@ -555,8 +853,24 @@
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":58
+ *         i = (i-1)//2
+ * 
+ * cdef heapitem heappeek(heap* self):             # <<<<<<<<<<<<<<
+ *     return self.heap[0]
+ * 
+ */
+
 static  struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem __pyx_f_5scipy_7spatial_7ckdtree_heappeek(struct __pyx_t_5scipy_7spatial_7ckdtree_heap *__pyx_v_self) {
   struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem __pyx_r;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":59
+ * 
+ * cdef heapitem heappeek(heap* self):
+ *     return self.heap[0]             # <<<<<<<<<<<<<<
+ * 
+ * cdef heapremove(heap* self):
+ */
   __pyx_r = (__pyx_v_self->heap[0]);
   goto __pyx_L0;
 
@@ -564,6 +878,14 @@
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":61
+ *     return self.heap[0]
+ * 
+ * cdef heapremove(heap* self):             # <<<<<<<<<<<<<<
+ *     cdef heapitem t
+ *     cdef int i, j, k, l
+ */
+
 static  PyObject *__pyx_f_5scipy_7spatial_7ckdtree_heapremove(struct __pyx_t_5scipy_7spatial_7ckdtree_heap *__pyx_v_self) {
   struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem __pyx_v_t;
   int __pyx_v_i;
@@ -573,50 +895,210 @@
   PyObject *__pyx_r;
   int __pyx_1;
   PyObject *__pyx_2 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":65
+ *     cdef int i, j, k, l
+ * 
+ *     self.heap[0] = self.heap[self.n-1]             # <<<<<<<<<<<<<<
+ *     self.n -= 1
+ *     if self.n < self.space//4 and self.space>40: #FIXME: magic number
+ */
   (__pyx_v_self->heap[0]) = (__pyx_v_self->heap[(__pyx_v_self->n - 1)]);
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":66
+ * 
+ *     self.heap[0] = self.heap[self.n-1]
+ *     self.n -= 1             # <<<<<<<<<<<<<<
+ *     if self.n < self.space//4 and self.space>40: #FIXME: magic number
+ *         heapresize(self,self.space//2+1)
+ */
   __pyx_v_self->n -= 1;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":67
+ *     self.heap[0] = self.heap[self.n-1]
+ *     self.n -= 1
+ *     if self.n < self.space//4 and self.space>40: #FIXME: magic number             # <<<<<<<<<<<<<<
+ *         heapresize(self,self.space//2+1)
+ * 
+ */
   __pyx_1 = (__pyx_v_self->n < (__pyx_v_self->space / 4));
   if (__pyx_1) {
     __pyx_1 = (__pyx_v_self->space > 40);
   }
   if (__pyx_1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":68
+ *     self.n -= 1
+ *     if self.n < self.space//4 and self.space>40: #FIXME: magic number
+ *         heapresize(self,self.space//2+1)             # <<<<<<<<<<<<<<
+ * 
+ *     i=0
+ */
     __pyx_2 = __pyx_f_5scipy_7spatial_7ckdtree_heapresize(__pyx_v_self, ((__pyx_v_self->space / 2) + 1)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
     goto __pyx_L3;
   }
   __pyx_L3:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":70
+ *         heapresize(self,self.space//2+1)
+ * 
+ *     i=0             # <<<<<<<<<<<<<<
+ *     j=1
+ *     k=2
+ */
   __pyx_v_i = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":71
+ * 
+ *     i=0
+ *     j=1             # <<<<<<<<<<<<<<
+ *     k=2
+ *     while ((j<self.n and
+ */
   __pyx_v_j = 1;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":72
+ *     i=0
+ *     j=1
+ *     k=2             # <<<<<<<<<<<<<<
+ *     while ((j<self.n and
+ *                 self.heap[i].priority > self.heap[j].priority or
+ */
   __pyx_v_k = 2;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":73
+ *     j=1
+ *     k=2
+ *     while ((j<self.n and             # <<<<<<<<<<<<<<
+ *                 self.heap[i].priority > self.heap[j].priority or
+ *             k<self.n and
+ */
   while (1) {
     __pyx_1 = (__pyx_v_j < __pyx_v_self->n);
     if (__pyx_1) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":74
+ *     k=2
+ *     while ((j<self.n and
+ *                 self.heap[i].priority > self.heap[j].priority or             # <<<<<<<<<<<<<<
+ *             k<self.n and
+ *                 self.heap[i].priority > self.heap[k].priority)):
+ */
       __pyx_1 = ((__pyx_v_self->heap[__pyx_v_i]).priority > (__pyx_v_self->heap[__pyx_v_j]).priority);
     }
     if (!__pyx_1) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":75
+ *     while ((j<self.n and
+ *                 self.heap[i].priority > self.heap[j].priority or
+ *             k<self.n and             # <<<<<<<<<<<<<<
+ *                 self.heap[i].priority > self.heap[k].priority)):
+ *         if k<self.n and self.heap[j].priority>self.heap[k].priority:
+ */
       __pyx_1 = (__pyx_v_k < __pyx_v_self->n);
       if (__pyx_1) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":76
+ *                 self.heap[i].priority > self.heap[j].priority or
+ *             k<self.n and
+ *                 self.heap[i].priority > self.heap[k].priority)):             # <<<<<<<<<<<<<<
+ *         if k<self.n and self.heap[j].priority>self.heap[k].priority:
+ *             l = k
+ */
         __pyx_1 = ((__pyx_v_self->heap[__pyx_v_i]).priority > (__pyx_v_self->heap[__pyx_v_k]).priority);
       }
     }
     if (!__pyx_1) break;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":77
+ *             k<self.n and
+ *                 self.heap[i].priority > self.heap[k].priority)):
+ *         if k<self.n and self.heap[j].priority>self.heap[k].priority:             # <<<<<<<<<<<<<<
+ *             l = k
+ *         else:
+ */
     __pyx_1 = (__pyx_v_k < __pyx_v_self->n);
     if (__pyx_1) {
       __pyx_1 = ((__pyx_v_self->heap[__pyx_v_j]).priority > (__pyx_v_self->heap[__pyx_v_k]).priority);
     }
     if (__pyx_1) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":78
+ *                 self.heap[i].priority > self.heap[k].priority)):
+ *         if k<self.n and self.heap[j].priority>self.heap[k].priority:
+ *             l = k             # <<<<<<<<<<<<<<
+ *         else:
+ *             l = j
+ */
       __pyx_v_l = __pyx_v_k;
       goto __pyx_L6;
     }
     /*else*/ {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":80
+ *             l = k
+ *         else:
+ *             l = j             # <<<<<<<<<<<<<<
+ *         t = self.heap[l]
+ *         self.heap[l] = self.heap[i]
+ */
       __pyx_v_l = __pyx_v_j;
     }
     __pyx_L6:;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":81
+ *         else:
+ *             l = j
+ *         t = self.heap[l]             # <<<<<<<<<<<<<<
+ *         self.heap[l] = self.heap[i]
+ *         self.heap[i] = t
+ */
     __pyx_v_t = (__pyx_v_self->heap[__pyx_v_l]);
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":82
+ *             l = j
+ *         t = self.heap[l]
+ *         self.heap[l] = self.heap[i]             # <<<<<<<<<<<<<<
+ *         self.heap[i] = t
+ *         i = l
+ */
     (__pyx_v_self->heap[__pyx_v_l]) = (__pyx_v_self->heap[__pyx_v_i]);
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":83
+ *         t = self.heap[l]
+ *         self.heap[l] = self.heap[i]
+ *         self.heap[i] = t             # <<<<<<<<<<<<<<
+ *         i = l
+ *         j = 2*i+1
+ */
     (__pyx_v_self->heap[__pyx_v_i]) = __pyx_v_t;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":84
+ *         self.heap[l] = self.heap[i]
+ *         self.heap[i] = t
+ *         i = l             # <<<<<<<<<<<<<<
+ *         j = 2*i+1
+ *         k = 2*i+2
+ */
     __pyx_v_i = __pyx_v_l;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":85
+ *         self.heap[i] = t
+ *         i = l
+ *         j = 2*i+1             # <<<<<<<<<<<<<<
+ *         k = 2*i+2
+ * 
+ */
     __pyx_v_j = ((2 * __pyx_v_i) + 1);
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":86
+ *         i = l
+ *         j = 2*i+1
+ *         k = 2*i+2             # <<<<<<<<<<<<<<
+ * 
+ * cdef heapitem heappop(heap* self):
+ */
     __pyx_v_k = ((2 * __pyx_v_i) + 2);
   }
 
@@ -630,13 +1112,45 @@
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":88
+ *         k = 2*i+2
+ * 
+ * cdef heapitem heappop(heap* self):             # <<<<<<<<<<<<<<
+ *     cdef heapitem it
+ *     it = heappeek(self)
+ */
+
 static  struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem __pyx_f_5scipy_7spatial_7ckdtree_heappop(struct __pyx_t_5scipy_7spatial_7ckdtree_heap *__pyx_v_self) {
   struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem __pyx_v_it;
   struct __pyx_t_5scipy_7spatial_7ckdtree_heapitem __pyx_r;
   PyObject *__pyx_1 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":90
+ * cdef heapitem heappop(heap* self):
+ *     cdef heapitem it
+ *     it = heappeek(self)             # <<<<<<<<<<<<<<
+ *     heapremove(self)
+ *     return it
+ */
   __pyx_v_it = __pyx_f_5scipy_7spatial_7ckdtree_heappeek(__pyx_v_self);
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":91
+ *     cdef heapitem it
+ *     it = heappeek(self)
+ *     heapremove(self)             # <<<<<<<<<<<<<<
+ *     return it
+ * 
+ */
   __pyx_1 = __pyx_f_5scipy_7spatial_7ckdtree_heapremove(__pyx_v_self); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":92
+ *     it = heappeek(self)
+ *     heapremove(self)
+ *     return it             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
   __pyx_r = __pyx_v_it;
   goto __pyx_L0;
 
@@ -648,16 +1162,48 @@
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":99
+ * 
+ * # utility functions
+ * cdef inline double dmax(double x, double y):             # <<<<<<<<<<<<<<
+ *     if x>y:
+ *         return x
+ */
+
 static INLINE double __pyx_f_5scipy_7spatial_7ckdtree_dmax(double __pyx_v_x, double __pyx_v_y) {
   double __pyx_r;
   int __pyx_1;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":100
+ * # utility functions
+ * cdef inline double dmax(double x, double y):
+ *     if x>y:             # <<<<<<<<<<<<<<
+ *         return x
+ *     else:
+ */
   __pyx_1 = (__pyx_v_x > __pyx_v_y);
   if (__pyx_1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":101
+ * cdef inline double dmax(double x, double y):
+ *     if x>y:
+ *         return x             # <<<<<<<<<<<<<<
+ *     else:
+ *         return y
+ */
     __pyx_r = __pyx_v_x;
     goto __pyx_L0;
     goto __pyx_L3;
   }
   /*else*/ {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":103
+ *         return x
+ *     else:
+ *         return y             # <<<<<<<<<<<<<<
+ * cdef inline double dabs(double x):
+ *     if x>0:
+ */
     __pyx_r = __pyx_v_y;
     goto __pyx_L0;
   }
@@ -668,16 +1214,48 @@
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":104
+ *     else:
+ *         return y
+ * cdef inline double dabs(double x):             # <<<<<<<<<<<<<<
+ *     if x>0:
+ *         return x
+ */
+
 static INLINE double __pyx_f_5scipy_7spatial_7ckdtree_dabs(double __pyx_v_x) {
   double __pyx_r;
   int __pyx_1;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":105
+ *         return y
+ * cdef inline double dabs(double x):
+ *     if x>0:             # <<<<<<<<<<<<<<
+ *         return x
+ *     else:
+ */
   __pyx_1 = (__pyx_v_x > 0);
   if (__pyx_1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":106
+ * cdef inline double dabs(double x):
+ *     if x>0:
+ *         return x             # <<<<<<<<<<<<<<
+ *     else:
+ *         return -x
+ */
     __pyx_r = __pyx_v_x;
     goto __pyx_L0;
     goto __pyx_L3;
   }
   /*else*/ {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":108
+ *         return x
+ *     else:
+ *         return -x             # <<<<<<<<<<<<<<
+ * cdef inline double _distance_p(double*x,double*y,double p,int k,double upperbound):
+ *     """Compute the distance between x and y
+ */
     __pyx_r = (-__pyx_v_x);
     goto __pyx_L0;
   }
@@ -688,18 +1266,74 @@
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":109
+ *     else:
+ *         return -x
+ * cdef inline double _distance_p(double*x,double*y,double p,int k,double upperbound):             # <<<<<<<<<<<<<<
+ *     """Compute the distance between x and y
+ * 
+ */
+
 static INLINE double __pyx_f_5scipy_7spatial_7ckdtree__distance_p(double *__pyx_v_x, double *__pyx_v_y, double __pyx_v_p, int __pyx_v_k, double __pyx_v_upperbound) {
   int __pyx_v_i;
   double __pyx_v_r;
   double __pyx_r;
   int __pyx_1;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":118
+ *     cdef int i
+ *     cdef double r
+ *     r = 0             # <<<<<<<<<<<<<<
+ *     if p==infinity:
+ *         for i in range(k):
+ */
   __pyx_v_r = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":119
+ *     cdef double r
+ *     r = 0
+ *     if p==infinity:             # <<<<<<<<<<<<<<
+ *         for i in range(k):
+ *             r = dmax(r,dabs(x[i]-y[i]))
+ */
   __pyx_1 = (__pyx_v_p == __pyx_v_5scipy_7spatial_7ckdtree_infinity);
   if (__pyx_1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":120
+ *     r = 0
+ *     if p==infinity:
+ *         for i in range(k):             # <<<<<<<<<<<<<<
+ *             r = dmax(r,dabs(x[i]-y[i]))
+ *             if r>upperbound:
+ */
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_k; __pyx_v_i+=1) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":121
+ *     if p==infinity:
+ *         for i in range(k):
+ *             r = dmax(r,dabs(x[i]-y[i]))             # <<<<<<<<<<<<<<
+ *             if r>upperbound:
+ *                 return r
+ */
       __pyx_v_r = __pyx_f_5scipy_7spatial_7ckdtree_dmax(__pyx_v_r, __pyx_f_5scipy_7spatial_7ckdtree_dabs(((__pyx_v_x[__pyx_v_i]) - (__pyx_v_y[__pyx_v_i]))));
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":122
+ *         for i in range(k):
+ *             r = dmax(r,dabs(x[i]-y[i]))
+ *             if r>upperbound:             # <<<<<<<<<<<<<<
+ *                 return r
+ *     elif p==1:
+ */
       __pyx_1 = (__pyx_v_r > __pyx_v_upperbound);
       if (__pyx_1) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":123
+ *             r = dmax(r,dabs(x[i]-y[i]))
+ *             if r>upperbound:
+ *                 return r             # <<<<<<<<<<<<<<
+ *     elif p==1:
+ *         for i in range(k):
+ */
         __pyx_r = __pyx_v_r;
         goto __pyx_L0;
         goto __pyx_L6;
@@ -708,12 +1342,52 @@
     }
     goto __pyx_L3;
   }
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":124
+ *             if r>upperbound:
+ *                 return r
+ *     elif p==1:             # <<<<<<<<<<<<<<
+ *         for i in range(k):
+ *             r += dabs(x[i]-y[i])
+ */
   __pyx_1 = (__pyx_v_p == 1);
   if (__pyx_1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":125
+ *                 return r
+ *     elif p==1:
+ *         for i in range(k):             # <<<<<<<<<<<<<<
+ *             r += dabs(x[i]-y[i])
+ *             if r>upperbound:
+ */
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_k; __pyx_v_i+=1) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":126
+ *     elif p==1:
+ *         for i in range(k):
+ *             r += dabs(x[i]-y[i])             # <<<<<<<<<<<<<<
+ *             if r>upperbound:
+ *                 return r
+ */
       __pyx_v_r += __pyx_f_5scipy_7spatial_7ckdtree_dabs(((__pyx_v_x[__pyx_v_i]) - (__pyx_v_y[__pyx_v_i])));
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":127
+ *         for i in range(k):
+ *             r += dabs(x[i]-y[i])
+ *             if r>upperbound:             # <<<<<<<<<<<<<<
+ *                 return r
+ *     else:
+ */
       __pyx_1 = (__pyx_v_r > __pyx_v_upperbound);
       if (__pyx_1) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":128
+ *             r += dabs(x[i]-y[i])
+ *             if r>upperbound:
+ *                 return r             # <<<<<<<<<<<<<<
+ *     else:
+ *         for i in range(k):
+ */
         __pyx_r = __pyx_v_r;
         goto __pyx_L0;
         goto __pyx_L9;
@@ -723,10 +1397,42 @@
     goto __pyx_L3;
   }
   /*else*/ {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":130
+ *                 return r
+ *     else:
+ *         for i in range(k):             # <<<<<<<<<<<<<<
+ *             r += dabs(x[i]-y[i])**p
+ *             if r>upperbound:
+ */
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_k; __pyx_v_i+=1) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":131
+ *     else:
+ *         for i in range(k):
+ *             r += dabs(x[i]-y[i])**p             # <<<<<<<<<<<<<<
+ *             if r>upperbound:
+ *                 return r
+ */
       __pyx_v_r += pow(__pyx_f_5scipy_7spatial_7ckdtree_dabs(((__pyx_v_x[__pyx_v_i]) - (__pyx_v_y[__pyx_v_i]))), __pyx_v_p);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":132
+ *         for i in range(k):
+ *             r += dabs(x[i]-y[i])**p
+ *             if r>upperbound:             # <<<<<<<<<<<<<<
+ *                 return r
+ *     return r
+ */
       __pyx_1 = (__pyx_v_r > __pyx_v_upperbound);
       if (__pyx_1) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":133
+ *             r += dabs(x[i]-y[i])**p
+ *             if r>upperbound:
+ *                 return r             # <<<<<<<<<<<<<<
+ *     return r
+ * 
+ */
         __pyx_r = __pyx_v_r;
         goto __pyx_L0;
         goto __pyx_L12;
@@ -735,6 +1441,14 @@
     }
   }
   __pyx_L3:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":134
+ *             if r>upperbound:
+ *                 return r
+ *     return r             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
   __pyx_r = __pyx_v_r;
   goto __pyx_L0;
 
@@ -743,6 +1457,14 @@
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":195
+ *     cdef object indices
+ *     cdef np.int32_t* raw_indices
+ *     def __init__(cKDTree self, data, int leafsize=10):             # <<<<<<<<<<<<<<
+ *         """Construct a kd-tree.
+ * 
+ */
+
 static int __pyx_pf_5scipy_7spatial_7ckdtree_7cKDTree___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static char __pyx_doc_5scipy_7spatial_7ckdtree_7cKDTree___init__[] = "Construct a kd-tree.\n\n        Parameters:\n        ===========\n\n        data : array-like, shape (n,m)\n            The n data points of dimension mto be indexed. This array is \n            not copied unless this is necessary to produce a contiguous \n            array of doubles, and so modifying this data will result in \n            bogus results.\n        leafsize : positive integer\n            The number of points at which the algorithm switches over to\n            brute-force.\n        ";
 static int __pyx_pf_5scipy_7spatial_7ckdtree_7cKDTree___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
@@ -783,30 +1505,61 @@
   PyArrayObject *__pyx_t_6 = NULL;
   PyArrayObject *__pyx_t_7 = NULL;
   PyArrayObject *__pyx_t_8 = NULL;
-  static char *__pyx_argnames[] = {"data","leafsize",0};
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_data,&__pyx_kp_leafsize,0};
   __pyx_v_leafsize = 10;
-  if (likely(!__pyx_kwds) && likely(1 <= PyTuple_GET_SIZE(__pyx_args)) && likely(PyTuple_GET_SIZE(__pyx_args) <= 2)) {
-    __pyx_v_data = PyTuple_GET_ITEM(__pyx_args, 0);
-    if (PyTuple_GET_SIZE(__pyx_args) > 1) {
-      __pyx_v_leafsize = __pyx_PyInt_int(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_leafsize == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[2] = {0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
     }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_data);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_data = values[0];
+    if (values[1]) {
+      __pyx_v_leafsize = __pyx_PyInt_int(values[1]); if (unlikely((__pyx_v_leafsize == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+  } else {
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: __pyx_v_leafsize = __pyx_PyInt_int(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_leafsize == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      case  1: __pyx_v_data = PyTuple_GET_ITEM(__pyx_args, 0);
+      break;
+      default: goto __pyx_L5_argtuple_error;
+    }
   }
-  else {
-    if (unlikely(!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O|i", __pyx_argnames, &__pyx_v_data, &__pyx_v_leafsize))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4;
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("scipy.spatial.ckdtree.cKDTree.__init__");
   return -1;
-  __pyx_L4:;
+  __pyx_L4_argument_unpacking_done:;
   __pyx_v_inner_data = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+  __pyx_v_inner_maxes = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+  __pyx_v_inner_mins = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
+  __pyx_v_inner_indices = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
   __pyx_bstruct_inner_data.buf = NULL;
-  __pyx_v_inner_maxes = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
   __pyx_bstruct_inner_maxes.buf = NULL;
-  __pyx_v_inner_mins = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
   __pyx_bstruct_inner_mins.buf = NULL;
-  __pyx_v_inner_indices = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
   __pyx_bstruct_inner_indices.buf = NULL;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":214
+ *         cdef np.ndarray[double, ndim=1] inner_mins
+ *         cdef np.ndarray[np.int32_t, ndim=1] inner_indices
+ *         self.data = np.ascontiguousarray(data,dtype=np.float)             # <<<<<<<<<<<<<<
+ *         self.n, self.m = np.shape(self.data)
+ *         self.leafsize = leafsize
+ */
   __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_ascontiguousarray); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
@@ -826,6 +1579,14 @@
   Py_DECREF(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->data);
   ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->data = __pyx_4;
   __pyx_4 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":215
+ *         cdef np.ndarray[np.int32_t, ndim=1] inner_indices
+ *         self.data = np.ascontiguousarray(data,dtype=np.float)
+ *         self.n, self.m = np.shape(self.data)             # <<<<<<<<<<<<<<
+ *         self.leafsize = leafsize
+ *         if self.leafsize<1:
+ */
   __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_2 = PyObject_GetAttr(__pyx_5, __pyx_kp_shape); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_5); __pyx_5 = 0;
@@ -863,20 +1624,52 @@
     if (__Pyx_EndUnpack(__pyx_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_4); __pyx_4 = 0;
   }
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":216
+ *         self.data = np.ascontiguousarray(data,dtype=np.float)
+ *         self.n, self.m = np.shape(self.data)
+ *         self.leafsize = leafsize             # <<<<<<<<<<<<<<
+ *         if self.leafsize<1:
+ *             raise ValueError("leafsize must be at least 1")
+ */
   ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->leafsize = __pyx_v_leafsize;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":217
+ *         self.n, self.m = np.shape(self.data)
+ *         self.leafsize = leafsize
+ *         if self.leafsize<1:             # <<<<<<<<<<<<<<
+ *             raise ValueError("leafsize must be at least 1")
+ *         self.maxes = np.ascontiguousarray(np.amax(self.data,axis=0))
+ */
   __pyx_7 = (((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->leafsize < 1);
   if (__pyx_7) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":218
+ *         self.leafsize = leafsize
+ *         if self.leafsize<1:
+ *             raise ValueError("leafsize must be at least 1")             # <<<<<<<<<<<<<<
+ *         self.maxes = np.ascontiguousarray(np.amax(self.data,axis=0))
+ *         self.mins = np.ascontiguousarray(np.amin(self.data,axis=0))
+ */
     __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_19);
-    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_19);
+    Py_INCREF(__pyx_kp_26);
+    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_26);
     __pyx_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
     __Pyx_Raise(__pyx_5, 0, 0);
     Py_DECREF(__pyx_5); __pyx_5 = 0;
     {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L5;
+    goto __pyx_L6;
   }
-  __pyx_L5:;
+  __pyx_L6:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":219
+ *         if self.leafsize<1:
+ *             raise ValueError("leafsize must be at least 1")
+ *         self.maxes = np.ascontiguousarray(np.amax(self.data,axis=0))             # <<<<<<<<<<<<<<
+ *         self.mins = np.ascontiguousarray(np.amin(self.data,axis=0))
+ *         self.indices = np.ascontiguousarray(np.arange(self.n,dtype=np.int32))
+ */
   __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_ascontiguousarray); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
@@ -901,6 +1694,14 @@
   Py_DECREF(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->maxes);
   ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->maxes = __pyx_5;
   __pyx_5 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":220
+ *             raise ValueError("leafsize must be at least 1")
+ *         self.maxes = np.ascontiguousarray(np.amax(self.data,axis=0))
+ *         self.mins = np.ascontiguousarray(np.amin(self.data,axis=0))             # <<<<<<<<<<<<<<
+ *         self.indices = np.ascontiguousarray(np.arange(self.n,dtype=np.int32))
+ * 
+ */
   __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_4 = PyObject_GetAttr(__pyx_2, __pyx_kp_ascontiguousarray); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
@@ -925,6 +1726,14 @@
   Py_DECREF(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->mins);
   ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->mins = __pyx_5;
   __pyx_5 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":221
+ *         self.maxes = np.ascontiguousarray(np.amax(self.data,axis=0))
+ *         self.mins = np.ascontiguousarray(np.amin(self.data,axis=0))
+ *         self.indices = np.ascontiguousarray(np.arange(self.n,dtype=np.int32))             # <<<<<<<<<<<<<<
+ * 
+ *         inner_data = self.data
+ */
   __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_ascontiguousarray); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
@@ -937,7 +1746,7 @@
   __pyx_5 = 0;
   __pyx_4 = PyDict_New(); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_8 = PyObject_GetAttr(__pyx_5, __pyx_kp_int); if (unlikely(!__pyx_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_8 = PyObject_GetAttr(__pyx_5, __pyx_kp_27); if (unlikely(!__pyx_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_5); __pyx_5 = 0;
   if (PyDict_SetItem(__pyx_4, __pyx_kp_dtype, __pyx_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_8); __pyx_8 = 0;
@@ -954,14 +1763,22 @@
   Py_DECREF(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->indices);
   ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->indices = __pyx_1;
   __pyx_1 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":223
+ *         self.indices = np.ascontiguousarray(np.arange(self.n,dtype=np.int32))
+ * 
+ *         inner_data = self.data             # <<<<<<<<<<<<<<
+ *         self.raw_data = <double*>inner_data.data
+ *         inner_maxes = self.maxes
+ */
   if (!(__Pyx_TypeTest(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->data, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = ((PyArrayObject *)((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->data);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_inner_data, &__pyx_bstruct_inner_data);
-  __pyx_t_2 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_1, &__pyx_bstruct_inner_data, PyBUF_FORMAT| PyBUF_STRIDES, 2);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_inner_data);
+  __pyx_t_2 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_1, &__pyx_bstruct_inner_data, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0);
   if (unlikely(__pyx_t_2 < 0)) 
   {
       PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
-      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_inner_data, &__pyx_bstruct_inner_data, PyBUF_FORMAT| PyBUF_STRIDES, 2) == -1)) {
+      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_inner_data, &__pyx_bstruct_inner_data, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0) == -1)) {
           Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5);
           __Pyx_RaiseBufferFallbackError();
         } else {
@@ -975,15 +1792,31 @@
   Py_INCREF(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->data);
   Py_DECREF(((PyObject *)__pyx_v_inner_data));
   __pyx_v_inner_data = ((PyArrayObject *)((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->data);
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":224
+ * 
+ *         inner_data = self.data
+ *         self.raw_data = <double*>inner_data.data             # <<<<<<<<<<<<<<
+ *         inner_maxes = self.maxes
+ *         self.raw_maxes = <double*>inner_maxes.data
+ */
   ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->raw_data = ((double *)__pyx_v_inner_data->data);
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":225
+ *         inner_data = self.data
+ *         self.raw_data = <double*>inner_data.data
+ *         inner_maxes = self.maxes             # <<<<<<<<<<<<<<
+ *         self.raw_maxes = <double*>inner_maxes.data
+ *         inner_mins = self.mins
+ */
   if (!(__Pyx_TypeTest(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->maxes, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = ((PyArrayObject *)((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->maxes);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_inner_maxes, &__pyx_bstruct_inner_maxes);
-  __pyx_t_2 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_6, &__pyx_bstruct_inner_maxes, PyBUF_FORMAT| PyBUF_STRIDES, 1);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_inner_maxes);
+  __pyx_t_2 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_6, &__pyx_bstruct_inner_maxes, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0);
   if (unlikely(__pyx_t_2 < 0)) 
   {
       PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3);
-      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_inner_maxes, &__pyx_bstruct_inner_maxes, PyBUF_FORMAT| PyBUF_STRIDES, 1) == -1)) {
+      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_inner_maxes, &__pyx_bstruct_inner_maxes, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0) == -1)) {
           Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3);
           __Pyx_RaiseBufferFallbackError();
         } else {
@@ -997,15 +1830,31 @@
   Py_INCREF(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->maxes);
   Py_DECREF(((PyObject *)__pyx_v_inner_maxes));
   __pyx_v_inner_maxes = ((PyArrayObject *)((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->maxes);
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":226
+ *         self.raw_data = <double*>inner_data.data
+ *         inner_maxes = self.maxes
+ *         self.raw_maxes = <double*>inner_maxes.data             # <<<<<<<<<<<<<<
+ *         inner_mins = self.mins
+ *         self.raw_mins = <double*>inner_mins.data
+ */
   ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->raw_maxes = ((double *)__pyx_v_inner_maxes->data);
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":227
+ *         inner_maxes = self.maxes
+ *         self.raw_maxes = <double*>inner_maxes.data
+ *         inner_mins = self.mins             # <<<<<<<<<<<<<<
+ *         self.raw_mins = <double*>inner_mins.data
+ *         inner_indices = self.indices
+ */
   if (!(__Pyx_TypeTest(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->mins, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->mins);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_inner_mins, &__pyx_bstruct_inner_mins);
-  __pyx_t_2 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_7, &__pyx_bstruct_inner_mins, PyBUF_FORMAT| PyBUF_STRIDES, 1);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_inner_mins);
+  __pyx_t_2 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_7, &__pyx_bstruct_inner_mins, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0);
   if (unlikely(__pyx_t_2 < 0)) 
   {
       PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
-      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_inner_mins, &__pyx_bstruct_inner_mins, PyBUF_FORMAT| PyBUF_STRIDES, 1) == -1)) {
+      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_inner_mins, &__pyx_bstruct_inner_mins, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0) == -1)) {
           Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5);
           __Pyx_RaiseBufferFallbackError();
         } else {
@@ -1019,15 +1868,31 @@
   Py_INCREF(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->mins);
   Py_DECREF(((PyObject *)__pyx_v_inner_mins));
   __pyx_v_inner_mins = ((PyArrayObject *)((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->mins);
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":228
+ *         self.raw_maxes = <double*>inner_maxes.data
+ *         inner_mins = self.mins
+ *         self.raw_mins = <double*>inner_mins.data             # <<<<<<<<<<<<<<
+ *         inner_indices = self.indices
+ *         self.raw_indices = <np.int32_t*>inner_indices.data
+ */
   ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->raw_mins = ((double *)__pyx_v_inner_mins->data);
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":229
+ *         inner_mins = self.mins
+ *         self.raw_mins = <double*>inner_mins.data
+ *         inner_indices = self.indices             # <<<<<<<<<<<<<<
+ *         self.raw_indices = <np.int32_t*>inner_indices.data
+ * 
+ */
   if (!(__Pyx_TypeTest(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->indices, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_8 = ((PyArrayObject *)((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->indices);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_inner_indices, &__pyx_bstruct_inner_indices);
-  __pyx_t_2 = __Pyx_GetBuffer_nn___pyx_t_5numpy_int32_t((PyObject*)__pyx_t_8, &__pyx_bstruct_inner_indices, PyBUF_FORMAT| PyBUF_STRIDES, 1);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_inner_indices);
+  __pyx_t_2 = __Pyx_GetBuffer_nn___pyx_t_5numpy_int32_t((PyObject*)__pyx_t_8, &__pyx_bstruct_inner_indices, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0);
   if (unlikely(__pyx_t_2 < 0)) 
   {
       PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3);
-      if (unlikely(__Pyx_GetBuffer_nn___pyx_t_5numpy_int32_t((PyObject*)__pyx_v_inner_indices, &__pyx_bstruct_inner_indices, PyBUF_FORMAT| PyBUF_STRIDES, 1) == -1)) {
+      if (unlikely(__Pyx_GetBuffer_nn___pyx_t_5numpy_int32_t((PyObject*)__pyx_v_inner_indices, &__pyx_bstruct_inner_indices, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0) == -1)) {
           Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3);
           __Pyx_RaiseBufferFallbackError();
         } else {
@@ -1041,7 +1906,23 @@
   Py_INCREF(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->indices);
   Py_DECREF(((PyObject *)__pyx_v_inner_indices));
   __pyx_v_inner_indices = ((PyArrayObject *)((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->indices);
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":230
+ *         self.raw_mins = <double*>inner_mins.data
+ *         inner_indices = self.indices
+ *         self.raw_indices = <np.int32_t*>inner_indices.data             # <<<<<<<<<<<<<<
+ * 
+ *         self.tree = self.__build(0, self.n, self.raw_maxes, self.raw_mins)
+ */
   ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->raw_indices = ((__pyx_t_5numpy_int32_t *)__pyx_v_inner_indices->data);
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":232
+ *         self.raw_indices = <np.int32_t*>inner_indices.data
+ * 
+ *         self.tree = self.__build(0, self.n, self.raw_maxes, self.raw_mins)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef innernode* __build(cKDTree self, int start_idx, int end_idx, double* maxes, double* mins):
+ */
   ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->tree = ((struct __pyx_vtabstruct_5scipy_7spatial_7ckdtree_cKDTree *)((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->__pyx_vtab)->__build(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self), 0, ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->n, ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->raw_maxes, ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->raw_mins);
 
   __pyx_r = 0;
@@ -1054,20 +1935,20 @@
   Py_XDECREF(__pyx_5);
   Py_XDECREF(__pyx_8);
   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
-    PyErr_Fetch(&__pyx_type, &__pyx_value, &__pyx_tb);
-    __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_inner_indices, &__pyx_bstruct_inner_indices);
-    __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_inner_maxes, &__pyx_bstruct_inner_maxes);
-    __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_inner_data, &__pyx_bstruct_inner_data);
-    __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_inner_mins, &__pyx_bstruct_inner_mins);
-  PyErr_Restore(__pyx_type, __pyx_value, __pyx_tb);}
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_inner_indices);
+    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_inner_maxes);
+    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_inner_data);
+    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_inner_mins);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
   __Pyx_AddTraceback("scipy.spatial.ckdtree.cKDTree.__init__");
   __pyx_r = -1;
   goto __pyx_L2;
   __pyx_L0:;
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_inner_indices, &__pyx_bstruct_inner_indices);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_inner_maxes, &__pyx_bstruct_inner_maxes);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_inner_data, &__pyx_bstruct_inner_data);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_inner_mins, &__pyx_bstruct_inner_mins);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_inner_indices);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_inner_maxes);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_inner_data);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_inner_mins);
   __pyx_L2:;
   Py_DECREF(__pyx_v_inner_data);
   Py_DECREF(__pyx_v_inner_maxes);
@@ -1076,6 +1957,14 @@
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":234
+ *         self.tree = self.__build(0, self.n, self.raw_maxes, self.raw_mins)
+ * 
+ *     cdef innernode* __build(cKDTree self, int start_idx, int end_idx, double* maxes, double* mins):             # <<<<<<<<<<<<<<
+ *         cdef leafnode* n
+ *         cdef innernode* ni
+ */
+
 static  struct __pyx_t_5scipy_7spatial_7ckdtree_innernode *__pyx_f_5scipy_7spatial_7ckdtree_7cKDTree___build(struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *__pyx_v_self, int __pyx_v_start_idx, int __pyx_v_end_idx, double *__pyx_v_maxes, double *__pyx_v_mins) {
   struct __pyx_t_5scipy_7spatial_7ckdtree_leafnode *__pyx_v_n;
   struct __pyx_t_5scipy_7spatial_7ckdtree_innernode *__pyx_v_ni;
@@ -1094,126 +1983,694 @@
   int __pyx_1;
   int __pyx_2;
   long __pyx_3;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":240
+ *         cdef double size, split, minval, maxval
+ *         cdef double*mids
+ *         if end_idx-start_idx<=self.leafsize:             # <<<<<<<<<<<<<<
+ *             n = <leafnode*>stdlib.malloc(sizeof(leafnode))
+ *             n.split_dim = -1
+ */
   __pyx_1 = ((__pyx_v_end_idx - __pyx_v_start_idx) <= __pyx_v_self->leafsize);
   if (__pyx_1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":241
+ *         cdef double*mids
+ *         if end_idx-start_idx<=self.leafsize:
+ *             n = <leafnode*>stdlib.malloc(sizeof(leafnode))             # <<<<<<<<<<<<<<
+ *             n.split_dim = -1
+ *             n.start_idx = start_idx
+ */
     __pyx_v_n = ((struct __pyx_t_5scipy_7spatial_7ckdtree_leafnode *)malloc((sizeof(struct __pyx_t_5scipy_7spatial_7ckdtree_leafnode))));
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":242
+ *         if end_idx-start_idx<=self.leafsize:
+ *             n = <leafnode*>stdlib.malloc(sizeof(leafnode))
+ *             n.split_dim = -1             # <<<<<<<<<<<<<<
+ *             n.start_idx = start_idx
+ *             n.end_idx = end_idx
+ */
     __pyx_v_n->split_dim = -1;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":243
+ *             n = <leafnode*>stdlib.malloc(sizeof(leafnode))
+ *             n.split_dim = -1
+ *             n.start_idx = start_idx             # <<<<<<<<<<<<<<
+ *             n.end_idx = end_idx
+ *             return <innernode*>n
+ */
     __pyx_v_n->start_idx = __pyx_v_start_idx;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":244
+ *             n.split_dim = -1
+ *             n.start_idx = start_idx
+ *             n.end_idx = end_idx             # <<<<<<<<<<<<<<
+ *             return <innernode*>n
+ *         else:
+ */
     __pyx_v_n->end_idx = __pyx_v_end_idx;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":245
+ *             n.start_idx = start_idx
+ *             n.end_idx = end_idx
+ *             return <innernode*>n             # <<<<<<<<<<<<<<
+ *         else:
+ *             d = 0
+ */
     __pyx_r = ((struct __pyx_t_5scipy_7spatial_7ckdtree_innernode *)__pyx_v_n);
     goto __pyx_L0;
     goto __pyx_L3;
   }
   /*else*/ {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":247
+ *             return <innernode*>n
+ *         else:
+ *             d = 0             # <<<<<<<<<<<<<<
+ *             size = 0
+ *             for i in range(self.m):
+ */
     __pyx_v_d = 0;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":248
+ *         else:
+ *             d = 0
+ *             size = 0             # <<<<<<<<<<<<<<
+ *             for i in range(self.m):
+ *                 if maxes[i]-mins[i] > size:
+ */
     __pyx_v_size = 0;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":249
+ *             d = 0
+ *             size = 0
+ *             for i in range(self.m):             # <<<<<<<<<<<<<<
+ *                 if maxes[i]-mins[i] > size:
+ *                     d = i
+ */
     __pyx_2 = __pyx_v_self->m;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; __pyx_v_i+=1) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":250
+ *             size = 0
+ *             for i in range(self.m):
+ *                 if maxes[i]-mins[i] > size:             # <<<<<<<<<<<<<<
+ *                     d = i
+ *                     size =  maxes[i]-mins[i]
+ */
       __pyx_1 = (((__pyx_v_maxes[__pyx_v_i]) - (__pyx_v_mins[__pyx_v_i])) > __pyx_v_size);
       if (__pyx_1) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":251
+ *             for i in range(self.m):
+ *                 if maxes[i]-mins[i] > size:
+ *                     d = i             # <<<<<<<<<<<<<<
+ *                     size =  maxes[i]-mins[i]
+ *             maxval = maxes[d]
+ */
         __pyx_v_d = __pyx_v_i;
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":252
+ *                 if maxes[i]-mins[i] > size:
+ *                     d = i
+ *                     size =  maxes[i]-mins[i]             # <<<<<<<<<<<<<<
+ *             maxval = maxes[d]
+ *             minval = mins[d]
+ */
         __pyx_v_size = ((__pyx_v_maxes[__pyx_v_i]) - (__pyx_v_mins[__pyx_v_i]));
         goto __pyx_L6;
       }
       __pyx_L6:;
     }
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":253
+ *                     d = i
+ *                     size =  maxes[i]-mins[i]
+ *             maxval = maxes[d]             # <<<<<<<<<<<<<<
+ *             minval = mins[d]
+ *             if maxval==minval:
+ */
     __pyx_v_maxval = (__pyx_v_maxes[__pyx_v_d]);
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":254
+ *                     size =  maxes[i]-mins[i]
+ *             maxval = maxes[d]
+ *             minval = mins[d]             # <<<<<<<<<<<<<<
+ *             if maxval==minval:
+ *                 # all points are identical; warn user?
+ */
     __pyx_v_minval = (__pyx_v_mins[__pyx_v_d]);
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":255
+ *             maxval = maxes[d]
+ *             minval = mins[d]
+ *             if maxval==minval:             # <<<<<<<<<<<<<<
+ *                 # all points are identical; warn user?
+ *                 n = <leafnode*>stdlib.malloc(sizeof(leafnode))
+ */
     __pyx_1 = (__pyx_v_maxval == __pyx_v_minval);
     if (__pyx_1) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":257
+ *             if maxval==minval:
+ *                 # all points are identical; warn user?
+ *                 n = <leafnode*>stdlib.malloc(sizeof(leafnode))             # <<<<<<<<<<<<<<
+ *                 n.split_dim = -1
+ *                 n.start_idx = start_idx
+ */
       __pyx_v_n = ((struct __pyx_t_5scipy_7spatial_7ckdtree_leafnode *)malloc((sizeof(struct __pyx_t_5scipy_7spatial_7ckdtree_leafnode))));
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":258
+ *                 # all points are identical; warn user?
+ *                 n = <leafnode*>stdlib.malloc(sizeof(leafnode))
+ *                 n.split_dim = -1             # <<<<<<<<<<<<<<
+ *                 n.start_idx = start_idx
+ *                 n.end_idx = end_idx
+ */
       __pyx_v_n->split_dim = -1;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":259
+ *                 n = <leafnode*>stdlib.malloc(sizeof(leafnode))
+ *                 n.split_dim = -1
+ *                 n.start_idx = start_idx             # <<<<<<<<<<<<<<
+ *                 n.end_idx = end_idx
+ *                 return <innernode*>n
+ */
       __pyx_v_n->start_idx = __pyx_v_start_idx;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":260
+ *                 n.split_dim = -1
+ *                 n.start_idx = start_idx
+ *                 n.end_idx = end_idx             # <<<<<<<<<<<<<<
+ *                 return <innernode*>n
+ * 
+ */
       __pyx_v_n->end_idx = __pyx_v_end_idx;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":261
+ *                 n.start_idx = start_idx
+ *                 n.end_idx = end_idx
+ *                 return <innernode*>n             # <<<<<<<<<<<<<<
+ * 
+ *             split = (maxval+minval)/2
+ */
       __pyx_r = ((struct __pyx_t_5scipy_7spatial_7ckdtree_innernode *)__pyx_v_n);
       goto __pyx_L0;
       goto __pyx_L7;
     }
     __pyx_L7:;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":263
+ *                 return <innernode*>n
+ * 
+ *             split = (maxval+minval)/2             # <<<<<<<<<<<<<<
+ * 
+ *             p = start_idx
+ */
     __pyx_v_split = ((__pyx_v_maxval + __pyx_v_minval) / 2);
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":265
+ *             split = (maxval+minval)/2
+ * 
+ *             p = start_idx             # <<<<<<<<<<<<<<
+ *             q = end_idx-1
+ *             while p<=q:
+ */
     __pyx_v_p = __pyx_v_start_idx;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":266
+ * 
+ *             p = start_idx
+ *             q = end_idx-1             # <<<<<<<<<<<<<<
+ *             while p<=q:
+ *                 if self.raw_data[self.raw_indices[p]*self.m+d]<split:
+ */
     __pyx_v_q = (__pyx_v_end_idx - 1);
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":267
+ *             p = start_idx
+ *             q = end_idx-1
+ *             while p<=q:             # <<<<<<<<<<<<<<
+ *                 if self.raw_data[self.raw_indices[p]*self.m+d]<split:
+ *                     p+=1
+ */
     while (1) {
       __pyx_1 = (__pyx_v_p <= __pyx_v_q);
       if (!__pyx_1) break;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":268
+ *             q = end_idx-1
+ *             while p<=q:
+ *                 if self.raw_data[self.raw_indices[p]*self.m+d]<split:             # <<<<<<<<<<<<<<
+ *                     p+=1
+ *                 elif self.raw_data[self.raw_indices[q]*self.m+d]>=split:
+ */
       __pyx_1 = ((__pyx_v_self->raw_data[(((__pyx_v_self->raw_indices[__pyx_v_p]) * __pyx_v_self->m) + __pyx_v_d)]) < __pyx_v_split);
       if (__pyx_1) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":269
+ *             while p<=q:
+ *                 if self.raw_data[self.raw_indices[p]*self.m+d]<split:
+ *                     p+=1             # <<<<<<<<<<<<<<
+ *                 elif self.raw_data[self.raw_indices[q]*self.m+d]>=split:
+ *                     q-=1
+ */
         __pyx_v_p += 1;
         goto __pyx_L10;
       }
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":270
+ *                 if self.raw_data[self.raw_indices[p]*self.m+d]<split:
+ *                     p+=1
+ *                 elif self.raw_data[self.raw_indices[q]*self.m+d]>=split:             # <<<<<<<<<<<<<<
+ *                     q-=1
+ *                 else:
+ */
       __pyx_1 = ((__pyx_v_self->raw_data[(((__pyx_v_self->raw_indices[__pyx_v_q]) * __pyx_v_self->m) + __pyx_v_d)]) >= __pyx_v_split);
       if (__pyx_1) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":271
+ *                     p+=1
+ *                 elif self.raw_data[self.raw_indices[q]*self.m+d]>=split:
+ *                     q-=1             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     t = self.raw_indices[p]
+ */
         __pyx_v_q -= 1;
         goto __pyx_L10;
       }
       /*else*/ {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":273
+ *                     q-=1
+ *                 else:
+ *                     t = self.raw_indices[p]             # <<<<<<<<<<<<<<
+ *                     self.raw_indices[p] = self.raw_indices[q]
+ *                     self.raw_indices[q] = t
+ */
         __pyx_v_t = (__pyx_v_self->raw_indices[__pyx_v_p]);
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":274
+ *                 else:
+ *                     t = self.raw_indices[p]
+ *                     self.raw_indices[p] = self.raw_indices[q]             # <<<<<<<<<<<<<<
+ *                     self.raw_indices[q] = t
+ *                     p+=1
+ */
         (__pyx_v_self->raw_indices[__pyx_v_p]) = (__pyx_v_self->raw_indices[__pyx_v_q]);
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":275
+ *                     t = self.raw_indices[p]
+ *                     self.raw_indices[p] = self.raw_indices[q]
+ *                     self.raw_indices[q] = t             # <<<<<<<<<<<<<<
+ *                     p+=1
+ *                     q-=1
+ */
         (__pyx_v_self->raw_indices[__pyx_v_q]) = __pyx_v_t;
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":276
+ *                     self.raw_indices[p] = self.raw_indices[q]
+ *                     self.raw_indices[q] = t
+ *                     p+=1             # <<<<<<<<<<<<<<
+ *                     q-=1
+ * 
+ */
         __pyx_v_p += 1;
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":277
+ *                     self.raw_indices[q] = t
+ *                     p+=1
+ *                     q-=1             # <<<<<<<<<<<<<<
+ * 
+ *             # slide midpoint if necessary
+ */
         __pyx_v_q -= 1;
       }
       __pyx_L10:;
     }
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":280
+ * 
+ *             # slide midpoint if necessary
+ *             if p==start_idx:             # <<<<<<<<<<<<<<
+ *                 # no points less than split
+ *                 j = start_idx
+ */
     __pyx_1 = (__pyx_v_p == __pyx_v_start_idx);
     if (__pyx_1) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":282
+ *             if p==start_idx:
+ *                 # no points less than split
+ *                 j = start_idx             # <<<<<<<<<<<<<<
+ *                 split = self.raw_data[self.raw_indices[j]*self.m+d]
+ *                 for i in range(start_idx+1, end_idx):
+ */
       __pyx_v_j = __pyx_v_start_idx;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":283
+ *                 # no points less than split
+ *                 j = start_idx
+ *                 split = self.raw_data[self.raw_indices[j]*self.m+d]             # <<<<<<<<<<<<<<
+ *                 for i in range(start_idx+1, end_idx):
+ *                     if self.raw_data[self.raw_indices[i]*self.m+d]<split:
+ */
       __pyx_v_split = (__pyx_v_self->raw_data[(((__pyx_v_self->raw_indices[__pyx_v_j]) * __pyx_v_self->m) + __pyx_v_d)]);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":284
+ *                 j = start_idx
+ *                 split = self.raw_data[self.raw_indices[j]*self.m+d]
+ *                 for i in range(start_idx+1, end_idx):             # <<<<<<<<<<<<<<
+ *                     if self.raw_data[self.raw_indices[i]*self.m+d]<split:
+ *                         j = i
+ */
       for (__pyx_v_i = (__pyx_v_start_idx + 1); __pyx_v_i < __pyx_v_end_idx; __pyx_v_i+=1) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":285
+ *                 split = self.raw_data[self.raw_indices[j]*self.m+d]
+ *                 for i in range(start_idx+1, end_idx):
+ *                     if self.raw_data[self.raw_indices[i]*self.m+d]<split:             # <<<<<<<<<<<<<<
+ *                         j = i
+ *                         split = self.raw_data[self.raw_indices[j]*self.m+d]
+ */
         __pyx_1 = ((__pyx_v_self->raw_data[(((__pyx_v_self->raw_indices[__pyx_v_i]) * __pyx_v_self->m) + __pyx_v_d)]) < __pyx_v_split);
         if (__pyx_1) {
+
+          /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":286
+ *                 for i in range(start_idx+1, end_idx):
+ *                     if self.raw_data[self.raw_indices[i]*self.m+d]<split:
+ *                         j = i             # <<<<<<<<<<<<<<
+ *                         split = self.raw_data[self.raw_indices[j]*self.m+d]
+ *                 t = self.raw_indices[start_idx]
+ */
           __pyx_v_j = __pyx_v_i;
+
+          /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":287
+ *                     if self.raw_data[self.raw_indices[i]*self.m+d]<split:
+ *                         j = i
+ *                         split = self.raw_data[self.raw_indices[j]*self.m+d]             # <<<<<<<<<<<<<<
+ *                 t = self.raw_indices[start_idx]
+ *                 self.raw_indices[start_idx] = self.raw_indices[j]
+ */
           __pyx_v_split = (__pyx_v_self->raw_data[(((__pyx_v_self->raw_indices[__pyx_v_j]) * __pyx_v_self->m) + __pyx_v_d)]);
           goto __pyx_L14;
         }
         __pyx_L14:;
       }
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":288
+ *                         j = i
+ *                         split = self.raw_data[self.raw_indices[j]*self.m+d]
+ *                 t = self.raw_indices[start_idx]             # <<<<<<<<<<<<<<
+ *                 self.raw_indices[start_idx] = self.raw_indices[j]
+ *                 self.raw_indices[j] = t
+ */
       __pyx_v_t = (__pyx_v_self->raw_indices[__pyx_v_start_idx]);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":289
+ *                         split = self.raw_data[self.raw_indices[j]*self.m+d]
+ *                 t = self.raw_indices[start_idx]
+ *                 self.raw_indices[start_idx] = self.raw_indices[j]             # <<<<<<<<<<<<<<
+ *                 self.raw_indices[j] = t
+ *                 p = start_idx+1
+ */
       (__pyx_v_self->raw_indices[__pyx_v_start_idx]) = (__pyx_v_self->raw_indices[__pyx_v_j]);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":290
+ *                 t = self.raw_indices[start_idx]
+ *                 self.raw_indices[start_idx] = self.raw_indices[j]
+ *                 self.raw_indices[j] = t             # <<<<<<<<<<<<<<
+ *                 p = start_idx+1
+ *                 q = start_idx
+ */
       (__pyx_v_self->raw_indices[__pyx_v_j]) = __pyx_v_t;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":291
+ *                 self.raw_indices[start_idx] = self.raw_indices[j]
+ *                 self.raw_indices[j] = t
+ *                 p = start_idx+1             # <<<<<<<<<<<<<<
+ *                 q = start_idx
+ *             elif p==end_idx:
+ */
       __pyx_v_p = (__pyx_v_start_idx + 1);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":292
+ *                 self.raw_indices[j] = t
+ *                 p = start_idx+1
+ *                 q = start_idx             # <<<<<<<<<<<<<<
+ *             elif p==end_idx:
+ *                 # no points greater than split
+ */
       __pyx_v_q = __pyx_v_start_idx;
       goto __pyx_L11;
     }
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":293
+ *                 p = start_idx+1
+ *                 q = start_idx
+ *             elif p==end_idx:             # <<<<<<<<<<<<<<
+ *                 # no points greater than split
+ *                 j = end_idx-1
+ */
     __pyx_1 = (__pyx_v_p == __pyx_v_end_idx);
     if (__pyx_1) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":295
+ *             elif p==end_idx:
+ *                 # no points greater than split
+ *                 j = end_idx-1             # <<<<<<<<<<<<<<
+ *                 split = self.raw_data[self.raw_indices[j]*self.m+d]
+ *                 for i in range(start_idx, end_idx-1):
+ */
       __pyx_v_j = (__pyx_v_end_idx - 1);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":296
+ *                 # no points greater than split
+ *                 j = end_idx-1
+ *                 split = self.raw_data[self.raw_indices[j]*self.m+d]             # <<<<<<<<<<<<<<
+ *                 for i in range(start_idx, end_idx-1):
+ *                     if self.raw_data[self.raw_indices[i]*self.m+d]>split:
+ */
       __pyx_v_split = (__pyx_v_self->raw_data[(((__pyx_v_self->raw_indices[__pyx_v_j]) * __pyx_v_self->m) + __pyx_v_d)]);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":297
+ *                 j = end_idx-1
+ *                 split = self.raw_data[self.raw_indices[j]*self.m+d]
+ *                 for i in range(start_idx, end_idx-1):             # <<<<<<<<<<<<<<
+ *                     if self.raw_data[self.raw_indices[i]*self.m+d]>split:
+ *                         j = i
+ */
       __pyx_3 = (__pyx_v_end_idx - 1);
       for (__pyx_v_i = __pyx_v_start_idx; __pyx_v_i < __pyx_3; __pyx_v_i+=1) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":298
+ *                 split = self.raw_data[self.raw_indices[j]*self.m+d]
+ *                 for i in range(start_idx, end_idx-1):
+ *                     if self.raw_data[self.raw_indices[i]*self.m+d]>split:             # <<<<<<<<<<<<<<
+ *                         j = i
+ *                         split = self.raw_data[self.raw_indices[j]*self.m+d]
+ */
         __pyx_1 = ((__pyx_v_self->raw_data[(((__pyx_v_self->raw_indices[__pyx_v_i]) * __pyx_v_self->m) + __pyx_v_d)]) > __pyx_v_split);
         if (__pyx_1) {
+
+          /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":299
+ *                 for i in range(start_idx, end_idx-1):
+ *                     if self.raw_data[self.raw_indices[i]*self.m+d]>split:
+ *                         j = i             # <<<<<<<<<<<<<<
+ *                         split = self.raw_data[self.raw_indices[j]*self.m+d]
+ *                 t = self.raw_indices[end_idx-1]
+ */
           __pyx_v_j = __pyx_v_i;
+
+          /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":300
+ *                     if self.raw_data[self.raw_indices[i]*self.m+d]>split:
+ *                         j = i
+ *                         split = self.raw_data[self.raw_indices[j]*self.m+d]             # <<<<<<<<<<<<<<
+ *                 t = self.raw_indices[end_idx-1]
+ *                 self.raw_indices[end_idx-1] = self.raw_indices[j]
+ */
           __pyx_v_split = (__pyx_v_self->raw_data[(((__pyx_v_self->raw_indices[__pyx_v_j]) * __pyx_v_self->m) + __pyx_v_d)]);
           goto __pyx_L17;
         }
         __pyx_L17:;
       }
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":301
+ *                         j = i
+ *                         split = self.raw_data[self.raw_indices[j]*self.m+d]
+ *                 t = self.raw_indices[end_idx-1]             # <<<<<<<<<<<<<<
+ *                 self.raw_indices[end_idx-1] = self.raw_indices[j]
+ *                 self.raw_indices[j] = t
+ */
       __pyx_v_t = (__pyx_v_self->raw_indices[(__pyx_v_end_idx - 1)]);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":302
+ *                         split = self.raw_data[self.raw_indices[j]*self.m+d]
+ *                 t = self.raw_indices[end_idx-1]
+ *                 self.raw_indices[end_idx-1] = self.raw_indices[j]             # <<<<<<<<<<<<<<
+ *                 self.raw_indices[j] = t
+ *                 p = end_idx-1
+ */
       (__pyx_v_self->raw_indices[(__pyx_v_end_idx - 1)]) = (__pyx_v_self->raw_indices[__pyx_v_j]);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":303
+ *                 t = self.raw_indices[end_idx-1]
+ *                 self.raw_indices[end_idx-1] = self.raw_indices[j]
+ *                 self.raw_indices[j] = t             # <<<<<<<<<<<<<<
+ *                 p = end_idx-1
+ *                 q = end_idx-2
+ */
       (__pyx_v_self->raw_indices[__pyx_v_j]) = __pyx_v_t;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":304
+ *                 self.raw_indices[end_idx-1] = self.raw_indices[j]
+ *                 self.raw_indices[j] = t
+ *                 p = end_idx-1             # <<<<<<<<<<<<<<
+ *                 q = end_idx-2
+ * 
+ */
       __pyx_v_p = (__pyx_v_end_idx - 1);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":305
+ *                 self.raw_indices[j] = t
+ *                 p = end_idx-1
+ *                 q = end_idx-2             # <<<<<<<<<<<<<<
+ * 
+ *             # construct new node representation
+ */
       __pyx_v_q = (__pyx_v_end_idx - 2);
       goto __pyx_L11;
     }
     __pyx_L11:;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":308
+ * 
+ *             # construct new node representation
+ *             ni = <innernode*>stdlib.malloc(sizeof(innernode))             # <<<<<<<<<<<<<<
+ * 
+ *             mids = <double*>stdlib.malloc(sizeof(double)*self.m)
+ */
     __pyx_v_ni = ((struct __pyx_t_5scipy_7spatial_7ckdtree_innernode *)malloc((sizeof(struct __pyx_t_5scipy_7spatial_7ckdtree_innernode))));
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":310
+ *             ni = <innernode*>stdlib.malloc(sizeof(innernode))
+ * 
+ *             mids = <double*>stdlib.malloc(sizeof(double)*self.m)             # <<<<<<<<<<<<<<
+ *             for i in range(self.m):
+ *                 mids[i] = maxes[i]
+ */
     __pyx_v_mids = ((double *)malloc(((sizeof(double)) * __pyx_v_self->m)));
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":311
+ * 
+ *             mids = <double*>stdlib.malloc(sizeof(double)*self.m)
+ *             for i in range(self.m):             # <<<<<<<<<<<<<<
+ *                 mids[i] = maxes[i]
+ *             mids[d] = split
+ */
     __pyx_2 = __pyx_v_self->m;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; __pyx_v_i+=1) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":312
+ *             mids = <double*>stdlib.malloc(sizeof(double)*self.m)
+ *             for i in range(self.m):
+ *                 mids[i] = maxes[i]             # <<<<<<<<<<<<<<
+ *             mids[d] = split
+ *             ni.less = self.__build(start_idx,p,mids,mins)
+ */
       (__pyx_v_mids[__pyx_v_i]) = (__pyx_v_maxes[__pyx_v_i]);
     }
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":313
+ *             for i in range(self.m):
+ *                 mids[i] = maxes[i]
+ *             mids[d] = split             # <<<<<<<<<<<<<<
+ *             ni.less = self.__build(start_idx,p,mids,mins)
+ * 
+ */
     (__pyx_v_mids[__pyx_v_d]) = __pyx_v_split;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":314
+ *                 mids[i] = maxes[i]
+ *             mids[d] = split
+ *             ni.less = self.__build(start_idx,p,mids,mins)             # <<<<<<<<<<<<<<
+ * 
+ *             for i in range(self.m):
+ */
     __pyx_v_ni->less = ((struct __pyx_vtabstruct_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self->__pyx_vtab)->__build(__pyx_v_self, __pyx_v_start_idx, __pyx_v_p, __pyx_v_mids, __pyx_v_mins);
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":316
+ *             ni.less = self.__build(start_idx,p,mids,mins)
+ * 
+ *             for i in range(self.m):             # <<<<<<<<<<<<<<
+ *                 mids[i] = mins[i]
+ *             mids[d] = split
+ */
     __pyx_2 = __pyx_v_self->m;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; __pyx_v_i+=1) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":317
+ * 
+ *             for i in range(self.m):
+ *                 mids[i] = mins[i]             # <<<<<<<<<<<<<<
+ *             mids[d] = split
+ *             ni.greater = self.__build(p,end_idx,maxes,mids)
+ */
       (__pyx_v_mids[__pyx_v_i]) = (__pyx_v_mins[__pyx_v_i]);
     }
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":318
+ *             for i in range(self.m):
+ *                 mids[i] = mins[i]
+ *             mids[d] = split             # <<<<<<<<<<<<<<
+ *             ni.greater = self.__build(p,end_idx,maxes,mids)
+ * 
+ */
     (__pyx_v_mids[__pyx_v_d]) = __pyx_v_split;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":319
+ *                 mids[i] = mins[i]
+ *             mids[d] = split
+ *             ni.greater = self.__build(p,end_idx,maxes,mids)             # <<<<<<<<<<<<<<
+ * 
+ *             stdlib.free(mids)
+ */
     __pyx_v_ni->greater = ((struct __pyx_vtabstruct_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self->__pyx_vtab)->__build(__pyx_v_self, __pyx_v_p, __pyx_v_end_idx, __pyx_v_maxes, __pyx_v_mids);
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":321
+ *             ni.greater = self.__build(p,end_idx,maxes,mids)
+ * 
+ *             stdlib.free(mids)             # <<<<<<<<<<<<<<
+ * 
+ *             ni.split_dim = d
+ */
     free(__pyx_v_mids);
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":323
+ *             stdlib.free(mids)
+ * 
+ *             ni.split_dim = d             # <<<<<<<<<<<<<<
+ *             ni.split = split
+ * 
+ */
     __pyx_v_ni->split_dim = __pyx_v_d;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":324
+ * 
+ *             ni.split_dim = d
+ *             ni.split = split             # <<<<<<<<<<<<<<
+ * 
+ *             return ni
+ */
     __pyx_v_ni->split = __pyx_v_split;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":326
+ *             ni.split = split
+ * 
+ *             return ni             # <<<<<<<<<<<<<<
+ * 
+ *     cdef __free_tree(cKDTree self, innernode* node):
+ */
     __pyx_r = __pyx_v_ni;
     goto __pyx_L0;
   }
@@ -1224,19 +2681,59 @@
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":328
+ *             return ni
+ * 
+ *     cdef __free_tree(cKDTree self, innernode* node):             # <<<<<<<<<<<<<<
+ *         if node.split_dim!=-1:
+ *             self.__free_tree(node.less)
+ */
+
 static  PyObject *__pyx_f_5scipy_7spatial_7ckdtree_7cKDTree___free_tree(struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *__pyx_v_self, struct __pyx_t_5scipy_7spatial_7ckdtree_innernode *__pyx_v_node) {
   PyObject *__pyx_r;
   int __pyx_1;
   PyObject *__pyx_2 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":329
+ * 
+ *     cdef __free_tree(cKDTree self, innernode* node):
+ *         if node.split_dim!=-1:             # <<<<<<<<<<<<<<
+ *             self.__free_tree(node.less)
+ *             self.__free_tree(node.greater)
+ */
   __pyx_1 = (__pyx_v_node->split_dim != -1);
   if (__pyx_1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":330
+ *     cdef __free_tree(cKDTree self, innernode* node):
+ *         if node.split_dim!=-1:
+ *             self.__free_tree(node.less)             # <<<<<<<<<<<<<<
+ *             self.__free_tree(node.greater)
+ *         stdlib.free(node)
+ */
     __pyx_2 = ((struct __pyx_vtabstruct_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self->__pyx_vtab)->__free_tree(__pyx_v_self, __pyx_v_node->less); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":331
+ *         if node.split_dim!=-1:
+ *             self.__free_tree(node.less)
+ *             self.__free_tree(node.greater)             # <<<<<<<<<<<<<<
+ *         stdlib.free(node)
+ * 
+ */
     __pyx_2 = ((struct __pyx_vtabstruct_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self->__pyx_vtab)->__free_tree(__pyx_v_self, __pyx_v_node->greater); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
     goto __pyx_L3;
   }
   __pyx_L3:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":332
+ *             self.__free_tree(node.less)
+ *             self.__free_tree(node.greater)
+ *         stdlib.free(node)             # <<<<<<<<<<<<<<
+ * 
+ *     def __dealloc__(cKDTree self):
+ */
   free(__pyx_v_node);
 
   __pyx_r = Py_None; Py_INCREF(Py_None);
@@ -1249,16 +2746,48 @@
   return __pyx_r;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":334
+ *         stdlib.free(node)
+ * 
+ *     def __dealloc__(cKDTree self):             # <<<<<<<<<<<<<<
+ *         if <int>(self.tree) == 0:
+ *             # should happen only if __init__ was never called
+ */
+
 static void __pyx_pf_5scipy_7spatial_7ckdtree_7cKDTree___dealloc__(PyObject *__pyx_v_self); /*proto*/
 static void __pyx_pf_5scipy_7spatial_7ckdtree_7cKDTree___dealloc__(PyObject *__pyx_v_self) {
   int __pyx_1;
   PyObject *__pyx_2 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":335
+ * 
+ *     def __dealloc__(cKDTree self):
+ *         if <int>(self.tree) == 0:             # <<<<<<<<<<<<<<
+ *             # should happen only if __init__ was never called
+ *             return
+ */
   __pyx_1 = (((int)((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->tree) == 0);
   if (__pyx_1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":337
+ *         if <int>(self.tree) == 0:
+ *             # should happen only if __init__ was never called
+ *             return             # <<<<<<<<<<<<<<
+ *         self.__free_tree(self.tree)
+ * 
+ */
     goto __pyx_L0;
     goto __pyx_L5;
   }
   __pyx_L5:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":338
+ *             # should happen only if __init__ was never called
+ *             return
+ *         self.__free_tree(self.tree)             # <<<<<<<<<<<<<<
+ * 
+ *     cdef void __query(cKDTree self,
+ */
   __pyx_2 = ((struct __pyx_vtabstruct_5scipy_7spatial_7ckdtree_cKDTree *)((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->__pyx_vtab)->__free_tree(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self), ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->tree); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
@@ -1269,6 +2798,14 @@
   __pyx_L0:;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":340
+ *         self.__free_tree(self.tree)
+ * 
+ *     cdef void __query(cKDTree self,             # <<<<<<<<<<<<<<
+ *             double*result_distances,
+ *             int*result_indices,
+ */
+
 static  void __pyx_f_5scipy_7spatial_7ckdtree_7cKDTree___query(struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *__pyx_v_self, double *__pyx_v_result_distances, int *__pyx_v_result_indices, double *__pyx_v_x, int __pyx_v_k, double __pyx_v_eps, double __pyx_v_p, double __pyx_v_distance_upper_bound) {
   struct __pyx_t_5scipy_7spatial_7ckdtree_heap __pyx_v_q;
   struct __pyx_t_5scipy_7spatial_7ckdtree_heap __pyx_v_neighbors;
@@ -1290,101 +2827,413 @@
   PyObject *__pyx_1 = 0;
   int __pyx_2;
   int __pyx_3;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":371
+ *         #  distances between the nearest side of the cell and the target
+ *         #  the head node of the cell
+ *         heapcreate(&q,12)             # <<<<<<<<<<<<<<
+ * 
+ *         # priority queue for the nearest neighbors
+ */
   __pyx_1 = __pyx_f_5scipy_7spatial_7ckdtree_heapcreate((&__pyx_v_q), 12); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 371; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":376
+ *         # furthest known neighbor first
+ *         # entries are (-distance**p, i)
+ *         heapcreate(&neighbors,k)             # <<<<<<<<<<<<<<
+ * 
+ *         # set up first nodeinfo
+ */
   __pyx_1 = __pyx_f_5scipy_7spatial_7ckdtree_heapcreate((&__pyx_v_neighbors), __pyx_v_k); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":379
+ * 
+ *         # set up first nodeinfo
+ *         inf = <nodeinfo*>stdlib.malloc(sizeof(nodeinfo)+self.m*sizeof(double))             # <<<<<<<<<<<<<<
+ *         inf.node = self.tree
+ *         for i in range(self.m):
+ */
   __pyx_v_inf = ((struct __pyx_t_5scipy_7spatial_7ckdtree_nodeinfo *)malloc(((sizeof(struct __pyx_t_5scipy_7spatial_7ckdtree_nodeinfo)) + (__pyx_v_self->m * (sizeof(double))))));
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":380
+ *         # set up first nodeinfo
+ *         inf = <nodeinfo*>stdlib.malloc(sizeof(nodeinfo)+self.m*sizeof(double))
+ *         inf.node = self.tree             # <<<<<<<<<<<<<<
+ *         for i in range(self.m):
+ *             inf.side_distances[i] = 0
+ */
   __pyx_v_inf->node = __pyx_v_self->tree;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":381
+ *         inf = <nodeinfo*>stdlib.malloc(sizeof(nodeinfo)+self.m*sizeof(double))
+ *         inf.node = self.tree
+ *         for i in range(self.m):             # <<<<<<<<<<<<<<
+ *             inf.side_distances[i] = 0
+ *             t = x[i]-self.raw_maxes[i]
+ */
   __pyx_2 = __pyx_v_self->m;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; __pyx_v_i+=1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":382
+ *         inf.node = self.tree
+ *         for i in range(self.m):
+ *             inf.side_distances[i] = 0             # <<<<<<<<<<<<<<
+ *             t = x[i]-self.raw_maxes[i]
+ *             if t>inf.side_distances[i]:
+ */
     (__pyx_v_inf->side_distances[__pyx_v_i]) = 0;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":383
+ *         for i in range(self.m):
+ *             inf.side_distances[i] = 0
+ *             t = x[i]-self.raw_maxes[i]             # <<<<<<<<<<<<<<
+ *             if t>inf.side_distances[i]:
+ *                 inf.side_distances[i] = t
+ */
     __pyx_v_t = ((__pyx_v_x[__pyx_v_i]) - (__pyx_v_self->raw_maxes[__pyx_v_i]));
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":384
+ *             inf.side_distances[i] = 0
+ *             t = x[i]-self.raw_maxes[i]
+ *             if t>inf.side_distances[i]:             # <<<<<<<<<<<<<<
+ *                 inf.side_distances[i] = t
+ *             else:
+ */
     __pyx_3 = (__pyx_v_t > (__pyx_v_inf->side_distances[__pyx_v_i]));
     if (__pyx_3) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":385
+ *             t = x[i]-self.raw_maxes[i]
+ *             if t>inf.side_distances[i]:
+ *                 inf.side_distances[i] = t             # <<<<<<<<<<<<<<
+ *             else:
+ *                 t = self.raw_mins[i]-x[i]
+ */
       (__pyx_v_inf->side_distances[__pyx_v_i]) = __pyx_v_t;
       goto __pyx_L5;
     }
     /*else*/ {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":387
+ *                 inf.side_distances[i] = t
+ *             else:
+ *                 t = self.raw_mins[i]-x[i]             # <<<<<<<<<<<<<<
+ *                 if t>inf.side_distances[i]:
+ *                     inf.side_distances[i] = t
+ */
       __pyx_v_t = ((__pyx_v_self->raw_mins[__pyx_v_i]) - (__pyx_v_x[__pyx_v_i]));
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":388
+ *             else:
+ *                 t = self.raw_mins[i]-x[i]
+ *                 if t>inf.side_distances[i]:             # <<<<<<<<<<<<<<
+ *                     inf.side_distances[i] = t
+ *             if p!=1 and p!=infinity:
+ */
       __pyx_3 = (__pyx_v_t > (__pyx_v_inf->side_distances[__pyx_v_i]));
       if (__pyx_3) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":389
+ *                 t = self.raw_mins[i]-x[i]
+ *                 if t>inf.side_distances[i]:
+ *                     inf.side_distances[i] = t             # <<<<<<<<<<<<<<
+ *             if p!=1 and p!=infinity:
+ *                 inf.side_distances[i]=inf.side_distances[i]**p
+ */
         (__pyx_v_inf->side_distances[__pyx_v_i]) = __pyx_v_t;
         goto __pyx_L6;
       }
       __pyx_L6:;
     }
     __pyx_L5:;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":390
+ *                 if t>inf.side_distances[i]:
+ *                     inf.side_distances[i] = t
+ *             if p!=1 and p!=infinity:             # <<<<<<<<<<<<<<
+ *                 inf.side_distances[i]=inf.side_distances[i]**p
+ * 
+ */
     __pyx_3 = (__pyx_v_p != 1);
     if (__pyx_3) {
       __pyx_3 = (__pyx_v_p != __pyx_v_5scipy_7spatial_7ckdtree_infinity);
     }
     if (__pyx_3) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":391
+ *                     inf.side_distances[i] = t
+ *             if p!=1 and p!=infinity:
+ *                 inf.side_distances[i]=inf.side_distances[i]**p             # <<<<<<<<<<<<<<
+ * 
+ *         # compute first distance
+ */
       (__pyx_v_inf->side_distances[__pyx_v_i]) = pow((__pyx_v_inf->side_distances[__pyx_v_i]), __pyx_v_p);
       goto __pyx_L7;
     }
     __pyx_L7:;
   }
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":394
+ * 
+ *         # compute first distance
+ *         min_distance = 0.             # <<<<<<<<<<<<<<
+ *         for i in range(self.m):
+ *             if p==infinity:
+ */
   __pyx_v_min_distance = 0.;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":395
+ *         # compute first distance
+ *         min_distance = 0.
+ *         for i in range(self.m):             # <<<<<<<<<<<<<<
+ *             if p==infinity:
+ *                 min_distance = dmax(min_distance,inf.side_distances[i])
+ */
   __pyx_2 = __pyx_v_self->m;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; __pyx_v_i+=1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":396
+ *         min_distance = 0.
+ *         for i in range(self.m):
+ *             if p==infinity:             # <<<<<<<<<<<<<<
+ *                 min_distance = dmax(min_distance,inf.side_distances[i])
+ *             else:
+ */
     __pyx_3 = (__pyx_v_p == __pyx_v_5scipy_7spatial_7ckdtree_infinity);
     if (__pyx_3) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":397
+ *         for i in range(self.m):
+ *             if p==infinity:
+ *                 min_distance = dmax(min_distance,inf.side_distances[i])             # <<<<<<<<<<<<<<
+ *             else:
+ *                 min_distance += inf.side_distances[i]
+ */
       __pyx_v_min_distance = __pyx_f_5scipy_7spatial_7ckdtree_dmax(__pyx_v_min_distance, (__pyx_v_inf->side_distances[__pyx_v_i]));
       goto __pyx_L10;
     }
     /*else*/ {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":399
+ *                 min_distance = dmax(min_distance,inf.side_distances[i])
+ *             else:
+ *                 min_distance += inf.side_distances[i]             # <<<<<<<<<<<<<<
+ * 
+ *         # fiddle approximation factor
+ */
       __pyx_v_min_distance += (__pyx_v_inf->side_distances[__pyx_v_i]);
     }
     __pyx_L10:;
   }
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":402
+ * 
+ *         # fiddle approximation factor
+ *         if eps==0:             # <<<<<<<<<<<<<<
+ *             epsfac=1
+ *         elif p==infinity:
+ */
   __pyx_3 = (__pyx_v_eps == 0);
   if (__pyx_3) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":403
+ *         # fiddle approximation factor
+ *         if eps==0:
+ *             epsfac=1             # <<<<<<<<<<<<<<
+ *         elif p==infinity:
+ *             epsfac = 1/(1+eps)
+ */
     __pyx_v_epsfac = 1;
     goto __pyx_L11;
   }
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":404
+ *         if eps==0:
+ *             epsfac=1
+ *         elif p==infinity:             # <<<<<<<<<<<<<<
+ *             epsfac = 1/(1+eps)
+ *         else:
+ */
   __pyx_3 = (__pyx_v_p == __pyx_v_5scipy_7spatial_7ckdtree_infinity);
   if (__pyx_3) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":405
+ *             epsfac=1
+ *         elif p==infinity:
+ *             epsfac = 1/(1+eps)             # <<<<<<<<<<<<<<
+ *         else:
+ *             epsfac = 1/(1+eps)**p
+ */
     __pyx_v_epsfac = (1 / (1 + __pyx_v_eps));
     goto __pyx_L11;
   }
   /*else*/ {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":407
+ *             epsfac = 1/(1+eps)
+ *         else:
+ *             epsfac = 1/(1+eps)**p             # <<<<<<<<<<<<<<
+ * 
+ *         # internally we represent all distances as distance**p
+ */
     __pyx_v_epsfac = (1 / pow((1 + __pyx_v_eps), __pyx_v_p));
   }
   __pyx_L11:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":410
+ * 
+ *         # internally we represent all distances as distance**p
+ *         if p!=infinity and distance_upper_bound!=infinity:             # <<<<<<<<<<<<<<
+ *             distance_upper_bound = distance_upper_bound**p
+ * 
+ */
   __pyx_3 = (__pyx_v_p != __pyx_v_5scipy_7spatial_7ckdtree_infinity);
   if (__pyx_3) {
     __pyx_3 = (__pyx_v_distance_upper_bound != __pyx_v_5scipy_7spatial_7ckdtree_infinity);
   }
   if (__pyx_3) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":411
+ *         # internally we represent all distances as distance**p
+ *         if p!=infinity and distance_upper_bound!=infinity:
+ *             distance_upper_bound = distance_upper_bound**p             # <<<<<<<<<<<<<<
+ * 
+ *         while True:
+ */
     __pyx_v_distance_upper_bound = pow(__pyx_v_distance_upper_bound, __pyx_v_p);
     goto __pyx_L12;
   }
   __pyx_L12:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":413
+ *             distance_upper_bound = distance_upper_bound**p
+ * 
+ *         while True:             # <<<<<<<<<<<<<<
+ *             if inf.node.split_dim==-1:
+ *                 node = <leafnode*>inf.node
+ */
   while (1) {
     __pyx_3 = 1;
     if (!__pyx_3) break;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":414
+ * 
+ *         while True:
+ *             if inf.node.split_dim==-1:             # <<<<<<<<<<<<<<
+ *                 node = <leafnode*>inf.node
+ * 
+ */
     __pyx_3 = (__pyx_v_inf->node->split_dim == -1);
     if (__pyx_3) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":415
+ *         while True:
+ *             if inf.node.split_dim==-1:
+ *                 node = <leafnode*>inf.node             # <<<<<<<<<<<<<<
+ * 
+ *                 # brute-force
+ */
       __pyx_v_node = ((struct __pyx_t_5scipy_7spatial_7ckdtree_leafnode *)__pyx_v_inf->node);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":418
+ * 
+ *                 # brute-force
+ *                 for i in range(node.start_idx,node.end_idx):             # <<<<<<<<<<<<<<
+ *                     d = _distance_p(
+ *                             self.raw_data+self.raw_indices[i]*self.m,
+ */
       __pyx_2 = __pyx_v_node->end_idx;
       for (__pyx_v_i = __pyx_v_node->start_idx; __pyx_v_i < __pyx_2; __pyx_v_i+=1) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":421
+ *                     d = _distance_p(
+ *                             self.raw_data+self.raw_indices[i]*self.m,
+ *                             x,p,self.m,distance_upper_bound)             # <<<<<<<<<<<<<<
+ * 
+ *                     if d<distance_upper_bound:
+ */
         __pyx_v_d = __pyx_f_5scipy_7spatial_7ckdtree__distance_p((__pyx_v_self->raw_data + ((__pyx_v_self->raw_indices[__pyx_v_i]) * __pyx_v_self->m)), __pyx_v_x, __pyx_v_p, __pyx_v_self->m, __pyx_v_distance_upper_bound);
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":423
+ *                             x,p,self.m,distance_upper_bound)
+ * 
+ *                     if d<distance_upper_bound:             # <<<<<<<<<<<<<<
+ *                         # replace furthest neighbor
+ *                         if neighbors.n==k:
+ */
         __pyx_3 = (__pyx_v_d < __pyx_v_distance_upper_bound);
         if (__pyx_3) {
+
+          /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":425
+ *                     if d<distance_upper_bound:
+ *                         # replace furthest neighbor
+ *                         if neighbors.n==k:             # <<<<<<<<<<<<<<
+ *                             heapremove(&neighbors)
+ *                         neighbor.priority = -d
+ */
           __pyx_3 = (__pyx_v_neighbors.n == __pyx_v_k);
           if (__pyx_3) {
+
+            /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":426
+ *                         # replace furthest neighbor
+ *                         if neighbors.n==k:
+ *                             heapremove(&neighbors)             # <<<<<<<<<<<<<<
+ *                         neighbor.priority = -d
+ *                         neighbor.contents.intdata = self.raw_indices[i]
+ */
             __pyx_1 = __pyx_f_5scipy_7spatial_7ckdtree_heapremove((&__pyx_v_neighbors)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             Py_DECREF(__pyx_1); __pyx_1 = 0;
             goto __pyx_L19;
           }
           __pyx_L19:;
+
+          /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":427
+ *                         if neighbors.n==k:
+ *                             heapremove(&neighbors)
+ *                         neighbor.priority = -d             # <<<<<<<<<<<<<<
+ *                         neighbor.contents.intdata = self.raw_indices[i]
+ *                         heappush(&neighbors,neighbor)
+ */
           __pyx_v_neighbor.priority = (-__pyx_v_d);
+
+          /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":428
+ *                             heapremove(&neighbors)
+ *                         neighbor.priority = -d
+ *                         neighbor.contents.intdata = self.raw_indices[i]             # <<<<<<<<<<<<<<
+ *                         heappush(&neighbors,neighbor)
+ * 
+ */
           __pyx_v_neighbor.contents.intdata = (__pyx_v_self->raw_indices[__pyx_v_i]);
+
+          /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":429
+ *                         neighbor.priority = -d
+ *                         neighbor.contents.intdata = self.raw_indices[i]
+ *                         heappush(&neighbors,neighbor)             # <<<<<<<<<<<<<<
+ * 
+ *                         # adjust upper bound for efficiency
+ */
           __pyx_1 = __pyx_f_5scipy_7spatial_7ckdtree_heappush((&__pyx_v_neighbors), __pyx_v_neighbor); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+          /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":432
+ * 
+ *                         # adjust upper bound for efficiency
+ *                         if neighbors.n==k:             # <<<<<<<<<<<<<<
+ *                             distance_upper_bound = -heappeek(&neighbors).priority
+ *                 # done with this node, get another
+ */
           __pyx_3 = (__pyx_v_neighbors.n == __pyx_v_k);
           if (__pyx_3) {
+
+            /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":433
+ *                         # adjust upper bound for efficiency
+ *                         if neighbors.n==k:
+ *                             distance_upper_bound = -heappeek(&neighbors).priority             # <<<<<<<<<<<<<<
+ *                 # done with this node, get another
+ *                 stdlib.free(inf)
+ */
             __pyx_v_distance_upper_bound = (-__pyx_f_5scipy_7spatial_7ckdtree_heappeek((&__pyx_v_neighbors)).priority);
             goto __pyx_L20;
           }
@@ -1393,77 +3242,357 @@
         }
         __pyx_L18:;
       }
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":435
+ *                             distance_upper_bound = -heappeek(&neighbors).priority
+ *                 # done with this node, get another
+ *                 stdlib.free(inf)             # <<<<<<<<<<<<<<
+ *                 if q.n==0:
+ *                     # no more nodes to visit
+ */
       free(__pyx_v_inf);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":436
+ *                 # done with this node, get another
+ *                 stdlib.free(inf)
+ *                 if q.n==0:             # <<<<<<<<<<<<<<
+ *                     # no more nodes to visit
+ *                     break
+ */
       __pyx_3 = (__pyx_v_q.n == 0);
       if (__pyx_3) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":438
+ *                 if q.n==0:
+ *                     # no more nodes to visit
+ *                     break             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     it = heappop(&q)
+ */
         goto __pyx_L14;
         goto __pyx_L21;
       }
       /*else*/ {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":440
+ *                     break
+ *                 else:
+ *                     it = heappop(&q)             # <<<<<<<<<<<<<<
+ *                     inf = <nodeinfo*>it.contents.ptrdata
+ *                     min_distance = it.priority
+ */
         __pyx_v_it = __pyx_f_5scipy_7spatial_7ckdtree_heappop((&__pyx_v_q));
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":441
+ *                 else:
+ *                     it = heappop(&q)
+ *                     inf = <nodeinfo*>it.contents.ptrdata             # <<<<<<<<<<<<<<
+ *                     min_distance = it.priority
+ *             else:
+ */
         __pyx_v_inf = ((struct __pyx_t_5scipy_7spatial_7ckdtree_nodeinfo *)__pyx_v_it.contents.ptrdata);
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":442
+ *                     it = heappop(&q)
+ *                     inf = <nodeinfo*>it.contents.ptrdata
+ *                     min_distance = it.priority             # <<<<<<<<<<<<<<
+ *             else:
+ *                 inode = <innernode*>inf.node
+ */
         __pyx_v_min_distance = __pyx_v_it.priority;
       }
       __pyx_L21:;
       goto __pyx_L15;
     }
     /*else*/ {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":444
+ *                     min_distance = it.priority
+ *             else:
+ *                 inode = <innernode*>inf.node             # <<<<<<<<<<<<<<
+ * 
+ *                 # we don't push cells that are too far onto the queue at all,
+ */
       __pyx_v_inode = ((struct __pyx_t_5scipy_7spatial_7ckdtree_innernode *)__pyx_v_inf->node);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":449
+ *                 # but since the distance_upper_bound decreases, we might get
+ *                 # here even if the cell's too far
+ *                 if min_distance>distance_upper_bound*epsfac:             # <<<<<<<<<<<<<<
+ *                     # since this is the nearest cell, we're done, bail out
+ *                     stdlib.free(inf)
+ */
       __pyx_3 = (__pyx_v_min_distance > (__pyx_v_distance_upper_bound * __pyx_v_epsfac));
       if (__pyx_3) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":451
+ *                 if min_distance>distance_upper_bound*epsfac:
+ *                     # since this is the nearest cell, we're done, bail out
+ *                     stdlib.free(inf)             # <<<<<<<<<<<<<<
+ *                     # free all the nodes still on the heap
+ *                     for i in range(q.n):
+ */
         free(__pyx_v_inf);
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":453
+ *                     stdlib.free(inf)
+ *                     # free all the nodes still on the heap
+ *                     for i in range(q.n):             # <<<<<<<<<<<<<<
+ *                         stdlib.free(q.heap[i].contents.ptrdata)
+ *                     break
+ */
         __pyx_2 = __pyx_v_q.n;
         for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; __pyx_v_i+=1) {
+
+          /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":454
+ *                     # free all the nodes still on the heap
+ *                     for i in range(q.n):
+ *                         stdlib.free(q.heap[i].contents.ptrdata)             # <<<<<<<<<<<<<<
+ *                     break
+ * 
+ */
           free((__pyx_v_q.heap[__pyx_v_i]).contents.ptrdata);
         }
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":455
+ *                     for i in range(q.n):
+ *                         stdlib.free(q.heap[i].contents.ptrdata)
+ *                     break             # <<<<<<<<<<<<<<
+ * 
+ *                 # set up children for searching
+ */
         goto __pyx_L14;
         goto __pyx_L22;
       }
       __pyx_L22:;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":458
+ * 
+ *                 # set up children for searching
+ *                 if x[inode.split_dim]<inode.split:             # <<<<<<<<<<<<<<
+ *                     near = inode.less
+ *                     far = inode.greater
+ */
       __pyx_3 = ((__pyx_v_x[__pyx_v_inode->split_dim]) < __pyx_v_inode->split);
       if (__pyx_3) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":459
+ *                 # set up children for searching
+ *                 if x[inode.split_dim]<inode.split:
+ *                     near = inode.less             # <<<<<<<<<<<<<<
+ *                     far = inode.greater
+ *                 else:
+ */
         __pyx_v_near = __pyx_v_inode->less;
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":460
+ *                 if x[inode.split_dim]<inode.split:
+ *                     near = inode.less
+ *                     far = inode.greater             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     near = inode.greater
+ */
         __pyx_v_far = __pyx_v_inode->greater;
         goto __pyx_L25;
       }
       /*else*/ {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":462
+ *                     far = inode.greater
+ *                 else:
+ *                     near = inode.greater             # <<<<<<<<<<<<<<
+ *                     far = inode.less
+ * 
+ */
         __pyx_v_near = __pyx_v_inode->greater;
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":463
+ *                 else:
+ *                     near = inode.greater
+ *                     far = inode.less             # <<<<<<<<<<<<<<
+ * 
+ *                 # near child is at the same distance as the current node
+ */
         __pyx_v_far = __pyx_v_inode->less;
       }
       __pyx_L25:;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":468
+ *                 # we're going here next, so no point pushing it on the queue
+ *                 # no need to recompute the distance or the side_distances
+ *                 inf.node = near             # <<<<<<<<<<<<<<
+ * 
+ *                 # far child is further by an amount depending only
+ */
       __pyx_v_inf->node = __pyx_v_near;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":473
+ *                 # on the split value; compute its distance and side_distances
+ *                 # and push it on the queue if it's near enough
+ *                 inf2 = <nodeinfo*>stdlib.malloc(sizeof(nodeinfo)+self.m*sizeof(double))             # <<<<<<<<<<<<<<
+ *                 it2.contents.ptrdata = <char*> inf2
+ *                 inf2.node = far
+ */
       __pyx_v_inf2 = ((struct __pyx_t_5scipy_7spatial_7ckdtree_nodeinfo *)malloc(((sizeof(struct __pyx_t_5scipy_7spatial_7ckdtree_nodeinfo)) + (__pyx_v_self->m * (sizeof(double))))));
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":474
+ *                 # and push it on the queue if it's near enough
+ *                 inf2 = <nodeinfo*>stdlib.malloc(sizeof(nodeinfo)+self.m*sizeof(double))
+ *                 it2.contents.ptrdata = <char*> inf2             # <<<<<<<<<<<<<<
+ *                 inf2.node = far
+ *                 # most side distances unchanged
+ */
       __pyx_v_it2.contents.ptrdata = ((char *)__pyx_v_inf2);
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":475
+ *                 inf2 = <nodeinfo*>stdlib.malloc(sizeof(nodeinfo)+self.m*sizeof(double))
+ *                 it2.contents.ptrdata = <char*> inf2
+ *                 inf2.node = far             # <<<<<<<<<<<<<<
+ *                 # most side distances unchanged
+ *                 for i in range(self.m):
+ */
       __pyx_v_inf2->node = __pyx_v_far;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":477
+ *                 inf2.node = far
+ *                 # most side distances unchanged
+ *                 for i in range(self.m):             # <<<<<<<<<<<<<<
+ *                     inf2.side_distances[i] = inf.side_distances[i]
+ * 
+ */
       __pyx_2 = __pyx_v_self->m;
       for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; __pyx_v_i+=1) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":478
+ *                 # most side distances unchanged
+ *                 for i in range(self.m):
+ *                     inf2.side_distances[i] = inf.side_distances[i]             # <<<<<<<<<<<<<<
+ * 
+ *                 # one side distance changes
+ */
         (__pyx_v_inf2->side_distances[__pyx_v_i]) = (__pyx_v_inf->side_distances[__pyx_v_i]);
       }
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":482
+ *                 # one side distance changes
+ *                 # we can adjust the minimum distance without recomputing
+ *                 if p == infinity:             # <<<<<<<<<<<<<<
+ *                     # we never use side_distances in the l_infinity case
+ *                     # inf2.side_distances[inode.split_dim] = dabs(inode.split-x[inode.split_dim])
+ */
       __pyx_3 = (__pyx_v_p == __pyx_v_5scipy_7spatial_7ckdtree_infinity);
       if (__pyx_3) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":485
+ *                     # we never use side_distances in the l_infinity case
+ *                     # inf2.side_distances[inode.split_dim] = dabs(inode.split-x[inode.split_dim])
+ *                     far_min_distance = dmax(min_distance, dabs(inode.split-x[inode.split_dim]))             # <<<<<<<<<<<<<<
+ *                 elif p == 1:
+ *                     inf2.side_distances[inode.split_dim] = dabs(inode.split-x[inode.split_dim])
+ */
         __pyx_v_far_min_distance = __pyx_f_5scipy_7spatial_7ckdtree_dmax(__pyx_v_min_distance, __pyx_f_5scipy_7spatial_7ckdtree_dabs((__pyx_v_inode->split - (__pyx_v_x[__pyx_v_inode->split_dim]))));
         goto __pyx_L28;
       }
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":486
+ *                     # inf2.side_distances[inode.split_dim] = dabs(inode.split-x[inode.split_dim])
+ *                     far_min_distance = dmax(min_distance, dabs(inode.split-x[inode.split_dim]))
+ *                 elif p == 1:             # <<<<<<<<<<<<<<
+ *                     inf2.side_distances[inode.split_dim] = dabs(inode.split-x[inode.split_dim])
+ *                     far_min_distance = min_distance - inf.side_distances[inode.split_dim] + inf2.side_distances[inode.split_dim]
+ */
       __pyx_3 = (__pyx_v_p == 1);
       if (__pyx_3) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":487
+ *                     far_min_distance = dmax(min_distance, dabs(inode.split-x[inode.split_dim]))
+ *                 elif p == 1:
+ *                     inf2.side_distances[inode.split_dim] = dabs(inode.split-x[inode.split_dim])             # <<<<<<<<<<<<<<
+ *                     far_min_distance = min_distance - inf.side_distances[inode.split_dim] + inf2.side_distances[inode.split_dim]
+ *                 else:
+ */
         (__pyx_v_inf2->side_distances[__pyx_v_inode->split_dim]) = __pyx_f_5scipy_7spatial_7ckdtree_dabs((__pyx_v_inode->split - (__pyx_v_x[__pyx_v_inode->split_dim])));
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":488
+ *                 elif p == 1:
+ *                     inf2.side_distances[inode.split_dim] = dabs(inode.split-x[inode.split_dim])
+ *                     far_min_distance = min_distance - inf.side_distances[inode.split_dim] + inf2.side_distances[inode.split_dim]             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     inf2.side_distances[inode.split_dim] = dabs(inode.split-x[inode.split_dim])**p
+ */
         __pyx_v_far_min_distance = ((__pyx_v_min_distance - (__pyx_v_inf->side_distances[__pyx_v_inode->split_dim])) + (__pyx_v_inf2->side_distances[__pyx_v_inode->split_dim]));
         goto __pyx_L28;
       }
       /*else*/ {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":490
+ *                     far_min_distance = min_distance - inf.side_distances[inode.split_dim] + inf2.side_distances[inode.split_dim]
+ *                 else:
+ *                     inf2.side_distances[inode.split_dim] = dabs(inode.split-x[inode.split_dim])**p             # <<<<<<<<<<<<<<
+ *                     far_min_distance = min_distance - inf.side_distances[inode.split_dim] + inf2.side_distances[inode.split_dim]
+ * 
+ */
         (__pyx_v_inf2->side_distances[__pyx_v_inode->split_dim]) = pow(__pyx_f_5scipy_7spatial_7ckdtree_dabs((__pyx_v_inode->split - (__pyx_v_x[__pyx_v_inode->split_dim]))), __pyx_v_p);
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":491
+ *                 else:
+ *                     inf2.side_distances[inode.split_dim] = dabs(inode.split-x[inode.split_dim])**p
+ *                     far_min_distance = min_distance - inf.side_distances[inode.split_dim] + inf2.side_distances[inode.split_dim]             # <<<<<<<<<<<<<<
+ * 
+ *                 it2.priority = far_min_distance
+ */
         __pyx_v_far_min_distance = ((__pyx_v_min_distance - (__pyx_v_inf->side_distances[__pyx_v_inode->split_dim])) + (__pyx_v_inf2->side_distances[__pyx_v_inode->split_dim]));
       }
       __pyx_L28:;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":493
+ *                     far_min_distance = min_distance - inf.side_distances[inode.split_dim] + inf2.side_distances[inode.split_dim]
+ * 
+ *                 it2.priority = far_min_distance             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
       __pyx_v_it2.priority = __pyx_v_far_min_distance;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":497
+ * 
+ *                 # far child might be too far, if so, don't bother pushing it
+ *                 if far_min_distance<=distance_upper_bound*epsfac:             # <<<<<<<<<<<<<<
+ *                     heappush(&q,it2)
+ *                 else:
+ */
       __pyx_3 = (__pyx_v_far_min_distance <= (__pyx_v_distance_upper_bound * __pyx_v_epsfac));
       if (__pyx_3) {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":498
+ *                 # far child might be too far, if so, don't bother pushing it
+ *                 if far_min_distance<=distance_upper_bound*epsfac:
+ *                     heappush(&q,it2)             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     stdlib.free(inf2)
+ */
         __pyx_1 = __pyx_f_5scipy_7spatial_7ckdtree_heappush((&__pyx_v_q), __pyx_v_it2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 498; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         Py_DECREF(__pyx_1); __pyx_1 = 0;
         goto __pyx_L29;
       }
       /*else*/ {
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":500
+ *                     heappush(&q,it2)
+ *                 else:
+ *                     stdlib.free(inf2)             # <<<<<<<<<<<<<<
+ *                     # just in case
+ *                     it2.contents.ptrdata = <char*> 0
+ */
         free(__pyx_v_inf2);
+
+        /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":502
+ *                     stdlib.free(inf2)
+ *                     # just in case
+ *                     it2.contents.ptrdata = <char*> 0             # <<<<<<<<<<<<<<
+ * 
+ *         # fill output arrays with sorted neighbors
+ */
         __pyx_v_it2.contents.ptrdata = ((char *)0);
       }
       __pyx_L29:;
@@ -1471,24 +3600,88 @@
     __pyx_L15:;
   }
   __pyx_L14:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":505
+ * 
+ *         # fill output arrays with sorted neighbors
+ *         for i in range(neighbors.n-1,-1,-1):             # <<<<<<<<<<<<<<
+ *             neighbor = heappop(&neighbors) # FIXME: neighbors may be realloced
+ *             result_indices[i] = neighbor.contents.intdata
+ */
   for (__pyx_v_i = (__pyx_v_neighbors.n - 1); __pyx_v_i > -1; __pyx_v_i-=1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":506
+ *         # fill output arrays with sorted neighbors
+ *         for i in range(neighbors.n-1,-1,-1):
+ *             neighbor = heappop(&neighbors) # FIXME: neighbors may be realloced             # <<<<<<<<<<<<<<
+ *             result_indices[i] = neighbor.contents.intdata
+ *             if p==1 or p==infinity:
+ */
     __pyx_v_neighbor = __pyx_f_5scipy_7spatial_7ckdtree_heappop((&__pyx_v_neighbors));
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":507
+ *         for i in range(neighbors.n-1,-1,-1):
+ *             neighbor = heappop(&neighbors) # FIXME: neighbors may be realloced
+ *             result_indices[i] = neighbor.contents.intdata             # <<<<<<<<<<<<<<
+ *             if p==1 or p==infinity:
+ *                 result_distances[i] = -neighbor.priority
+ */
     (__pyx_v_result_indices[__pyx_v_i]) = __pyx_v_neighbor.contents.intdata;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":508
+ *             neighbor = heappop(&neighbors) # FIXME: neighbors may be realloced
+ *             result_indices[i] = neighbor.contents.intdata
+ *             if p==1 or p==infinity:             # <<<<<<<<<<<<<<
+ *                 result_distances[i] = -neighbor.priority
+ *             else:
+ */
     __pyx_3 = (__pyx_v_p == 1);
     if (!__pyx_3) {
       __pyx_3 = (__pyx_v_p == __pyx_v_5scipy_7spatial_7ckdtree_infinity);
     }
     if (__pyx_3) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":509
+ *             result_indices[i] = neighbor.contents.intdata
+ *             if p==1 or p==infinity:
+ *                 result_distances[i] = -neighbor.priority             # <<<<<<<<<<<<<<
+ *             else:
+ *                 result_distances[i] = (-neighbor.priority)**(1./p)
+ */
       (__pyx_v_result_distances[__pyx_v_i]) = (-__pyx_v_neighbor.priority);
       goto __pyx_L32;
     }
     /*else*/ {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":511
+ *                 result_distances[i] = -neighbor.priority
+ *             else:
+ *                 result_distances[i] = (-neighbor.priority)**(1./p)             # <<<<<<<<<<<<<<
+ * 
+ *         heapdestroy(&q)
+ */
       (__pyx_v_result_distances[__pyx_v_i]) = pow((-__pyx_v_neighbor.priority), (1. / __pyx_v_p));
     }
     __pyx_L32:;
   }
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":513
+ *                 result_distances[i] = (-neighbor.priority)**(1./p)
+ * 
+ *         heapdestroy(&q)             # <<<<<<<<<<<<<<
+ *         heapdestroy(&neighbors)
+ * 
+ */
   __pyx_1 = __pyx_f_5scipy_7spatial_7ckdtree_heapdestroy((&__pyx_v_q)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":514
+ * 
+ *         heapdestroy(&q)
+ *         heapdestroy(&neighbors)             # <<<<<<<<<<<<<<
+ * 
+ *     def query(cKDTree self, object x, int k=1, double eps=0, double p=2,
+ */
   __pyx_1 = __pyx_f_5scipy_7spatial_7ckdtree_heapdestroy((&__pyx_v_neighbors)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
@@ -1499,6 +3692,14 @@
   __pyx_L0:;
 }
 
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":516
+ *         heapdestroy(&neighbors)
+ * 
+ *     def query(cKDTree self, object x, int k=1, double eps=0, double p=2,             # <<<<<<<<<<<<<<
+ *             double distance_upper_bound=infinity):
+ *         """query the kd-tree for nearest neighbors
+ */
+
 static PyObject *__pyx_pf_5scipy_7spatial_7ckdtree_7cKDTree_query(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
 static char __pyx_doc_5scipy_7spatial_7ckdtree_7cKDTree_query[] = "query the kd-tree for nearest neighbors\n\n        Parameters:\n        ===========\n\n        x : array-like, last dimension self.m\n            An array of points to query.\n        k : integer\n            The number of nearest neighbors to return.\n        eps : nonnegative float\n            Return approximate nearest neighbors; the kth returned value \n            is guaranteed to be no further than (1+eps) times the \n            distance to the real kth nearest neighbor.\n        p : float, 1<=p<=infinity\n            Which Minkowski p-norm to use. \n            1 is the sum-of-absolute-values \"Manhattan\" distance\n            2 is the usual Euclidean distance\n            infinity is the maximum-coordinate-difference distance\n        distance_upper_bound : nonnegative float\n            Return only neighbors within this distance. This is used to prune\n            tree searches, so if you are doing a series of nearest-neighbor\n            queries, it may help to supply the distance to the nearest neighbor\n            of the most recent point.\n\n        Returns:\n        ========\n        \n        d : array of floats\n            The distances to the nearest neighbors. \n            If x has shape tuple+(self.m,), then d has shape tuple+(k,).\n            Missing neighbors are indicated with infinite distances.\n        i : array of integers\n            The locations of the neighbors in self.data.\n            If x has shape tuple+(self.m,), then i has shape tuple+(k,).\n            Missing neighbors are indicated with self.n.\n        ";
 static PyObject *__pyx_pf_5scipy_7spatial_7ckdtree_7cKDTree_query(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
@@ -1538,10 +3739,9 @@
   Py_ssize_t __pyx_6 = 0;
   PyObject *__pyx_7 = 0;
   int __pyx_8;
-  double __pyx_9;
-  PyArrayObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyArrayObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyArrayObject *__pyx_t_6 = NULL;
@@ -1550,44 +3750,81 @@
   long __pyx_t_9;
   long __pyx_t_10;
   long __pyx_t_11;
-  static char *__pyx_argnames[] = {"x","k","eps","p","distance_upper_bound",0};
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_x,&__pyx_kp_k,&__pyx_kp_eps,&__pyx_kp_p,&__pyx_kp_23,0};
   __pyx_v_k = 1;
   __pyx_v_eps = ((double)0);
   __pyx_v_p = ((double)2);
-  __pyx_v_distance_upper_bound = __pyx_k_17;
-  if (likely(!__pyx_kwds) && likely(1 <= PyTuple_GET_SIZE(__pyx_args)) && likely(PyTuple_GET_SIZE(__pyx_args) <= 5)) {
-    __pyx_v_x = PyTuple_GET_ITEM(__pyx_args, 0);
-    if (PyTuple_GET_SIZE(__pyx_args) > 1) {
-      __pyx_v_k = __pyx_PyInt_int(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      if (PyTuple_GET_SIZE(__pyx_args) > 2) {
-        __pyx_v_eps = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 2)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        if (PyTuple_GET_SIZE(__pyx_args) > 3) {
-          __pyx_v_p = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 3)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-          if (PyTuple_GET_SIZE(__pyx_args) > 4) {
-            __pyx_v_distance_upper_bound = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 4)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-          }
-        }
-      }
+  __pyx_v_distance_upper_bound = __pyx_k_24;
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[5] = {0,0,0,0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+      case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
     }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_x);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "query") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_x = values[0];
+    if (values[1]) {
+      __pyx_v_k = __pyx_PyInt_int(values[1]); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    if (values[2]) {
+      __pyx_v_eps = __pyx_PyFloat_AsDouble(values[2]); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    if (values[3]) {
+      __pyx_v_p = __pyx_PyFloat_AsDouble(values[3]); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    if (values[4]) {
+      __pyx_v_distance_upper_bound = __pyx_PyFloat_AsDouble(values[4]); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+  } else {
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  5: __pyx_v_distance_upper_bound = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 4)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      case  4: __pyx_v_p = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 3)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      case  3: __pyx_v_eps = __pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(__pyx_args, 2)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      case  2: __pyx_v_k = __pyx_PyInt_int(PyTuple_GET_ITEM(__pyx_args, 1)); if (unlikely((__pyx_v_k == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      case  1: __pyx_v_x = PyTuple_GET_ITEM(__pyx_args, 0);
+      break;
+      default: goto __pyx_L5_argtuple_error;
+    }
   }
-  else {
-    if (unlikely(!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O|iddd", __pyx_argnames, &__pyx_v_x, &__pyx_v_k, &__pyx_v_eps, &__pyx_v_p, &__pyx_v_distance_upper_bound))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4;
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("query", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("scipy.spatial.ckdtree.cKDTree.query");
   return NULL;
-  __pyx_L4:;
+  __pyx_L4_argument_unpacking_done:;
   Py_INCREF(__pyx_v_x);
   __pyx_v_ii = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
-  __pyx_bstruct_ii.buf = NULL;
   __pyx_v_dd = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
-  __pyx_bstruct_dd.buf = NULL;
   __pyx_v_xx = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
-  __pyx_bstruct_xx.buf = NULL;
   __pyx_v_single = Py_None; Py_INCREF(Py_None);
   __pyx_v_retshape = Py_None; Py_INCREF(Py_None);
   __pyx_v_n = Py_None; Py_INCREF(Py_None);
+  __pyx_bstruct_ii.buf = NULL;
+  __pyx_bstruct_dd.buf = NULL;
+  __pyx_bstruct_xx.buf = NULL;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":558
+ *         cdef np.ndarray[double, ndim=2] xx
+ *         cdef int c
+ *         x = np.asarray(x).astype(np.float)             # <<<<<<<<<<<<<<
+ *         if np.shape(x)[-1] != self.m:
+ *             raise ValueError("x must consist of vectors of length %d but has shape %s" % (self.m, np.shape(x)))
+ */
   __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_asarray); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
@@ -1611,6 +3848,14 @@
   Py_DECREF(__pyx_v_x);
   __pyx_v_x = __pyx_3;
   __pyx_3 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":559
+ *         cdef int c
+ *         x = np.asarray(x).astype(np.float)
+ *         if np.shape(x)[-1] != self.m:             # <<<<<<<<<<<<<<
+ *             raise ValueError("x must consist of vectors of length %d but has shape %s" % (self.m, np.shape(x)))
+ *         if p<1:
+ */
   __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_shape); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
@@ -1629,6 +3874,14 @@
   __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   if (__pyx_4) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":560
+ *         x = np.asarray(x).astype(np.float)
+ *         if np.shape(x)[-1] != self.m:
+ *             raise ValueError("x must consist of vectors of length %d but has shape %s" % (self.m, np.shape(x)))             # <<<<<<<<<<<<<<
+ *         if p<1:
+ *             raise ValueError("Only p-norms with 1<=p<=infinity permitted")
+ */
     __pyx_1 = PyInt_FromLong(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->m); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_kp_shape); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -1644,316 +3897,464 @@
     PyTuple_SET_ITEM(__pyx_2, 1, __pyx_5);
     __pyx_1 = 0;
     __pyx_5 = 0;
-    __pyx_3 = PyNumber_Remainder(__pyx_kp_20, ((PyObject *)__pyx_2)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyNumber_Remainder(__pyx_kp_28, ((PyObject *)__pyx_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-    __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_3);
-    __pyx_3 = 0;
-    __pyx_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-    __Pyx_Raise(__pyx_5, 0, 0);
-    Py_DECREF(__pyx_5); __pyx_5 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_t_1);
+    __pyx_t_1 = 0;
+    __pyx_1 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    __Pyx_Raise(__pyx_1, 0, 0);
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
     {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L5;
+    goto __pyx_L6;
   }
-  __pyx_L5:;
+  __pyx_L6:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":561
+ *         if np.shape(x)[-1] != self.m:
+ *             raise ValueError("x must consist of vectors of length %d but has shape %s" % (self.m, np.shape(x)))
+ *         if p<1:             # <<<<<<<<<<<<<<
+ *             raise ValueError("Only p-norms with 1<=p<=infinity permitted")
+ *         if len(x.shape)==1:
+ */
   __pyx_4 = (__pyx_v_p < 1);
   if (__pyx_4) {
-    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_INCREF(__pyx_kp_21);
-    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_21);
-    __pyx_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-    __Pyx_Raise(__pyx_3, 0, 0);
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":562
+ *             raise ValueError("x must consist of vectors of length %d but has shape %s" % (self.m, np.shape(x)))
+ *         if p<1:
+ *             raise ValueError("Only p-norms with 1<=p<=infinity permitted")             # <<<<<<<<<<<<<<
+ *         if len(x.shape)==1:
+ *             single = True
+ */
+    __pyx_5 = PyTuple_New(1); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_29);
+    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_kp_29);
+    __pyx_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+    __Pyx_Raise(__pyx_2, 0, 0);
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
     {__pyx_filename = __pyx_f[0]; __pyx_lineno = 562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L6;
+    goto __pyx_L7;
   }
-  __pyx_L6:;
-  __pyx_1 = PyObject_GetAttr(__pyx_v_x, __pyx_kp_shape); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_6 = PyObject_Length(__pyx_1); if (unlikely(__pyx_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_L7:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":563
+ *         if p<1:
+ *             raise ValueError("Only p-norms with 1<=p<=infinity permitted")
+ *         if len(x.shape)==1:             # <<<<<<<<<<<<<<
+ *             single = True
+ *             x = x[np.newaxis,:]
+ */
+  __pyx_3 = PyObject_GetAttr(__pyx_v_x, __pyx_kp_shape); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_6 = PyObject_Length(__pyx_3); if (unlikely(__pyx_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
   __pyx_4 = (__pyx_6 == 1);
   if (__pyx_4) {
-    __pyx_5 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":564
+ *             raise ValueError("Only p-norms with 1<=p<=infinity permitted")
+ *         if len(x.shape)==1:
+ *             single = True             # <<<<<<<<<<<<<<
+ *             x = x[np.newaxis,:]
+ *         else:
+ */
+    __pyx_1 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_v_single);
-    __pyx_v_single = __pyx_5;
-    __pyx_5 = 0;
-    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_newaxis); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_1 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_5 = PyTuple_New(2); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_3);
-    PyTuple_SET_ITEM(__pyx_5, 1, __pyx_1);
+    __pyx_v_single = __pyx_1;
+    __pyx_1 = 0;
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":565
+ *         if len(x.shape)==1:
+ *             single = True
+ *             x = x[np.newaxis,:]             # <<<<<<<<<<<<<<
+ *         else:
+ *             single = False
+ */
+    __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetAttr(__pyx_5, __pyx_kp_newaxis); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_5); __pyx_5 = 0;
+    __pyx_3 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyTuple_New(2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+    PyTuple_SET_ITEM(__pyx_1, 1, __pyx_3);
+    __pyx_2 = 0;
     __pyx_3 = 0;
-    __pyx_1 = 0;
-    __pyx_2 = PyObject_GetItem(__pyx_v_x, ((PyObject *)__pyx_5)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+    __pyx_5 = PyObject_GetItem(__pyx_v_x, ((PyObject *)__pyx_1)); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
     Py_DECREF(__pyx_v_x);
-    __pyx_v_x = __pyx_2;
-    __pyx_2 = 0;
-    goto __pyx_L7;
+    __pyx_v_x = __pyx_5;
+    __pyx_5 = 0;
+    goto __pyx_L8;
   }
   /*else*/ {
-    __pyx_3 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":567
+ *             x = x[np.newaxis,:]
+ *         else:
+ *             single = False             # <<<<<<<<<<<<<<
+ *         retshape = np.shape(x)[:-1]
+ *         n = np.prod(retshape)
+ */
+    __pyx_2 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_v_single);
-    __pyx_v_single = __pyx_3;
-    __pyx_3 = 0;
+    __pyx_v_single = __pyx_2;
+    __pyx_2 = 0;
   }
-  __pyx_L7:;
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_5 = PyObject_GetAttr(__pyx_1, __pyx_kp_shape); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_L8:;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":568
+ *         else:
+ *             single = False
+ *         retshape = np.shape(x)[:-1]             # <<<<<<<<<<<<<<
+ *         n = np.prod(retshape)
+ *         xx = np.reshape(x,(n,self.m))
+ */
+  __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyObject_GetAttr(__pyx_3, __pyx_kp_shape); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  __pyx_5 = PyTuple_New(1); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_v_x);
+  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_x);
+  __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_v_x);
-  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_x);
-  __pyx_3 = PyObject_Call(__pyx_5, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+  __pyx_3 = PySequence_GetSlice(__pyx_2, 0, -1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(__pyx_v_retshape);
+  __pyx_v_retshape = __pyx_3;
+  __pyx_3 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":569
+ *             single = False
+ *         retshape = np.shape(x)[:-1]
+ *         n = np.prod(retshape)             # <<<<<<<<<<<<<<
+ *         xx = np.reshape(x,(n,self.m))
+ *         dd = np.empty((n,k),dtype=np.float)
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_5 = PyObject_GetAttr(__pyx_1, __pyx_kp_prod); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_v_retshape);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_retshape);
+  __pyx_3 = PyObject_Call(__pyx_5, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_5); __pyx_5 = 0;
   Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-  __pyx_1 = PySequence_GetSlice(__pyx_3, 0, -1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  Py_DECREF(__pyx_v_retshape);
-  __pyx_v_retshape = __pyx_1;
-  __pyx_1 = 0;
-  __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_5, __pyx_kp_prod); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_5); __pyx_5 = 0;
-  __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_v_retshape);
-  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_retshape);
-  __pyx_1 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
   Py_DECREF(__pyx_v_n);
-  __pyx_v_n = __pyx_1;
-  __pyx_1 = 0;
-  __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_5, __pyx_kp_reshape); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_5); __pyx_5 = 0;
-  __pyx_3 = PyInt_FromLong(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->m); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_n = __pyx_3;
+  __pyx_3 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":570
+ *         retshape = np.shape(x)[:-1]
+ *         n = np.prod(retshape)
+ *         xx = np.reshape(x,(n,self.m))             # <<<<<<<<<<<<<<
+ *         dd = np.empty((n,k),dtype=np.float)
+ *         dd.fill(infinity)
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_5 = PyObject_GetAttr(__pyx_1, __pyx_kp_reshape); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_2 = PyInt_FromLong(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->m); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_v_n);
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_n);
+  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2);
+  __pyx_2 = 0;
   __pyx_1 = PyTuple_New(2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_v_n);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_n);
-  PyTuple_SET_ITEM(__pyx_1, 1, __pyx_3);
+  Py_INCREF(__pyx_v_x);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_x);
+  PyTuple_SET_ITEM(__pyx_1, 1, ((PyObject *)__pyx_3));
   __pyx_3 = 0;
-  __pyx_5 = PyTuple_New(2); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_v_x);
-  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_x);
-  PyTuple_SET_ITEM(__pyx_5, 1, ((PyObject *)__pyx_1));
-  __pyx_1 = 0;
-  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
-  if (!(__Pyx_TypeTest(__pyx_3, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = ((PyArrayObject *)__pyx_3);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_xx, &__pyx_bstruct_xx);
-  __pyx_t_2 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_1, &__pyx_bstruct_xx, PyBUF_FORMAT| PyBUF_STRIDES, 2);
-  if (unlikely(__pyx_t_2 < 0)) 
+  __pyx_2 = PyObject_Call(__pyx_5, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (!(__Pyx_TypeTest(__pyx_2, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyArrayObject *)__pyx_2);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_xx);
+  __pyx_t_3 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_2, &__pyx_bstruct_xx, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0);
+  if (unlikely(__pyx_t_3 < 0)) 
   {
-      PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
-      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_xx, &__pyx_bstruct_xx, PyBUF_FORMAT| PyBUF_STRIDES, 2) == -1)) {
-          Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5);
+      PyErr_Fetch(&__pyx_t_1, &__pyx_t_4, &__pyx_t_5);
+      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_xx, &__pyx_bstruct_xx, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0) == -1)) {
+          Py_XDECREF(__pyx_t_1); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5);
           __Pyx_RaiseBufferFallbackError();
         } else {
-          PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+          PyErr_Restore(__pyx_t_1, __pyx_t_4, __pyx_t_5);
       }
   }
   __pyx_bstride_0_xx = __pyx_bstruct_xx.strides[0]; __pyx_bstride_1_xx = __pyx_bstruct_xx.strides[1];
   __pyx_bshape_0_xx = __pyx_bstruct_xx.shape[0]; __pyx_bshape_1_xx = __pyx_bstruct_xx.shape[1];
-  if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = 0;
+  if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = 0;
   Py_DECREF(((PyObject *)__pyx_v_xx));
-  __pyx_v_xx = ((PyArrayObject *)__pyx_3);
-  __pyx_3 = 0;
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_empty); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_5 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_INCREF(__pyx_v_n);
-  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_n);
-  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_5);
-  __pyx_5 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_1, 0, ((PyObject *)__pyx_3));
-  __pyx_3 = 0;
-  __pyx_5 = PyDict_New(); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_xx = ((PyArrayObject *)__pyx_2);
+  __pyx_2 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":571
+ *         n = np.prod(retshape)
+ *         xx = np.reshape(x,(n,self.m))
+ *         dd = np.empty((n,k),dtype=np.float)             # <<<<<<<<<<<<<<
+ *         dd.fill(infinity)
+ *         ii = np.empty((n,k),dtype='i')
+ */
   __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_7 = PyObject_GetAttr(__pyx_3, __pyx_kp_float); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_5 = PyObject_GetAttr(__pyx_3, __pyx_kp_empty); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
-  if (PyDict_SetItem(__pyx_5, __pyx_kp_dtype, __pyx_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(2); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_v_n);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_n);
+  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_2));
+  __pyx_2 = 0;
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_7 = PyObject_GetAttr(__pyx_2, __pyx_kp_float); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  if (PyDict_SetItem(__pyx_1, __pyx_kp_dtype, __pyx_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_7); __pyx_7 = 0;
-  __pyx_3 = PyEval_CallObjectWithKeywords(__pyx_2, ((PyObject *)__pyx_1), ((PyObject *)__pyx_5)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyEval_CallObjectWithKeywords(__pyx_5, ((PyObject *)__pyx_3), ((PyObject *)__pyx_1)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
-  if (!(__Pyx_TypeTest(__pyx_3, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_6 = ((PyArrayObject *)__pyx_3);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_dd, &__pyx_bstruct_dd);
-  __pyx_t_2 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_6, &__pyx_bstruct_dd, PyBUF_FORMAT| PyBUF_STRIDES, 2);
-  if (unlikely(__pyx_t_2 < 0)) 
+  if (!(__Pyx_TypeTest(__pyx_2, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = ((PyArrayObject *)__pyx_2);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_dd);
+  __pyx_t_3 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_6, &__pyx_bstruct_dd, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0);
+  if (unlikely(__pyx_t_3 < 0)) 
   {
-      PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3);
-      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_dd, &__pyx_bstruct_dd, PyBUF_FORMAT| PyBUF_STRIDES, 2) == -1)) {
-          Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3);
+      PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_1);
+      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_dd, &__pyx_bstruct_dd, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0) == -1)) {
+          Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_1);
           __Pyx_RaiseBufferFallbackError();
         } else {
-          PyErr_Restore(__pyx_t_5, __pyx_t_4, __pyx_t_3);
+          PyErr_Restore(__pyx_t_5, __pyx_t_4, __pyx_t_1);
       }
   }
   __pyx_bstride_0_dd = __pyx_bstruct_dd.strides[0]; __pyx_bstride_1_dd = __pyx_bstruct_dd.strides[1];
   __pyx_bshape_0_dd = __pyx_bstruct_dd.shape[0]; __pyx_bshape_1_dd = __pyx_bstruct_dd.shape[1];
-  if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_6 = 0;
   Py_DECREF(((PyObject *)__pyx_v_dd));
-  __pyx_v_dd = ((PyArrayObject *)__pyx_3);
-  __pyx_3 = 0;
+  __pyx_v_dd = ((PyArrayObject *)__pyx_2);
+  __pyx_2 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":572
+ *         xx = np.reshape(x,(n,self.m))
+ *         dd = np.empty((n,k),dtype=np.float)
+ *         dd.fill(infinity)             # <<<<<<<<<<<<<<
+ *         ii = np.empty((n,k),dtype='i')
+ *         ii.fill(self.n)
+ */
   __pyx_7 = PyObject_GetAttr(((PyObject *)__pyx_v_dd), __pyx_kp_fill); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyFloat_FromDouble(__pyx_v_5scipy_7spatial_7ckdtree_infinity); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
-  __pyx_2 = 0;
-  __pyx_5 = PyObject_Call(__pyx_7, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_5 = PyFloat_FromDouble(__pyx_v_5scipy_7spatial_7ckdtree_infinity); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_5);
+  __pyx_5 = 0;
+  __pyx_1 = PyObject_Call(__pyx_7, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_7); __pyx_7 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  Py_DECREF(__pyx_5); __pyx_5 = 0;
-  __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_kp_empty); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":573
+ *         dd = np.empty((n,k),dtype=np.float)
+ *         dd.fill(infinity)
+ *         ii = np.empty((n,k),dtype='i')             # <<<<<<<<<<<<<<
+ *         ii.fill(self.n)
+ *         for c in range(n):
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_5 = PyObject_GetAttr(__pyx_2, __pyx_kp_empty); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
   __pyx_7 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_1 = PyTuple_New(2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_INCREF(__pyx_v_n);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_n);
-  PyTuple_SET_ITEM(__pyx_1, 1, __pyx_7);
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_n);
+  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_7);
   __pyx_7 = 0;
-  __pyx_5 = PyTuple_New(1); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_1));
-  __pyx_1 = 0;
-  __pyx_3 = PyDict_New(); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyDict_SetItem(__pyx_3, __pyx_kp_dtype, __pyx_kp_22) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_7 = PyEval_CallObjectWithKeywords(__pyx_2, ((PyObject *)__pyx_5), ((PyObject *)__pyx_3)); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
-  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, ((PyObject *)__pyx_3));
+  __pyx_3 = 0;
+  __pyx_2 = PyDict_New(); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_2, __pyx_kp_dtype, __pyx_kp_30) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_7 = PyEval_CallObjectWithKeywords(__pyx_5, ((PyObject *)__pyx_1), ((PyObject *)__pyx_2)); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
   if (!(__Pyx_TypeTest(__pyx_7, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = ((PyArrayObject *)__pyx_7);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_ii, &__pyx_bstruct_ii);
-  __pyx_t_2 = __Pyx_GetBuffer_int((PyObject*)__pyx_t_7, &__pyx_bstruct_ii, PyBUF_FORMAT| PyBUF_STRIDES, 2);
-  if (unlikely(__pyx_t_2 < 0)) 
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_ii);
+  __pyx_t_3 = __Pyx_GetBuffer_int((PyObject*)__pyx_t_7, &__pyx_bstruct_ii, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0);
+  if (unlikely(__pyx_t_3 < 0)) 
   {
-      PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
-      if (unlikely(__Pyx_GetBuffer_int((PyObject*)__pyx_v_ii, &__pyx_bstruct_ii, PyBUF_FORMAT| PyBUF_STRIDES, 2) == -1)) {
-          Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5);
+      PyErr_Fetch(&__pyx_t_1, &__pyx_t_4, &__pyx_t_5);
+      if (unlikely(__Pyx_GetBuffer_int((PyObject*)__pyx_v_ii, &__pyx_bstruct_ii, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0) == -1)) {
+          Py_XDECREF(__pyx_t_1); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5);
           __Pyx_RaiseBufferFallbackError();
         } else {
-          PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+          PyErr_Restore(__pyx_t_1, __pyx_t_4, __pyx_t_5);
       }
   }
   __pyx_bstride_0_ii = __pyx_bstruct_ii.strides[0]; __pyx_bstride_1_ii = __pyx_bstruct_ii.strides[1];
   __pyx_bshape_0_ii = __pyx_bstruct_ii.shape[0]; __pyx_bshape_1_ii = __pyx_bstruct_ii.shape[1];
-  if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_7 = 0;
   Py_DECREF(((PyObject *)__pyx_v_ii));
   __pyx_v_ii = ((PyArrayObject *)__pyx_7);
   __pyx_7 = 0;
-  __pyx_1 = PyObject_GetAttr(((PyObject *)__pyx_v_ii), __pyx_kp_fill); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyInt_FromLong(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->n); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_5 = PyTuple_New(1); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_5, 0, __pyx_2);
-  __pyx_2 = 0;
-  __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":574
+ *         dd.fill(infinity)
+ *         ii = np.empty((n,k),dtype='i')
+ *         ii.fill(self.n)             # <<<<<<<<<<<<<<
+ *         for c in range(n):
+ *             self.__query(
+ */
+  __pyx_3 = PyObject_GetAttr(((PyObject *)__pyx_v_ii), __pyx_kp_fill); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_5 = PyInt_FromLong(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->n); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_5);
+  __pyx_5 = 0;
+  __pyx_2 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":575
+ *         ii = np.empty((n,k),dtype='i')
+ *         ii.fill(self.n)
+ *         for c in range(n):             # <<<<<<<<<<<<<<
+ *             self.__query(
+ *                     (<double*>dd.data)+c*k,
+ */
   __pyx_8 = __pyx_PyInt_int(__pyx_v_n); if (unlikely((__pyx_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   for (__pyx_v_c = 0; __pyx_v_c < __pyx_8; __pyx_v_c+=1) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":583
+ *                     eps,
+ *                     p,
+ *                     distance_upper_bound)             # <<<<<<<<<<<<<<
+ *         if single:
+ *             if k==1:
+ */
     ((struct __pyx_vtabstruct_5scipy_7spatial_7ckdtree_cKDTree *)((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->__pyx_vtab)->__query(((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self), (((double *)__pyx_v_dd->data) + (__pyx_v_c * __pyx_v_k)), (((int *)__pyx_v_ii->data) + (__pyx_v_c * __pyx_v_k)), (((double *)__pyx_v_xx->data) + (__pyx_v_c * ((struct __pyx_obj_5scipy_7spatial_7ckdtree_cKDTree *)__pyx_v_self)->m)), __pyx_v_k, __pyx_v_eps, __pyx_v_p, __pyx_v_distance_upper_bound);
   }
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":584
+ *                     p,
+ *                     distance_upper_bound)
+ *         if single:             # <<<<<<<<<<<<<<
+ *             if k==1:
+ *                 return dd[0,0], ii[0,0]
+ */
   __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_v_single); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_4) {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":585
+ *                     distance_upper_bound)
+ *         if single:
+ *             if k==1:             # <<<<<<<<<<<<<<
+ *                 return dd[0,0], ii[0,0]
+ *             else:
+ */
     __pyx_4 = (__pyx_v_k == 1);
     if (__pyx_4) {
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":586
+ *         if single:
+ *             if k==1:
+ *                 return dd[0,0], ii[0,0]             # <<<<<<<<<<<<<<
+ *             else:
+ *                 return dd[0], ii[0]
+ */
       __pyx_t_8 = 0;
       __pyx_t_9 = 0;
-      __pyx_t_2 = -1;
+      __pyx_t_3 = -1;
       if (__pyx_t_8 < 0) {
         __pyx_t_8 += __pyx_bshape_0_dd;
-        if (unlikely(__pyx_t_8 < 0)) __pyx_t_2 = 0;
-      } else if (unlikely(__pyx_t_8 >= __pyx_bshape_0_dd)) __pyx_t_2 = 0;
+        if (unlikely(__pyx_t_8 < 0)) __pyx_t_3 = 0;
+      } else if (unlikely(__pyx_t_8 >= __pyx_bshape_0_dd)) __pyx_t_3 = 0;
       if (__pyx_t_9 < 0) {
         __pyx_t_9 += __pyx_bshape_1_dd;
-        if (unlikely(__pyx_t_9 < 0)) __pyx_t_2 = 1;
-      } else if (unlikely(__pyx_t_9 >= __pyx_bshape_1_dd)) __pyx_t_2 = 1;
-      if (unlikely(__pyx_t_2 != -1)) {
-          __Pyx_RaiseBufferIndexError(__pyx_t_2);
+        if (unlikely(__pyx_t_9 < 0)) __pyx_t_3 = 1;
+      } else if (unlikely(__pyx_t_9 >= __pyx_bshape_1_dd)) __pyx_t_3 = 1;
+      if (unlikely(__pyx_t_3 != -1)) {
+          __Pyx_RaiseBufferIndexError(__pyx_t_3);
           {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_9 = *((double *)((double *)__Pyx_BufPtrStrided2d(__pyx_bstruct_dd.buf, __pyx_t_8, __pyx_bstride_0_dd, __pyx_t_9, __pyx_bstride_1_dd)));
-      __pyx_7 = PyFloat_FromDouble(__pyx_9); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_7 = PyFloat_FromDouble((*__Pyx_BufPtrStrided2d(double *, __pyx_bstruct_dd.buf, __pyx_t_8, __pyx_bstride_0_dd, __pyx_t_9, __pyx_bstride_1_dd))); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_10 = 0;
       __pyx_t_11 = 0;
-      __pyx_t_2 = -1;
+      __pyx_t_3 = -1;
       if (__pyx_t_10 < 0) {
         __pyx_t_10 += __pyx_bshape_0_ii;
-        if (unlikely(__pyx_t_10 < 0)) __pyx_t_2 = 0;
-      } else if (unlikely(__pyx_t_10 >= __pyx_bshape_0_ii)) __pyx_t_2 = 0;
+        if (unlikely(__pyx_t_10 < 0)) __pyx_t_3 = 0;
+      } else if (unlikely(__pyx_t_10 >= __pyx_bshape_0_ii)) __pyx_t_3 = 0;
       if (__pyx_t_11 < 0) {
         __pyx_t_11 += __pyx_bshape_1_ii;
-        if (unlikely(__pyx_t_11 < 0)) __pyx_t_2 = 1;
-      } else if (unlikely(__pyx_t_11 >= __pyx_bshape_1_ii)) __pyx_t_2 = 1;
-      if (unlikely(__pyx_t_2 != -1)) {
-          __Pyx_RaiseBufferIndexError(__pyx_t_2);
+        if (unlikely(__pyx_t_11 < 0)) __pyx_t_3 = 1;
+      } else if (unlikely(__pyx_t_11 >= __pyx_bshape_1_ii)) __pyx_t_3 = 1;
+      if (unlikely(__pyx_t_3 != -1)) {
+          __Pyx_RaiseBufferIndexError(__pyx_t_3);
           {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_8 = *((int *)((int *)__Pyx_BufPtrStrided2d(__pyx_bstruct_ii.buf, __pyx_t_10, __pyx_bstride_0_ii, __pyx_t_11, __pyx_bstride_1_ii)));
-      __pyx_2 = PyInt_FromLong(__pyx_8); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_1 = PyTuple_New(2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      PyTuple_SET_ITEM(__pyx_1, 0, __pyx_7);
-      PyTuple_SET_ITEM(__pyx_1, 1, __pyx_2);
+      __pyx_5 = PyInt_FromLong((*__Pyx_BufPtrStrided2d(int *, __pyx_bstruct_ii.buf, __pyx_t_10, __pyx_bstride_0_ii, __pyx_t_11, __pyx_bstride_1_ii))); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_3, 0, __pyx_7);
+      PyTuple_SET_ITEM(__pyx_3, 1, __pyx_5);
       __pyx_7 = 0;
-      __pyx_2 = 0;
-      __pyx_r = ((PyObject *)__pyx_1);
-      __pyx_1 = 0;
+      __pyx_5 = 0;
+      __pyx_r = ((PyObject *)__pyx_3);
+      __pyx_3 = 0;
       goto __pyx_L0;
-      goto __pyx_L11;
+      goto __pyx_L12;
     }
     /*else*/ {
-      __pyx_5 = __Pyx_GetItemInt(((PyObject *)__pyx_v_dd), 0, 0); if (!__pyx_5) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_3 = __Pyx_GetItemInt(((PyObject *)__pyx_v_ii), 0, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":588
+ *                 return dd[0,0], ii[0,0]
+ *             else:
+ *                 return dd[0], ii[0]             # <<<<<<<<<<<<<<
+ *         else:
+ *             if k==1:
+ */
+      __pyx_1 = __Pyx_GetItemInt(((PyObject *)__pyx_v_dd), 0, 0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = __Pyx_GetItemInt(((PyObject *)__pyx_v_ii), 0, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_7 = PyTuple_New(2); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      PyTuple_SET_ITEM(__pyx_7, 0, __pyx_5);
-      PyTuple_SET_ITEM(__pyx_7, 1, __pyx_3);
-      __pyx_5 = 0;
-      __pyx_3 = 0;
+      PyTuple_SET_ITEM(__pyx_7, 0, __pyx_1);
+      PyTuple_SET_ITEM(__pyx_7, 1, __pyx_2);
+      __pyx_1 = 0;
+      __pyx_2 = 0;
       __pyx_r = ((PyObject *)__pyx_7);
       __pyx_7 = 0;
       goto __pyx_L0;
     }
-    __pyx_L11:;
-    goto __pyx_L10;
+    __pyx_L12:;
+    goto __pyx_L11;
   }
   /*else*/ {
+
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":590
+ *                 return dd[0], ii[0]
+ *         else:
+ *             if k==1:             # <<<<<<<<<<<<<<
+ *                 return np.reshape(dd[...,0],retshape), np.reshape(ii[...,0],retshape)
+ *             else:
+ */
     __pyx_4 = (__pyx_v_k == 1);
     if (__pyx_4) {
-      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_reshape); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_2); __pyx_2 = 0;
-      __pyx_5 = PyTuple_New(2); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_INCREF(Py_Ellipsis);
-      PyTuple_SET_ITEM(__pyx_5, 0, Py_Ellipsis);
-      Py_INCREF(__pyx_int_0);
-      PyTuple_SET_ITEM(__pyx_5, 1, __pyx_int_0);
-      __pyx_3 = PyObject_GetItem(((PyObject *)__pyx_v_dd), ((PyObject *)__pyx_5)); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
-      __pyx_7 = PyTuple_New(2); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      PyTuple_SET_ITEM(__pyx_7, 0, __pyx_3);
-      Py_INCREF(__pyx_v_retshape);
-      PyTuple_SET_ITEM(__pyx_7, 1, __pyx_v_retshape);
-      __pyx_3 = 0;
-      __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_7), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_1); __pyx_1 = 0;
-      Py_DECREF(((PyObject *)__pyx_7)); __pyx_7 = 0;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":591
+ *         else:
+ *             if k==1:
+ *                 return np.reshape(dd[...,0],retshape), np.reshape(ii[...,0],retshape)             # <<<<<<<<<<<<<<
+ *             else:
+ *                 return np.reshape(dd,retshape+(k,)), np.reshape(ii,retshape+(k,))
+ */
       __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_3 = PyObject_GetAttr(__pyx_5, __pyx_kp_reshape); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       Py_DECREF(__pyx_5); __pyx_5 = 0;
@@ -1962,73 +4363,98 @@
       PyTuple_SET_ITEM(__pyx_1, 0, Py_Ellipsis);
       Py_INCREF(__pyx_int_0);
       PyTuple_SET_ITEM(__pyx_1, 1, __pyx_int_0);
-      __pyx_7 = PyObject_GetItem(((PyObject *)__pyx_v_ii), ((PyObject *)__pyx_1)); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(((PyObject *)__pyx_v_dd), ((PyObject *)__pyx_1)); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-      __pyx_5 = PyTuple_New(2); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      PyTuple_SET_ITEM(__pyx_5, 0, __pyx_7);
+      __pyx_7 = PyTuple_New(2); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_7, 0, __pyx_2);
       Py_INCREF(__pyx_v_retshape);
-      PyTuple_SET_ITEM(__pyx_5, 1, __pyx_v_retshape);
+      PyTuple_SET_ITEM(__pyx_7, 1, __pyx_v_retshape);
+      __pyx_2 = 0;
+      __pyx_5 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_7), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      Py_DECREF(((PyObject *)__pyx_7)); __pyx_7 = 0;
+      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_reshape); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_INCREF(Py_Ellipsis);
+      PyTuple_SET_ITEM(__pyx_3, 0, Py_Ellipsis);
+      Py_INCREF(__pyx_int_0);
+      PyTuple_SET_ITEM(__pyx_3, 1, __pyx_int_0);
+      __pyx_7 = PyObject_GetItem(((PyObject *)__pyx_v_ii), ((PyObject *)__pyx_3)); if (!__pyx_7) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+      __pyx_1 = PyTuple_New(2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_1, 0, __pyx_7);
+      Py_INCREF(__pyx_v_retshape);
+      PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_retshape);
       __pyx_7 = 0;
-      __pyx_1 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_3); __pyx_3 = 0;
-      Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+      __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
       __pyx_7 = PyTuple_New(2); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 591; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      PyTuple_SET_ITEM(__pyx_7, 0, __pyx_2);
-      PyTuple_SET_ITEM(__pyx_7, 1, __pyx_1);
-      __pyx_2 = 0;
-      __pyx_1 = 0;
+      PyTuple_SET_ITEM(__pyx_7, 0, __pyx_5);
+      PyTuple_SET_ITEM(__pyx_7, 1, __pyx_3);
+      __pyx_5 = 0;
+      __pyx_3 = 0;
       __pyx_r = ((PyObject *)__pyx_7);
       __pyx_7 = 0;
       goto __pyx_L0;
-      goto __pyx_L12;
+      goto __pyx_L13;
     }
     /*else*/ {
-      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_5 = PyObject_GetAttr(__pyx_3, __pyx_kp_reshape); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_3); __pyx_3 = 0;
-      __pyx_2 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
-      __pyx_2 = 0;
-      __pyx_7 = PyNumber_Add(__pyx_v_retshape, ((PyObject *)__pyx_1)); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-      __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_INCREF(((PyObject *)__pyx_v_dd));
-      PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_v_dd));
-      PyTuple_SET_ITEM(__pyx_3, 1, __pyx_7);
-      __pyx_7 = 0;
-      __pyx_2 = PyObject_Call(__pyx_5, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_5); __pyx_5 = 0;
-      Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_7 = PyObject_GetAttr(__pyx_1, __pyx_kp_reshape); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":593
+ *                 return np.reshape(dd[...,0],retshape), np.reshape(ii[...,0],retshape)
+ *             else:
+ *                 return np.reshape(dd,retshape+(k,)), np.reshape(ii,retshape+(k,))             # <<<<<<<<<<<<<<
+ * 
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_reshape); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
       __pyx_5 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       PyTuple_SET_ITEM(__pyx_3, 0, __pyx_5);
       __pyx_5 = 0;
-      __pyx_1 = PyNumber_Add(__pyx_v_retshape, ((PyObject *)__pyx_3)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyNumber_Add(__pyx_v_retshape, ((PyObject *)__pyx_3)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+      __pyx_7 = PyTuple_New(2); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_INCREF(((PyObject *)__pyx_v_dd));
+      PyTuple_SET_ITEM(__pyx_7, 0, ((PyObject *)__pyx_v_dd));
+      PyTuple_SET_ITEM(__pyx_7, 1, __pyx_t_5);
+      __pyx_t_5 = 0;
+      __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_7), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      Py_DECREF(((PyObject *)__pyx_7)); __pyx_7 = 0;
+      __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = PyObject_GetAttr(__pyx_5, __pyx_kp_reshape); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_5); __pyx_5 = 0;
+      __pyx_1 = PyInt_FromLong(__pyx_v_k); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_7 = PyTuple_New(1); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_7, 0, __pyx_1);
+      __pyx_1 = 0;
+      __pyx_t_5 = PyNumber_Add(__pyx_v_retshape, ((PyObject *)__pyx_7)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_7)); __pyx_7 = 0;
       __pyx_5 = PyTuple_New(2); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       Py_INCREF(((PyObject *)__pyx_v_ii));
       PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_v_ii));
-      PyTuple_SET_ITEM(__pyx_5, 1, __pyx_1);
-      __pyx_1 = 0;
-      __pyx_3 = PyObject_Call(__pyx_7, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Py_DECREF(__pyx_7); __pyx_7 = 0;
+      PyTuple_SET_ITEM(__pyx_5, 1, __pyx_t_5);
+      __pyx_t_5 = 0;
+      __pyx_1 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
       Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
-      __pyx_1 = PyTuple_New(2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
-      PyTuple_SET_ITEM(__pyx_1, 1, __pyx_3);
+      __pyx_7 = PyTuple_New(2); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_7, 0, __pyx_2);
+      PyTuple_SET_ITEM(__pyx_7, 1, __pyx_1);
       __pyx_2 = 0;
-      __pyx_3 = 0;
-      __pyx_r = ((PyObject *)__pyx_1);
       __pyx_1 = 0;
+      __pyx_r = ((PyObject *)__pyx_7);
+      __pyx_7 = 0;
       goto __pyx_L0;
     }
-    __pyx_L12:;
+    __pyx_L13:;
   }
-  __pyx_L10:;
+  __pyx_L11:;
 
   __pyx_r = Py_None; Py_INCREF(Py_None);
   goto __pyx_L0;
@@ -2039,18 +4465,18 @@
   Py_XDECREF(__pyx_5);
   Py_XDECREF(__pyx_7);
   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
-    PyErr_Fetch(&__pyx_type, &__pyx_value, &__pyx_tb);
-    __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_ii, &__pyx_bstruct_ii);
-    __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_xx, &__pyx_bstruct_xx);
-    __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_dd, &__pyx_bstruct_dd);
-  PyErr_Restore(__pyx_type, __pyx_value, __pyx_tb);}
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_ii);
+    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_xx);
+    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_dd);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
   __Pyx_AddTraceback("scipy.spatial.ckdtree.cKDTree.query");
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_ii, &__pyx_bstruct_ii);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_xx, &__pyx_bstruct_xx);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_dd, &__pyx_bstruct_dd);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_ii);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_xx);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_dd);
   __pyx_L2:;
   Py_DECREF(__pyx_v_ii);
   Py_DECREF(__pyx_v_dd);
@@ -2062,108 +4488,1242 @@
   return __pyx_r;
 }
 
+/* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":50
+ *         # experimental exception made for __getbuffer__ and __releasebuffer__
+ *         # -- the details of this may change.
+ *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
+ *             # This implementation of getbuffer is geared towards Cython
+ *             # requirements, and does not yet fullfill the PEP.
+ */
+
 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+  int __pyx_v_copy_shape;
+  int __pyx_v_i;
+  int __pyx_v_ndim;
   int __pyx_v_t;
   char *__pyx_v_f;
+  PyArray_Descr *__pyx_v_descr = 0;
+  PyObject *__pyx_v_stack;
+  int __pyx_v_hasfields;
+  PyObject *__pyx_v_iterator;
   int __pyx_r;
   int __pyx_1;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
+  int __pyx_4;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
+  PyObject *__pyx_7 = 0;
+  Py_ssize_t __pyx_8 = 0;
+  PyObject *__pyx_t_1 = NULL;
+  if (__pyx_v_info == NULL) return 0;
+  __pyx_v_info->obj = Py_None; Py_INCREF(Py_None);
+  __pyx_v_stack = ((PyObject *)Py_None); Py_INCREF(Py_None);
+  __pyx_v_iterator = Py_None; Py_INCREF(Py_None);
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":56
+ *             # of flags
+ *             cdef int copy_shape, i, ndim
+ *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
+ * 
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ */
+  __pyx_v_ndim = PyArray_NDIM(((PyArrayObject *)__pyx_v_self));
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":58
+ *             ndim = PyArray_NDIM(self)
+ * 
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
+ *                 copy_shape = 1
+ *             else:
+ */
   __pyx_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
   if (__pyx_1) {
-    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":59
+ * 
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *                 copy_shape = 1             # <<<<<<<<<<<<<<
+ *             else:
+ *                 copy_shape = 0
+ */
+    __pyx_v_copy_shape = 1;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":61
+ *                 copy_shape = 1
+ *             else:
+ *                 copy_shape = 0             # <<<<<<<<<<<<<<
+ * 
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
+ */
+    __pyx_v_copy_shape = 0;
+  }
+  __pyx_L5:;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":63
+ *                 copy_shape = 0
+ * 
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
+ *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
+ *                 raise ValueError("ndarray is not C contiguous")
+ */
+  __pyx_1 = ((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS);
+  if (__pyx_1) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":64
+ * 
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):             # <<<<<<<<<<<<<<
+ *                 raise ValueError("ndarray is not C contiguous")
+ * 
+ */
+    __pyx_1 = (!PyArray_CHKFLAGS(((PyArrayObject *)__pyx_v_self), NPY_C_CONTIGUOUS));
+  }
+  if (__pyx_1) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":65
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
+ *                 raise ValueError("ndarray is not C contiguous")             # <<<<<<<<<<<<<<
+ * 
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+ */
+    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_INCREF(__pyx_kp_1);
     PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_1);
-    __pyx_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
     __Pyx_Raise(__pyx_3, 0, 0);
     Py_DECREF(__pyx_3); __pyx_3 = 0;
-    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L5;
+    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
   }
-  __pyx_L5:;
+  __pyx_L6:;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":67
+ *                 raise ValueError("ndarray is not C contiguous")
+ * 
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
+ *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
+ *                 raise ValueError("ndarray is not Fortran contiguous")
+ */
+  __pyx_1 = ((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS);
+  if (__pyx_1) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":68
+ * 
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):             # <<<<<<<<<<<<<<
+ *                 raise ValueError("ndarray is not Fortran contiguous")
+ * 
+ */
+    __pyx_1 = (!PyArray_CHKFLAGS(((PyArrayObject *)__pyx_v_self), NPY_F_CONTIGUOUS));
+  }
+  if (__pyx_1) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":69
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
+ *                 raise ValueError("ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
+ * 
+ *             info.buf = PyArray_DATA(self)
+ */
+    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_2);
+    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_2);
+    __pyx_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+    __Pyx_Raise(__pyx_3, 0, 0);
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":71
+ *                 raise ValueError("ndarray is not Fortran contiguous")
+ * 
+ *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
+ *             info.ndim = ndim
+ *             if copy_shape:
+ */
   __pyx_v_info->buf = PyArray_DATA(((PyArrayObject *)__pyx_v_self));
-  __pyx_v_info->ndim = PyArray_NDIM(((PyArrayObject *)__pyx_v_self));
-  __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(((PyArrayObject *)__pyx_v_self)));
-  __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(((PyArrayObject *)__pyx_v_self)));
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":72
+ * 
+ *             info.buf = PyArray_DATA(self)
+ *             info.ndim = ndim             # <<<<<<<<<<<<<<
+ *             if copy_shape:
+ *                 # Allocate new buffer for strides and shape info. This is allocated
+ */
+  __pyx_v_info->ndim = __pyx_v_ndim;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":73
+ *             info.buf = PyArray_DATA(self)
+ *             info.ndim = ndim
+ *             if copy_shape:             # <<<<<<<<<<<<<<
+ *                 # Allocate new buffer for strides and shape info. This is allocated
+ *                 # as one block, strides first.
+ */
+  __pyx_4 = __pyx_v_copy_shape;
+  if (__pyx_4) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":76
+ *                 # Allocate new buffer for strides and shape info. This is allocated
+ *                 # as one block, strides first.
+ *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2)             # <<<<<<<<<<<<<<
+ *                 info.shape = info.strides + ndim
+ *                 for i in range(ndim):
+ */
+    __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * __pyx_v_ndim) * 2)));
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":77
+ *                 # as one block, strides first.
+ *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2)
+ *                 info.shape = info.strides + ndim             # <<<<<<<<<<<<<<
+ *                 for i in range(ndim):
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]
+ */
+    __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":78
+ *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2)
+ *                 info.shape = info.strides + ndim
+ *                 for i in range(ndim):             # <<<<<<<<<<<<<<
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]
+ *                     info.shape[i] = PyArray_DIMS(self)[i]
+ */
+    for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_ndim; __pyx_v_i+=1) {
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":79
+ *                 info.shape = info.strides + ndim
+ *                 for i in range(ndim):
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
+ *                     info.shape[i] = PyArray_DIMS(self)[i]
+ *             else:
+ */
+      (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(((PyArrayObject *)__pyx_v_self))[__pyx_v_i]);
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":80
+ *                 for i in range(ndim):
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]
+ *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
+ *             else:
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+ */
+      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(((PyArrayObject *)__pyx_v_self))[__pyx_v_i]);
+    }
+    goto __pyx_L8;
+  }
+  /*else*/ {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":82
+ *                     info.shape[i] = PyArray_DIMS(self)[i]
+ *             else:
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
+ *             info.suboffsets = NULL
+ */
+    __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(((PyArrayObject *)__pyx_v_self)));
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":83
+ *             else:
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
+ *             info.suboffsets = NULL
+ *             info.itemsize = PyArray_ITEMSIZE(self)
+ */
+    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(((PyArrayObject *)__pyx_v_self)));
+  }
+  __pyx_L8:;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":84
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
+ *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
+ *             info.itemsize = PyArray_ITEMSIZE(self)
+ *             info.readonly = not PyArray_ISWRITEABLE(self)
+ */
   __pyx_v_info->suboffsets = NULL;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":85
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
+ *             info.suboffsets = NULL
+ *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
+ *             info.readonly = not PyArray_ISWRITEABLE(self)
+ * 
+ */
   __pyx_v_info->itemsize = PyArray_ITEMSIZE(((PyArrayObject *)__pyx_v_self));
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":86
+ *             info.suboffsets = NULL
+ *             info.itemsize = PyArray_ITEMSIZE(self)
+ *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
+ * 
+ *             cdef int t
+ */
   __pyx_v_info->readonly = (!PyArray_ISWRITEABLE(((PyArrayObject *)__pyx_v_self)));
-  __pyx_v_t = PyArray_TYPE(((PyArrayObject *)__pyx_v_self));
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":89
+ * 
+ *             cdef int t
+ *             cdef char* f = NULL             # <<<<<<<<<<<<<<
+ *             cdef dtype descr = self.descr
+ *             cdef list stack
+ */
   __pyx_v_f = NULL;
-  switch (__pyx_v_t) {
-    case NPY_BYTE:
-    __pyx_v_f = __pyx_k_2;
-    break;
-    case NPY_UBYTE:
-    __pyx_v_f = __pyx_k_3;
-    break;
-    case NPY_SHORT:
-    __pyx_v_f = __pyx_k_4;
-    break;
-    case NPY_USHORT:
-    __pyx_v_f = __pyx_k_5;
-    break;
-    case NPY_INT:
-    __pyx_v_f = __pyx_k_6;
-    break;
-    case NPY_UINT:
-    __pyx_v_f = __pyx_k_7;
-    break;
-    case NPY_LONG:
-    __pyx_v_f = __pyx_k_8;
-    break;
-    case NPY_ULONG:
-    __pyx_v_f = __pyx_k_9;
-    break;
-    case NPY_LONGLONG:
-    __pyx_v_f = __pyx_k_10;
-    break;
-    case NPY_ULONGLONG:
-    __pyx_v_f = __pyx_k_11;
-    break;
-    case NPY_FLOAT:
-    __pyx_v_f = __pyx_k_12;
-    break;
-    case NPY_DOUBLE:
-    __pyx_v_f = __pyx_k_13;
-    break;
-    case NPY_LONGDOUBLE:
-    __pyx_v_f = __pyx_k_14;
-    break;
-    case NPY_OBJECT:
-    __pyx_v_f = __pyx_k_15;
-    break;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":90
+ *             cdef int t
+ *             cdef char* f = NULL
+ *             cdef dtype descr = self.descr             # <<<<<<<<<<<<<<
+ *             cdef list stack
+ * 
+ */
+  Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_v_self)->descr));
+  __pyx_v_descr = ((PyArrayObject *)__pyx_v_self)->descr;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":93
+ *             cdef list stack
+ * 
+ *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
+ * 
+ *             # Ugly hack warning:
+ */
+  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":103
+ *             # functions).
+ * 
+ *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
+ *                 # do not call releasebuffer
+ *                 info.obj = None
+ */
+  __pyx_1 = (!__pyx_v_hasfields);
+  if (__pyx_1) {
+    __pyx_1 = (!__pyx_v_copy_shape);
   }
-  __pyx_1 = (__pyx_v_f == NULL);
   if (__pyx_1) {
-    __pyx_2 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_3 = PyNumber_Remainder(__pyx_kp_16, __pyx_2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":105
+ *             if not hasfields and not copy_shape:
+ *                 # do not call releasebuffer
+ *                 info.obj = None             # <<<<<<<<<<<<<<
+ *             else:
+ *                 # need to call releasebuffer
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_info->obj);
+    __pyx_v_info->obj = Py_None;
+    goto __pyx_L11;
+  }
+  /*else*/ {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":108
+ *             else:
+ *                 # need to call releasebuffer
+ *                 info.obj = self             # <<<<<<<<<<<<<<
+ * 
+ *             if not hasfields:
+ */
+    Py_INCREF(__pyx_v_self);
+    Py_DECREF(__pyx_v_info->obj);
+    __pyx_v_info->obj = __pyx_v_self;
+  }
+  __pyx_L11:;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":110
+ *                 info.obj = self
+ * 
+ *             if not hasfields:             # <<<<<<<<<<<<<<
+ *                 t = descr.type_num
+ *                 if   t == NPY_BYTE:        f = "b"
+ */
+  __pyx_1 = (!__pyx_v_hasfields);
+  if (__pyx_1) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":111
+ * 
+ *             if not hasfields:
+ *                 t = descr.type_num             # <<<<<<<<<<<<<<
+ *                 if   t == NPY_BYTE:        f = "b"
+ *                 elif t == NPY_UBYTE:       f = "B"
+ */
+    __pyx_v_t = __pyx_v_descr->type_num;
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":112
+ *             if not hasfields:
+ *                 t = descr.type_num
+ *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_UBYTE:       f = "B"
+ *                 elif t == NPY_SHORT:       f = "h"
+ */
+    switch (__pyx_v_t) {
+      case NPY_BYTE:
+      __pyx_v_f = __pyx_k_3;
+      break;
+      case NPY_UBYTE:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":113
+ *                 t = descr.type_num
+ *                 if   t == NPY_BYTE:        f = "b"
+ *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_SHORT:       f = "h"
+ *                 elif t == NPY_USHORT:      f = "H"
+ */
+      __pyx_v_f = __pyx_k_4;
+      break;
+      case NPY_SHORT:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":114
+ *                 if   t == NPY_BYTE:        f = "b"
+ *                 elif t == NPY_UBYTE:       f = "B"
+ *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_USHORT:      f = "H"
+ *                 elif t == NPY_INT:         f = "i"
+ */
+      __pyx_v_f = __pyx_k_5;
+      break;
+      case NPY_USHORT:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":115
+ *                 elif t == NPY_UBYTE:       f = "B"
+ *                 elif t == NPY_SHORT:       f = "h"
+ *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_INT:         f = "i"
+ *                 elif t == NPY_UINT:        f = "I"
+ */
+      __pyx_v_f = __pyx_k_6;
+      break;
+      case NPY_INT:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":116
+ *                 elif t == NPY_SHORT:       f = "h"
+ *                 elif t == NPY_USHORT:      f = "H"
+ *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_UINT:        f = "I"
+ *                 elif t == NPY_LONG:        f = "l"
+ */
+      __pyx_v_f = __pyx_k_7;
+      break;
+      case NPY_UINT:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":117
+ *                 elif t == NPY_USHORT:      f = "H"
+ *                 elif t == NPY_INT:         f = "i"
+ *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONG:        f = "l"
+ *                 elif t == NPY_ULONG:       f = "L"
+ */
+      __pyx_v_f = __pyx_k_8;
+      break;
+      case NPY_LONG:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":118
+ *                 elif t == NPY_INT:         f = "i"
+ *                 elif t == NPY_UINT:        f = "I"
+ *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_ULONG:       f = "L"
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ */
+      __pyx_v_f = __pyx_k_9;
+      break;
+      case NPY_ULONG:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":119
+ *                 elif t == NPY_UINT:        f = "I"
+ *                 elif t == NPY_LONG:        f = "l"
+ *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ */
+      __pyx_v_f = __pyx_k_10;
+      break;
+      case NPY_LONGLONG:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":120
+ *                 elif t == NPY_LONG:        f = "l"
+ *                 elif t == NPY_ULONG:       f = "L"
+ *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ *                 elif t == NPY_FLOAT:       f = "f"
+ */
+      __pyx_v_f = __pyx_k_11;
+      break;
+      case NPY_ULONGLONG:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":121
+ *                 elif t == NPY_ULONG:       f = "L"
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_FLOAT:       f = "f"
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ */
+      __pyx_v_f = __pyx_k_12;
+      break;
+      case NPY_FLOAT:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":122
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ */
+      __pyx_v_f = __pyx_k_13;
+      break;
+      case NPY_DOUBLE:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":123
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ *                 elif t == NPY_FLOAT:       f = "f"
+ *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ */
+      __pyx_v_f = __pyx_k_14;
+      break;
+      case NPY_LONGDOUBLE:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":124
+ *                 elif t == NPY_FLOAT:       f = "f"
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ */
+      __pyx_v_f = __pyx_k_15;
+      break;
+      case NPY_CFLOAT:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":125
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ */
+      __pyx_v_f = __pyx_k_16;
+      break;
+      case NPY_CDOUBLE:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":126
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ *                 elif t == NPY_OBJECT:      f = "O"
+ */
+      __pyx_v_f = __pyx_k_17;
+      break;
+      case NPY_CLONGDOUBLE:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":127
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_OBJECT:      f = "O"
+ *                 else:
+ */
+      __pyx_v_f = __pyx_k_18;
+      break;
+      case NPY_OBJECT:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":128
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)
+ */
+      __pyx_v_f = __pyx_k_19;
+      break;
+      default:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":130
+ *                 elif t == NPY_OBJECT:      f = "O"
+ *                 else:
+ *                     raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
+ *                 info.format = f
+ *                 return
+ */
+      __pyx_2 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyNumber_Remainder(__pyx_kp_20, __pyx_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_3, 0, __pyx_t_1);
+      __pyx_t_1 = 0;
+      __pyx_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+      __Pyx_Raise(__pyx_2, 0, 0);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":131
+ *                 else:
+ *                     raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)
+ *                 info.format = f             # <<<<<<<<<<<<<<
+ *                 return
+ *             else:
+ */
+    __pyx_v_info->format = __pyx_v_f;
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":132
+ *                     raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)
+ *                 info.format = f
+ *                 return             # <<<<<<<<<<<<<<
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(255) # static size
+ */
+    __pyx_r = 0;
+    goto __pyx_L0;
+    goto __pyx_L12;
+  }
+  /*else*/ {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":134
+ *                 return
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(255) # static size             # <<<<<<<<<<<<<<
+ *                 f = info.format
+ *                 stack = [iter(descr.fields.iteritems())]
+ */
+    __pyx_v_info->format = ((char *)malloc(255));
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":135
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(255) # static size
+ *                 f = info.format             # <<<<<<<<<<<<<<
+ *                 stack = [iter(descr.fields.iteritems())]
+ * 
+ */
+    __pyx_v_f = __pyx_v_info->format;
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":136
+ *                 info.format = <char*>stdlib.malloc(255) # static size
+ *                 f = info.format
+ *                 stack = [iter(descr.fields.iteritems())]             # <<<<<<<<<<<<<<
+ * 
+ *                 while True:
+ */
+    __pyx_3 = PyObject_GetAttr(__pyx_v_descr->fields, __pyx_kp_iteritems); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_3 = PyObject_GetIter(__pyx_2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
+    __pyx_2 = PyList_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyList_SET_ITEM(__pyx_2, 0, __pyx_3);
     __pyx_3 = 0;
-    __pyx_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-    __Pyx_Raise(__pyx_3, 0, 0);
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L6;
+    Py_DECREF(((PyObject *)__pyx_v_stack));
+    __pyx_v_stack = __pyx_2;
+    __pyx_2 = 0;
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":138
+ *                 stack = [iter(descr.fields.iteritems())]
+ * 
+ *                 while True:             # <<<<<<<<<<<<<<
+ *                     iterator = stack[-1]
+ *                     descr = None
+ */
+    while (1) {
+      __pyx_1 = 1;
+      if (!__pyx_1) break;
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":139
+ * 
+ *                 while True:
+ *                     iterator = stack[-1]             # <<<<<<<<<<<<<<
+ *                     descr = None
+ *                     while descr is None:
+ */
+      __pyx_3 = __Pyx_GetItemInt(((PyObject *)__pyx_v_stack), -1, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_v_iterator);
+      __pyx_v_iterator = __pyx_3;
+      __pyx_3 = 0;
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":140
+ *                 while True:
+ *                     iterator = stack[-1]
+ *                     descr = None             # <<<<<<<<<<<<<<
+ *                     while descr is None:
+ *                         try:
+ */
+      Py_INCREF(Py_None);
+      Py_DECREF(((PyObject *)__pyx_v_descr));
+      __pyx_v_descr = ((PyArray_Descr *)Py_None);
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":141
+ *                     iterator = stack[-1]
+ *                     descr = None
+ *                     while descr is None:             # <<<<<<<<<<<<<<
+ *                         try:
+ *                             descr = iterator.next()[1][0]
+ */
+      while (1) {
+        __pyx_1 = (((PyObject *)__pyx_v_descr) == Py_None);
+        if (!__pyx_1) break;
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":142
+ *                     descr = None
+ *                     while descr is None:
+ *                         try:             # <<<<<<<<<<<<<<
+ *                             descr = iterator.next()[1][0]
+ *                         except StopIteration:
+ */
+        {
+          PyObject *__pyx_save_exc_type, *__pyx_save_exc_value, *__pyx_save_exc_tb;
+          __Pyx_ExceptionSave(&__pyx_save_exc_type, &__pyx_save_exc_value, &__pyx_save_exc_tb);
+          /*try:*/ {
+
+            /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":143
+ *                     while descr is None:
+ *                         try:
+ *                             descr = iterator.next()[1][0]             # <<<<<<<<<<<<<<
+ *                         except StopIteration:
+ *                             stack.pop()
+ */
+            __pyx_2 = PyObject_GetAttr(__pyx_v_iterator, __pyx_kp_next); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L17_error;}
+            __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L17_error;}
+            Py_DECREF(__pyx_2); __pyx_2 = 0;
+            __pyx_2 = __Pyx_GetItemInt(__pyx_3, 1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L17_error;}
+            Py_DECREF(__pyx_3); __pyx_3 = 0;
+            __pyx_3 = __Pyx_GetItemInt(__pyx_2, 0, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L17_error;}
+            Py_DECREF(__pyx_2); __pyx_2 = 0;
+            if (!(__Pyx_TypeTest(__pyx_3, __pyx_ptype_5numpy_dtype))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L17_error;}
+            Py_DECREF(((PyObject *)__pyx_v_descr));
+            __pyx_v_descr = ((PyArray_Descr *)__pyx_3);
+            __pyx_3 = 0;
+          }
+          goto __pyx_L21_try;
+          __pyx_L17_error:;
+          Py_XDECREF(__pyx_2); __pyx_2 = 0;
+          Py_XDECREF(__pyx_3); __pyx_3 = 0;
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":144
+ *                         try:
+ *                             descr = iterator.next()[1][0]
+ *                         except StopIteration:             # <<<<<<<<<<<<<<
+ *                             stack.pop()
+ *                             if len(stack) > 0:
+ */
+          __pyx_4 = PyErr_ExceptionMatches(__pyx_builtin_StopIteration);
+          if (__pyx_4) {
+            __Pyx_AddTraceback("numpy.__getbuffer__");
+            if (__Pyx_GetException(&__pyx_2, &__pyx_3, &__pyx_5) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;}
+
+            /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":145
+ *                             descr = iterator.next()[1][0]
+ *                         except StopIteration:
+ *                             stack.pop()             # <<<<<<<<<<<<<<
+ *                             if len(stack) > 0:
+ *                                 f[0] = 125 #"}"
+ */
+            __pyx_6 = PyObject_GetAttr(((PyObject *)__pyx_v_stack), __pyx_kp_pop); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;}
+            __pyx_7 = PyObject_Call(__pyx_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;}
+            Py_DECREF(__pyx_6); __pyx_6 = 0;
+            Py_DECREF(__pyx_7); __pyx_7 = 0;
+
+            /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":146
+ *                         except StopIteration:
+ *                             stack.pop()
+ *                             if len(stack) > 0:             # <<<<<<<<<<<<<<
+ *                                 f[0] = 125 #"}"
+ *                                 f += 1
+ */
+            __pyx_8 = PyObject_Length(((PyObject *)__pyx_v_stack)); if (unlikely(__pyx_8 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;}
+            __pyx_1 = (__pyx_8 > 0);
+            if (__pyx_1) {
+
+              /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":147
+ *                             stack.pop()
+ *                             if len(stack) > 0:
+ *                                 f[0] = 125 #"}"             # <<<<<<<<<<<<<<
+ *                                 f += 1
+ *                                 iterator = stack[-1]
+ */
+              (__pyx_v_f[0]) = 125;
+
+              /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":148
+ *                             if len(stack) > 0:
+ *                                 f[0] = 125 #"}"
+ *                                 f += 1             # <<<<<<<<<<<<<<
+ *                                 iterator = stack[-1]
+ *                             else:
+ */
+              __pyx_v_f += 1;
+
+              /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":149
+ *                                 f[0] = 125 #"}"
+ *                                 f += 1
+ *                                 iterator = stack[-1]             # <<<<<<<<<<<<<<
+ *                             else:
+ *                                 f[0] = 0 # Terminate string!
+ */
+              __pyx_6 = __Pyx_GetItemInt(((PyObject *)__pyx_v_stack), -1, 0); if (!__pyx_6) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;}
+              Py_DECREF(__pyx_v_iterator);
+              __pyx_v_iterator = __pyx_6;
+              __pyx_6 = 0;
+              goto __pyx_L22;
+            }
+            /*else*/ {
+
+              /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":151
+ *                                 iterator = stack[-1]
+ *                             else:
+ *                                 f[0] = 0 # Terminate string!             # <<<<<<<<<<<<<<
+ *                                 return
+ * 
+ */
+              (__pyx_v_f[0]) = 0;
+
+              /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":152
+ *                             else:
+ *                                 f[0] = 0 # Terminate string!
+ *                                 return             # <<<<<<<<<<<<<<
+ * 
+ *                     hasfields = PyDataType_HASFIELDS(descr)
+ */
+              __pyx_r = 0;
+              Py_DECREF(__pyx_2); __pyx_2 = 0;
+              Py_DECREF(__pyx_3); __pyx_3 = 0;
+              Py_DECREF(__pyx_5); __pyx_5 = 0;
+              goto __pyx_L20_except_return;
+            }
+            __pyx_L22:;
+            Py_DECREF(__pyx_2); __pyx_2 = 0;
+            Py_DECREF(__pyx_3); __pyx_3 = 0;
+            Py_DECREF(__pyx_5); __pyx_5 = 0;
+            goto __pyx_L18_exception_handled;
+          }
+          __pyx_L19_except_error:;
+          Py_XDECREF(__pyx_save_exc_type);
+          Py_XDECREF(__pyx_save_exc_value);
+          Py_XDECREF(__pyx_save_exc_tb);
+          goto __pyx_L1_error;
+          __pyx_L20_except_return:;
+          __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
+          goto __pyx_L0;
+          __pyx_L18_exception_handled:;
+          __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
+          __pyx_L21_try:;
+        }
+      }
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":154
+ *                                 return
+ * 
+ *                     hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
+ *                     if not hasfields:
+ *                         t = descr.type_num
+ */
+      __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":155
+ * 
+ *                     hasfields = PyDataType_HASFIELDS(descr)
+ *                     if not hasfields:             # <<<<<<<<<<<<<<
+ *                         t = descr.type_num
+ *                         if f - info.format > 240: # this should leave room for "T{" and "}" as well
+ */
+      __pyx_1 = (!__pyx_v_hasfields);
+      if (__pyx_1) {
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":156
+ *                     hasfields = PyDataType_HASFIELDS(descr)
+ *                     if not hasfields:
+ *                         t = descr.type_num             # <<<<<<<<<<<<<<
+ *                         if f - info.format > 240: # this should leave room for "T{" and "}" as well
+ *                             raise RuntimeError("Format string allocated too short.")
+ */
+        __pyx_v_t = __pyx_v_descr->type_num;
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":157
+ *                     if not hasfields:
+ *                         t = descr.type_num
+ *                         if f - info.format > 240: # this should leave room for "T{" and "}" as well             # <<<<<<<<<<<<<<
+ *                             raise RuntimeError("Format string allocated too short.")
+ * 
+ */
+        __pyx_1 = ((__pyx_v_f - __pyx_v_info->format) > 240);
+        if (__pyx_1) {
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":158
+ *                         t = descr.type_num
+ *                         if f - info.format > 240: # this should leave room for "T{" and "}" as well
+ *                             raise RuntimeError("Format string allocated too short.")             # <<<<<<<<<<<<<<
+ * 
+ *                         # Until ticket #99 is fixed, use integers to avoid warnings
+ */
+          __pyx_7 = PyTuple_New(1); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          Py_INCREF(__pyx_kp_21);
+          PyTuple_SET_ITEM(__pyx_7, 0, __pyx_kp_21);
+          __pyx_6 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_7), NULL); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          Py_DECREF(((PyObject *)__pyx_7)); __pyx_7 = 0;
+          __Pyx_Raise(__pyx_6, 0, 0);
+          Py_DECREF(__pyx_6); __pyx_6 = 0;
+          {__pyx_filename = __pyx_f[1]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          goto __pyx_L24;
+        }
+        __pyx_L24:;
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":161
+ * 
+ *                         # Until ticket #99 is fixed, use integers to avoid warnings
+ *                         if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_UBYTE:       f[0] =  66 #"B"
+ *                         elif t == NPY_SHORT:       f[0] = 104 #"h"
+ */
+        switch (__pyx_v_t) {
+          case NPY_BYTE:
+          (__pyx_v_f[0]) = 98;
+          break;
+          case NPY_UBYTE:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":162
+ *                         # Until ticket #99 is fixed, use integers to avoid warnings
+ *                         if   t == NPY_BYTE:        f[0] =  98 #"b"
+ *                         elif t == NPY_UBYTE:       f[0] =  66 #"B"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_SHORT:       f[0] = 104 #"h"
+ *                         elif t == NPY_USHORT:      f[0] =  72 #"H"
+ */
+          (__pyx_v_f[0]) = 66;
+          break;
+          case NPY_SHORT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":163
+ *                         if   t == NPY_BYTE:        f[0] =  98 #"b"
+ *                         elif t == NPY_UBYTE:       f[0] =  66 #"B"
+ *                         elif t == NPY_SHORT:       f[0] = 104 #"h"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_USHORT:      f[0] =  72 #"H"
+ *                         elif t == NPY_INT:         f[0] = 105 #"i"
+ */
+          (__pyx_v_f[0]) = 104;
+          break;
+          case NPY_USHORT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":164
+ *                         elif t == NPY_UBYTE:       f[0] =  66 #"B"
+ *                         elif t == NPY_SHORT:       f[0] = 104 #"h"
+ *                         elif t == NPY_USHORT:      f[0] =  72 #"H"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_INT:         f[0] = 105 #"i"
+ *                         elif t == NPY_UINT:        f[0] =  73 #"I"
+ */
+          (__pyx_v_f[0]) = 72;
+          break;
+          case NPY_INT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":165
+ *                         elif t == NPY_SHORT:       f[0] = 104 #"h"
+ *                         elif t == NPY_USHORT:      f[0] =  72 #"H"
+ *                         elif t == NPY_INT:         f[0] = 105 #"i"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_UINT:        f[0] =  73 #"I"
+ *                         elif t == NPY_LONG:        f[0] = 108 #"l"
+ */
+          (__pyx_v_f[0]) = 105;
+          break;
+          case NPY_UINT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":166
+ *                         elif t == NPY_USHORT:      f[0] =  72 #"H"
+ *                         elif t == NPY_INT:         f[0] = 105 #"i"
+ *                         elif t == NPY_UINT:        f[0] =  73 #"I"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_LONG:        f[0] = 108 #"l"
+ *                         elif t == NPY_ULONG:       f[0] = 76  #"L"
+ */
+          (__pyx_v_f[0]) = 73;
+          break;
+          case NPY_LONG:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":167
+ *                         elif t == NPY_INT:         f[0] = 105 #"i"
+ *                         elif t == NPY_UINT:        f[0] =  73 #"I"
+ *                         elif t == NPY_LONG:        f[0] = 108 #"l"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_ULONG:       f[0] = 76  #"L"
+ *                         elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ */
+          (__pyx_v_f[0]) = 108;
+          break;
+          case NPY_ULONG:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":168
+ *                         elif t == NPY_UINT:        f[0] =  73 #"I"
+ *                         elif t == NPY_LONG:        f[0] = 108 #"l"
+ *                         elif t == NPY_ULONG:       f[0] = 76  #"L"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ *                         elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ */
+          (__pyx_v_f[0]) = 76;
+          break;
+          case NPY_LONGLONG:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":169
+ *                         elif t == NPY_LONG:        f[0] = 108 #"l"
+ *                         elif t == NPY_ULONG:       f[0] = 76  #"L"
+ *                         elif t == NPY_LONGLONG:    f[0] = 113 #"q"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ *                         elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ */
+          (__pyx_v_f[0]) = 113;
+          break;
+          case NPY_ULONGLONG:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":170
+ *                         elif t == NPY_ULONG:       f[0] = 76  #"L"
+ *                         elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ *                         elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ *                         elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ */
+          (__pyx_v_f[0]) = 81;
+          break;
+          case NPY_FLOAT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":171
+ *                         elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ *                         elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ *                         elif t == NPY_FLOAT:       f[0] = 102 #"f"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ *                         elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ */
+          (__pyx_v_f[0]) = 102;
+          break;
+          case NPY_DOUBLE:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":172
+ *                         elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ *                         elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ *                         elif t == NPY_DOUBLE:      f[0] = 100 #"d"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ *                         elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1
+ */
+          (__pyx_v_f[0]) = 100;
+          break;
+          case NPY_LONGDOUBLE:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":173
+ *                         elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ *                         elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ *                         elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1
+ *                         elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1
+ */
+          (__pyx_v_f[0]) = 103;
+          break;
+          case NPY_CFLOAT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":174
+ *                         elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ *                         elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ *                         elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1
+ *                         elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1
+ */
+          (__pyx_v_f[0]) = 90;
+          (__pyx_v_f[1]) = 102;
+          __pyx_v_f += 1;
+          break;
+          case NPY_CDOUBLE:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":175
+ *                         elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ *                         elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1
+ *                         elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1
+ *                         elif t == NPY_OBJECT:      f[0] = 79 #"O"
+ */
+          (__pyx_v_f[0]) = 90;
+          (__pyx_v_f[1]) = 100;
+          __pyx_v_f += 1;
+          break;
+          case NPY_CLONGDOUBLE:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":176
+ *                         elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1
+ *                         elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1
+ *                         elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_OBJECT:      f[0] = 79 #"O"
+ *                         else:
+ */
+          (__pyx_v_f[0]) = 90;
+          (__pyx_v_f[1]) = 103;
+          __pyx_v_f += 1;
+          break;
+          case NPY_OBJECT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":177
+ *                         elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1
+ *                         elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1
+ *                         elif t == NPY_OBJECT:      f[0] = 79 #"O"             # <<<<<<<<<<<<<<
+ *                         else:
+ *                             raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)
+ */
+          (__pyx_v_f[0]) = 79;
+          break;
+          default:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":179
+ *                         elif t == NPY_OBJECT:      f[0] = 79 #"O"
+ *                         else:
+ *                             raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
+ *                         f += 1
+ *                     else:
+ */
+          __pyx_2 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_1 = PyNumber_Remainder(__pyx_kp_22, __pyx_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          Py_DECREF(__pyx_2); __pyx_2 = 0;
+          __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          PyTuple_SET_ITEM(__pyx_3, 0, __pyx_t_1);
+          __pyx_t_1 = 0;
+          __pyx_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+          __Pyx_Raise(__pyx_5, 0, 0);
+          Py_DECREF(__pyx_5); __pyx_5 = 0;
+          {__pyx_filename = __pyx_f[1]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":180
+ *                         else:
+ *                             raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)
+ *                         f += 1             # <<<<<<<<<<<<<<
+ *                     else:
+ *                         f[0] = 84 #"T"
+ */
+        __pyx_v_f += 1;
+        goto __pyx_L23;
+      }
+      /*else*/ {
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":182
+ *                         f += 1
+ *                     else:
+ *                         f[0] = 84 #"T"             # <<<<<<<<<<<<<<
+ *                         f[1] = 123 #"{"
+ *                         f += 2
+ */
+        (__pyx_v_f[0]) = 84;
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":183
+ *                     else:
+ *                         f[0] = 84 #"T"
+ *                         f[1] = 123 #"{"             # <<<<<<<<<<<<<<
+ *                         f += 2
+ *                         stack.append(iter(descr.fields.iteritems()))
+ */
+        (__pyx_v_f[1]) = 123;
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":184
+ *                         f[0] = 84 #"T"
+ *                         f[1] = 123 #"{"
+ *                         f += 2             # <<<<<<<<<<<<<<
+ *                         stack.append(iter(descr.fields.iteritems()))
+ * 
+ */
+        __pyx_v_f += 2;
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":185
+ *                         f[1] = 123 #"{"
+ *                         f += 2
+ *                         stack.append(iter(descr.fields.iteritems()))             # <<<<<<<<<<<<<<
+ * 
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):
+ */
+        __pyx_7 = PyObject_GetAttr(__pyx_v_descr->fields, __pyx_kp_iteritems); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_6 = PyObject_Call(__pyx_7, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(__pyx_7); __pyx_7 = 0;
+        __pyx_2 = PyObject_GetIter(__pyx_6); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(__pyx_6); __pyx_6 = 0;
+        __pyx_4 = PyList_Append(((PyObject *)__pyx_v_stack), __pyx_2); if (unlikely(__pyx_4 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(__pyx_2); __pyx_2 = 0;
+      }
+      __pyx_L23:;
+    }
   }
-  __pyx_L6:;
-  __pyx_v_info->format = __pyx_v_f;
+  __pyx_L12:;
 
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  Py_XDECREF(__pyx_7);
   __Pyx_AddTraceback("numpy.ndarray.__getbuffer__");
   __pyx_r = -1;
+  Py_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
+  goto __pyx_L2;
   __pyx_L0:;
+  if (__pyx_v_info->obj == Py_None) { Py_DECREF(Py_None); __pyx_v_info->obj = NULL; }
+  __pyx_L2:;
+  Py_XDECREF(__pyx_v_descr);
+  Py_DECREF(__pyx_v_stack);
+  Py_DECREF(__pyx_v_iterator);
   return __pyx_r;
 }
+
+/* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":187
+ *                         stack.append(iter(descr.fields.iteritems()))
+ * 
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)
+ */
+
+static void __pyx_pf_5numpy_7ndarray___releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
+static void __pyx_pf_5numpy_7ndarray___releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
+  int __pyx_1;
+  int __pyx_2;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":188
+ * 
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):
+ *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
+ *                 stdlib.free(info.format)
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ */
+  __pyx_1 = PyArray_HASFIELDS(((PyArrayObject *)__pyx_v_self));
+  if (__pyx_1) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":189
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *                 stdlib.free(info.strides)
+ */
+    free(__pyx_v_info->format);
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":190
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
+ *                 stdlib.free(info.strides)
+ *                 # info.shape was stored after info.strides in the same block
+ */
+  __pyx_2 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
+  if (__pyx_2) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":191
+ *                 stdlib.free(info.format)
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
+ *                 # info.shape was stored after info.strides in the same block
+ * 
+ */
+    free(__pyx_v_info->strides);
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+}
 static struct __pyx_vtabstruct_5scipy_7spatial_7ckdtree_cKDTree __pyx_vtable_5scipy_7spatial_7ckdtree_cKDTree;
 
 static PyObject *__pyx_tp_new_5scipy_7spatial_7ckdtree_cKDTree(PyTypeObject *t, PyObject *a, PyObject *k) {
@@ -2334,10 +5894,10 @@
   #if PY_MAJOR_VERSION < 3
   0, /*bf_getcharbuffer*/
   #endif
-  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_NEWBUFFER)
+  #if PY_VERSION_HEX >= 0x02060000
   0, /*bf_getbuffer*/
   #endif
-  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_NEWBUFFER)
+  #if PY_VERSION_HEX >= 0x02060000
   0, /*bf_releasebuffer*/
   #endif
 };
@@ -2362,7 +5922,7 @@
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   &__pyx_tp_as_buffer_cKDTree, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   "kd-tree for quick nearest-neighbor lookup\n\n    This class provides an index into a set of k-dimensional points\n    which can be used to rapidly look up the nearest neighbors of any\n    point. \n\n    The algorithm used is described in Maneewongvatana and Mount 1999. \n    The general idea is that the kd-tree is a binary trie, each of whose\n    nodes represents an axis-aligned hyperrectangle. Each node specifies\n    an axis and splits the set of points based on whether their coordinate\n    along that axis is greater than or less than a particular value. \n\n    During construction, the axis and splitting point are chosen by the \n    \"sliding midpoint\" rule, which ensures that the cells do not all\n    become long and thin. \n\n    The tree can be queried for the r closest neighbors of any given point \n    (optionally returning only those within some maximum distance of the \n    point). It can also be queried, with a substantial gain in efficiency, \n    for the r approximate closest neighbors.\n\n    For large dimensions (20 is already large) do not expect this to run \n    significantly faster than brute force. High-dimensional nearest-neighbor\n    queries are a substantial open problem in computer science.\n    ", /*tp_doc*/
   __pyx_tp_traverse_5scipy_7spatial_7ckdtree_cKDTree, /*tp_traverse*/
   __pyx_tp_clear_5scipy_7spatial_7ckdtree_cKDTree, /*tp_clear*/
@@ -2411,9 +5971,16 @@
 #endif
 
 static __Pyx_StringTabEntry __pyx_string_tab[] = {
-  {&__pyx_kp___init__, __pyx_k___init__, sizeof(__pyx_k___init__), 0, 1, 1},
-  {&__pyx_kp___dealloc__, __pyx_k___dealloc__, sizeof(__pyx_k___dealloc__), 0, 1, 1},
-  {&__pyx_kp_query, __pyx_k_query, sizeof(__pyx_k_query), 0, 1, 1},
+  {&__pyx_kp___init__, __pyx_k___init__, sizeof(__pyx_k___init__), 1, 1, 1},
+  {&__pyx_kp___dealloc__, __pyx_k___dealloc__, sizeof(__pyx_k___dealloc__), 1, 1, 1},
+  {&__pyx_kp_query, __pyx_k_query, sizeof(__pyx_k_query), 1, 1, 1},
+  {&__pyx_kp_data, __pyx_k_data, sizeof(__pyx_k_data), 1, 1, 1},
+  {&__pyx_kp_leafsize, __pyx_k_leafsize, sizeof(__pyx_k_leafsize), 1, 1, 1},
+  {&__pyx_kp_x, __pyx_k_x, sizeof(__pyx_k_x), 1, 1, 1},
+  {&__pyx_kp_k, __pyx_k_k, sizeof(__pyx_k_k), 1, 1, 1},
+  {&__pyx_kp_eps, __pyx_k_eps, sizeof(__pyx_k_eps), 1, 1, 1},
+  {&__pyx_kp_p, __pyx_k_p, sizeof(__pyx_k_p), 1, 1, 1},
+  {&__pyx_kp_23, __pyx_k_23, sizeof(__pyx_k_23), 1, 1, 1},
   {&__pyx_kp_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 1, 1, 1},
   {&__pyx_kp_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 1, 1},
   {&__pyx_kp_kdtree, __pyx_k_kdtree, sizeof(__pyx_k_kdtree), 1, 1, 1},
@@ -2427,7 +5994,7 @@
   {&__pyx_kp_axis, __pyx_k_axis, sizeof(__pyx_k_axis), 1, 1, 1},
   {&__pyx_kp_amin, __pyx_k_amin, sizeof(__pyx_k_amin), 1, 1, 1},
   {&__pyx_kp_arange, __pyx_k_arange, sizeof(__pyx_k_arange), 1, 1, 1},
-  {&__pyx_kp_int, __pyx_k_int, sizeof(__pyx_k_int), 1, 1, 1},
+  {&__pyx_kp_27, __pyx_k_27, sizeof(__pyx_k_27), 1, 1, 1},
   {&__pyx_kp_asarray, __pyx_k_asarray, sizeof(__pyx_k_asarray), 1, 1, 1},
   {&__pyx_kp_astype, __pyx_k_astype, sizeof(__pyx_k_astype), 1, 1, 1},
   {&__pyx_kp_newaxis, __pyx_k_newaxis, sizeof(__pyx_k_newaxis), 1, 1, 1},
@@ -2435,20 +6002,31 @@
   {&__pyx_kp_reshape, __pyx_k_reshape, sizeof(__pyx_k_reshape), 1, 1, 1},
   {&__pyx_kp_empty, __pyx_k_empty, sizeof(__pyx_k_empty), 1, 1, 1},
   {&__pyx_kp_fill, __pyx_k_fill, sizeof(__pyx_k_fill), 1, 1, 1},
-  {&__pyx_kp_22, __pyx_k_22, sizeof(__pyx_k_22), 0, 1, 0},
-  {&__pyx_kp_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 0, 0},
-  {&__pyx_kp_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 0},
+  {&__pyx_kp_30, __pyx_k_30, sizeof(__pyx_k_30), 0, 1, 0},
+  {&__pyx_kp_25, __pyx_k_25, sizeof(__pyx_k_25), 0, 0, 0},
+  {&__pyx_kp_26, __pyx_k_26, sizeof(__pyx_k_26), 0, 0, 0},
+  {&__pyx_kp_28, __pyx_k_28, sizeof(__pyx_k_28), 0, 0, 0},
+  {&__pyx_kp_29, __pyx_k_29, sizeof(__pyx_k_29), 0, 0, 0},
+  {&__pyx_kp___getbuffer__, __pyx_k___getbuffer__, sizeof(__pyx_k___getbuffer__), 1, 1, 1},
+  {&__pyx_kp___releasebuffer__, __pyx_k___releasebuffer__, sizeof(__pyx_k___releasebuffer__), 1, 1, 1},
+  {&__pyx_kp_info, __pyx_k_info, sizeof(__pyx_k_info), 1, 1, 1},
+  {&__pyx_kp_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 1, 1, 1},
+  {&__pyx_kp_iteritems, __pyx_k_iteritems, sizeof(__pyx_k_iteritems), 1, 1, 1},
+  {&__pyx_kp_next, __pyx_k_next, sizeof(__pyx_k_next), 1, 1, 1},
+  {&__pyx_kp_StopIteration, __pyx_k_StopIteration, sizeof(__pyx_k_StopIteration), 1, 1, 1},
+  {&__pyx_kp_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 1, 1, 1},
+  {&__pyx_kp_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 1, 1, 1},
+  {&__pyx_kp_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 0},
+  {&__pyx_kp_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 0},
   {&__pyx_kp_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 0},
   {&__pyx_kp_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 0},
-  {&__pyx_kp___getbuffer__, __pyx_k___getbuffer__, sizeof(__pyx_k___getbuffer__), 0, 1, 1},
-  {&__pyx_kp_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 1, 1, 1},
-  {&__pyx_kp_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 0},
-  {&__pyx_kp_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 0},
+  {&__pyx_kp_22, __pyx_k_22, sizeof(__pyx_k_22), 0, 0, 0},
   {0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
   __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_kp_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_kp_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_StopIteration = __Pyx_GetName(__pyx_b, __pyx_kp_StopIteration); if (!__pyx_builtin_StopIteration) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_kp_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -2474,7 +6052,7 @@
   PyObject *__pyx_2 = 0;
   double __pyx_3;
   __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  /*--- Libary function declarations ---*/
+  /*--- Library function declarations ---*/
   __pyx_init_filenames();
   /*--- Initialize various global constants etc. ---*/
   if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -2506,22 +6084,62 @@
   if (PyObject_SetAttrString(__pyx_m, "cKDTree", (PyObject *)&__pyx_type_5scipy_7spatial_7ckdtree_cKDTree) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_5scipy_7spatial_7ckdtree_cKDTree = &__pyx_type_5scipy_7spatial_7ckdtree_cKDTree;
   /*--- Type import code ---*/
-  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr)); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   /*--- Function import code ---*/
   /*--- Execution code ---*/
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":3
+ * # Copyright Anne M. Archibald 2008
+ * # Released under the scipy license
+ * import numpy as np             # <<<<<<<<<<<<<<
+ * cimport numpy as np
+ * cimport stdlib
+ */
   __pyx_1 = __Pyx_Import(__pyx_kp_numpy, 0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (PyObject_SetAttr(__pyx_m, __pyx_kp_np, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":7
+ * cimport stdlib
+ * 
+ * import kdtree             # <<<<<<<<<<<<<<
+ * 
+ * cdef double infinity = np.inf
+ */
   __pyx_1 = __Pyx_Import(__pyx_kp_kdtree, 0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (PyObject_SetAttr(__pyx_m, __pyx_kp_kdtree, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":9
+ * import kdtree
+ * 
+ * cdef double infinity = np.inf             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
   __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_inf); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
   __pyx_3 = __pyx_PyFloat_AsDouble(__pyx_2); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   __pyx_v_5scipy_7spatial_7ckdtree_infinity = __pyx_3;
-  __pyx_k_17 = __pyx_v_5scipy_7spatial_7ckdtree_infinity;
+
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/spatial/ckdtree.pyx":517
+ * 
+ *     def query(cKDTree self, object x, int k=1, double eps=0, double p=2,
+ *             double distance_upper_bound=infinity):             # <<<<<<<<<<<<<<
+ *         """query the kd-tree for nearest neighbors
+ * 
+ */
+  __pyx_k_24 = __pyx_v_5scipy_7spatial_7ckdtree_infinity;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/stdlib.pxd":2
+ * 
+ * cdef extern from "stdlib.h":             # <<<<<<<<<<<<<<
+ *     ctypedef unsigned long size_t
+ *     void free(void *ptr)
+ */
   #if PY_MAJOR_VERSION < 3
   return;
   #else
@@ -2547,14 +6165,140 @@
   __pyx_f = __pyx_filenames;
 }
 
-static INLINE void __Pyx_SafeReleaseBuffer(PyObject* obj, Py_buffer* info) {
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name,
+    PyObject* kw_name)
+{
+    PyErr_Format(PyExc_TypeError,
+        #if PY_MAJOR_VERSION >= 3
+        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
+        #else
+        "%s() got multiple values for keyword argument '%s'", func_name,
+        PyString_AS_STRING(kw_name));
+        #endif
+}
+
+static void __Pyx_RaiseArgtupleInvalid(
+    const char* func_name,
+    int exact,
+    Py_ssize_t num_min,
+    Py_ssize_t num_max,
+    Py_ssize_t num_found)
+{
+    Py_ssize_t num_expected;
+    const char *number, *more_or_less;
+
+    if (num_found < num_min) {
+        num_expected = num_min;
+        more_or_less = "at least";
+    } else {
+        num_expected = num_max;
+        more_or_less = "at most";
+    }
+    if (exact) {
+        more_or_less = "exactly";
+    }
+    number = (num_expected == 1) ? "" : "s";
+    PyErr_Format(PyExc_TypeError,
+        #if PY_VERSION_HEX < 0x02050000
+            "%s() takes %s %d positional argument%s (%d given)",
+        #else
+            "%s() takes %s %zd positional argument%s (%zd given)",
+        #endif
+        func_name, more_or_less, num_expected, number, num_found);
+}
+
+static int __Pyx_ParseOptionalKeywords(
+    PyObject *kwds,
+    PyObject **argnames[],
+    PyObject *kwds2,
+    PyObject *values[],
+    Py_ssize_t num_pos_args,
+    const char* function_name)
+{
+    PyObject *key = 0, *value = 0;
+    Py_ssize_t pos = 0;
+    PyObject*** name;
+    PyObject*** first_kw_arg = argnames + num_pos_args;
+
+    while (PyDict_Next(kwds, &pos, &key, &value)) {
+        #if PY_MAJOR_VERSION < 3
+        if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) {
+        #else
+        if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) {
+        #endif
+            goto invalid_keyword_type;
+        } else {
+            name = argnames;
+            while (*name && (**name != key)) name++;
+            if (*name) {
+                if (name < first_kw_arg) goto arg_passed_twice;
+                values[name-argnames] = value;
+            } else {
+                for (name = first_kw_arg; *name; name++) {
+                    #if PY_MAJOR_VERSION >= 3
+                    if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
+                        PyUnicode_Compare(**name, key) == 0) break;
+                    #else
+                    if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
+                        strcmp(PyString_AS_STRING(**name),
+                               PyString_AS_STRING(key)) == 0) break;
+                    #endif
+                }
+                if (*name) {
+                    values[name-argnames] = value;
+                } else {
+                    /* unexpected keyword found */
+                    for (name=argnames; name != first_kw_arg; name++) {
+                        if (**name == key) goto arg_passed_twice;
+                        #if PY_MAJOR_VERSION >= 3
+                        if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
+                            PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice;
+                        #else
+                        if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
+                            strcmp(PyString_AS_STRING(**name),
+                                   PyString_AS_STRING(key)) == 0) goto arg_passed_twice;
+                        #endif
+                    }
+                    if (kwds2) {
+                        if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+                    } else {
+                        goto invalid_keyword;
+                    }
+                }
+            }
+        }
+    }
+    return 0;
+arg_passed_twice:
+    __Pyx_RaiseDoubleKeywordsError(function_name, **name);
+    goto bad;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%s() keywords must be strings", function_name);
+    goto bad;
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%s() got an unexpected keyword argument '%s'",
+        function_name, PyString_AsString(key));
+    #else
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
+    #endif
+bad:
+    return -1;
+}
+
+static INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) {
   if (info->buf == NULL) return;
   if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL;
-  __Pyx_ReleaseBuffer(obj, info);
+  __Pyx_ReleaseBuffer(info);
 }
 
 static INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) {
   buf->buf = NULL;
+  buf->obj = NULL;
   buf->strides = __Pyx_zeros;
   buf->shape = __Pyx_zeros;
   buf->suboffsets = __Pyx_minusones;
@@ -2563,58 +6307,72 @@
 static INLINE const char* __Pyx_ConsumeWhitespace(const char* ts) {
   while (1) {
     switch (*ts) {
+      case '@':
       case 10:
       case 13:
       case ' ':
         ++ts;
+        break;
+      case '=':
+      case '<':
+      case '>':
+      case '!':
+        PyErr_SetString(PyExc_ValueError, "Buffer acquisition error: Only native byte order, size and alignment supported.");
+        return NULL;               
       default:
         return ts;
     }
   }
 }
 
-static INLINE const char* __Pyx_BufferTypestringCheckEndian(const char* ts) {
-  int num = 1;
-  int little_endian = ((char*)&num)[0];
-  int ok = 1;
-  switch (*ts) {
-    case '@':
-    case '=':
-      ++ts; break;
-    case '<':
-      if (little_endian) ++ts;
-      else ok = 0;
-      break;
-    case '>':
-    case '!':
-      if (!little_endian) ++ts;
-      else ok = 0;
-      break;
-  }
-  if (!ok) {
-    PyErr_Format(PyExc_ValueError, "Buffer has wrong endianness (rejecting on '%s')", ts);
-    return NULL;
-  }
-  return ts;
-}
-
 static void __Pyx_BufferNdimError(Py_buffer* buffer, int expected_ndim) {
   PyErr_Format(PyExc_ValueError,
                "Buffer has wrong number of dimensions (expected %d, got %d)",
                expected_ndim, buffer->ndim);
 }
 
+static const char* __Pyx_DescribeTokenInFormatString(const char* ts) {
+  switch (*ts) {
+    case 'b': return "char";
+    case 'B': return "unsigned char";
+    case 'h': return "short";
+    case 'H': return "unsigned short";
+    case 'i': return "int";
+    case 'I': return "unsigned int";
+    case 'l': return "long";
+    case 'L': return "unsigned long";
+    case 'q': return "long long";
+    case 'Q': return "unsigned long long";
+    case 'f': return "float";
+    case 'd': return "double";
+    case 'g': return "long double";
+    case 'Z': switch (*(ts+1)) {
+        case 'f': return "complex float";
+        case 'd': return "complex double";
+        case 'g': return "complex long double";
+        default: return "unparseable format string";
+    }
+    case 'T': return "a struct";
+    case 'O': return "Python object";
+    case 'P': return "a pointer";
+    default: return "unparseable format string";
+  }
+}
 
-static const char* __Pyx_BufferTypestringCheck_item_double(const char* ts) {
-  if (*ts == '1') ++ts;
-  if (*ts != 'd') {
-    PyErr_Format(PyExc_ValueError, "Buffer datatype mismatch (expected 'd', got '%s')", ts);
-    return NULL;
-  } else return ts + 1;
+static const char* __Pyx_CheckTypestring_double(const char* ts) {
+    int ok;
+    ts = __Pyx_ConsumeWhitespace(ts); if (!ts) return NULL;
+    if (*ts == '1') ++ts;
+    ok = (*ts == 'd');
+    if (!(ok)) {
+      PyErr_Format(PyExc_ValueError, "Buffer dtype mismatch (expected double, got %s)", __Pyx_DescribeTokenInFormatString(ts));
+      return NULL;
+    }
+    ++ts;
+    return ts;
+  }
   
-}
-
-static int __Pyx_GetBuffer_double(PyObject* obj, Py_buffer* buf, int flags, int nd) {
+static int __Pyx_GetBuffer_double(PyObject* obj, Py_buffer* buf, int flags, int nd, int cast) {
   const char* ts;
   if (obj == Py_None) {
     __Pyx_ZeroBuffer(buf);
@@ -2626,18 +6384,26 @@
     __Pyx_BufferNdimError(buf, nd);
     goto fail;
   }
-  ts = buf->format;
-  ts = __Pyx_ConsumeWhitespace(ts);
-  ts = __Pyx_BufferTypestringCheckEndian(ts);
-  if (!ts) goto fail;
-  ts = __Pyx_ConsumeWhitespace(ts);
-  ts = __Pyx_BufferTypestringCheck_item_double(ts);
-  if (!ts) goto fail;
-  ts = __Pyx_ConsumeWhitespace(ts);
-  if (*ts != 0) {
-    PyErr_Format(PyExc_ValueError,
-      "Expected non-struct buffer data type (expected end, got '%s')", ts);
-    goto fail;
+  if (!cast) {
+    ts = buf->format;
+    ts = __Pyx_ConsumeWhitespace(ts);
+    if (!ts) goto fail;
+    ts = __Pyx_CheckTypestring_double(ts);
+    if (!ts) goto fail;
+    ts = __Pyx_ConsumeWhitespace(ts);
+    if (!ts) goto fail;
+    if (*ts != 0) {
+      PyErr_Format(PyExc_ValueError,
+        "Buffer dtype mismatch (expected end, got %s)",
+        __Pyx_DescribeTokenInFormatString(ts));
+      goto fail;
+    }
+  } else {
+    if (buf->itemsize != sizeof(double)) {
+      PyErr_SetString(PyExc_ValueError,
+        "Attempted cast of buffer to datatype of different size.");
+      goto fail;
+    }
   }
   if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
   return 0;
@@ -2650,25 +6416,27 @@
      "Buffer acquisition failed on assignment; and then reacquiring the old buffer failed too!");
 }
 
-
-static const char* __Pyx_BufferTypestringCheck_item_nn___pyx_t_5numpy_int32_t(const char* ts) {
-  int ok;
-  if (*ts == '1') ++ts;
-  switch (*ts) {
-    case 'b': ok = (sizeof(__pyx_t_5numpy_int32_t) == sizeof(char) && (__pyx_t_5numpy_int32_t)-1 < 0); break;
-    case 'h': ok = (sizeof(__pyx_t_5numpy_int32_t) == sizeof(short) && (__pyx_t_5numpy_int32_t)-1 < 0); break;
-    case 'i': ok = (sizeof(__pyx_t_5numpy_int32_t) == sizeof(int) && (__pyx_t_5numpy_int32_t)-1 < 0); break;
-    case 'l': ok = (sizeof(__pyx_t_5numpy_int32_t) == sizeof(long) && (__pyx_t_5numpy_int32_t)-1 < 0); break;
-    case 'q': ok = (sizeof(__pyx_t_5numpy_int32_t) == sizeof(long long) && (__pyx_t_5numpy_int32_t)-1 < 0); break;  default: ok = 0;
+static const char* __Pyx_CheckTypestring_nn___pyx_t_5numpy_int32_t(const char* ts) {
+    int ok;
+    ts = __Pyx_ConsumeWhitespace(ts); if (!ts) return NULL;
+    if (*ts == '1') ++ts;
+    switch (*ts) {
+      case 'b': ok = (sizeof(__pyx_t_5numpy_int32_t) == sizeof(char) && (__pyx_t_5numpy_int32_t)-1 < 0); break;
+      case 'h': ok = (sizeof(__pyx_t_5numpy_int32_t) == sizeof(short) && (__pyx_t_5numpy_int32_t)-1 < 0); break;
+      case 'i': ok = (sizeof(__pyx_t_5numpy_int32_t) == sizeof(int) && (__pyx_t_5numpy_int32_t)-1 < 0); break;
+      case 'l': ok = (sizeof(__pyx_t_5numpy_int32_t) == sizeof(long) && (__pyx_t_5numpy_int32_t)-1 < 0); break;
+      case 'q': ok = (sizeof(__pyx_t_5numpy_int32_t) == sizeof(long long) && (__pyx_t_5numpy_int32_t)-1 < 0); break;
+      default: ok = 0;
+    }
+    if (!(ok)) {
+      PyErr_Format(PyExc_ValueError, "Buffer dtype mismatch (expected numpy.int32_t, got %s)", __Pyx_DescribeTokenInFormatString(ts));
+      return NULL;
+    }
+    ++ts;
+    return ts;
   }
-  if (!ok) {
-      PyErr_Format(PyExc_ValueError, "Buffer datatype mismatch (rejecting on '%s')", ts);
-      return NULL;
-  } else return ts + 1;
   
-}
-
-static int __Pyx_GetBuffer_nn___pyx_t_5numpy_int32_t(PyObject* obj, Py_buffer* buf, int flags, int nd) {
+static int __Pyx_GetBuffer_nn___pyx_t_5numpy_int32_t(PyObject* obj, Py_buffer* buf, int flags, int nd, int cast) {
   const char* ts;
   if (obj == Py_None) {
     __Pyx_ZeroBuffer(buf);
@@ -2680,18 +6448,26 @@
     __Pyx_BufferNdimError(buf, nd);
     goto fail;
   }
-  ts = buf->format;
-  ts = __Pyx_ConsumeWhitespace(ts);
-  ts = __Pyx_BufferTypestringCheckEndian(ts);
-  if (!ts) goto fail;
-  ts = __Pyx_ConsumeWhitespace(ts);
-  ts = __Pyx_BufferTypestringCheck_item_nn___pyx_t_5numpy_int32_t(ts);
-  if (!ts) goto fail;
-  ts = __Pyx_ConsumeWhitespace(ts);
-  if (*ts != 0) {
-    PyErr_Format(PyExc_ValueError,
-      "Expected non-struct buffer data type (expected end, got '%s')", ts);
-    goto fail;
+  if (!cast) {
+    ts = buf->format;
+    ts = __Pyx_ConsumeWhitespace(ts);
+    if (!ts) goto fail;
+    ts = __Pyx_CheckTypestring_nn___pyx_t_5numpy_int32_t(ts);
+    if (!ts) goto fail;
+    ts = __Pyx_ConsumeWhitespace(ts);
+    if (!ts) goto fail;
+    if (*ts != 0) {
+      PyErr_Format(PyExc_ValueError,
+        "Buffer dtype mismatch (expected end, got %s)",
+        __Pyx_DescribeTokenInFormatString(ts));
+      goto fail;
+    }
+  } else {
+    if (buf->itemsize != sizeof(__pyx_t_5numpy_int32_t)) {
+      PyErr_SetString(PyExc_ValueError,
+        "Attempted cast of buffer to datatype of different size.");
+      goto fail;
+    }
   }
   if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
   return 0;
@@ -2699,16 +6475,47 @@
   __Pyx_ZeroBuffer(buf);
   return -1;
 }
-static const char* __Pyx_BufferTypestringCheck_item_int(const char* ts) {
-  if (*ts == '1') ++ts;
-  if (*ts != 'i') {
-    PyErr_Format(PyExc_ValueError, "Buffer datatype mismatch (expected 'i', got '%s')", ts);
-    return NULL;
-  } else return ts + 1;
-  
+static INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+
+    tmp_type = tstate->curexc_type;
+    tmp_value = tstate->curexc_value;
+    tmp_tb = tstate->curexc_traceback;
+    tstate->curexc_type = type;
+    tstate->curexc_value = value;
+    tstate->curexc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
 }
 
-static int __Pyx_GetBuffer_int(PyObject* obj, Py_buffer* buf, int flags, int nd) {
+static INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
+    PyThreadState *tstate = PyThreadState_GET();
+    *type = tstate->curexc_type;
+    *value = tstate->curexc_value;
+    *tb = tstate->curexc_traceback;
+
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+}
+
+
+static const char* __Pyx_CheckTypestring_int(const char* ts) {
+    int ok;
+    ts = __Pyx_ConsumeWhitespace(ts); if (!ts) return NULL;
+    if (*ts == '1') ++ts;
+    ok = (*ts == 'i');
+    if (!(ok)) {
+      PyErr_Format(PyExc_ValueError, "Buffer dtype mismatch (expected int, got %s)", __Pyx_DescribeTokenInFormatString(ts));
+      return NULL;
+    }
+    ++ts;
+    return ts;
+  }
+  
+static int __Pyx_GetBuffer_int(PyObject* obj, Py_buffer* buf, int flags, int nd, int cast) {
   const char* ts;
   if (obj == Py_None) {
     __Pyx_ZeroBuffer(buf);
@@ -2720,18 +6527,26 @@
     __Pyx_BufferNdimError(buf, nd);
     goto fail;
   }
-  ts = buf->format;
-  ts = __Pyx_ConsumeWhitespace(ts);
-  ts = __Pyx_BufferTypestringCheckEndian(ts);
-  if (!ts) goto fail;
-  ts = __Pyx_ConsumeWhitespace(ts);
-  ts = __Pyx_BufferTypestringCheck_item_int(ts);
-  if (!ts) goto fail;
-  ts = __Pyx_ConsumeWhitespace(ts);
-  if (*ts != 0) {
-    PyErr_Format(PyExc_ValueError,
-      "Expected non-struct buffer data type (expected end, got '%s')", ts);
-    goto fail;
+  if (!cast) {
+    ts = buf->format;
+    ts = __Pyx_ConsumeWhitespace(ts);
+    if (!ts) goto fail;
+    ts = __Pyx_CheckTypestring_int(ts);
+    if (!ts) goto fail;
+    ts = __Pyx_ConsumeWhitespace(ts);
+    if (!ts) goto fail;
+    if (*ts != 0) {
+      PyErr_Format(PyExc_ValueError,
+        "Buffer dtype mismatch (expected end, got %s)",
+        __Pyx_DescribeTokenInFormatString(ts));
+      goto fail;
+    }
+  } else {
+    if (buf->itemsize != sizeof(int)) {
+      PyErr_SetString(PyExc_ValueError,
+        "Attempted cast of buffer to datatype of different size.");
+      goto fail;
+    }
   }
   if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
   return 0;
@@ -2744,21 +6559,12 @@
 }
 
 
-static INLINE void __Pyx_RaiseArgtupleTooLong(
-    Py_ssize_t num_expected,
-    Py_ssize_t num_found)
-{
-    const char* error_message =
-    #if PY_VERSION_HEX < 0x02050000
-        "function takes at most %d positional arguments (%d given)";
-    #else
-        "function takes at most %zd positional arguments (%zd given)";
-    #endif
-    PyErr_Format(PyExc_TypeError, error_message, num_expected, num_found);
-}
-
-#if (PY_MAJOR_VERSION < 3) && !(Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_NEWBUFFER)
+#if PY_MAJOR_VERSION < 3
 static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
+  #if PY_VERSION_HEX >= 0x02060000
+  if (Py_TYPE(obj)->tp_flags & Py_TPFLAGS_HAVE_NEWBUFFER)
+      return PyObject_GetBuffer(obj, view, flags);
+  #endif
   if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pf_5numpy_7ndarray___getbuffer__(obj, view, flags);
   else {
   PyErr_Format(PyExc_TypeError, "'%100s' does not have the buffer interface", Py_TYPE(obj)->tp_name);
@@ -2766,8 +6572,13 @@
     }
 }
 
-static void __Pyx_ReleaseBuffer(PyObject *obj, Py_buffer *view) {
-
+static void __Pyx_ReleaseBuffer(Py_buffer *view) {
+  PyObject* obj = view->obj;
+  if (obj) {
+if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) __pyx_pf_5numpy_7ndarray___releasebuffer__(obj, view);
+    Py_DECREF(obj);
+    view->obj = NULL;
+  }
 }
 
 #endif
@@ -2868,7 +6679,7 @@
             }
         #endif
     }
-    PyErr_Restore(type, value, tb);
+    __Pyx_ErrRestore(type, value, tb);
     return;
 raise_error:
     Py_XDECREF(value);
@@ -2917,20 +6728,76 @@
     return 0;
 }
 
+static INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
+    PyThreadState *tstate = PyThreadState_GET();
+    *type = tstate->exc_type;
+    *value = tstate->exc_value;
+    *tb = tstate->exc_traceback;
+    Py_XINCREF(*type);
+    Py_XINCREF(*value);
+    Py_XINCREF(*tb);
+}
 
+static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = type;
+    tstate->exc_value = value;
+    tstate->exc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+}
+
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+    __Pyx_ErrFetch(type, value, tb);
+    PyErr_NormalizeException(type, value, tb);
+    if (PyErr_Occurred())
+        goto bad;
+    Py_INCREF(*type);
+    Py_INCREF(*value);
+    Py_INCREF(*tb);
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = *type;
+    tstate->exc_value = *value;
+    tstate->exc_traceback = *tb;
+    /* Make sure tstate is in a consistent state when we XDECREF
+    these objects (XDECREF may run arbitrary code). */
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+    return 0;
+bad:
+    Py_XDECREF(*type);
+    Py_XDECREF(*value);
+    Py_XDECREF(*tb);
+    return -1;
+}
+
+
 static void __Pyx_WriteUnraisable(const char *name) {
     PyObject *old_exc, *old_val, *old_tb;
     PyObject *ctx;
-    PyErr_Fetch(&old_exc, &old_val, &old_tb);
+    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
     #if PY_MAJOR_VERSION < 3
     ctx = PyString_FromString(name);
     #else
     ctx = PyUnicode_FromString(name);
     #endif
-    PyErr_Restore(old_exc, old_val, old_tb);
-    if (!ctx)
-        ctx = Py_None;
-    PyErr_WriteUnraisable(ctx);
+    __Pyx_ErrRestore(old_exc, old_val, old_tb);
+    if (!ctx) {
+        PyErr_WriteUnraisable(Py_None);
+    } else {
+        PyErr_WriteUnraisable(ctx);
+        Py_DECREF(ctx);
+    }
 }
 
 static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
@@ -2954,25 +6821,28 @@
 
 #ifndef __PYX_HAVE_RT_ImportType
 #define __PYX_HAVE_RT_ImportType
-static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name,
+static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
     long size)
 {
     PyObject *py_module = 0;
     PyObject *result = 0;
     PyObject *py_name = 0;
 
+    py_module = __Pyx_ImportModule(module_name);
+    if (!py_module)
+        goto bad;
     #if PY_MAJOR_VERSION < 3
-    py_name = PyString_FromString(module_name);
+    py_name = PyString_FromString(class_name);
     #else
-    py_name = PyUnicode_FromString(module_name);
+    py_name = PyUnicode_FromString(class_name);
     #endif
     if (!py_name)
         goto bad;
-
-    py_module = __Pyx_ImportModule(module_name);
-    if (!py_module)
-        goto bad;
-    result = PyObject_GetAttrString(py_module, class_name);
+    result = PyObject_GetAttr(py_module, py_name);
+    Py_DECREF(py_name);
+    py_name = 0;
+    Py_DECREF(py_module);
+    py_module = 0;
     if (!result)
         goto bad;
     if (!PyType_Check(result)) {
@@ -2989,7 +6859,7 @@
     }
     return (PyTypeObject *)result;
 bad:
-    Py_XDECREF(py_name);
+    Py_XDECREF(py_module);
     Py_XDECREF(result);
     return 0;
 }
@@ -2997,7 +6867,7 @@
 
 #ifndef __PYX_HAVE_RT_ImportModule
 #define __PYX_HAVE_RT_ImportModule
-static PyObject *__Pyx_ImportModule(char *name) {
+static PyObject *__Pyx_ImportModule(const char *name) {
     PyObject *py_name = 0;
     PyObject *py_module = 0;
 
@@ -3079,7 +6949,7 @@
     );
     if (!py_code) goto bad;
     py_frame = PyFrame_New(
-        PyThreadState_Get(), /*PyThreadState *tstate,*/
+        PyThreadState_GET(), /*PyThreadState *tstate,*/
         py_code,             /*PyCodeObject *code,*/
         py_globals,          /*PyObject *globals,*/
         0                    /*PyObject *locals*/

Modified: trunk/scipy/stats/vonmises_cython.c
===================================================================
--- trunk/scipy/stats/vonmises_cython.c	2008-11-10 12:36:01 UTC (rev 5037)
+++ trunk/scipy/stats/vonmises_cython.c	2008-11-10 13:20:36 UTC (rev 5038)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.9.8.1.1 on Thu Oct  9 03:26:22 2008 */
+/* Generated by Cython 0.10 on Mon Nov 10 22:16:41 2008 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -31,14 +31,15 @@
 
   typedef struct {
        void *buf;
+       PyObject *obj;
        Py_ssize_t len;
+       Py_ssize_t itemsize;
        int readonly;
-       const char *format;
        int ndim;
+       char *format;
        Py_ssize_t *shape;
        Py_ssize_t *strides;
        Py_ssize_t *suboffsets;
-       Py_ssize_t itemsize;
        void *internal;
   } Py_buffer;
 
@@ -63,6 +64,9 @@
   #define Py_TPFLAGS_CHECKTYPES 0
   #define Py_TPFLAGS_HAVE_INDEX 0
 #endif
+#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
+  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+#endif
 #if PY_MAJOR_VERSION >= 3
   #define PyBaseString_Type            PyUnicode_Type
   #define PyString_Type                PyBytes_Type
@@ -105,6 +109,7 @@
 #include <math.h>
 #define __PYX_HAVE_API__scipy__stats__vonmises_cython
 #include "math.h"
+#include "stdlib.h"
 #include "numpy/arrayobject.h"
 
 
@@ -175,39 +180,26 @@
 static const char * __pyx_cfilenm= __FILE__;
 static const char *__pyx_filename;
 static const char **__pyx_f;
-static INLINE void __Pyx_SafeReleaseBuffer(PyObject* obj, Py_buffer* info);
+
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name, PyObject* kw_name); /*proto*/
+
+static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
+    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
+
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*proto*/
+static INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info);
 static INLINE void __Pyx_ZeroBuffer(Py_buffer* buf); /*proto*/
 static INLINE const char* __Pyx_ConsumeWhitespace(const char* ts); /*proto*/
-static INLINE const char* __Pyx_BufferTypestringCheckEndian(const char* ts); /*proto*/
 static void __Pyx_BufferNdimError(Py_buffer* buffer, int expected_ndim); /*proto*/
-static const char* __Pyx_BufferTypestringCheck_item_double(const char* ts); /*proto*/
+static const char* __Pyx_DescribeTokenInFormatString(const char* ts); /*proto*/
+static const char* __Pyx_CheckTypestring_double(const char* ts); /*proto*/
 
-static int __Pyx_GetBuffer_double(PyObject* obj, Py_buffer* buf, int flags, int nd); /*proto*/
+static int __Pyx_GetBuffer_double(PyObject* obj, Py_buffer* buf, int flags, int nd, int cast); /*proto*/
 
 static void __Pyx_RaiseBufferFallbackError(void); /*proto*/
-#define __Pyx_BufPtrStrided1d(buf, i0, s0) ((char*)buf + i0 * s0)
+#define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0)
 
-static INLINE void __Pyx_RaiseArgtupleTooLong(Py_ssize_t num_expected, Py_ssize_t num_found); /*proto*/
-#if (PY_MAJOR_VERSION < 3) && !(Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_NEWBUFFER)
-static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
-static void __Pyx_ReleaseBuffer(PyObject *obj, Py_buffer *view);
-#else
-#define __Pyx_GetBuffer PyObject_GetBuffer
-#define __Pyx_ReleaseBuffer PyObject_ReleaseBuffer
-#endif
-
-Py_ssize_t __Pyx_zeros[] = {0};
-Py_ssize_t __Pyx_minusones[] = {-1};
-
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
-
-static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
-
-static PyObject *__Pyx_UnpackItem(PyObject *, Py_ssize_t index); /*proto*/
-static int __Pyx_EndUnpack(PyObject *); /*proto*/
-
-static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
-
 static INLINE PyObject *__Pyx_GetItemInt(PyObject *o, Py_ssize_t i, int is_unsigned) {
     PyObject *r;
     if (PyList_CheckExact(o) && 0 <= i && i < PyList_GET_SIZE(o)) {
@@ -230,13 +222,40 @@
     return r;
 }
 
+static INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+static INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
+#if PY_MAJOR_VERSION < 3
+static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
+static void __Pyx_ReleaseBuffer(Py_buffer *view);
+#else
+#define __Pyx_GetBuffer PyObject_GetBuffer
+#define __Pyx_ReleaseBuffer PyBuffer_Release
+#endif
+
+Py_ssize_t __Pyx_zeros[] = {0};
+Py_ssize_t __Pyx_minusones[] = {-1};
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
+
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
+
+static PyObject *__Pyx_UnpackItem(PyObject *, Py_ssize_t index); /*proto*/
+static int __Pyx_EndUnpack(PyObject *); /*proto*/
+
+static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
+
+static INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
+static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
 
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
+
 static void __Pyx_WriteUnraisable(const char *name); /*proto*/
 
-static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size);  /*proto*/
+static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, long size);  /*proto*/
 
-static PyObject *__Pyx_ImportModule(char *name); /*proto*/
+static PyObject *__Pyx_ImportModule(const char *name); /*proto*/
 
 static void __Pyx_AddTraceback(const char *funcname); /*proto*/
 
@@ -277,10 +296,21 @@
 typedef npy_double __pyx_t_5numpy_double_t;
 
 typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
+
+typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
+
+typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
+
+typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
+/* Module declarations from python_buffer */
+
+/* Module declarations from stdlib */
+
 /* Module declarations from numpy */
 
 /* Module declarations from numpy */
 
+static PyTypeObject *__pyx_ptype_5numpy_dtype = 0;
 static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
 /* Module declarations from cython */
 
@@ -296,20 +326,26 @@
 static PyObject *__pyx_int_16;
 static PyObject *__pyx_int_4;
 static PyObject *__pyx_int_0;
+static char __pyx_k_k[] = "k";
+static PyObject *__pyx_kp_k;
+static char __pyx_k_x[] = "x";
+static PyObject *__pyx_kp_x;
+static char __pyx_k_23[] = "C1";
+static PyObject *__pyx_kp_23;
 static char __pyx_k_numpy[] = "numpy";
 static PyObject *__pyx_kp_numpy;
 static char __pyx_k_np[] = "np";
 static PyObject *__pyx_kp_np;
-static char __pyx_k_17[] = "scipy.stats";
-static PyObject *__pyx_kp_17;
+static char __pyx_k_24[] = "scipy.stats";
+static PyObject *__pyx_kp_24;
 static char __pyx_k_scipy[] = "scipy";
 static PyObject *__pyx_kp_scipy;
-static char __pyx_k_18[] = "scipy.special";
-static PyObject *__pyx_kp_18;
+static char __pyx_k_25[] = "scipy.special";
+static PyObject *__pyx_kp_25;
 static char __pyx_k_i0[] = "i0";
 static PyObject *__pyx_kp_i0;
-static char __pyx_k_19[] = "numpy.testing";
-static PyObject *__pyx_kp_19;
+static char __pyx_k_26[] = "numpy.testing";
+static PyObject *__pyx_kp_26;
 static char __pyx_k_pi[] = "pi";
 static PyObject *__pyx_kp_pi;
 static char __pyx_k_sqrt[] = "sqrt";
@@ -328,8 +364,8 @@
 static PyObject *__pyx_kp_asarray;
 static char __pyx_k_ndim[] = "ndim";
 static PyObject *__pyx_kp_ndim;
-static char __pyx_k_20[] = "atleast_1d";
-static PyObject *__pyx_kp_20;
+static char __pyx_k_27[] = "atleast_1d";
+static PyObject *__pyx_kp_27;
 static char __pyx_k_round[] = "round";
 static PyObject *__pyx_kp_round;
 static char __pyx_k_broadcast_arrays[] = "broadcast_arrays";
@@ -344,36 +380,60 @@
 static PyObject *__pyx_kp_float;
 static char __pyx_k_astype[] = "astype";
 static PyObject *__pyx_kp_astype;
-static char __pyx_k_21[] = "von_mises_cdf_normalapprox";
-static PyObject *__pyx_kp_21;
+static char __pyx_k_28[] = "von_mises_cdf_normalapprox";
+static PyObject *__pyx_kp_28;
 static char __pyx_k___getbuffer__[] = "__getbuffer__";
 static PyObject *__pyx_kp___getbuffer__;
+static char __pyx_k___releasebuffer__[] = "__releasebuffer__";
+static PyObject *__pyx_kp___releasebuffer__;
+static char __pyx_k_info[] = "info";
+static PyObject *__pyx_kp_info;
+static char __pyx_k_flags[] = "flags";
+static PyObject *__pyx_kp_flags;
+static char __pyx_k_ValueError[] = "ValueError";
+static PyObject *__pyx_kp_ValueError;
+static char __pyx_k_iteritems[] = "iteritems";
+static PyObject *__pyx_kp_iteritems;
+static char __pyx_k_next[] = "next";
+static PyObject *__pyx_kp_next;
+static char __pyx_k_StopIteration[] = "StopIteration";
+static PyObject *__pyx_kp_StopIteration;
+static char __pyx_k_pop[] = "pop";
+static PyObject *__pyx_kp_pop;
 static char __pyx_k_RuntimeError[] = "RuntimeError";
 static PyObject *__pyx_kp_RuntimeError;
-static char __pyx_k_ValueError[] = "ValueError";
-static PyObject *__pyx_kp_ValueError;
 static PyObject *__pyx_kp_1;
-static PyObject *__pyx_kp_16;
+static PyObject *__pyx_kp_2;
+static PyObject *__pyx_kp_20;
+static PyObject *__pyx_kp_21;
+static PyObject *__pyx_kp_22;
+static PyObject *__pyx_builtin_ValueError;
+static PyObject *__pyx_builtin_StopIteration;
 static PyObject *__pyx_builtin_RuntimeError;
-static PyObject *__pyx_builtin_ValueError;
-static char __pyx_k_1[] = "Py_intptr_t and Py_ssize_t differs in size, numpy.pxd does not support this";
-static char __pyx_k_2[] = "b";
-static char __pyx_k_3[] = "B";
-static char __pyx_k_4[] = "h";
-static char __pyx_k_5[] = "H";
-static char __pyx_k_6[] = "i";
-static char __pyx_k_7[] = "I";
-static char __pyx_k_8[] = "l";
-static char __pyx_k_9[] = "L";
-static char __pyx_k_10[] = "q";
-static char __pyx_k_11[] = "Q";
-static char __pyx_k_12[] = "f";
-static char __pyx_k_13[] = "d";
-static char __pyx_k_14[] = "g";
-static char __pyx_k_15[] = "O";
-static char __pyx_k_16[] = "only objects, int and float dtypes supported for ndarray buffer access so far (dtype is %d)";
+static char __pyx_k_1[] = "ndarray is not C contiguous";
+static char __pyx_k_2[] = "ndarray is not Fortran contiguous";
+static char __pyx_k_3[] = "b";
+static char __pyx_k_4[] = "B";
+static char __pyx_k_5[] = "h";
+static char __pyx_k_6[] = "H";
+static char __pyx_k_7[] = "i";
+static char __pyx_k_8[] = "I";
+static char __pyx_k_9[] = "l";
+static char __pyx_k_10[] = "L";
+static char __pyx_k_11[] = "q";
+static char __pyx_k_12[] = "Q";
+static char __pyx_k_13[] = "f";
+static char __pyx_k_14[] = "d";
+static char __pyx_k_15[] = "g";
+static char __pyx_k_16[] = "Zf";
+static char __pyx_k_17[] = "Zd";
+static char __pyx_k_18[] = "Zg";
+static char __pyx_k_19[] = "O";
+static char __pyx_k_20[] = "unknown dtype code in numpy.pxd (%d)";
+static char __pyx_k_21[] = "Format string allocated too short.";
+static char __pyx_k_22[] = "unknown dtype code in numpy.pxd (%d)";
 
-/* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":12
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":12
  * 
  * 
  * cdef double von_mises_cdf_series(double k,double x,unsigned int p):             # <<<<<<<<<<<<<<
@@ -396,8 +456,11 @@
   PyObject *__pyx_4 = 0;
   PyObject *__pyx_5 = 0;
   PyObject *__pyx_6 = 0;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":15
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":15
  *     cdef double s, c, sn, cn, R, V
  *     cdef unsigned int n
  *     s = sin(x)             # <<<<<<<<<<<<<<
@@ -406,7 +469,7 @@
  */
   __pyx_v_s = sin(__pyx_v_x);
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":16
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":16
  *     cdef unsigned int n
  *     s = sin(x)
  *     c = cos(x)             # <<<<<<<<<<<<<<
@@ -415,7 +478,7 @@
  */
   __pyx_v_c = cos(__pyx_v_x);
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":17
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":17
  *     s = sin(x)
  *     c = cos(x)
  *     sn = sin(p*x)             # <<<<<<<<<<<<<<
@@ -424,7 +487,7 @@
  */
   __pyx_v_sn = sin((__pyx_v_p * __pyx_v_x));
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":18
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":18
  *     c = cos(x)
  *     sn = sin(p*x)
  *     cn = cos(p*x)             # <<<<<<<<<<<<<<
@@ -433,7 +496,7 @@
  */
   __pyx_v_cn = cos((__pyx_v_p * __pyx_v_x));
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":19
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":19
  *     sn = sin(p*x)
  *     cn = cos(p*x)
  *     R = 0             # <<<<<<<<<<<<<<
@@ -442,7 +505,7 @@
  */
   __pyx_v_R = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":20
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":20
  *     cn = cos(p*x)
  *     R = 0
  *     V = 0             # <<<<<<<<<<<<<<
@@ -451,7 +514,7 @@
  */
   __pyx_v_V = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":21
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":21
  *     R = 0
  *     V = 0
  *     for n in range(p-1,0,-1):             # <<<<<<<<<<<<<<
@@ -460,7 +523,7 @@
  */
   for (__pyx_v_n = (__pyx_v_p - 1); __pyx_v_n > 0; __pyx_v_n-=1) {
 
-    /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":22
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":22
  *     V = 0
  *     for n in range(p-1,0,-1):
  *         sn, cn = sn*c - cn*s, cn*c + sn*s             # <<<<<<<<<<<<<<
@@ -472,7 +535,7 @@
     __pyx_v_sn = __pyx_1;
     __pyx_v_cn = __pyx_2;
 
-    /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":23
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":23
  *     for n in range(p-1,0,-1):
  *         sn, cn = sn*c - cn*s, cn*c + sn*s
  *         R = 1./(2*n/k + R)             # <<<<<<<<<<<<<<
@@ -481,7 +544,7 @@
  */
     __pyx_v_R = (1. / (((2 * __pyx_v_n) / __pyx_v_k) + __pyx_v_R));
 
-    /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":24
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":24
  *         sn, cn = sn*c - cn*s, cn*c + sn*s
  *         R = 1./(2*n/k + R)
  *         V = R*(sn/n+V)             # <<<<<<<<<<<<<<
@@ -491,7 +554,7 @@
     __pyx_v_V = (__pyx_v_R * ((__pyx_v_sn / __pyx_v_n) + __pyx_v_V));
   }
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":26
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":26
  *         V = R*(sn/n+V)
  * 
  *     return 0.5+x/(2*np.pi) + V/np.pi             # <<<<<<<<<<<<<<
@@ -503,26 +566,26 @@
   __pyx_5 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_6 = PyObject_GetAttr(__pyx_5, __pyx_kp_pi); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_5); __pyx_5 = 0;
-  __pyx_5 = PyNumber_Multiply(__pyx_int_2, __pyx_6); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Multiply(__pyx_int_2, __pyx_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_6); __pyx_6 = 0;
-  __pyx_6 = __Pyx_PyNumber_Divide(__pyx_4, __pyx_5); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_4); __pyx_4 = 0;
-  Py_DECREF(__pyx_5); __pyx_5 = 0;
-  __pyx_4 = PyNumber_Add(__pyx_3, __pyx_6); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Add(__pyx_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_5 = PyFloat_FromDouble(__pyx_v_V); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_6 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = PyObject_GetAttr(__pyx_6, __pyx_kp_pi); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_6); __pyx_6 = 0;
-  __pyx_5 = PyFloat_FromDouble(__pyx_v_V); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_6 = PyObject_GetAttr(__pyx_3, __pyx_kp_pi); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  __pyx_3 = __Pyx_PyNumber_Divide(__pyx_5, __pyx_6); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_5, __pyx_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_5); __pyx_5 = 0;
-  Py_DECREF(__pyx_6); __pyx_6 = 0;
-  __pyx_5 = PyNumber_Add(__pyx_4, __pyx_3); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_4); __pyx_4 = 0;
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  __pyx_1 = __pyx_PyFloat_AsDouble(__pyx_5); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  Py_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_1 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_1;
   goto __pyx_L0;
 
@@ -539,7 +602,7 @@
   return __pyx_r;
 }
 
-/* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":28
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":28
  *     return 0.5+x/(2*np.pi) + V/np.pi
  * 
  * def von_mises_cdf_normalapprox(k,x,C1):             # <<<<<<<<<<<<<<
@@ -561,29 +624,68 @@
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
   PyObject *__pyx_4 = 0;
-  PyObject *__pyx_5 = 0;
-  PyObject *__pyx_6 = 0;
-  static char *__pyx_argnames[] = {"k","x","C1",0};
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_k,&__pyx_kp_x,&__pyx_kp_23,0};
   __pyx_self = __pyx_self;
-  if (likely(!__pyx_kwds) && likely(PyTuple_GET_SIZE(__pyx_args) == 3)) {
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[3] = {0,0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_k);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_kp_x);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("von_mises_cdf_normalapprox", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+      case  2:
+      values[2] = PyDict_GetItem(__pyx_kwds, __pyx_kp_23);
+      if (likely(values[2])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("von_mises_cdf_normalapprox", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "von_mises_cdf_normalapprox") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_k = values[0];
+    __pyx_v_x = values[1];
+    __pyx_v_C1 = values[2];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+    goto __pyx_L5_argtuple_error;
+  } else {
     __pyx_v_k = PyTuple_GET_ITEM(__pyx_args, 0);
     __pyx_v_x = PyTuple_GET_ITEM(__pyx_args, 1);
     __pyx_v_C1 = PyTuple_GET_ITEM(__pyx_args, 2);
   }
-  else {
-    if (unlikely(!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OOO", __pyx_argnames, &__pyx_v_k, &__pyx_v_x, &__pyx_v_C1))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4;
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("von_mises_cdf_normalapprox", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("scipy.stats.vonmises_cython.von_mises_cdf_normalapprox");
   return NULL;
-  __pyx_L4:;
+  __pyx_L4_argument_unpacking_done:;
   __pyx_v_b = Py_None; Py_INCREF(Py_None);
   __pyx_v_z = Py_None; Py_INCREF(Py_None);
   __pyx_v_C = Py_None; Py_INCREF(Py_None);
   __pyx_v_chi = Py_None; Py_INCREF(Py_None);
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":29
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":29
  * 
  * def von_mises_cdf_normalapprox(k,x,C1):
  *     b = np.sqrt(2/np.pi)*np.exp(k)/i0(k)             # <<<<<<<<<<<<<<
@@ -596,155 +698,155 @@
   __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_3 = PyObject_GetAttr(__pyx_1, __pyx_kp_pi); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = __Pyx_PyNumber_Divide(__pyx_int_2, __pyx_3); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_int_2, __pyx_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
-  __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
-  __pyx_1 = 0;
-  __pyx_1 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_t_1);
+  __pyx_t_1 = 0;
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
   __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_exp); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_exp); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_INCREF(__pyx_v_k);
   PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_k);
-  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_t_1 = PyNumber_Multiply(__pyx_3, __pyx_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
-  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-  __pyx_3 = PyNumber_Multiply(__pyx_1, __pyx_4); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
   Py_DECREF(__pyx_4); __pyx_4 = 0;
-  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_i0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_i0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_INCREF(__pyx_v_k);
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_k);
-  __pyx_4 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_2 = __Pyx_PyNumber_Divide(__pyx_3, __pyx_4); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_v_k);
+  __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 29; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   Py_DECREF(__pyx_3); __pyx_3 = 0;
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
   Py_DECREF(__pyx_v_b);
-  __pyx_v_b = __pyx_2;
-  __pyx_2 = 0;
+  __pyx_v_b = __pyx_t_2;
+  __pyx_t_2 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":30
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":30
  * def von_mises_cdf_normalapprox(k,x,C1):
  *     b = np.sqrt(2/np.pi)*np.exp(k)/i0(k)
  *     z = b*np.sin(x/2.)             # <<<<<<<<<<<<<<
  *     C = 24*k
  *     chi = z - z**3/((C-2*z**2-16)/3.-(z**4+7/4.*z**2+167./2)/(C+C1-z**2+3))**2
  */
-  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyObject_GetAttr(__pyx_1, __pyx_kp_sin); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyObject_GetAttr(__pyx_4, __pyx_kp_sin); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  __pyx_2 = PyFloat_FromDouble(2.); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_x, __pyx_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_t_2);
+  __pyx_t_2 = 0;
+  __pyx_4 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_4 = PyFloat_FromDouble(2.); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = __Pyx_PyNumber_Divide(__pyx_v_x, __pyx_4); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  __pyx_t_2 = PyNumber_Multiply(__pyx_v_b, __pyx_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_4); __pyx_4 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
-  __pyx_2 = 0;
-  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
-  __pyx_2 = PyNumber_Multiply(__pyx_v_b, __pyx_4); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
   Py_DECREF(__pyx_v_z);
-  __pyx_v_z = __pyx_2;
-  __pyx_2 = 0;
+  __pyx_v_z = __pyx_t_2;
+  __pyx_t_2 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":31
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":31
  *     b = np.sqrt(2/np.pi)*np.exp(k)/i0(k)
  *     z = b*np.sin(x/2.)
  *     C = 24*k             # <<<<<<<<<<<<<<
  *     chi = z - z**3/((C-2*z**2-16)/3.-(z**4+7/4.*z**2+167./2)/(C+C1-z**2+3))**2
  *     return scipy.stats.norm.cdf(z)
  */
-  __pyx_3 = PyNumber_Multiply(__pyx_int_24, __pyx_v_k); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Multiply(__pyx_int_24, __pyx_v_k); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_v_C);
-  __pyx_v_C = __pyx_3;
-  __pyx_3 = 0;
+  __pyx_v_C = __pyx_t_2;
+  __pyx_t_2 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":32
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":32
  *     z = b*np.sin(x/2.)
  *     C = 24*k
  *     chi = z - z**3/((C-2*z**2-16)/3.-(z**4+7/4.*z**2+167./2)/(C+C1-z**2+3))**2             # <<<<<<<<<<<<<<
  *     return scipy.stats.norm.cdf(z)
  * 
  */
-  __pyx_1 = PyNumber_Power(__pyx_v_z, __pyx_int_3, Py_None); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_4 = PyNumber_Power(__pyx_v_z, __pyx_int_2, Py_None); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyNumber_Multiply(__pyx_int_2, __pyx_4); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
-  __pyx_3 = PyNumber_Subtract(__pyx_v_C, __pyx_2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_4 = PyNumber_Subtract(__pyx_3, __pyx_int_16); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  __pyx_t_2 = PyNumber_Power(__pyx_v_z, __pyx_int_3, Py_None); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Power(__pyx_v_z, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Multiply(__pyx_int_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyNumber_Subtract(__pyx_v_C, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_int_16); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_2 = PyFloat_FromDouble(3.); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = __Pyx_PyNumber_Divide(__pyx_4, __pyx_2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_4 = PyNumber_Power(__pyx_v_z, __pyx_int_4, Py_None); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyFloat_FromDouble((7 / 4.)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_5 = PyNumber_Power(__pyx_v_z, __pyx_int_2, Py_None); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_6 = PyNumber_Multiply(__pyx_2, __pyx_5); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(__pyx_5); __pyx_5 = 0;
-  __pyx_2 = PyNumber_Add(__pyx_4, __pyx_6); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
-  Py_DECREF(__pyx_6); __pyx_6 = 0;
-  __pyx_5 = PyFloat_FromDouble((167. / 2)); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_4 = PyNumber_Add(__pyx_2, __pyx_5); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(__pyx_5); __pyx_5 = 0;
-  __pyx_6 = PyNumber_Add(__pyx_v_C, __pyx_v_C1); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyNumber_Power(__pyx_v_z, __pyx_int_2, Py_None); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_5 = PyNumber_Subtract(__pyx_6, __pyx_2); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_6); __pyx_6 = 0;
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_6 = PyNumber_Add(__pyx_5, __pyx_int_3); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_5); __pyx_5 = 0;
-  __pyx_2 = __Pyx_PyNumber_Divide(__pyx_4, __pyx_6); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
-  Py_DECREF(__pyx_6); __pyx_6 = 0;
-  __pyx_5 = PyNumber_Subtract(__pyx_3, __pyx_2); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Power(__pyx_v_z, __pyx_int_4, Py_None); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyFloat_FromDouble((7 / 4.)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyNumber_Power(__pyx_v_z, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyNumber_Multiply(__pyx_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  Py_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  Py_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_3 = PyFloat_FromDouble((167. / 2)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyNumber_Add(__pyx_t_4, __pyx_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   Py_DECREF(__pyx_3); __pyx_3 = 0;
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_4 = PyNumber_Power(__pyx_5, __pyx_int_2, Py_None); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_5); __pyx_5 = 0;
-  __pyx_6 = __Pyx_PyNumber_Divide(__pyx_1, __pyx_4); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
-  __pyx_3 = PyNumber_Subtract(__pyx_v_z, __pyx_6); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_6); __pyx_6 = 0;
+  __pyx_t_4 = PyNumber_Add(__pyx_v_C, __pyx_v_C1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Power(__pyx_v_z, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyNumber_Subtract(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  Py_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyNumber_Add(__pyx_t_6, __pyx_int_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  Py_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  Py_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = PyNumber_Power(__pyx_t_3, __pyx_int_2, Py_None); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  Py_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  __pyx_t_6 = PyNumber_Subtract(__pyx_v_z, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   Py_DECREF(__pyx_v_chi);
-  __pyx_v_chi = __pyx_3;
-  __pyx_3 = 0;
+  __pyx_v_chi = __pyx_t_6;
+  __pyx_t_6 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":33
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":33
  *     C = 24*k
  *     chi = z - z**3/((C-2*z**2-16)/3.-(z**4+7/4.*z**2+167./2)/(C+C1-z**2+3))**2
  *     return scipy.stats.norm.cdf(z)             # <<<<<<<<<<<<<<
  * 
  * cimport cython
  */
-  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_scipy); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_5 = PyObject_GetAttr(__pyx_2, __pyx_kp_stats); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_kp_scipy); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_kp_stats); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_norm); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_1 = PyObject_GetAttr(__pyx_5, __pyx_kp_norm); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_5); __pyx_5 = 0;
-  __pyx_4 = PyObject_GetAttr(__pyx_1, __pyx_kp_cdf); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_1, __pyx_kp_cdf); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_6 = PyTuple_New(1); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_INCREF(__pyx_v_z);
-  PyTuple_SET_ITEM(__pyx_6, 0, __pyx_v_z);
-  __pyx_3 = PyObject_Call(__pyx_4, ((PyObject *)__pyx_6), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_4); __pyx_4 = 0;
-  Py_DECREF(((PyObject *)__pyx_6)); __pyx_6 = 0;
-  __pyx_r = __pyx_3;
-  __pyx_3 = 0;
+  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_z);
+  __pyx_2 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+  __pyx_r = __pyx_2;
+  __pyx_2 = 0;
   goto __pyx_L0;
 
   __pyx_r = Py_None; Py_INCREF(Py_None);
@@ -754,8 +856,6 @@
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
   Py_XDECREF(__pyx_4);
-  Py_XDECREF(__pyx_5);
-  Py_XDECREF(__pyx_6);
   __Pyx_AddTraceback("scipy.stats.vonmises_cython.von_mises_cdf_normalapprox");
   __pyx_r = NULL;
   __pyx_L0:;
@@ -766,7 +866,7 @@
   return __pyx_r;
 }
 
-/* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":37
+/* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":37
  * cimport cython
  * @cython.boundscheck(False)
  * def von_mises_cdf(k,x):             # <<<<<<<<<<<<<<
@@ -817,10 +917,10 @@
   PyObject *__pyx_10 = 0;
   Py_ssize_t __pyx_11 = 0;
   int __pyx_12;
-  PyArrayObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyArrayObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
   unsigned int __pyx_t_6;
   unsigned int __pyx_t_7;
@@ -831,36 +931,63 @@
   unsigned int __pyx_t_12;
   unsigned int __pyx_t_13;
   unsigned int __pyx_t_14;
-  static char *__pyx_argnames[] = {"k","x",0};
+  static PyObject **__pyx_pyargnames[] = {&__pyx_kp_k,&__pyx_kp_x,0};
   __pyx_self = __pyx_self;
-  if (likely(!__pyx_kwds) && likely(PyTuple_GET_SIZE(__pyx_args) == 2)) {
+  if (unlikely(__pyx_kwds)) {
+    PyObject* values[2] = {0,0};
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_kp_k);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_kp_x);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("von_mises_cdf", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "von_mises_cdf") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_k = values[0];
+    __pyx_v_x = values[1];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    goto __pyx_L5_argtuple_error;
+  } else {
     __pyx_v_k = PyTuple_GET_ITEM(__pyx_args, 0);
     __pyx_v_x = PyTuple_GET_ITEM(__pyx_args, 1);
   }
-  else {
-    if (unlikely(!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_k, &__pyx_v_x))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  }
-  goto __pyx_L4;
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("von_mises_cdf", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("scipy.stats.vonmises_cython.von_mises_cdf");
   return NULL;
-  __pyx_L4:;
+  __pyx_L4_argument_unpacking_done:;
   Py_INCREF(__pyx_v_k);
   Py_INCREF(__pyx_v_x);
   __pyx_v_temp = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
-  __pyx_bstruct_temp.buf = NULL;
   __pyx_v_temp_xs = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
-  __pyx_bstruct_temp_xs.buf = NULL;
   __pyx_v_temp_ks = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
-  __pyx_bstruct_temp_ks.buf = NULL;
   __pyx_v_zerodim = Py_None; Py_INCREF(Py_None);
   __pyx_v_ix = Py_None; Py_INCREF(Py_None);
   __pyx_v_bx = Py_None; Py_INCREF(Py_None);
   __pyx_v_bk = Py_None; Py_INCREF(Py_None);
   __pyx_v_result = Py_None; Py_INCREF(Py_None);
   __pyx_v_c_small_k = Py_None; Py_INCREF(Py_None);
+  __pyx_bstruct_temp.buf = NULL;
+  __pyx_bstruct_temp_xs.buf = NULL;
+  __pyx_bstruct_temp_ks.buf = NULL;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":42
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":42
  *     cdef double a1, a2, a3, a4, C1, CK
  *     #k,x = np.broadcast_arrays(np.asarray(k),np.asarray(x))
  *     k = np.asarray(k)             # <<<<<<<<<<<<<<
@@ -880,7 +1007,7 @@
   __pyx_v_k = __pyx_3;
   __pyx_3 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":43
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":43
  *     #k,x = np.broadcast_arrays(np.asarray(k),np.asarray(x))
  *     k = np.asarray(k)
  *     x = np.asarray(x)             # <<<<<<<<<<<<<<
@@ -900,7 +1027,7 @@
   __pyx_v_x = __pyx_2;
   __pyx_2 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":44
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":44
  *     k = np.asarray(k)
  *     x = np.asarray(x)
  *     zerodim = k.ndim==0 and x.ndim==0             # <<<<<<<<<<<<<<
@@ -921,7 +1048,7 @@
   __pyx_v_zerodim = __pyx_1;
   __pyx_1 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":46
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":46
  *     zerodim = k.ndim==0 and x.ndim==0
  * 
  *     k = np.atleast_1d(k)             # <<<<<<<<<<<<<<
@@ -929,7 +1056,7 @@
  *     ix = np.round(x/(2*np.pi))
  */
   __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_kp_20); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_kp_27); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_INCREF(__pyx_v_k);
@@ -941,7 +1068,7 @@
   __pyx_v_k = __pyx_3;
   __pyx_3 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":47
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":47
  * 
  *     k = np.atleast_1d(k)
  *     x = np.atleast_1d(x)             # <<<<<<<<<<<<<<
@@ -949,7 +1076,7 @@
  *     x = x-ix
  */
   __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_20); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_27); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
   __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_INCREF(__pyx_v_x);
@@ -961,7 +1088,7 @@
   __pyx_v_x = __pyx_2;
   __pyx_2 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":48
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":48
  *     k = np.atleast_1d(k)
  *     x = np.atleast_1d(x)
  *     ix = np.round(x/(2*np.pi))             # <<<<<<<<<<<<<<
@@ -974,13 +1101,13 @@
   __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_pi); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_2 = PyNumber_Multiply(__pyx_int_2, __pyx_1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Multiply(__pyx_int_2, __pyx_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_1 = __Pyx_PyNumber_Divide(__pyx_v_x, __pyx_2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_v_x, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
-  __pyx_1 = 0;
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_t_2);
+  __pyx_t_2 = 0;
   __pyx_1 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 48; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_3); __pyx_3 = 0;
   Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
@@ -988,19 +1115,19 @@
   __pyx_v_ix = __pyx_1;
   __pyx_1 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":49
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":49
  *     x = np.atleast_1d(x)
  *     ix = np.round(x/(2*np.pi))
  *     x = x-ix             # <<<<<<<<<<<<<<
  * 
  *     # These values should give 12 decimal digits
  */
-  __pyx_3 = PyNumber_Subtract(__pyx_v_x, __pyx_v_ix); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Subtract(__pyx_v_x, __pyx_v_ix); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_v_x);
-  __pyx_v_x = __pyx_3;
-  __pyx_3 = 0;
+  __pyx_v_x = __pyx_t_2;
+  __pyx_t_2 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":52
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":52
  * 
  *     # These values should give 12 decimal digits
  *     CK=50             # <<<<<<<<<<<<<<
@@ -1009,7 +1136,7 @@
  */
   __pyx_v_CK = 50;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":53
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":53
  *     # These values should give 12 decimal digits
  *     CK=50
  *     a1, a2, a3, a4 = [28., 0.5, 100., 5.0]             # <<<<<<<<<<<<<<
@@ -1025,7 +1152,7 @@
   __pyx_v_a3 = __pyx_7;
   __pyx_v_a4 = __pyx_8;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":54
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":54
  *     CK=50
  *     a1, a2, a3, a4 = [28., 0.5, 100., 5.0]
  *     C1 = 50.1             # <<<<<<<<<<<<<<
@@ -1034,82 +1161,82 @@
  */
   __pyx_v_C1 = 50.1;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":56
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":56
  *     C1 = 50.1
  * 
  *     bx, bk = np.broadcast_arrays(x,k)             # <<<<<<<<<<<<<<
  *     result = np.empty(bx.shape,dtype=np.float)
  * 
  */
-  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_broadcast_arrays); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_kp_broadcast_arrays); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  __pyx_1 = PyTuple_New(2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_INCREF(__pyx_v_x);
-  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_x);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_v_x);
   Py_INCREF(__pyx_v_k);
-  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_k);
-  __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
-  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-  if (PyTuple_CheckExact(__pyx_2) && PyTuple_GET_SIZE(__pyx_2) == 2) {
-    PyObject* tuple = __pyx_2;
-    __pyx_3 = PyTuple_GET_ITEM(tuple, 0);
-    Py_INCREF(__pyx_3);
+  PyTuple_SET_ITEM(__pyx_1, 1, __pyx_v_k);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (PyTuple_CheckExact(__pyx_3) && PyTuple_GET_SIZE(__pyx_3) == 2) {
+    PyObject* tuple = __pyx_3;
+    __pyx_1 = PyTuple_GET_ITEM(tuple, 0);
+    Py_INCREF(__pyx_1);
     Py_DECREF(__pyx_v_bx);
-    __pyx_v_bx = __pyx_3;
-    __pyx_3 = 0;
-    __pyx_3 = PyTuple_GET_ITEM(tuple, 1);
-    Py_INCREF(__pyx_3);
+    __pyx_v_bx = __pyx_1;
+    __pyx_1 = 0;
+    __pyx_1 = PyTuple_GET_ITEM(tuple, 1);
+    Py_INCREF(__pyx_1);
     Py_DECREF(__pyx_v_bk);
-    __pyx_v_bk = __pyx_3;
-    __pyx_3 = 0;
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_v_bk = __pyx_1;
+    __pyx_1 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
   }
   else {
-    __pyx_1 = PyObject_GetIter(__pyx_2); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = __Pyx_UnpackItem(__pyx_1, 0); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetIter(__pyx_3); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_1 = __Pyx_UnpackItem(__pyx_2, 0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_v_bx);
-    __pyx_v_bx = __pyx_3;
-    __pyx_3 = 0;
-    __pyx_3 = __Pyx_UnpackItem(__pyx_1, 1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_bx = __pyx_1;
+    __pyx_1 = 0;
+    __pyx_1 = __Pyx_UnpackItem(__pyx_2, 1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_v_bk);
-    __pyx_v_bk = __pyx_3;
-    __pyx_3 = 0;
-    if (__Pyx_EndUnpack(__pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    __pyx_v_bk = __pyx_1;
+    __pyx_1 = 0;
+    if (__Pyx_EndUnpack(__pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
   }
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":57
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":57
  * 
  *     bx, bk = np.broadcast_arrays(x,k)
  *     result = np.empty(bx.shape,dtype=np.float)             # <<<<<<<<<<<<<<
  * 
  *     c_small_k = bk<CK
  */
-  __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_3, __pyx_kp_empty); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
-  __pyx_1 = PyObject_GetAttr(__pyx_v_bx, __pyx_kp_shape); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_1);
-  __pyx_1 = 0;
-  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_1, __pyx_kp_empty); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_2 = PyObject_GetAttr(__pyx_v_bx, __pyx_kp_shape); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
+  __pyx_2 = 0;
+  __pyx_2 = PyDict_New(); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_9 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_10 = PyObject_GetAttr(__pyx_9, __pyx_kp_float); if (unlikely(!__pyx_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_9); __pyx_9 = 0;
-  if (PyDict_SetItem(__pyx_1, __pyx_kp_dtype, __pyx_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_2, __pyx_kp_dtype, __pyx_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_10); __pyx_10 = 0;
-  __pyx_9 = PyEval_CallObjectWithKeywords(__pyx_2, ((PyObject *)__pyx_3), ((PyObject *)__pyx_1)); if (unlikely(!__pyx_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  __pyx_9 = PyEval_CallObjectWithKeywords(__pyx_3, ((PyObject *)__pyx_1), ((PyObject *)__pyx_2)); if (unlikely(!__pyx_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
   Py_DECREF(__pyx_v_result);
   __pyx_v_result = __pyx_9;
   __pyx_9 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":59
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":59
  *     result = np.empty(bx.shape,dtype=np.float)
  * 
  *     c_small_k = bk<CK             # <<<<<<<<<<<<<<
@@ -1117,84 +1244,84 @@
  *     temp_xs = bx[c_small_k].astype(np.float)
  */
   __pyx_10 = PyFloat_FromDouble(__pyx_v_CK); if (unlikely(!__pyx_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_RichCompare(__pyx_v_bk, __pyx_10, Py_LT); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_RichCompare(__pyx_v_bk, __pyx_10, Py_LT); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_10); __pyx_10 = 0;
   Py_DECREF(__pyx_v_c_small_k);
-  __pyx_v_c_small_k = __pyx_2;
-  __pyx_2 = 0;
+  __pyx_v_c_small_k = __pyx_3;
+  __pyx_3 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":60
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":60
  * 
  *     c_small_k = bk<CK
  *     temp = result[c_small_k]             # <<<<<<<<<<<<<<
  *     temp_xs = bx[c_small_k].astype(np.float)
  *     temp_ks = bk[c_small_k].astype(np.float)
  */
-  __pyx_3 = PyObject_GetItem(__pyx_v_result, __pyx_v_c_small_k); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (!(__Pyx_TypeTest(__pyx_3, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = ((PyArrayObject *)__pyx_3);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_temp, &__pyx_bstruct_temp);
-  __pyx_t_2 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_1, &__pyx_bstruct_temp, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1);
-  if (unlikely(__pyx_t_2 < 0)) 
+  __pyx_1 = PyObject_GetItem(__pyx_v_result, __pyx_v_c_small_k); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(__Pyx_TypeTest(__pyx_1, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyArrayObject *)__pyx_1);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_temp);
+  __pyx_t_4 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_3, &__pyx_bstruct_temp, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0);
+  if (unlikely(__pyx_t_4 < 0)) 
   {
-      PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
-      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_temp, &__pyx_bstruct_temp, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1) == -1)) {
-          Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5);
+      PyErr_Fetch(&__pyx_t_2, &__pyx_t_1, &__pyx_t_5);
+      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_temp, &__pyx_bstruct_temp, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0) == -1)) {
+          Py_XDECREF(__pyx_t_2); Py_XDECREF(__pyx_t_1); Py_XDECREF(__pyx_t_5);
           __Pyx_RaiseBufferFallbackError();
         } else {
-          PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+          PyErr_Restore(__pyx_t_2, __pyx_t_1, __pyx_t_5);
       }
   }
   __pyx_bstride_0_temp = __pyx_bstruct_temp.strides[0];
   __pyx_bshape_0_temp = __pyx_bstruct_temp.shape[0];
-  if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = 0;
+  if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = 0;
   Py_DECREF(((PyObject *)__pyx_v_temp));
-  __pyx_v_temp = ((PyArrayObject *)__pyx_3);
-  __pyx_3 = 0;
+  __pyx_v_temp = ((PyArrayObject *)__pyx_1);
+  __pyx_1 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":61
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":61
  *     c_small_k = bk<CK
  *     temp = result[c_small_k]
  *     temp_xs = bx[c_small_k].astype(np.float)             # <<<<<<<<<<<<<<
  *     temp_ks = bk[c_small_k].astype(np.float)
  *     for i in range(len(temp)):
  */
-  __pyx_1 = PyObject_GetItem(__pyx_v_bx, __pyx_v_c_small_k); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_9 = PyObject_GetAttr(__pyx_1, __pyx_kp_astype); if (unlikely(!__pyx_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_2 = PyObject_GetItem(__pyx_v_bx, __pyx_v_c_small_k); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_9 = PyObject_GetAttr(__pyx_2, __pyx_kp_astype); if (unlikely(!__pyx_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
   __pyx_10 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_10, __pyx_kp_float); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_10, __pyx_kp_float); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_10); __pyx_10 = 0;
-  __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
-  __pyx_2 = 0;
-  __pyx_1 = PyObject_Call(__pyx_9, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_3);
+  __pyx_3 = 0;
+  __pyx_2 = PyObject_Call(__pyx_9, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_9); __pyx_9 = 0;
-  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
-  if (!(__Pyx_TypeTest(__pyx_1, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = ((PyArrayObject *)__pyx_1);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_temp_xs, &__pyx_bstruct_temp_xs);
-  __pyx_t_2 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_1, &__pyx_bstruct_temp_xs, PyBUF_FORMAT| PyBUF_STRIDES, 1);
-  if (unlikely(__pyx_t_2 < 0)) 
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  if (!(__Pyx_TypeTest(__pyx_2, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyArrayObject *)__pyx_2);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_temp_xs);
+  __pyx_t_4 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_3, &__pyx_bstruct_temp_xs, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0);
+  if (unlikely(__pyx_t_4 < 0)) 
   {
-      PyErr_Fetch(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3);
-      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_temp_xs, &__pyx_bstruct_temp_xs, PyBUF_FORMAT| PyBUF_STRIDES, 1) == -1)) {
-          Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_3);
+      PyErr_Fetch(&__pyx_t_5, &__pyx_t_1, &__pyx_t_2);
+      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_temp_xs, &__pyx_bstruct_temp_xs, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0) == -1)) {
+          Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_1); Py_XDECREF(__pyx_t_2);
           __Pyx_RaiseBufferFallbackError();
         } else {
-          PyErr_Restore(__pyx_t_5, __pyx_t_4, __pyx_t_3);
+          PyErr_Restore(__pyx_t_5, __pyx_t_1, __pyx_t_2);
       }
   }
   __pyx_bstride_0_temp_xs = __pyx_bstruct_temp_xs.strides[0];
   __pyx_bshape_0_temp_xs = __pyx_bstruct_temp_xs.shape[0];
-  if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = 0;
+  if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = 0;
   Py_DECREF(((PyObject *)__pyx_v_temp_xs));
-  __pyx_v_temp_xs = ((PyArrayObject *)__pyx_1);
-  __pyx_1 = 0;
+  __pyx_v_temp_xs = ((PyArrayObject *)__pyx_2);
+  __pyx_2 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":62
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":62
  *     temp = result[c_small_k]
  *     temp_xs = bx[c_small_k].astype(np.float)
  *     temp_ks = bk[c_small_k].astype(np.float)             # <<<<<<<<<<<<<<
@@ -1202,40 +1329,40 @@
  *         p = <int>(1+a1+a2*temp_ks[i]-a3/(temp_ks[i]+a4))
  */
   __pyx_10 = PyObject_GetItem(__pyx_v_bk, __pyx_v_c_small_k); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetAttr(__pyx_10, __pyx_kp_astype); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_10, __pyx_kp_astype); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_10); __pyx_10 = 0;
   __pyx_9 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyObject_GetAttr(__pyx_9, __pyx_kp_float); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = PyObject_GetAttr(__pyx_9, __pyx_kp_float); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_9); __pyx_9 = 0;
-  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_3);
-  __pyx_3 = 0;
-  __pyx_10 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_10 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
   if (!(__Pyx_TypeTest(__pyx_10, __pyx_ptype_5numpy_ndarray))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = ((PyArrayObject *)__pyx_10);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_temp_ks, &__pyx_bstruct_temp_ks);
-  __pyx_t_2 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_1, &__pyx_bstruct_temp_ks, PyBUF_FORMAT| PyBUF_STRIDES, 1);
-  if (unlikely(__pyx_t_2 < 0)) 
+  __pyx_t_3 = ((PyArrayObject *)__pyx_10);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_temp_ks);
+  __pyx_t_4 = __Pyx_GetBuffer_double((PyObject*)__pyx_t_3, &__pyx_bstruct_temp_ks, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0);
+  if (unlikely(__pyx_t_4 < 0)) 
   {
-      PyErr_Fetch(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
-      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_temp_ks, &__pyx_bstruct_temp_ks, PyBUF_FORMAT| PyBUF_STRIDES, 1) == -1)) {
-          Py_XDECREF(__pyx_t_3); Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5);
+      PyErr_Fetch(&__pyx_t_2, &__pyx_t_1, &__pyx_t_5);
+      if (unlikely(__Pyx_GetBuffer_double((PyObject*)__pyx_v_temp_ks, &__pyx_bstruct_temp_ks, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0) == -1)) {
+          Py_XDECREF(__pyx_t_2); Py_XDECREF(__pyx_t_1); Py_XDECREF(__pyx_t_5);
           __Pyx_RaiseBufferFallbackError();
         } else {
-          PyErr_Restore(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+          PyErr_Restore(__pyx_t_2, __pyx_t_1, __pyx_t_5);
       }
   }
   __pyx_bstride_0_temp_ks = __pyx_bstruct_temp_ks.strides[0];
   __pyx_bshape_0_temp_ks = __pyx_bstruct_temp_ks.shape[0];
-  if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_1 = 0;
+  if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = 0;
   Py_DECREF(((PyObject *)__pyx_v_temp_ks));
   __pyx_v_temp_ks = ((PyArrayObject *)__pyx_10);
   __pyx_10 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":63
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":63
  *     temp_xs = bx[c_small_k].astype(np.float)
  *     temp_ks = bk[c_small_k].astype(np.float)
  *     for i in range(len(temp)):             # <<<<<<<<<<<<<<
@@ -1245,7 +1372,7 @@
   __pyx_11 = PyObject_Length(((PyObject *)__pyx_v_temp)); if (unlikely(__pyx_11 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_11; __pyx_v_i+=1) {
 
-    /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":64
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":64
  *     temp_ks = bk[c_small_k].astype(np.float)
  *     for i in range(len(temp)):
  *         p = <int>(1+a1+a2*temp_ks[i]-a3/(temp_ks[i]+a4))             # <<<<<<<<<<<<<<
@@ -1253,12 +1380,10 @@
  *         if temp[i]<0:
  */
     __pyx_t_6 = __pyx_v_i;
-    __pyx_5 = *((double *)((double *)__Pyx_BufPtrStrided1d(__pyx_bstruct_temp_ks.buf, __pyx_t_6, __pyx_bstride_0_temp_ks)));
     __pyx_t_7 = __pyx_v_i;
-    __pyx_6 = *((double *)((double *)__Pyx_BufPtrStrided1d(__pyx_bstruct_temp_ks.buf, __pyx_t_7, __pyx_bstride_0_temp_ks)));
-    __pyx_v_p = ((int)(((1 + __pyx_v_a1) + (__pyx_v_a2 * __pyx_5)) - (__pyx_v_a3 / (__pyx_6 + __pyx_v_a4))));
+    __pyx_v_p = ((int)(((1 + __pyx_v_a1) + (__pyx_v_a2 * (*__Pyx_BufPtrStrided1d(double *, __pyx_bstruct_temp_ks.buf, __pyx_t_6, __pyx_bstride_0_temp_ks)))) - (__pyx_v_a3 / ((*__Pyx_BufPtrStrided1d(double *, __pyx_bstruct_temp_ks.buf, __pyx_t_7, __pyx_bstride_0_temp_ks)) + __pyx_v_a4))));
 
-    /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":65
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":65
  *     for i in range(len(temp)):
  *         p = <int>(1+a1+a2*temp_ks[i]-a3/(temp_ks[i]+a4))
  *         temp[i] = von_mises_cdf_series(temp_ks[i],temp_xs[i],p)             # <<<<<<<<<<<<<<
@@ -1266,13 +1391,11 @@
  *             temp[i]=0
  */
     __pyx_t_8 = __pyx_v_i;
-    __pyx_7 = *((double *)((double *)__Pyx_BufPtrStrided1d(__pyx_bstruct_temp_ks.buf, __pyx_t_8, __pyx_bstride_0_temp_ks)));
     __pyx_t_9 = __pyx_v_i;
-    __pyx_8 = *((double *)((double *)__Pyx_BufPtrStrided1d(__pyx_bstruct_temp_xs.buf, __pyx_t_9, __pyx_bstride_0_temp_xs)));
     __pyx_t_10 = __pyx_v_i;
-    *((double *)__Pyx_BufPtrStrided1d(__pyx_bstruct_temp.buf, __pyx_t_10, __pyx_bstride_0_temp)) = __pyx_f_5scipy_5stats_15vonmises_cython_von_mises_cdf_series(__pyx_7, __pyx_8, __pyx_v_p);
+    *__Pyx_BufPtrStrided1d(double *, __pyx_bstruct_temp.buf, __pyx_t_10, __pyx_bstride_0_temp) = __pyx_f_5scipy_5stats_15vonmises_cython_von_mises_cdf_series((*__Pyx_BufPtrStrided1d(double *, __pyx_bstruct_temp_ks.buf, __pyx_t_8, __pyx_bstride_0_temp_ks)), (*__Pyx_BufPtrStrided1d(double *, __pyx_bstruct_temp_xs.buf, __pyx_t_9, __pyx_bstride_0_temp_xs)), __pyx_v_p);
 
-    /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":66
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":66
  *         p = <int>(1+a1+a2*temp_ks[i]-a3/(temp_ks[i]+a4))
  *         temp[i] = von_mises_cdf_series(temp_ks[i],temp_xs[i],p)
  *         if temp[i]<0:             # <<<<<<<<<<<<<<
@@ -1280,11 +1403,10 @@
  *         elif temp[i]>1:
  */
     __pyx_t_11 = __pyx_v_i;
-    __pyx_5 = *((double *)((double *)__Pyx_BufPtrStrided1d(__pyx_bstruct_temp.buf, __pyx_t_11, __pyx_bstride_0_temp)));
-    __pyx_4 = (__pyx_5 < 0);
+    __pyx_4 = ((*__Pyx_BufPtrStrided1d(double *, __pyx_bstruct_temp.buf, __pyx_t_11, __pyx_bstride_0_temp)) < 0);
     if (__pyx_4) {
 
-      /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":67
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":67
  *         temp[i] = von_mises_cdf_series(temp_ks[i],temp_xs[i],p)
  *         if temp[i]<0:
  *             temp[i]=0             # <<<<<<<<<<<<<<
@@ -1292,11 +1414,11 @@
  *             temp[i]=1
  */
       __pyx_t_12 = __pyx_v_i;
-      *((double *)__Pyx_BufPtrStrided1d(__pyx_bstruct_temp.buf, __pyx_t_12, __pyx_bstride_0_temp)) = 0;
-      goto __pyx_L7;
+      *__Pyx_BufPtrStrided1d(double *, __pyx_bstruct_temp.buf, __pyx_t_12, __pyx_bstride_0_temp) = 0;
+      goto __pyx_L8;
     }
 
-    /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":68
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":68
  *         if temp[i]<0:
  *             temp[i]=0
  *         elif temp[i]>1:             # <<<<<<<<<<<<<<
@@ -1304,11 +1426,10 @@
  *     result[c_small_k] = temp
  */
     __pyx_t_13 = __pyx_v_i;
-    __pyx_6 = *((double *)((double *)__Pyx_BufPtrStrided1d(__pyx_bstruct_temp.buf, __pyx_t_13, __pyx_bstride_0_temp)));
-    __pyx_4 = (__pyx_6 > 1);
+    __pyx_4 = ((*__Pyx_BufPtrStrided1d(double *, __pyx_bstruct_temp.buf, __pyx_t_13, __pyx_bstride_0_temp)) > 1);
     if (__pyx_4) {
 
-      /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":69
+      /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":69
  *             temp[i]=0
  *         elif temp[i]>1:
  *             temp[i]=1             # <<<<<<<<<<<<<<
@@ -1316,13 +1437,13 @@
  *     result[~c_small_k] = von_mises_cdf_normalapprox(bk[~c_small_k],bx[~c_small_k],C1)
  */
       __pyx_t_14 = __pyx_v_i;
-      *((double *)__Pyx_BufPtrStrided1d(__pyx_bstruct_temp.buf, __pyx_t_14, __pyx_bstride_0_temp)) = 1;
-      goto __pyx_L7;
+      *__Pyx_BufPtrStrided1d(double *, __pyx_bstruct_temp.buf, __pyx_t_14, __pyx_bstride_0_temp) = 1;
+      goto __pyx_L8;
     }
-    __pyx_L7:;
+    __pyx_L8:;
   }
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":70
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":70
  *         elif temp[i]>1:
  *             temp[i]=1
  *     result[c_small_k] = temp             # <<<<<<<<<<<<<<
@@ -1331,37 +1452,37 @@
  */
   if (PyObject_SetItem(__pyx_v_result, __pyx_v_c_small_k, ((PyObject *)__pyx_v_temp)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":71
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":71
  *             temp[i]=1
  *     result[c_small_k] = temp
  *     result[~c_small_k] = von_mises_cdf_normalapprox(bk[~c_small_k],bx[~c_small_k],C1)             # <<<<<<<<<<<<<<
  * 
  *     if not zerodim:
  */
-  __pyx_9 = __Pyx_GetName(__pyx_m, __pyx_kp_21); if (unlikely(!__pyx_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_3 = PyNumber_Invert(__pyx_v_c_small_k); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_2 = PyObject_GetItem(__pyx_v_bk, __pyx_3); if (!__pyx_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  __pyx_9 = __Pyx_GetName(__pyx_m, __pyx_kp_28); if (unlikely(!__pyx_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_1 = PyNumber_Invert(__pyx_v_c_small_k); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_10 = PyObject_GetItem(__pyx_v_bx, __pyx_1); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetItem(__pyx_v_bk, __pyx_1); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
-  __pyx_3 = PyFloat_FromDouble(__pyx_v_C1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_1 = PyTuple_New(3); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_2);
-  PyTuple_SET_ITEM(__pyx_1, 1, __pyx_10);
-  PyTuple_SET_ITEM(__pyx_1, 2, __pyx_3);
-  __pyx_2 = 0;
+  __pyx_2 = PyNumber_Invert(__pyx_v_c_small_k); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_10 = PyObject_GetItem(__pyx_v_bx, __pyx_2); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_1 = PyFloat_FromDouble(__pyx_v_C1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(3); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
+  PyTuple_SET_ITEM(__pyx_2, 1, __pyx_10);
+  PyTuple_SET_ITEM(__pyx_2, 2, __pyx_1);
+  __pyx_3 = 0;
   __pyx_10 = 0;
-  __pyx_3 = 0;
-  __pyx_2 = PyObject_Call(__pyx_9, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = 0;
+  __pyx_3 = PyObject_Call(__pyx_9, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_9); __pyx_9 = 0;
-  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
   __pyx_10 = PyNumber_Invert(__pyx_v_c_small_k); if (unlikely(!__pyx_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (PyObject_SetItem(__pyx_v_result, __pyx_10, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_v_result, __pyx_10, __pyx_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_10); __pyx_10 = 0;
-  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":73
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":73
  *     result[~c_small_k] = von_mises_cdf_normalapprox(bk[~c_small_k],bx[~c_small_k],C1)
  * 
  *     if not zerodim:             # <<<<<<<<<<<<<<
@@ -1372,50 +1493,50 @@
   __pyx_12 = (!__pyx_4);
   if (__pyx_12) {
 
-    /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":74
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":74
  * 
  *     if not zerodim:
  *         return result+(2*np.pi)*ix             # <<<<<<<<<<<<<<
  *     else:
  *         return (result+(2*np.pi)*ix)[0]
  */
-    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_9 = PyObject_GetAttr(__pyx_3, __pyx_kp_pi); if (unlikely(!__pyx_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    __pyx_1 = PyNumber_Multiply(__pyx_int_2, __pyx_9); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_9 = PyObject_GetAttr(__pyx_1, __pyx_kp_pi); if (unlikely(!__pyx_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    __pyx_t_5 = PyNumber_Multiply(__pyx_int_2, __pyx_9); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_9); __pyx_9 = 0;
-    __pyx_2 = PyNumber_Multiply(__pyx_1, __pyx_v_ix); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    __pyx_10 = PyNumber_Add(__pyx_v_result, __pyx_2); if (unlikely(!__pyx_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_r = __pyx_10;
-    __pyx_10 = 0;
+    __pyx_t_1 = PyNumber_Multiply(__pyx_t_5, __pyx_v_ix); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_5 = PyNumber_Add(__pyx_v_result, __pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_r = __pyx_t_5;
+    __pyx_t_5 = 0;
     goto __pyx_L0;
-    goto __pyx_L8;
+    goto __pyx_L9;
   }
   /*else*/ {
 
-    /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":76
+    /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":76
  *         return result+(2*np.pi)*ix
  *     else:
  *         return (result+(2*np.pi)*ix)[0]             # <<<<<<<<<<<<<<
  */
-    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_9 = PyObject_GetAttr(__pyx_3, __pyx_kp_pi); if (unlikely(!__pyx_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_np); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_pi); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_t_5 = PyNumber_Multiply(__pyx_int_2, __pyx_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_3); __pyx_3 = 0;
-    __pyx_1 = PyNumber_Multiply(__pyx_int_2, __pyx_9); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_9); __pyx_9 = 0;
-    __pyx_2 = PyNumber_Multiply(__pyx_1, __pyx_v_ix); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_1); __pyx_1 = 0;
-    __pyx_10 = PyNumber_Add(__pyx_v_result, __pyx_2); if (unlikely(!__pyx_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_3 = __Pyx_GetItemInt(__pyx_10, 0, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(__pyx_10); __pyx_10 = 0;
-    __pyx_r = __pyx_3;
-    __pyx_3 = 0;
+    __pyx_t_1 = PyNumber_Multiply(__pyx_t_5, __pyx_v_ix); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_5 = PyNumber_Add(__pyx_v_result, __pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_10 = __Pyx_GetItemInt(__pyx_t_5, 0, 0); if (!__pyx_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_r = __pyx_10;
+    __pyx_10 = 0;
     goto __pyx_L0;
   }
-  __pyx_L8:;
+  __pyx_L9:;
 
   __pyx_r = Py_None; Py_INCREF(Py_None);
   goto __pyx_L0;
@@ -1426,18 +1547,18 @@
   Py_XDECREF(__pyx_9);
   Py_XDECREF(__pyx_10);
   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
-    PyErr_Fetch(&__pyx_type, &__pyx_value, &__pyx_tb);
-    __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_temp, &__pyx_bstruct_temp);
-    __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_temp_xs, &__pyx_bstruct_temp_xs);
-    __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_temp_ks, &__pyx_bstruct_temp_ks);
-  PyErr_Restore(__pyx_type, __pyx_value, __pyx_tb);}
+    __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
+    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_temp);
+    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_temp_xs);
+    __Pyx_SafeReleaseBuffer(&__pyx_bstruct_temp_ks);
+  __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
   __Pyx_AddTraceback("scipy.stats.vonmises_cython.von_mises_cdf");
   __pyx_r = NULL;
   goto __pyx_L2;
   __pyx_L0:;
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_temp, &__pyx_bstruct_temp);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_temp_xs, &__pyx_bstruct_temp_xs);
-  __Pyx_SafeReleaseBuffer((PyObject*)__pyx_v_temp_ks, &__pyx_bstruct_temp_ks);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_temp);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_temp_xs);
+  __Pyx_SafeReleaseBuffer(&__pyx_bstruct_temp_ks);
   __pyx_L2:;
   Py_DECREF(__pyx_v_temp);
   Py_DECREF(__pyx_v_temp_xs);
@@ -1453,99 +1574,270 @@
   return __pyx_r;
 }
 
-/* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":36
+/* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":50
  *         # experimental exception made for __getbuffer__ and __releasebuffer__
  *         # -- the details of this may change.
  *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
  *             # This implementation of getbuffer is geared towards Cython
- *             # requirements, and does not yet fullfill the PEP (specifically,
+ *             # requirements, and does not yet fullfill the PEP.
  */
 
 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+  int __pyx_v_copy_shape;
+  int __pyx_v_i;
+  int __pyx_v_ndim;
   int __pyx_v_t;
   char *__pyx_v_f;
+  PyArray_Descr *__pyx_v_descr = 0;
+  PyObject *__pyx_v_stack;
+  int __pyx_v_hasfields;
+  PyObject *__pyx_v_iterator;
   int __pyx_r;
   int __pyx_1;
   PyObject *__pyx_2 = 0;
   PyObject *__pyx_3 = 0;
+  int __pyx_4;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
+  PyObject *__pyx_7 = 0;
+  Py_ssize_t __pyx_8 = 0;
+  PyObject *__pyx_t_1 = NULL;
+  if (__pyx_v_info == NULL) return 0;
+  __pyx_v_info->obj = Py_None; Py_INCREF(Py_None);
+  __pyx_v_stack = ((PyObject *)Py_None); Py_INCREF(Py_None);
+  __pyx_v_iterator = Py_None; Py_INCREF(Py_None);
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":42
- *             # so the flags are not even checked).
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":56
+ *             # of flags
+ *             cdef int copy_shape, i, ndim
+ *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
  * 
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ */
+  __pyx_v_ndim = PyArray_NDIM(((PyArrayObject *)__pyx_v_self));
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":58
+ *             ndim = PyArray_NDIM(self)
+ * 
  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
- *                 raise RuntimeError("Py_intptr_t and Py_ssize_t differs in size, numpy.pxd does not support this")
- * 
+ *                 copy_shape = 1
+ *             else:
  */
   __pyx_1 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
   if (__pyx_1) {
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":43
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":59
  * 
  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
- *                 raise RuntimeError("Py_intptr_t and Py_ssize_t differs in size, numpy.pxd does not support this")             # <<<<<<<<<<<<<<
+ *                 copy_shape = 1             # <<<<<<<<<<<<<<
+ *             else:
+ *                 copy_shape = 0
+ */
+    __pyx_v_copy_shape = 1;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":61
+ *                 copy_shape = 1
+ *             else:
+ *                 copy_shape = 0             # <<<<<<<<<<<<<<
  * 
- *             info.buf = PyArray_DATA(self)
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
  */
-    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_copy_shape = 0;
+  }
+  __pyx_L5:;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":63
+ *                 copy_shape = 0
+ * 
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
+ *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
+ *                 raise ValueError("ndarray is not C contiguous")
+ */
+  __pyx_1 = ((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS);
+  if (__pyx_1) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":64
+ * 
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):             # <<<<<<<<<<<<<<
+ *                 raise ValueError("ndarray is not C contiguous")
+ * 
+ */
+    __pyx_1 = (!PyArray_CHKFLAGS(((PyArrayObject *)__pyx_v_self), NPY_C_CONTIGUOUS));
+  }
+  if (__pyx_1) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":65
+ *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_C_CONTIGUOUS)):
+ *                 raise ValueError("ndarray is not C contiguous")             # <<<<<<<<<<<<<<
+ * 
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+ */
+    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_INCREF(__pyx_kp_1);
     PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_1);
-    __pyx_3 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
     __Pyx_Raise(__pyx_3, 0, 0);
     Py_DECREF(__pyx_3); __pyx_3 = 0;
-    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L5;
+    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
   }
-  __pyx_L5:;
+  __pyx_L6:;
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":45
- *                 raise RuntimeError("Py_intptr_t and Py_ssize_t differs in size, numpy.pxd does not support this")
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":67
+ *                 raise ValueError("ndarray is not C contiguous")
  * 
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
+ *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
+ *                 raise ValueError("ndarray is not Fortran contiguous")
+ */
+  __pyx_1 = ((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS);
+  if (__pyx_1) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":68
+ * 
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):             # <<<<<<<<<<<<<<
+ *                 raise ValueError("ndarray is not Fortran contiguous")
+ * 
+ */
+    __pyx_1 = (!PyArray_CHKFLAGS(((PyArrayObject *)__pyx_v_self), NPY_F_CONTIGUOUS));
+  }
+  if (__pyx_1) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":69
+ *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
+ *                 and not PyArray_CHKFLAGS(self, NPY_F_CONTIGUOUS)):
+ *                 raise ValueError("ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
+ * 
+ *             info.buf = PyArray_DATA(self)
+ */
+    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_2);
+    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_2);
+    __pyx_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+    __Pyx_Raise(__pyx_3, 0, 0);
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":71
+ *                 raise ValueError("ndarray is not Fortran contiguous")
+ * 
  *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
- *             info.ndim = PyArray_NDIM(self)
- *             info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+ *             info.ndim = ndim
+ *             if copy_shape:
  */
   __pyx_v_info->buf = PyArray_DATA(((PyArrayObject *)__pyx_v_self));
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":46
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":72
  * 
  *             info.buf = PyArray_DATA(self)
- *             info.ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
- *             info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
- *             info.shape = <Py_ssize_t*>PyArray_DIMS(self)
+ *             info.ndim = ndim             # <<<<<<<<<<<<<<
+ *             if copy_shape:
+ *                 # Allocate new buffer for strides and shape info. This is allocated
  */
-  __pyx_v_info->ndim = PyArray_NDIM(((PyArrayObject *)__pyx_v_self));
+  __pyx_v_info->ndim = __pyx_v_ndim;
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":47
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":73
  *             info.buf = PyArray_DATA(self)
- *             info.ndim = PyArray_NDIM(self)
- *             info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
- *             info.shape = <Py_ssize_t*>PyArray_DIMS(self)
+ *             info.ndim = ndim
+ *             if copy_shape:             # <<<<<<<<<<<<<<
+ *                 # Allocate new buffer for strides and shape info. This is allocated
+ *                 # as one block, strides first.
+ */
+  __pyx_4 = __pyx_v_copy_shape;
+  if (__pyx_4) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":76
+ *                 # Allocate new buffer for strides and shape info. This is allocated
+ *                 # as one block, strides first.
+ *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2)             # <<<<<<<<<<<<<<
+ *                 info.shape = info.strides + ndim
+ *                 for i in range(ndim):
+ */
+    __pyx_v_info->strides = ((Py_ssize_t *)malloc((((sizeof(Py_ssize_t)) * __pyx_v_ndim) * 2)));
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":77
+ *                 # as one block, strides first.
+ *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2)
+ *                 info.shape = info.strides + ndim             # <<<<<<<<<<<<<<
+ *                 for i in range(ndim):
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]
+ */
+    __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":78
+ *                 info.strides = <Py_ssize_t*>stdlib.malloc(sizeof(Py_ssize_t) * ndim * 2)
+ *                 info.shape = info.strides + ndim
+ *                 for i in range(ndim):             # <<<<<<<<<<<<<<
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]
+ *                     info.shape[i] = PyArray_DIMS(self)[i]
+ */
+    for (__pyx_v_i = 0; __pyx_v_i < __pyx_v_ndim; __pyx_v_i+=1) {
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":79
+ *                 info.shape = info.strides + ndim
+ *                 for i in range(ndim):
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
+ *                     info.shape[i] = PyArray_DIMS(self)[i]
+ *             else:
+ */
+      (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(((PyArrayObject *)__pyx_v_self))[__pyx_v_i]);
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":80
+ *                 for i in range(ndim):
+ *                     info.strides[i] = PyArray_STRIDES(self)[i]
+ *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
+ *             else:
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+ */
+      (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(((PyArrayObject *)__pyx_v_self))[__pyx_v_i]);
+    }
+    goto __pyx_L8;
+  }
+  /*else*/ {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":82
+ *                     info.shape[i] = PyArray_DIMS(self)[i]
+ *             else:
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
  *             info.suboffsets = NULL
  */
-  __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(((PyArrayObject *)__pyx_v_self)));
+    __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(((PyArrayObject *)__pyx_v_self)));
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":48
- *             info.ndim = PyArray_NDIM(self)
- *             info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
- *             info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":83
+ *             else:
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
  *             info.suboffsets = NULL
  *             info.itemsize = PyArray_ITEMSIZE(self)
  */
-  __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(((PyArrayObject *)__pyx_v_self)));
+    __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(((PyArrayObject *)__pyx_v_self)));
+  }
+  __pyx_L8:;
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":49
- *             info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
- *             info.shape = <Py_ssize_t*>PyArray_DIMS(self)
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":84
+ *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
  *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
  *             info.itemsize = PyArray_ITEMSIZE(self)
  *             info.readonly = not PyArray_ISWRITEABLE(self)
  */
   __pyx_v_info->suboffsets = NULL;
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":50
- *             info.shape = <Py_ssize_t*>PyArray_DIMS(self)
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":85
+ *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
  *             info.suboffsets = NULL
  *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
  *             info.readonly = not PyArray_ISWRITEABLE(self)
@@ -1553,241 +1845,972 @@
  */
   __pyx_v_info->itemsize = PyArray_ITEMSIZE(((PyArrayObject *)__pyx_v_self));
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":51
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":86
  *             info.suboffsets = NULL
  *             info.itemsize = PyArray_ITEMSIZE(self)
  *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
  * 
- *             # Formats that are not tested and working in Cython are not
+ *             cdef int t
  */
   __pyx_v_info->readonly = (!PyArray_ISWRITEABLE(((PyArrayObject *)__pyx_v_self)));
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":55
- *             # Formats that are not tested and working in Cython are not
- *             # made available from this pxd file yet.
- *             cdef int t = PyArray_TYPE(self)             # <<<<<<<<<<<<<<
- *             cdef char* f = NULL
- *             if   t == NPY_BYTE:       f = "b"
- */
-  __pyx_v_t = PyArray_TYPE(((PyArrayObject *)__pyx_v_self));
-
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":56
- *             # made available from this pxd file yet.
- *             cdef int t = PyArray_TYPE(self)
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":89
+ * 
+ *             cdef int t
  *             cdef char* f = NULL             # <<<<<<<<<<<<<<
- *             if   t == NPY_BYTE:       f = "b"
- *             elif t == NPY_UBYTE:      f = "B"
+ *             cdef dtype descr = self.descr
+ *             cdef list stack
  */
   __pyx_v_f = NULL;
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":57
- *             cdef int t = PyArray_TYPE(self)
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":90
+ *             cdef int t
  *             cdef char* f = NULL
- *             if   t == NPY_BYTE:       f = "b"             # <<<<<<<<<<<<<<
- *             elif t == NPY_UBYTE:      f = "B"
- *             elif t == NPY_SHORT:      f = "h"
+ *             cdef dtype descr = self.descr             # <<<<<<<<<<<<<<
+ *             cdef list stack
+ * 
  */
-  switch (__pyx_v_t) {
-    case NPY_BYTE:
-    __pyx_v_f = __pyx_k_2;
-    break;
-    case NPY_UBYTE:
+  Py_INCREF(((PyObject *)((PyArrayObject *)__pyx_v_self)->descr));
+  __pyx_v_descr = ((PyArrayObject *)__pyx_v_self)->descr;
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":58
- *             cdef char* f = NULL
- *             if   t == NPY_BYTE:       f = "b"
- *             elif t == NPY_UBYTE:      f = "B"             # <<<<<<<<<<<<<<
- *             elif t == NPY_SHORT:      f = "h"
- *             elif t == NPY_USHORT:     f = "H"
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":93
+ *             cdef list stack
+ * 
+ *             cdef bint hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
+ * 
+ *             # Ugly hack warning:
  */
-    __pyx_v_f = __pyx_k_3;
-    break;
-    case NPY_SHORT:
+  __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":59
- *             if   t == NPY_BYTE:       f = "b"
- *             elif t == NPY_UBYTE:      f = "B"
- *             elif t == NPY_SHORT:      f = "h"             # <<<<<<<<<<<<<<
- *             elif t == NPY_USHORT:     f = "H"
- *             elif t == NPY_INT:        f = "i"
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":103
+ *             # functions).
+ * 
+ *             if not hasfields and not copy_shape:             # <<<<<<<<<<<<<<
+ *                 # do not call releasebuffer
+ *                 info.obj = None
  */
-    __pyx_v_f = __pyx_k_4;
-    break;
-    case NPY_USHORT:
+  __pyx_1 = (!__pyx_v_hasfields);
+  if (__pyx_1) {
+    __pyx_1 = (!__pyx_v_copy_shape);
+  }
+  if (__pyx_1) {
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":60
- *             elif t == NPY_UBYTE:      f = "B"
- *             elif t == NPY_SHORT:      f = "h"
- *             elif t == NPY_USHORT:     f = "H"             # <<<<<<<<<<<<<<
- *             elif t == NPY_INT:        f = "i"
- *             elif t == NPY_UINT:       f = "I"
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":105
+ *             if not hasfields and not copy_shape:
+ *                 # do not call releasebuffer
+ *                 info.obj = None             # <<<<<<<<<<<<<<
+ *             else:
+ *                 # need to call releasebuffer
  */
-    __pyx_v_f = __pyx_k_5;
-    break;
-    case NPY_INT:
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_info->obj);
+    __pyx_v_info->obj = Py_None;
+    goto __pyx_L11;
+  }
+  /*else*/ {
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":61
- *             elif t == NPY_SHORT:      f = "h"
- *             elif t == NPY_USHORT:     f = "H"
- *             elif t == NPY_INT:        f = "i"             # <<<<<<<<<<<<<<
- *             elif t == NPY_UINT:       f = "I"
- *             elif t == NPY_LONG:       f = "l"
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":108
+ *             else:
+ *                 # need to call releasebuffer
+ *                 info.obj = self             # <<<<<<<<<<<<<<
+ * 
+ *             if not hasfields:
  */
-    __pyx_v_f = __pyx_k_6;
-    break;
-    case NPY_UINT:
+    Py_INCREF(__pyx_v_self);
+    Py_DECREF(__pyx_v_info->obj);
+    __pyx_v_info->obj = __pyx_v_self;
+  }
+  __pyx_L11:;
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":62
- *             elif t == NPY_USHORT:     f = "H"
- *             elif t == NPY_INT:        f = "i"
- *             elif t == NPY_UINT:       f = "I"             # <<<<<<<<<<<<<<
- *             elif t == NPY_LONG:       f = "l"
- *             elif t == NPY_ULONG:      f = "L"
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":110
+ *                 info.obj = self
+ * 
+ *             if not hasfields:             # <<<<<<<<<<<<<<
+ *                 t = descr.type_num
+ *                 if   t == NPY_BYTE:        f = "b"
  */
-    __pyx_v_f = __pyx_k_7;
-    break;
-    case NPY_LONG:
+  __pyx_1 = (!__pyx_v_hasfields);
+  if (__pyx_1) {
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":63
- *             elif t == NPY_INT:        f = "i"
- *             elif t == NPY_UINT:       f = "I"
- *             elif t == NPY_LONG:       f = "l"             # <<<<<<<<<<<<<<
- *             elif t == NPY_ULONG:      f = "L"
- *             elif t == NPY_LONGLONG:   f = "q"
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":111
+ * 
+ *             if not hasfields:
+ *                 t = descr.type_num             # <<<<<<<<<<<<<<
+ *                 if   t == NPY_BYTE:        f = "b"
+ *                 elif t == NPY_UBYTE:       f = "B"
  */
-    __pyx_v_f = __pyx_k_8;
-    break;
-    case NPY_ULONG:
+    __pyx_v_t = __pyx_v_descr->type_num;
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":64
- *             elif t == NPY_UINT:       f = "I"
- *             elif t == NPY_LONG:       f = "l"
- *             elif t == NPY_ULONG:      f = "L"             # <<<<<<<<<<<<<<
- *             elif t == NPY_LONGLONG:   f = "q"
- *             elif t == NPY_ULONGLONG:  f = "Q"
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":112
+ *             if not hasfields:
+ *                 t = descr.type_num
+ *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_UBYTE:       f = "B"
+ *                 elif t == NPY_SHORT:       f = "h"
  */
-    __pyx_v_f = __pyx_k_9;
-    break;
-    case NPY_LONGLONG:
+    switch (__pyx_v_t) {
+      case NPY_BYTE:
+      __pyx_v_f = __pyx_k_3;
+      break;
+      case NPY_UBYTE:
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":65
- *             elif t == NPY_LONG:       f = "l"
- *             elif t == NPY_ULONG:      f = "L"
- *             elif t == NPY_LONGLONG:   f = "q"             # <<<<<<<<<<<<<<
- *             elif t == NPY_ULONGLONG:  f = "Q"
- *             elif t == NPY_FLOAT:      f = "f"
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":113
+ *                 t = descr.type_num
+ *                 if   t == NPY_BYTE:        f = "b"
+ *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_SHORT:       f = "h"
+ *                 elif t == NPY_USHORT:      f = "H"
  */
-    __pyx_v_f = __pyx_k_10;
-    break;
-    case NPY_ULONGLONG:
+      __pyx_v_f = __pyx_k_4;
+      break;
+      case NPY_SHORT:
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":66
- *             elif t == NPY_ULONG:      f = "L"
- *             elif t == NPY_LONGLONG:   f = "q"
- *             elif t == NPY_ULONGLONG:  f = "Q"             # <<<<<<<<<<<<<<
- *             elif t == NPY_FLOAT:      f = "f"
- *             elif t == NPY_DOUBLE:     f = "d"
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":114
+ *                 if   t == NPY_BYTE:        f = "b"
+ *                 elif t == NPY_UBYTE:       f = "B"
+ *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_USHORT:      f = "H"
+ *                 elif t == NPY_INT:         f = "i"
  */
-    __pyx_v_f = __pyx_k_11;
-    break;
-    case NPY_FLOAT:
+      __pyx_v_f = __pyx_k_5;
+      break;
+      case NPY_USHORT:
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":67
- *             elif t == NPY_LONGLONG:   f = "q"
- *             elif t == NPY_ULONGLONG:  f = "Q"
- *             elif t == NPY_FLOAT:      f = "f"             # <<<<<<<<<<<<<<
- *             elif t == NPY_DOUBLE:     f = "d"
- *             elif t == NPY_LONGDOUBLE: f = "g"
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":115
+ *                 elif t == NPY_UBYTE:       f = "B"
+ *                 elif t == NPY_SHORT:       f = "h"
+ *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_INT:         f = "i"
+ *                 elif t == NPY_UINT:        f = "I"
  */
-    __pyx_v_f = __pyx_k_12;
-    break;
-    case NPY_DOUBLE:
+      __pyx_v_f = __pyx_k_6;
+      break;
+      case NPY_INT:
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":68
- *             elif t == NPY_ULONGLONG:  f = "Q"
- *             elif t == NPY_FLOAT:      f = "f"
- *             elif t == NPY_DOUBLE:     f = "d"             # <<<<<<<<<<<<<<
- *             elif t == NPY_LONGDOUBLE: f = "g"
- *             elif t == NPY_OBJECT:     f = "O"
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":116
+ *                 elif t == NPY_SHORT:       f = "h"
+ *                 elif t == NPY_USHORT:      f = "H"
+ *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_UINT:        f = "I"
+ *                 elif t == NPY_LONG:        f = "l"
  */
-    __pyx_v_f = __pyx_k_13;
-    break;
-    case NPY_LONGDOUBLE:
+      __pyx_v_f = __pyx_k_7;
+      break;
+      case NPY_UINT:
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":69
- *             elif t == NPY_FLOAT:      f = "f"
- *             elif t == NPY_DOUBLE:     f = "d"
- *             elif t == NPY_LONGDOUBLE: f = "g"             # <<<<<<<<<<<<<<
- *             elif t == NPY_OBJECT:     f = "O"
- * 
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":117
+ *                 elif t == NPY_USHORT:      f = "H"
+ *                 elif t == NPY_INT:         f = "i"
+ *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONG:        f = "l"
+ *                 elif t == NPY_ULONG:       f = "L"
  */
-    __pyx_v_f = __pyx_k_14;
-    break;
-    case NPY_OBJECT:
+      __pyx_v_f = __pyx_k_8;
+      break;
+      case NPY_LONG:
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":70
- *             elif t == NPY_DOUBLE:     f = "d"
- *             elif t == NPY_LONGDOUBLE: f = "g"
- *             elif t == NPY_OBJECT:     f = "O"             # <<<<<<<<<<<<<<
- * 
- *             if f == NULL:
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":118
+ *                 elif t == NPY_INT:         f = "i"
+ *                 elif t == NPY_UINT:        f = "I"
+ *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_ULONG:       f = "L"
+ *                 elif t == NPY_LONGLONG:    f = "q"
  */
-    __pyx_v_f = __pyx_k_15;
-    break;
+      __pyx_v_f = __pyx_k_9;
+      break;
+      case NPY_ULONG:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":119
+ *                 elif t == NPY_UINT:        f = "I"
+ *                 elif t == NPY_LONG:        f = "l"
+ *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ */
+      __pyx_v_f = __pyx_k_10;
+      break;
+      case NPY_LONGLONG:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":120
+ *                 elif t == NPY_LONG:        f = "l"
+ *                 elif t == NPY_ULONG:       f = "L"
+ *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ *                 elif t == NPY_FLOAT:       f = "f"
+ */
+      __pyx_v_f = __pyx_k_11;
+      break;
+      case NPY_ULONGLONG:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":121
+ *                 elif t == NPY_ULONG:       f = "L"
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_FLOAT:       f = "f"
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ */
+      __pyx_v_f = __pyx_k_12;
+      break;
+      case NPY_FLOAT:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":122
+ *                 elif t == NPY_LONGLONG:    f = "q"
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ */
+      __pyx_v_f = __pyx_k_13;
+      break;
+      case NPY_DOUBLE:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":123
+ *                 elif t == NPY_ULONGLONG:   f = "Q"
+ *                 elif t == NPY_FLOAT:       f = "f"
+ *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ */
+      __pyx_v_f = __pyx_k_14;
+      break;
+      case NPY_LONGDOUBLE:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":124
+ *                 elif t == NPY_FLOAT:       f = "f"
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ */
+      __pyx_v_f = __pyx_k_15;
+      break;
+      case NPY_CFLOAT:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":125
+ *                 elif t == NPY_DOUBLE:      f = "d"
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ */
+      __pyx_v_f = __pyx_k_16;
+      break;
+      case NPY_CDOUBLE:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":126
+ *                 elif t == NPY_LONGDOUBLE:  f = "g"
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ *                 elif t == NPY_OBJECT:      f = "O"
+ */
+      __pyx_v_f = __pyx_k_17;
+      break;
+      case NPY_CLONGDOUBLE:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":127
+ *                 elif t == NPY_CFLOAT:      f = "Zf"
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
+ *                 elif t == NPY_OBJECT:      f = "O"
+ *                 else:
+ */
+      __pyx_v_f = __pyx_k_18;
+      break;
+      case NPY_OBJECT:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":128
+ *                 elif t == NPY_CDOUBLE:     f = "Zd"
+ *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
+ *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)
+ */
+      __pyx_v_f = __pyx_k_19;
+      break;
+      default:
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":130
+ *                 elif t == NPY_OBJECT:      f = "O"
+ *                 else:
+ *                     raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
+ *                 info.format = f
+ *                 return
+ */
+      __pyx_2 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = PyNumber_Remainder(__pyx_kp_20, __pyx_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyTuple_SET_ITEM(__pyx_3, 0, __pyx_t_1);
+      __pyx_t_1 = 0;
+      __pyx_2 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+      __Pyx_Raise(__pyx_2, 0, 0);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      {__pyx_filename = __pyx_f[1]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":131
+ *                 else:
+ *                     raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)
+ *                 info.format = f             # <<<<<<<<<<<<<<
+ *                 return
+ *             else:
+ */
+    __pyx_v_info->format = __pyx_v_f;
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":132
+ *                     raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)
+ *                 info.format = f
+ *                 return             # <<<<<<<<<<<<<<
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(255) # static size
+ */
+    __pyx_r = 0;
+    goto __pyx_L0;
+    goto __pyx_L12;
   }
+  /*else*/ {
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":72
- *             elif t == NPY_OBJECT:     f = "O"
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":134
+ *                 return
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(255) # static size             # <<<<<<<<<<<<<<
+ *                 f = info.format
+ *                 stack = [iter(descr.fields.iteritems())]
+ */
+    __pyx_v_info->format = ((char *)malloc(255));
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":135
+ *             else:
+ *                 info.format = <char*>stdlib.malloc(255) # static size
+ *                 f = info.format             # <<<<<<<<<<<<<<
+ *                 stack = [iter(descr.fields.iteritems())]
  * 
- *             if f == NULL:             # <<<<<<<<<<<<<<
- *                 raise ValueError("only objects, int and float dtypes supported for ndarray buffer access so far (dtype is %d)" % t)
- *             info.format = f
  */
-  __pyx_1 = (__pyx_v_f == NULL);
-  if (__pyx_1) {
+    __pyx_v_f = __pyx_v_info->format;
 
-    /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":73
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":136
+ *                 info.format = <char*>stdlib.malloc(255) # static size
+ *                 f = info.format
+ *                 stack = [iter(descr.fields.iteritems())]             # <<<<<<<<<<<<<<
  * 
- *             if f == NULL:
- *                 raise ValueError("only objects, int and float dtypes supported for ndarray buffer access so far (dtype is %d)" % t)             # <<<<<<<<<<<<<<
- *             info.format = f
- * 
+ *                 while True:
  */
-    __pyx_2 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_3 = PyNumber_Remainder(__pyx_kp_16, __pyx_2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyObject_GetAttr(__pyx_v_descr->fields, __pyx_kp_iteritems); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_3 = PyObject_GetIter(__pyx_2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     Py_DECREF(__pyx_2); __pyx_2 = 0;
-    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
+    __pyx_2 = PyList_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyList_SET_ITEM(__pyx_2, 0, __pyx_3);
     __pyx_3 = 0;
-    __pyx_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
-    __Pyx_Raise(__pyx_3, 0, 0);
-    Py_DECREF(__pyx_3); __pyx_3 = 0;
-    {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    goto __pyx_L6;
-  }
-  __pyx_L6:;
+    Py_DECREF(((PyObject *)__pyx_v_stack));
+    __pyx_v_stack = __pyx_2;
+    __pyx_2 = 0;
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":74
- *             if f == NULL:
- *                 raise ValueError("only objects, int and float dtypes supported for ndarray buffer access so far (dtype is %d)" % t)
- *             info.format = f             # <<<<<<<<<<<<<<
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":138
+ *                 stack = [iter(descr.fields.iteritems())]
  * 
+ *                 while True:             # <<<<<<<<<<<<<<
+ *                     iterator = stack[-1]
+ *                     descr = None
+ */
+    while (1) {
+      __pyx_1 = 1;
+      if (!__pyx_1) break;
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":139
  * 
+ *                 while True:
+ *                     iterator = stack[-1]             # <<<<<<<<<<<<<<
+ *                     descr = None
+ *                     while descr is None:
  */
-  __pyx_v_info->format = __pyx_v_f;
+      __pyx_3 = __Pyx_GetItemInt(((PyObject *)__pyx_v_stack), -1, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_v_iterator);
+      __pyx_v_iterator = __pyx_3;
+      __pyx_3 = 0;
 
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":140
+ *                 while True:
+ *                     iterator = stack[-1]
+ *                     descr = None             # <<<<<<<<<<<<<<
+ *                     while descr is None:
+ *                         try:
+ */
+      Py_INCREF(Py_None);
+      Py_DECREF(((PyObject *)__pyx_v_descr));
+      __pyx_v_descr = ((PyArray_Descr *)Py_None);
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":141
+ *                     iterator = stack[-1]
+ *                     descr = None
+ *                     while descr is None:             # <<<<<<<<<<<<<<
+ *                         try:
+ *                             descr = iterator.next()[1][0]
+ */
+      while (1) {
+        __pyx_1 = (((PyObject *)__pyx_v_descr) == Py_None);
+        if (!__pyx_1) break;
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":142
+ *                     descr = None
+ *                     while descr is None:
+ *                         try:             # <<<<<<<<<<<<<<
+ *                             descr = iterator.next()[1][0]
+ *                         except StopIteration:
+ */
+        {
+          PyObject *__pyx_save_exc_type, *__pyx_save_exc_value, *__pyx_save_exc_tb;
+          __Pyx_ExceptionSave(&__pyx_save_exc_type, &__pyx_save_exc_value, &__pyx_save_exc_tb);
+          /*try:*/ {
+
+            /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":143
+ *                     while descr is None:
+ *                         try:
+ *                             descr = iterator.next()[1][0]             # <<<<<<<<<<<<<<
+ *                         except StopIteration:
+ *                             stack.pop()
+ */
+            __pyx_2 = PyObject_GetAttr(__pyx_v_iterator, __pyx_kp_next); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L17_error;}
+            __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L17_error;}
+            Py_DECREF(__pyx_2); __pyx_2 = 0;
+            __pyx_2 = __Pyx_GetItemInt(__pyx_3, 1, 0); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L17_error;}
+            Py_DECREF(__pyx_3); __pyx_3 = 0;
+            __pyx_3 = __Pyx_GetItemInt(__pyx_2, 0, 0); if (!__pyx_3) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L17_error;}
+            Py_DECREF(__pyx_2); __pyx_2 = 0;
+            if (!(__Pyx_TypeTest(__pyx_3, __pyx_ptype_5numpy_dtype))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L17_error;}
+            Py_DECREF(((PyObject *)__pyx_v_descr));
+            __pyx_v_descr = ((PyArray_Descr *)__pyx_3);
+            __pyx_3 = 0;
+          }
+          goto __pyx_L21_try;
+          __pyx_L17_error:;
+          Py_XDECREF(__pyx_2); __pyx_2 = 0;
+          Py_XDECREF(__pyx_3); __pyx_3 = 0;
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":144
+ *                         try:
+ *                             descr = iterator.next()[1][0]
+ *                         except StopIteration:             # <<<<<<<<<<<<<<
+ *                             stack.pop()
+ *                             if len(stack) > 0:
+ */
+          __pyx_4 = PyErr_ExceptionMatches(__pyx_builtin_StopIteration);
+          if (__pyx_4) {
+            __Pyx_AddTraceback("numpy.__getbuffer__");
+            if (__Pyx_GetException(&__pyx_2, &__pyx_3, &__pyx_5) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;}
+
+            /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":145
+ *                             descr = iterator.next()[1][0]
+ *                         except StopIteration:
+ *                             stack.pop()             # <<<<<<<<<<<<<<
+ *                             if len(stack) > 0:
+ *                                 f[0] = 125 #"}"
+ */
+            __pyx_6 = PyObject_GetAttr(((PyObject *)__pyx_v_stack), __pyx_kp_pop); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;}
+            __pyx_7 = PyObject_Call(__pyx_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;}
+            Py_DECREF(__pyx_6); __pyx_6 = 0;
+            Py_DECREF(__pyx_7); __pyx_7 = 0;
+
+            /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":146
+ *                         except StopIteration:
+ *                             stack.pop()
+ *                             if len(stack) > 0:             # <<<<<<<<<<<<<<
+ *                                 f[0] = 125 #"}"
+ *                                 f += 1
+ */
+            __pyx_8 = PyObject_Length(((PyObject *)__pyx_v_stack)); if (unlikely(__pyx_8 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;}
+            __pyx_1 = (__pyx_8 > 0);
+            if (__pyx_1) {
+
+              /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":147
+ *                             stack.pop()
+ *                             if len(stack) > 0:
+ *                                 f[0] = 125 #"}"             # <<<<<<<<<<<<<<
+ *                                 f += 1
+ *                                 iterator = stack[-1]
+ */
+              (__pyx_v_f[0]) = 125;
+
+              /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":148
+ *                             if len(stack) > 0:
+ *                                 f[0] = 125 #"}"
+ *                                 f += 1             # <<<<<<<<<<<<<<
+ *                                 iterator = stack[-1]
+ *                             else:
+ */
+              __pyx_v_f += 1;
+
+              /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":149
+ *                                 f[0] = 125 #"}"
+ *                                 f += 1
+ *                                 iterator = stack[-1]             # <<<<<<<<<<<<<<
+ *                             else:
+ *                                 f[0] = 0 # Terminate string!
+ */
+              __pyx_6 = __Pyx_GetItemInt(((PyObject *)__pyx_v_stack), -1, 0); if (!__pyx_6) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L19_except_error;}
+              Py_DECREF(__pyx_v_iterator);
+              __pyx_v_iterator = __pyx_6;
+              __pyx_6 = 0;
+              goto __pyx_L22;
+            }
+            /*else*/ {
+
+              /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":151
+ *                                 iterator = stack[-1]
+ *                             else:
+ *                                 f[0] = 0 # Terminate string!             # <<<<<<<<<<<<<<
+ *                                 return
+ * 
+ */
+              (__pyx_v_f[0]) = 0;
+
+              /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":152
+ *                             else:
+ *                                 f[0] = 0 # Terminate string!
+ *                                 return             # <<<<<<<<<<<<<<
+ * 
+ *                     hasfields = PyDataType_HASFIELDS(descr)
+ */
+              __pyx_r = 0;
+              Py_DECREF(__pyx_2); __pyx_2 = 0;
+              Py_DECREF(__pyx_3); __pyx_3 = 0;
+              Py_DECREF(__pyx_5); __pyx_5 = 0;
+              goto __pyx_L20_except_return;
+            }
+            __pyx_L22:;
+            Py_DECREF(__pyx_2); __pyx_2 = 0;
+            Py_DECREF(__pyx_3); __pyx_3 = 0;
+            Py_DECREF(__pyx_5); __pyx_5 = 0;
+            goto __pyx_L18_exception_handled;
+          }
+          __pyx_L19_except_error:;
+          Py_XDECREF(__pyx_save_exc_type);
+          Py_XDECREF(__pyx_save_exc_value);
+          Py_XDECREF(__pyx_save_exc_tb);
+          goto __pyx_L1_error;
+          __pyx_L20_except_return:;
+          __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
+          goto __pyx_L0;
+          __pyx_L18_exception_handled:;
+          __Pyx_ExceptionReset(__pyx_save_exc_type, __pyx_save_exc_value, __pyx_save_exc_tb);
+          __pyx_L21_try:;
+        }
+      }
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":154
+ *                                 return
+ * 
+ *                     hasfields = PyDataType_HASFIELDS(descr)             # <<<<<<<<<<<<<<
+ *                     if not hasfields:
+ *                         t = descr.type_num
+ */
+      __pyx_v_hasfields = PyDataType_HASFIELDS(__pyx_v_descr);
+
+      /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":155
+ * 
+ *                     hasfields = PyDataType_HASFIELDS(descr)
+ *                     if not hasfields:             # <<<<<<<<<<<<<<
+ *                         t = descr.type_num
+ *                         if f - info.format > 240: # this should leave room for "T{" and "}" as well
+ */
+      __pyx_1 = (!__pyx_v_hasfields);
+      if (__pyx_1) {
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":156
+ *                     hasfields = PyDataType_HASFIELDS(descr)
+ *                     if not hasfields:
+ *                         t = descr.type_num             # <<<<<<<<<<<<<<
+ *                         if f - info.format > 240: # this should leave room for "T{" and "}" as well
+ *                             raise RuntimeError("Format string allocated too short.")
+ */
+        __pyx_v_t = __pyx_v_descr->type_num;
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":157
+ *                     if not hasfields:
+ *                         t = descr.type_num
+ *                         if f - info.format > 240: # this should leave room for "T{" and "}" as well             # <<<<<<<<<<<<<<
+ *                             raise RuntimeError("Format string allocated too short.")
+ * 
+ */
+        __pyx_1 = ((__pyx_v_f - __pyx_v_info->format) > 240);
+        if (__pyx_1) {
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":158
+ *                         t = descr.type_num
+ *                         if f - info.format > 240: # this should leave room for "T{" and "}" as well
+ *                             raise RuntimeError("Format string allocated too short.")             # <<<<<<<<<<<<<<
+ * 
+ *                         # Until ticket #99 is fixed, use integers to avoid warnings
+ */
+          __pyx_7 = PyTuple_New(1); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          Py_INCREF(__pyx_kp_21);
+          PyTuple_SET_ITEM(__pyx_7, 0, __pyx_kp_21);
+          __pyx_6 = PyObject_Call(__pyx_builtin_RuntimeError, ((PyObject *)__pyx_7), NULL); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          Py_DECREF(((PyObject *)__pyx_7)); __pyx_7 = 0;
+          __Pyx_Raise(__pyx_6, 0, 0);
+          Py_DECREF(__pyx_6); __pyx_6 = 0;
+          {__pyx_filename = __pyx_f[1]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          goto __pyx_L24;
+        }
+        __pyx_L24:;
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":161
+ * 
+ *                         # Until ticket #99 is fixed, use integers to avoid warnings
+ *                         if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_UBYTE:       f[0] =  66 #"B"
+ *                         elif t == NPY_SHORT:       f[0] = 104 #"h"
+ */
+        switch (__pyx_v_t) {
+          case NPY_BYTE:
+          (__pyx_v_f[0]) = 98;
+          break;
+          case NPY_UBYTE:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":162
+ *                         # Until ticket #99 is fixed, use integers to avoid warnings
+ *                         if   t == NPY_BYTE:        f[0] =  98 #"b"
+ *                         elif t == NPY_UBYTE:       f[0] =  66 #"B"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_SHORT:       f[0] = 104 #"h"
+ *                         elif t == NPY_USHORT:      f[0] =  72 #"H"
+ */
+          (__pyx_v_f[0]) = 66;
+          break;
+          case NPY_SHORT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":163
+ *                         if   t == NPY_BYTE:        f[0] =  98 #"b"
+ *                         elif t == NPY_UBYTE:       f[0] =  66 #"B"
+ *                         elif t == NPY_SHORT:       f[0] = 104 #"h"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_USHORT:      f[0] =  72 #"H"
+ *                         elif t == NPY_INT:         f[0] = 105 #"i"
+ */
+          (__pyx_v_f[0]) = 104;
+          break;
+          case NPY_USHORT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":164
+ *                         elif t == NPY_UBYTE:       f[0] =  66 #"B"
+ *                         elif t == NPY_SHORT:       f[0] = 104 #"h"
+ *                         elif t == NPY_USHORT:      f[0] =  72 #"H"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_INT:         f[0] = 105 #"i"
+ *                         elif t == NPY_UINT:        f[0] =  73 #"I"
+ */
+          (__pyx_v_f[0]) = 72;
+          break;
+          case NPY_INT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":165
+ *                         elif t == NPY_SHORT:       f[0] = 104 #"h"
+ *                         elif t == NPY_USHORT:      f[0] =  72 #"H"
+ *                         elif t == NPY_INT:         f[0] = 105 #"i"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_UINT:        f[0] =  73 #"I"
+ *                         elif t == NPY_LONG:        f[0] = 108 #"l"
+ */
+          (__pyx_v_f[0]) = 105;
+          break;
+          case NPY_UINT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":166
+ *                         elif t == NPY_USHORT:      f[0] =  72 #"H"
+ *                         elif t == NPY_INT:         f[0] = 105 #"i"
+ *                         elif t == NPY_UINT:        f[0] =  73 #"I"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_LONG:        f[0] = 108 #"l"
+ *                         elif t == NPY_ULONG:       f[0] = 76  #"L"
+ */
+          (__pyx_v_f[0]) = 73;
+          break;
+          case NPY_LONG:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":167
+ *                         elif t == NPY_INT:         f[0] = 105 #"i"
+ *                         elif t == NPY_UINT:        f[0] =  73 #"I"
+ *                         elif t == NPY_LONG:        f[0] = 108 #"l"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_ULONG:       f[0] = 76  #"L"
+ *                         elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ */
+          (__pyx_v_f[0]) = 108;
+          break;
+          case NPY_ULONG:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":168
+ *                         elif t == NPY_UINT:        f[0] =  73 #"I"
+ *                         elif t == NPY_LONG:        f[0] = 108 #"l"
+ *                         elif t == NPY_ULONG:       f[0] = 76  #"L"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ *                         elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ */
+          (__pyx_v_f[0]) = 76;
+          break;
+          case NPY_LONGLONG:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":169
+ *                         elif t == NPY_LONG:        f[0] = 108 #"l"
+ *                         elif t == NPY_ULONG:       f[0] = 76  #"L"
+ *                         elif t == NPY_LONGLONG:    f[0] = 113 #"q"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ *                         elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ */
+          (__pyx_v_f[0]) = 113;
+          break;
+          case NPY_ULONGLONG:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":170
+ *                         elif t == NPY_ULONG:       f[0] = 76  #"L"
+ *                         elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ *                         elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ *                         elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ */
+          (__pyx_v_f[0]) = 81;
+          break;
+          case NPY_FLOAT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":171
+ *                         elif t == NPY_LONGLONG:    f[0] = 113 #"q"
+ *                         elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ *                         elif t == NPY_FLOAT:       f[0] = 102 #"f"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ *                         elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ */
+          (__pyx_v_f[0]) = 102;
+          break;
+          case NPY_DOUBLE:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":172
+ *                         elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
+ *                         elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ *                         elif t == NPY_DOUBLE:      f[0] = 100 #"d"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ *                         elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1
+ */
+          (__pyx_v_f[0]) = 100;
+          break;
+          case NPY_LONGDOUBLE:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":173
+ *                         elif t == NPY_FLOAT:       f[0] = 102 #"f"
+ *                         elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ *                         elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1
+ *                         elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1
+ */
+          (__pyx_v_f[0]) = 103;
+          break;
+          case NPY_CFLOAT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":174
+ *                         elif t == NPY_DOUBLE:      f[0] = 100 #"d"
+ *                         elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ *                         elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1
+ *                         elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1
+ */
+          (__pyx_v_f[0]) = 90;
+          (__pyx_v_f[1]) = 102;
+          __pyx_v_f += 1;
+          break;
+          case NPY_CDOUBLE:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":175
+ *                         elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
+ *                         elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1
+ *                         elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1
+ *                         elif t == NPY_OBJECT:      f[0] = 79 #"O"
+ */
+          (__pyx_v_f[0]) = 90;
+          (__pyx_v_f[1]) = 100;
+          __pyx_v_f += 1;
+          break;
+          case NPY_CLONGDOUBLE:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":176
+ *                         elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1
+ *                         elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1
+ *                         elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1             # <<<<<<<<<<<<<<
+ *                         elif t == NPY_OBJECT:      f[0] = 79 #"O"
+ *                         else:
+ */
+          (__pyx_v_f[0]) = 90;
+          (__pyx_v_f[1]) = 103;
+          __pyx_v_f += 1;
+          break;
+          case NPY_OBJECT:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":177
+ *                         elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1
+ *                         elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1
+ *                         elif t == NPY_OBJECT:      f[0] = 79 #"O"             # <<<<<<<<<<<<<<
+ *                         else:
+ *                             raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)
+ */
+          (__pyx_v_f[0]) = 79;
+          break;
+          default:
+
+          /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":179
+ *                         elif t == NPY_OBJECT:      f[0] = 79 #"O"
+ *                         else:
+ *                             raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
+ *                         f += 1
+ *                     else:
+ */
+          __pyx_2 = PyInt_FromLong(__pyx_v_t); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_1 = PyNumber_Remainder(__pyx_kp_22, __pyx_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          Py_DECREF(__pyx_2); __pyx_2 = 0;
+          __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          PyTuple_SET_ITEM(__pyx_3, 0, __pyx_t_1);
+          __pyx_t_1 = 0;
+          __pyx_5 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+          __Pyx_Raise(__pyx_5, 0, 0);
+          Py_DECREF(__pyx_5); __pyx_5 = 0;
+          {__pyx_filename = __pyx_f[1]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        }
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":180
+ *                         else:
+ *                             raise ValueError("unknown dtype code in numpy.pxd (%d)" % t)
+ *                         f += 1             # <<<<<<<<<<<<<<
+ *                     else:
+ *                         f[0] = 84 #"T"
+ */
+        __pyx_v_f += 1;
+        goto __pyx_L23;
+      }
+      /*else*/ {
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":182
+ *                         f += 1
+ *                     else:
+ *                         f[0] = 84 #"T"             # <<<<<<<<<<<<<<
+ *                         f[1] = 123 #"{"
+ *                         f += 2
+ */
+        (__pyx_v_f[0]) = 84;
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":183
+ *                     else:
+ *                         f[0] = 84 #"T"
+ *                         f[1] = 123 #"{"             # <<<<<<<<<<<<<<
+ *                         f += 2
+ *                         stack.append(iter(descr.fields.iteritems()))
+ */
+        (__pyx_v_f[1]) = 123;
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":184
+ *                         f[0] = 84 #"T"
+ *                         f[1] = 123 #"{"
+ *                         f += 2             # <<<<<<<<<<<<<<
+ *                         stack.append(iter(descr.fields.iteritems()))
+ * 
+ */
+        __pyx_v_f += 2;
+
+        /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":185
+ *                         f[1] = 123 #"{"
+ *                         f += 2
+ *                         stack.append(iter(descr.fields.iteritems()))             # <<<<<<<<<<<<<<
+ * 
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):
+ */
+        __pyx_7 = PyObject_GetAttr(__pyx_v_descr->fields, __pyx_kp_iteritems); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_6 = PyObject_Call(__pyx_7, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(__pyx_7); __pyx_7 = 0;
+        __pyx_2 = PyObject_GetIter(__pyx_6); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(__pyx_6); __pyx_6 = 0;
+        __pyx_4 = PyList_Append(((PyObject *)__pyx_v_stack), __pyx_2); if (unlikely(__pyx_4 == -1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        Py_DECREF(__pyx_2); __pyx_2 = 0;
+      }
+      __pyx_L23:;
+    }
+  }
+  __pyx_L12:;
+
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
   Py_XDECREF(__pyx_2);
   Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  Py_XDECREF(__pyx_7);
   __Pyx_AddTraceback("numpy.ndarray.__getbuffer__");
   __pyx_r = -1;
+  Py_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = NULL;
+  goto __pyx_L2;
   __pyx_L0:;
+  if (__pyx_v_info->obj == Py_None) { Py_DECREF(Py_None); __pyx_v_info->obj = NULL; }
+  __pyx_L2:;
+  Py_XDECREF(__pyx_v_descr);
+  Py_DECREF(__pyx_v_stack);
+  Py_DECREF(__pyx_v_iterator);
   return __pyx_r;
 }
 
+/* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":187
+ *                         stack.append(iter(descr.fields.iteritems()))
+ * 
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)
+ */
+
+static void __pyx_pf_5numpy_7ndarray___releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
+static void __pyx_pf_5numpy_7ndarray___releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
+  int __pyx_1;
+  int __pyx_2;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":188
+ * 
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):
+ *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
+ *                 stdlib.free(info.format)
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ */
+  __pyx_1 = PyArray_HASFIELDS(((PyArrayObject *)__pyx_v_self));
+  if (__pyx_1) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":189
+ *         def __releasebuffer__(ndarray self, Py_buffer* info):
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)             # <<<<<<<<<<<<<<
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *                 stdlib.free(info.strides)
+ */
+    free(__pyx_v_info->format);
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":190
+ *             if PyArray_HASFIELDS(self):
+ *                 stdlib.free(info.format)
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
+ *                 stdlib.free(info.strides)
+ *                 # info.shape was stored after info.strides in the same block
+ */
+  __pyx_2 = ((sizeof(npy_intp)) != (sizeof(Py_ssize_t)));
+  if (__pyx_2) {
+
+    /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/numpy.pxd":191
+ *                 stdlib.free(info.format)
+ *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
+ *                 stdlib.free(info.strides)             # <<<<<<<<<<<<<<
+ *                 # info.shape was stored after info.strides in the same block
+ * 
+ */
+    free(__pyx_v_info->strides);
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+}
+
 static struct PyMethodDef __pyx_methods[] = {
   {"von_mises_cdf_normalapprox", (PyCFunction)__pyx_pf_5scipy_5stats_15vonmises_cython_von_mises_cdf_normalapprox, METH_VARARGS|METH_KEYWORDS, 0},
   {"von_mises_cdf", (PyCFunction)__pyx_pf_5scipy_5stats_15vonmises_cython_von_mises_cdf, METH_VARARGS|METH_KEYWORDS, 0},
@@ -1811,13 +2834,16 @@
 #endif
 
 static __Pyx_StringTabEntry __pyx_string_tab[] = {
+  {&__pyx_kp_k, __pyx_k_k, sizeof(__pyx_k_k), 1, 1, 1},
+  {&__pyx_kp_x, __pyx_k_x, sizeof(__pyx_k_x), 1, 1, 1},
+  {&__pyx_kp_23, __pyx_k_23, sizeof(__pyx_k_23), 1, 1, 1},
   {&__pyx_kp_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 1, 1, 1},
   {&__pyx_kp_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 1, 1},
-  {&__pyx_kp_17, __pyx_k_17, sizeof(__pyx_k_17), 1, 1, 1},
+  {&__pyx_kp_24, __pyx_k_24, sizeof(__pyx_k_24), 1, 1, 1},
   {&__pyx_kp_scipy, __pyx_k_scipy, sizeof(__pyx_k_scipy), 0, 1, 1},
-  {&__pyx_kp_18, __pyx_k_18, sizeof(__pyx_k_18), 1, 1, 1},
+  {&__pyx_kp_25, __pyx_k_25, sizeof(__pyx_k_25), 1, 1, 1},
   {&__pyx_kp_i0, __pyx_k_i0, sizeof(__pyx_k_i0), 1, 1, 1},
-  {&__pyx_kp_19, __pyx_k_19, sizeof(__pyx_k_19), 1, 1, 1},
+  {&__pyx_kp_26, __pyx_k_26, sizeof(__pyx_k_26), 1, 1, 1},
   {&__pyx_kp_pi, __pyx_k_pi, sizeof(__pyx_k_pi), 1, 1, 1},
   {&__pyx_kp_sqrt, __pyx_k_sqrt, sizeof(__pyx_k_sqrt), 1, 1, 1},
   {&__pyx_kp_exp, __pyx_k_exp, sizeof(__pyx_k_exp), 1, 1, 1},
@@ -1827,7 +2853,7 @@
   {&__pyx_kp_cdf, __pyx_k_cdf, sizeof(__pyx_k_cdf), 1, 1, 1},
   {&__pyx_kp_asarray, __pyx_k_asarray, sizeof(__pyx_k_asarray), 1, 1, 1},
   {&__pyx_kp_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 1, 1, 1},
-  {&__pyx_kp_20, __pyx_k_20, sizeof(__pyx_k_20), 1, 1, 1},
+  {&__pyx_kp_27, __pyx_k_27, sizeof(__pyx_k_27), 1, 1, 1},
   {&__pyx_kp_round, __pyx_k_round, sizeof(__pyx_k_round), 1, 1, 1},
   {&__pyx_kp_broadcast_arrays, __pyx_k_broadcast_arrays, sizeof(__pyx_k_broadcast_arrays), 1, 1, 1},
   {&__pyx_kp_empty, __pyx_k_empty, sizeof(__pyx_k_empty), 1, 1, 1},
@@ -1835,17 +2861,28 @@
   {&__pyx_kp_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 1, 1, 1},
   {&__pyx_kp_float, __pyx_k_float, sizeof(__pyx_k_float), 1, 1, 1},
   {&__pyx_kp_astype, __pyx_k_astype, sizeof(__pyx_k_astype), 1, 1, 1},
-  {&__pyx_kp_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 1, 1},
-  {&__pyx_kp___getbuffer__, __pyx_k___getbuffer__, sizeof(__pyx_k___getbuffer__), 0, 1, 1},
+  {&__pyx_kp_28, __pyx_k_28, sizeof(__pyx_k_28), 1, 1, 1},
+  {&__pyx_kp___getbuffer__, __pyx_k___getbuffer__, sizeof(__pyx_k___getbuffer__), 1, 1, 1},
+  {&__pyx_kp___releasebuffer__, __pyx_k___releasebuffer__, sizeof(__pyx_k___releasebuffer__), 1, 1, 1},
+  {&__pyx_kp_info, __pyx_k_info, sizeof(__pyx_k_info), 1, 1, 1},
+  {&__pyx_kp_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 1, 1, 1},
+  {&__pyx_kp_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 1, 1, 1},
+  {&__pyx_kp_iteritems, __pyx_k_iteritems, sizeof(__pyx_k_iteritems), 1, 1, 1},
+  {&__pyx_kp_next, __pyx_k_next, sizeof(__pyx_k_next), 1, 1, 1},
+  {&__pyx_kp_StopIteration, __pyx_k_StopIteration, sizeof(__pyx_k_StopIteration), 1, 1, 1},
+  {&__pyx_kp_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 1, 1, 1},
   {&__pyx_kp_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 1, 1, 1},
-  {&__pyx_kp_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 1, 1, 1},
   {&__pyx_kp_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 0},
-  {&__pyx_kp_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 0},
+  {&__pyx_kp_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 0},
+  {&__pyx_kp_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 0, 0},
+  {&__pyx_kp_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 0, 0},
+  {&__pyx_kp_22, __pyx_k_22, sizeof(__pyx_k_22), 0, 0, 0},
   {0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_kp_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_kp_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ValueError = __Pyx_GetName(__pyx_b, __pyx_kp_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_StopIteration = __Pyx_GetName(__pyx_b, __pyx_kp_StopIteration); if (!__pyx_builtin_StopIteration) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_RuntimeError = __Pyx_GetName(__pyx_b, __pyx_kp_RuntimeError); if (!__pyx_builtin_RuntimeError) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -1875,7 +2912,7 @@
   PyObject *__pyx_1 = 0;
   PyObject *__pyx_2 = 0;
   __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  /*--- Libary function declarations ---*/
+  /*--- Library function declarations ---*/
   __pyx_init_filenames();
   /*--- Initialize various global constants etc. ---*/
   if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -1899,11 +2936,12 @@
   /*--- Function export code ---*/
   /*--- Type init code ---*/
   /*--- Type import code ---*/
-  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr)); if (unlikely(!__pyx_ptype_5numpy_dtype)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_5numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (unlikely(!__pyx_ptype_5numpy_ndarray)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   /*--- Function import code ---*/
   /*--- Execution code ---*/
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":1
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":1
  * import numpy as np             # <<<<<<<<<<<<<<
  * import scipy.stats
  * from scipy.special import i0
@@ -1912,17 +2950,17 @@
   if (PyObject_SetAttr(__pyx_m, __pyx_kp_np, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":2
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":2
  * import numpy as np
  * import scipy.stats             # <<<<<<<<<<<<<<
  * from scipy.special import i0
  * import numpy.testing
  */
-  __pyx_1 = __Pyx_Import(__pyx_kp_17, 0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_1 = __Pyx_Import(__pyx_kp_24, 0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (PyObject_SetAttr(__pyx_m, __pyx_kp_scipy, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":3
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":3
  * import numpy as np
  * import scipy.stats
  * from scipy.special import i0             # <<<<<<<<<<<<<<
@@ -1932,30 +2970,29 @@
   __pyx_1 = PyList_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_INCREF(__pyx_kp_i0);
   PyList_SET_ITEM(__pyx_1, 0, __pyx_kp_i0);
-  __pyx_2 = __Pyx_Import(__pyx_kp_18, ((PyObject *)__pyx_1)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = __Pyx_Import(__pyx_kp_25, ((PyObject *)__pyx_1)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
   __pyx_1 = PyObject_GetAttr(__pyx_2, __pyx_kp_i0); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (PyObject_SetAttr(__pyx_m, __pyx_kp_i0, __pyx_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_1); __pyx_1 = 0;
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/home/peridot/software/scipy/svn/trunk/scipy/stats/vonmises_cython.pyx":4
+  /* "/usr/data/david/src/dsp/scipy/trunk/scipy/stats/vonmises_cython.pyx":4
  * import scipy.stats
  * from scipy.special import i0
  * import numpy.testing             # <<<<<<<<<<<<<<
  * cimport numpy as np
  * 
  */
-  __pyx_2 = __Pyx_Import(__pyx_kp_19, 0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = __Pyx_Import(__pyx_kp_26, 0); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (PyObject_SetAttr(__pyx_m, __pyx_kp_numpy, __pyx_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_2); __pyx_2 = 0;
 
-  /* "/home/peridot/devlib/lib/python2.5/site-packages/Cython-0.9.8.1.1-py2.5-linux-i686.egg/Cython/Includes/numpy.pxd":36
- *         # experimental exception made for __getbuffer__ and __releasebuffer__
- *         # -- the details of this may change.
- *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
- *             # This implementation of getbuffer is geared towards Cython
- *             # requirements, and does not yet fullfill the PEP (specifically,
+  /* "/usr/data/david/local/lib64/python2.4/site-packages/Cython/Includes/stdlib.pxd":2
+ * 
+ * cdef extern from "stdlib.h":             # <<<<<<<<<<<<<<
+ *     ctypedef unsigned long size_t
+ *     void free(void *ptr)
  */
   #if PY_MAJOR_VERSION < 3
   return;
@@ -1982,14 +3019,140 @@
   __pyx_f = __pyx_filenames;
 }
 
-static INLINE void __Pyx_SafeReleaseBuffer(PyObject* obj, Py_buffer* info) {
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name,
+    PyObject* kw_name)
+{
+    PyErr_Format(PyExc_TypeError,
+        #if PY_MAJOR_VERSION >= 3
+        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
+        #else
+        "%s() got multiple values for keyword argument '%s'", func_name,
+        PyString_AS_STRING(kw_name));
+        #endif
+}
+
+static void __Pyx_RaiseArgtupleInvalid(
+    const char* func_name,
+    int exact,
+    Py_ssize_t num_min,
+    Py_ssize_t num_max,
+    Py_ssize_t num_found)
+{
+    Py_ssize_t num_expected;
+    const char *number, *more_or_less;
+
+    if (num_found < num_min) {
+        num_expected = num_min;
+        more_or_less = "at least";
+    } else {
+        num_expected = num_max;
+        more_or_less = "at most";
+    }
+    if (exact) {
+        more_or_less = "exactly";
+    }
+    number = (num_expected == 1) ? "" : "s";
+    PyErr_Format(PyExc_TypeError,
+        #if PY_VERSION_HEX < 0x02050000
+            "%s() takes %s %d positional argument%s (%d given)",
+        #else
+            "%s() takes %s %zd positional argument%s (%zd given)",
+        #endif
+        func_name, more_or_less, num_expected, number, num_found);
+}
+
+static int __Pyx_ParseOptionalKeywords(
+    PyObject *kwds,
+    PyObject **argnames[],
+    PyObject *kwds2,
+    PyObject *values[],
+    Py_ssize_t num_pos_args,
+    const char* function_name)
+{
+    PyObject *key = 0, *value = 0;
+    Py_ssize_t pos = 0;
+    PyObject*** name;
+    PyObject*** first_kw_arg = argnames + num_pos_args;
+
+    while (PyDict_Next(kwds, &pos, &key, &value)) {
+        #if PY_MAJOR_VERSION < 3
+        if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) {
+        #else
+        if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) {
+        #endif
+            goto invalid_keyword_type;
+        } else {
+            name = argnames;
+            while (*name && (**name != key)) name++;
+            if (*name) {
+                if (name < first_kw_arg) goto arg_passed_twice;
+                values[name-argnames] = value;
+            } else {
+                for (name = first_kw_arg; *name; name++) {
+                    #if PY_MAJOR_VERSION >= 3
+                    if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
+                        PyUnicode_Compare(**name, key) == 0) break;
+                    #else
+                    if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
+                        strcmp(PyString_AS_STRING(**name),
+                               PyString_AS_STRING(key)) == 0) break;
+                    #endif
+                }
+                if (*name) {
+                    values[name-argnames] = value;
+                } else {
+                    /* unexpected keyword found */
+                    for (name=argnames; name != first_kw_arg; name++) {
+                        if (**name == key) goto arg_passed_twice;
+                        #if PY_MAJOR_VERSION >= 3
+                        if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
+                            PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice;
+                        #else
+                        if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
+                            strcmp(PyString_AS_STRING(**name),
+                                   PyString_AS_STRING(key)) == 0) goto arg_passed_twice;
+                        #endif
+                    }
+                    if (kwds2) {
+                        if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+                    } else {
+                        goto invalid_keyword;
+                    }
+                }
+            }
+        }
+    }
+    return 0;
+arg_passed_twice:
+    __Pyx_RaiseDoubleKeywordsError(function_name, **name);
+    goto bad;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%s() keywords must be strings", function_name);
+    goto bad;
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%s() got an unexpected keyword argument '%s'",
+        function_name, PyString_AsString(key));
+    #else
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
+    #endif
+bad:
+    return -1;
+}
+
+static INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) {
   if (info->buf == NULL) return;
   if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL;
-  __Pyx_ReleaseBuffer(obj, info);
+  __Pyx_ReleaseBuffer(info);
 }
 
 static INLINE void __Pyx_ZeroBuffer(Py_buffer* buf) {
   buf->buf = NULL;
+  buf->obj = NULL;
   buf->strides = __Pyx_zeros;
   buf->shape = __Pyx_zeros;
   buf->suboffsets = __Pyx_minusones;
@@ -1998,58 +3161,72 @@
 static INLINE const char* __Pyx_ConsumeWhitespace(const char* ts) {
   while (1) {
     switch (*ts) {
+      case '@':
       case 10:
       case 13:
       case ' ':
         ++ts;
+        break;
+      case '=':
+      case '<':
+      case '>':
+      case '!':
+        PyErr_SetString(PyExc_ValueError, "Buffer acquisition error: Only native byte order, size and alignment supported.");
+        return NULL;               
       default:
         return ts;
     }
   }
 }
 
-static INLINE const char* __Pyx_BufferTypestringCheckEndian(const char* ts) {
-  int num = 1;
-  int little_endian = ((char*)&num)[0];
-  int ok = 1;
-  switch (*ts) {
-    case '@':
-    case '=':
-      ++ts; break;
-    case '<':
-      if (little_endian) ++ts;
-      else ok = 0;
-      break;
-    case '>':
-    case '!':
-      if (!little_endian) ++ts;
-      else ok = 0;
-      break;
-  }
-  if (!ok) {
-    PyErr_Format(PyExc_ValueError, "Buffer has wrong endianness (rejecting on '%s')", ts);
-    return NULL;
-  }
-  return ts;
-}
-
 static void __Pyx_BufferNdimError(Py_buffer* buffer, int expected_ndim) {
   PyErr_Format(PyExc_ValueError,
                "Buffer has wrong number of dimensions (expected %d, got %d)",
                expected_ndim, buffer->ndim);
 }
 
+static const char* __Pyx_DescribeTokenInFormatString(const char* ts) {
+  switch (*ts) {
+    case 'b': return "char";
+    case 'B': return "unsigned char";
+    case 'h': return "short";
+    case 'H': return "unsigned short";
+    case 'i': return "int";
+    case 'I': return "unsigned int";
+    case 'l': return "long";
+    case 'L': return "unsigned long";
+    case 'q': return "long long";
+    case 'Q': return "unsigned long long";
+    case 'f': return "float";
+    case 'd': return "double";
+    case 'g': return "long double";
+    case 'Z': switch (*(ts+1)) {
+        case 'f': return "complex float";
+        case 'd': return "complex double";
+        case 'g': return "complex long double";
+        default: return "unparseable format string";
+    }
+    case 'T': return "a struct";
+    case 'O': return "Python object";
+    case 'P': return "a pointer";
+    default: return "unparseable format string";
+  }
+}
 
-static const char* __Pyx_BufferTypestringCheck_item_double(const char* ts) {
-  if (*ts == '1') ++ts;
-  if (*ts != 'd') {
-    PyErr_Format(PyExc_ValueError, "Buffer datatype mismatch (expected 'd', got '%s')", ts);
-    return NULL;
-  } else return ts + 1;
+static const char* __Pyx_CheckTypestring_double(const char* ts) {
+    int ok;
+    ts = __Pyx_ConsumeWhitespace(ts); if (!ts) return NULL;
+    if (*ts == '1') ++ts;
+    ok = (*ts == 'd');
+    if (!(ok)) {
+      PyErr_Format(PyExc_ValueError, "Buffer dtype mismatch (expected double, got %s)", __Pyx_DescribeTokenInFormatString(ts));
+      return NULL;
+    }
+    ++ts;
+    return ts;
+  }
   
-}
-
-static int __Pyx_GetBuffer_double(PyObject* obj, Py_buffer* buf, int flags, int nd) {
+static int __Pyx_GetBuffer_double(PyObject* obj, Py_buffer* buf, int flags, int nd, int cast) {
   const char* ts;
   if (obj == Py_None) {
     __Pyx_ZeroBuffer(buf);
@@ -2061,18 +3238,26 @@
     __Pyx_BufferNdimError(buf, nd);
     goto fail;
   }
-  ts = buf->format;
-  ts = __Pyx_ConsumeWhitespace(ts);
-  ts = __Pyx_BufferTypestringCheckEndian(ts);
-  if (!ts) goto fail;
-  ts = __Pyx_ConsumeWhitespace(ts);
-  ts = __Pyx_BufferTypestringCheck_item_double(ts);
-  if (!ts) goto fail;
-  ts = __Pyx_ConsumeWhitespace(ts);
-  if (*ts != 0) {
-    PyErr_Format(PyExc_ValueError,
-      "Expected non-struct buffer data type (expected end, got '%s')", ts);
-    goto fail;
+  if (!cast) {
+    ts = buf->format;
+    ts = __Pyx_ConsumeWhitespace(ts);
+    if (!ts) goto fail;
+    ts = __Pyx_CheckTypestring_double(ts);
+    if (!ts) goto fail;
+    ts = __Pyx_ConsumeWhitespace(ts);
+    if (!ts) goto fail;
+    if (*ts != 0) {
+      PyErr_Format(PyExc_ValueError,
+        "Buffer dtype mismatch (expected end, got %s)",
+        __Pyx_DescribeTokenInFormatString(ts));
+      goto fail;
+    }
+  } else {
+    if (buf->itemsize != sizeof(double)) {
+      PyErr_SetString(PyExc_ValueError,
+        "Attempted cast of buffer to datatype of different size.");
+      goto fail;
+    }
   }
   if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
   return 0;
@@ -2086,21 +3271,40 @@
 }
 
 
-static INLINE void __Pyx_RaiseArgtupleTooLong(
-    Py_ssize_t num_expected,
-    Py_ssize_t num_found)
-{
-    const char* error_message =
-    #if PY_VERSION_HEX < 0x02050000
-        "function takes at most %d positional arguments (%d given)";
-    #else
-        "function takes at most %zd positional arguments (%zd given)";
-    #endif
-    PyErr_Format(PyExc_TypeError, error_message, num_expected, num_found);
+
+static INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+
+    tmp_type = tstate->curexc_type;
+    tmp_value = tstate->curexc_value;
+    tmp_tb = tstate->curexc_traceback;
+    tstate->curexc_type = type;
+    tstate->curexc_value = value;
+    tstate->curexc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
 }
 
-#if (PY_MAJOR_VERSION < 3) && !(Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_NEWBUFFER)
+static INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
+    PyThreadState *tstate = PyThreadState_GET();
+    *type = tstate->curexc_type;
+    *value = tstate->curexc_value;
+    *tb = tstate->curexc_traceback;
+
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+}
+
+
+#if PY_MAJOR_VERSION < 3
 static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
+  #if PY_VERSION_HEX >= 0x02060000
+  if (Py_TYPE(obj)->tp_flags & Py_TPFLAGS_HAVE_NEWBUFFER)
+      return PyObject_GetBuffer(obj, view, flags);
+  #endif
   if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pf_5numpy_7ndarray___getbuffer__(obj, view, flags);
   else {
   PyErr_Format(PyExc_TypeError, "'%100s' does not have the buffer interface", Py_TYPE(obj)->tp_name);
@@ -2108,8 +3312,13 @@
     }
 }
 
-static void __Pyx_ReleaseBuffer(PyObject *obj, Py_buffer *view) {
-
+static void __Pyx_ReleaseBuffer(Py_buffer *view) {
+  PyObject* obj = view->obj;
+  if (obj) {
+if (PyObject_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) __pyx_pf_5numpy_7ndarray___releasebuffer__(obj, view);
+    Py_DECREF(obj);
+    view->obj = NULL;
+  }
 }
 
 #endif
@@ -2195,7 +3404,30 @@
     return 0;
 }
 
+static INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
+    PyThreadState *tstate = PyThreadState_GET();
+    *type = tstate->exc_type;
+    *value = tstate->exc_value;
+    *tb = tstate->exc_traceback;
+    Py_XINCREF(*type);
+    Py_XINCREF(*value);
+    Py_XINCREF(*tb);
+}
 
+static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = type;
+    tstate->exc_value = value;
+    tstate->exc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+}
+
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
     Py_XINCREF(type);
     Py_XINCREF(value);
@@ -2251,7 +3483,7 @@
             }
         #endif
     }
-    PyErr_Restore(type, value, tb);
+    __Pyx_ErrRestore(type, value, tb);
     return;
 raise_error:
     Py_XDECREF(value);
@@ -2260,42 +3492,78 @@
     return;
 }
 
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+    __Pyx_ErrFetch(type, value, tb);
+    PyErr_NormalizeException(type, value, tb);
+    if (PyErr_Occurred())
+        goto bad;
+    Py_INCREF(*type);
+    Py_INCREF(*value);
+    Py_INCREF(*tb);
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = *type;
+    tstate->exc_value = *value;
+    tstate->exc_traceback = *tb;
+    /* Make sure tstate is in a consistent state when we XDECREF
+    these objects (XDECREF may run arbitrary code). */
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+    return 0;
+bad:
+    Py_XDECREF(*type);
+    Py_XDECREF(*value);
+    Py_XDECREF(*tb);
+    return -1;
+}
+
+
 static void __Pyx_WriteUnraisable(const char *name) {
     PyObject *old_exc, *old_val, *old_tb;
     PyObject *ctx;
-    PyErr_Fetch(&old_exc, &old_val, &old_tb);
+    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
     #if PY_MAJOR_VERSION < 3
     ctx = PyString_FromString(name);
     #else
     ctx = PyUnicode_FromString(name);
     #endif
-    PyErr_Restore(old_exc, old_val, old_tb);
-    if (!ctx)
-        ctx = Py_None;
-    PyErr_WriteUnraisable(ctx);
+    __Pyx_ErrRestore(old_exc, old_val, old_tb);
+    if (!ctx) {
+        PyErr_WriteUnraisable(Py_None);
+    } else {
+        PyErr_WriteUnraisable(ctx);
+        Py_DECREF(ctx);
+    }
 }
 
 #ifndef __PYX_HAVE_RT_ImportType
 #define __PYX_HAVE_RT_ImportType
-static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name,
+static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
     long size)
 {
     PyObject *py_module = 0;
     PyObject *result = 0;
     PyObject *py_name = 0;
 
+    py_module = __Pyx_ImportModule(module_name);
+    if (!py_module)
+        goto bad;
     #if PY_MAJOR_VERSION < 3
-    py_name = PyString_FromString(module_name);
+    py_name = PyString_FromString(class_name);
     #else
-    py_name = PyUnicode_FromString(module_name);
+    py_name = PyUnicode_FromString(class_name);
     #endif
     if (!py_name)
         goto bad;
-
-    py_module = __Pyx_ImportModule(module_name);
-    if (!py_module)
-        goto bad;
-    result = PyObject_GetAttrString(py_module, class_name);
+    result = PyObject_GetAttr(py_module, py_name);
+    Py_DECREF(py_name);
+    py_name = 0;
+    Py_DECREF(py_module);
+    py_module = 0;
     if (!result)
         goto bad;
     if (!PyType_Check(result)) {
@@ -2312,7 +3580,7 @@
     }
     return (PyTypeObject *)result;
 bad:
-    Py_XDECREF(py_name);
+    Py_XDECREF(py_module);
     Py_XDECREF(result);
     return 0;
 }
@@ -2320,7 +3588,7 @@
 
 #ifndef __PYX_HAVE_RT_ImportModule
 #define __PYX_HAVE_RT_ImportModule
-static PyObject *__Pyx_ImportModule(char *name) {
+static PyObject *__Pyx_ImportModule(const char *name) {
     PyObject *py_name = 0;
     PyObject *py_module = 0;
 
@@ -2402,7 +3670,7 @@
     );
     if (!py_code) goto bad;
     py_frame = PyFrame_New(
-        PyThreadState_Get(), /*PyThreadState *tstate,*/
+        PyThreadState_GET(), /*PyThreadState *tstate,*/
         py_code,             /*PyCodeObject *code,*/
         py_globals,          /*PyObject *globals,*/
         0                    /*PyObject *locals*/



More information about the Scipy-svn mailing list