[Git][debian-gis-team/python-pdal][upstream] New upstream version 2.2.2+ds

Bas Couwenberg gitlab at salsa.debian.org
Fri Sep 20 05:59:24 BST 2019



Bas Couwenberg pushed to branch upstream at Debian GIS Project / python-pdal


Commits:
461c6250 by Bas Couwenberg at 2019-09-20T04:48:37Z
New upstream version 2.2.2+ds
- - - - -


8 changed files:

- PKG-INFO
- − VERSION.txt
- pdal/PyArray.hpp
- pdal/__init__.py
- pdal/libpdalpython.cpp
- pdal/libpdalpython.pyx
- setup.py
- test/test_pipeline.py


Changes:

=====================================
PKG-INFO
=====================================
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: PDAL
-Version: 2.2.1
+Version: 2.2.2
 Summary: Point cloud data processing
 Home-page: http://pdal.io
 Author: Howard Butler


=====================================
VERSION.txt deleted
=====================================
@@ -1 +0,0 @@
-2.2.1
\ No newline at end of file


=====================================
pdal/PyArray.hpp
=====================================
@@ -74,7 +74,7 @@ private:
     Array& operator=(Array const& rhs);
     Fields m_fields;
     bool m_rowMajor;
-    Shape m_shape;
+    Shape m_shape {};
     std::vector<std::unique_ptr<ArrayIter>> m_iterators;
 };
 


=====================================
pdal/__init__.py
=====================================
@@ -1,4 +1,4 @@
-__version__='2.2.1'
+__version__='2.2.2'
 
 from .pipeline import Pipeline
 from .array import Array


=====================================
pdal/libpdalpython.cpp
=====================================
@@ -28,8 +28,7 @@
         ],
         "language": "c++",
         "libraries": [
-            "pdalcpp",
-            "pdal_plugin_reader_numpy"
+            "pdalcpp"
         ],
         "library_dirs": [
             "/Users/hobu/miniconda3/envs/pdal/lib"
@@ -1813,7 +1812,6 @@ int __pyx_module_is_main_pdal__libpdalpython = 0;
 
 /* Implementation of 'pdal.libpdalpython' */
 static PyObject *__pyx_builtin_TypeError;
-static PyObject *__pyx_builtin_print;
 static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_range;
 static PyObject *__pyx_builtin_RuntimeError;
@@ -1829,7 +1827,6 @@ static const char __pyx_k_test[] = "__test__";
 static const char __pyx_k_array[] = "array";
 static const char __pyx_k_dtype[] = "dtype";
 static const char __pyx_k_loads[] = "loads";
-static const char __pyx_k_print[] = "print";
 static const char __pyx_k_range[] = "range";
 static const char __pyx_k_arrays[] = "arrays";
 static const char __pyx_k_c_dims[] = "c_dims";
@@ -1850,7 +1847,6 @@ static const char __pyx_k_description[] = "description";
 static const char __pyx_k_RuntimeError[] = "RuntimeError";
 static const char __pyx_k_getDimensions[] = "getDimensions";
 static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
-static const char __pyx_k_Looping_arrays[] = "Looping arrays\n";
 static const char __pyx_k_getVersionMajor[] = "getVersionMajor";
 static const char __pyx_k_getVersionMinor[] = "getVersionMinor";
 static const char __pyx_k_getVersionPatch[] = "getVersionPatch";
@@ -1875,7 +1871,6 @@ static PyObject *__pyx_kp_u_C_Pipeline_object_not_constructe;
 static PyObject *__pyx_kp_u_Format_string_allocated_too_shor;
 static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2;
 static PyObject *__pyx_n_s_ImportError;
-static PyObject *__pyx_kp_u_Looping_arrays;
 static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor;
 static PyObject *__pyx_n_s_PyArray;
 static PyObject *__pyx_n_s_PyPipeline;
@@ -1914,7 +1909,6 @@ static PyObject *__pyx_kp_u_numpy_core_umath_failed_to_impor;
 static PyObject *__pyx_n_s_output;
 static PyObject *__pyx_n_s_pdal_libpdalpython;
 static PyObject *__pyx_kp_s_pdal_libpdalpython_pyx;
-static PyObject *__pyx_n_s_print;
 static PyObject *__pyx_n_s_ptr;
 static PyObject *__pyx_n_s_range;
 static PyObject *__pyx_n_s_reduce;
@@ -1965,16 +1959,15 @@ static PyObject *__pyx_tuple__9;
 static PyObject *__pyx_tuple__10;
 static PyObject *__pyx_tuple__11;
 static PyObject *__pyx_tuple__12;
-static PyObject *__pyx_tuple__13;
-static PyObject *__pyx_tuple__21;
+static PyObject *__pyx_tuple__20;
+static PyObject *__pyx_codeobj__13;
 static PyObject *__pyx_codeobj__14;
 static PyObject *__pyx_codeobj__15;
 static PyObject *__pyx_codeobj__16;
 static PyObject *__pyx_codeobj__17;
 static PyObject *__pyx_codeobj__18;
 static PyObject *__pyx_codeobj__19;
-static PyObject *__pyx_codeobj__20;
-static PyObject *__pyx_codeobj__22;
+static PyObject *__pyx_codeobj__21;
 /* Late includes */
 
 /* "pdal/libpdalpython.pyx":24
@@ -3079,8 +3072,8 @@ static int __pyx_pf_4pdal_13libpdalpython_10PyPipeline___cinit__(struct __pyx_ob
  *         cdef Array* a
  * 
  *         if arrays is not None:             # <<<<<<<<<<<<<<
- *             print("Looping arrays\n")
  *             for array in arrays:
+ *                 a = new Array(array)
  */
   __pyx_t_1 = (__pyx_v_arrays != ((PyObject*)Py_None));
   __pyx_t_3 = (__pyx_t_1 != 0);
@@ -3089,54 +3082,43 @@ static int __pyx_pf_4pdal_13libpdalpython_10PyPipeline___cinit__(struct __pyx_ob
     /* "pdal/libpdalpython.pyx":109
  * 
  *         if arrays is not None:
- *             print("Looping arrays\n")             # <<<<<<<<<<<<<<
- *             for array in arrays:
- *                 a = new Array(array)
- */
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_print, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 109, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-
-    /* "pdal/libpdalpython.pyx":110
- *         if arrays is not None:
- *             print("Looping arrays\n")
  *             for array in arrays:             # <<<<<<<<<<<<<<
  *                 a = new Array(array)
  *                 c_arrays.push_back(a)
  */
     if (unlikely(__pyx_v_arrays == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-      __PYX_ERR(1, 110, __pyx_L1_error)
+      __PYX_ERR(1, 109, __pyx_L1_error)
     }
     __pyx_t_4 = __pyx_v_arrays; __Pyx_INCREF(__pyx_t_4); __pyx_t_2 = 0;
     for (;;) {
       if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_4)) break;
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
-      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(1, 110, __pyx_L1_error)
+      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_2); __Pyx_INCREF(__pyx_t_5); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(1, 109, __pyx_L1_error)
       #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 110, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 109, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       #endif
       __Pyx_XDECREF_SET(__pyx_v_array, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "pdal/libpdalpython.pyx":111
- *             print("Looping arrays\n")
+      /* "pdal/libpdalpython.pyx":110
+ *         if arrays is not None:
  *             for array in arrays:
  *                 a = new Array(array)             # <<<<<<<<<<<<<<
  *                 c_arrays.push_back(a)
  * 
  */
-      if (!(likely(((__pyx_v_array) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_array, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 111, __pyx_L1_error)
+      if (!(likely(((__pyx_v_array) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_array, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 110, __pyx_L1_error)
       try {
         __pyx_t_6 = new pdal::python::Array(((PyArrayObject *)__pyx_v_array));
       } catch(...) {
         __Pyx_CppExn2PyErr();
-        __PYX_ERR(1, 111, __pyx_L1_error)
+        __PYX_ERR(1, 110, __pyx_L1_error)
       }
       __pyx_v_a = __pyx_t_6;
 
-      /* "pdal/libpdalpython.pyx":112
+      /* "pdal/libpdalpython.pyx":111
  *             for array in arrays:
  *                 a = new Array(array)
  *                 c_arrays.push_back(a)             # <<<<<<<<<<<<<<
@@ -3147,12 +3129,12 @@ static int __pyx_pf_4pdal_13libpdalpython_10PyPipeline___cinit__(struct __pyx_ob
         __pyx_v_c_arrays.push_back(__pyx_v_a);
       } catch(...) {
         __Pyx_CppExn2PyErr();
-        __PYX_ERR(1, 112, __pyx_L1_error)
+        __PYX_ERR(1, 111, __pyx_L1_error)
       }
 
-      /* "pdal/libpdalpython.pyx":110
+      /* "pdal/libpdalpython.pyx":109
+ * 
  *         if arrays is not None:
- *             print("Looping arrays\n")
  *             for array in arrays:             # <<<<<<<<<<<<<<
  *                 a = new Array(array)
  *                 c_arrays.push_back(a)
@@ -3160,7 +3142,7 @@ static int __pyx_pf_4pdal_13libpdalpython_10PyPipeline___cinit__(struct __pyx_ob
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "pdal/libpdalpython.pyx":114
+    /* "pdal/libpdalpython.pyx":113
  *                 c_arrays.push_back(a)
  * 
  *             self.thisptr = new Pipeline(json.encode('UTF-8'), c_arrays)             # <<<<<<<<<<<<<<
@@ -3169,16 +3151,16 @@ static int __pyx_pf_4pdal_13libpdalpython_10PyPipeline___cinit__(struct __pyx_ob
  */
     if (unlikely(__pyx_v_json == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "encode");
-      __PYX_ERR(1, 114, __pyx_L1_error)
+      __PYX_ERR(1, 113, __pyx_L1_error)
     }
-    __pyx_t_4 = PyUnicode_AsUTF8String(__pyx_v_json); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 114, __pyx_L1_error)
+    __pyx_t_4 = PyUnicode_AsUTF8String(__pyx_v_json); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 113, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_7 = __Pyx_PyBytes_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(1, 114, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyBytes_AsString(__pyx_t_4); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(1, 113, __pyx_L1_error)
     try {
       __pyx_t_8 = new pdal::python::Pipeline(__pyx_t_7, __pyx_v_c_arrays);
     } catch(...) {
       __Pyx_CppExn2PyErr();
-      __PYX_ERR(1, 114, __pyx_L1_error)
+      __PYX_ERR(1, 113, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_self->thisptr = __pyx_t_8;
@@ -3187,13 +3169,13 @@ static int __pyx_pf_4pdal_13libpdalpython_10PyPipeline___cinit__(struct __pyx_ob
  *         cdef Array* a
  * 
  *         if arrays is not None:             # <<<<<<<<<<<<<<
- *             print("Looping arrays\n")
  *             for array in arrays:
+ *                 a = new Array(array)
  */
     goto __pyx_L4;
   }
 
-  /* "pdal/libpdalpython.pyx":116
+  /* "pdal/libpdalpython.pyx":115
  *             self.thisptr = new Pipeline(json.encode('UTF-8'), c_arrays)
  *         else:
  *             self.thisptr = new Pipeline(json.encode('UTF-8'))             # <<<<<<<<<<<<<<
@@ -3203,16 +3185,16 @@ static int __pyx_pf_4pdal_13libpdalpython_10PyPipeline___cinit__(struct __pyx_ob
   /*else*/ {
     if (unlikely(__pyx_v_json == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "encode");
-      __PYX_ERR(1, 116, __pyx_L1_error)
+      __PYX_ERR(1, 115, __pyx_L1_error)
     }
-    __pyx_t_4 = PyUnicode_AsUTF8String(__pyx_v_json); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 116, __pyx_L1_error)
+    __pyx_t_4 = PyUnicode_AsUTF8String(__pyx_v_json); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 115, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_9 = __Pyx_PyBytes_AsString(__pyx_t_4); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) __PYX_ERR(1, 116, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyBytes_AsString(__pyx_t_4); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) __PYX_ERR(1, 115, __pyx_L1_error)
     try {
       __pyx_t_8 = new pdal::python::Pipeline(__pyx_t_9);
     } catch(...) {
       __Pyx_CppExn2PyErr();
-      __PYX_ERR(1, 116, __pyx_L1_error)
+      __PYX_ERR(1, 115, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_self->thisptr = __pyx_t_8;
@@ -3241,7 +3223,7 @@ static int __pyx_pf_4pdal_13libpdalpython_10PyPipeline___cinit__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "pdal/libpdalpython.pyx":118
+/* "pdal/libpdalpython.pyx":117
  *             self.thisptr = new Pipeline(json.encode('UTF-8'))
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -3264,7 +3246,7 @@ static void __pyx_pf_4pdal_13libpdalpython_10PyPipeline_2__dealloc__(struct __py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "pdal/libpdalpython.pyx":119
+  /* "pdal/libpdalpython.pyx":118
  * 
  *     def __dealloc__(self):
  *         del self.thisptr             # <<<<<<<<<<<<<<
@@ -3273,7 +3255,7 @@ static void __pyx_pf_4pdal_13libpdalpython_10PyPipeline_2__dealloc__(struct __py
  */
   delete __pyx_v_self->thisptr;
 
-  /* "pdal/libpdalpython.pyx":118
+  /* "pdal/libpdalpython.pyx":117
  *             self.thisptr = new Pipeline(json.encode('UTF-8'))
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -3285,7 +3267,7 @@ static void __pyx_pf_4pdal_13libpdalpython_10PyPipeline_2__dealloc__(struct __py
   __Pyx_RefNannyFinishContext();
 }
 
-/* "pdal/libpdalpython.pyx":122
+/* "pdal/libpdalpython.pyx":121
  * 
  *     property pipeline:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -3313,7 +3295,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_8pipeline___get__(s
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "pdal/libpdalpython.pyx":123
+  /* "pdal/libpdalpython.pyx":122
  *     property pipeline:
  *         def __get__(self):
  *             return self.thisptr.getPipeline()             # <<<<<<<<<<<<<<
@@ -3325,15 +3307,15 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_8pipeline___get__(s
     __pyx_t_1 = __pyx_v_self->thisptr->getPipeline();
   } catch(...) {
     __Pyx_CppExn2PyErr();
-    __PYX_ERR(1, 123, __pyx_L1_error)
+    __PYX_ERR(1, 122, __pyx_L1_error)
   }
-  __pyx_t_2 = __pyx_convert_PyUnicode_string_to_py_std__in_string(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 123, __pyx_L1_error)
+  __pyx_t_2 = __pyx_convert_PyUnicode_string_to_py_std__in_string(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 122, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pdal/libpdalpython.pyx":122
+  /* "pdal/libpdalpython.pyx":121
  * 
  *     property pipeline:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -3352,7 +3334,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_8pipeline___get__(s
   return __pyx_r;
 }
 
-/* "pdal/libpdalpython.pyx":126
+/* "pdal/libpdalpython.pyx":125
  * 
  *     property metadata:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -3380,7 +3362,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_8metadata___get__(s
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "pdal/libpdalpython.pyx":127
+  /* "pdal/libpdalpython.pyx":126
  *     property metadata:
  *         def __get__(self):
  *             return self.thisptr.getMetadata()             # <<<<<<<<<<<<<<
@@ -3392,15 +3374,15 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_8metadata___get__(s
     __pyx_t_1 = __pyx_v_self->thisptr->getMetadata();
   } catch(...) {
     __Pyx_CppExn2PyErr();
-    __PYX_ERR(1, 127, __pyx_L1_error)
+    __PYX_ERR(1, 126, __pyx_L1_error)
   }
-  __pyx_t_2 = __pyx_convert_PyUnicode_string_to_py_std__in_string(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 127, __pyx_L1_error)
+  __pyx_t_2 = __pyx_convert_PyUnicode_string_to_py_std__in_string(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 126, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pdal/libpdalpython.pyx":126
+  /* "pdal/libpdalpython.pyx":125
  * 
  *     property metadata:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -3419,7 +3401,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_8metadata___get__(s
   return __pyx_r;
 }
 
-/* "pdal/libpdalpython.pyx":130
+/* "pdal/libpdalpython.pyx":129
  * 
  *     property loglevel:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -3446,7 +3428,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_8loglevel___get__(s
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "pdal/libpdalpython.pyx":131
+  /* "pdal/libpdalpython.pyx":130
  *     property loglevel:
  *         def __get__(self):
  *             return self.thisptr.getLogLevel()             # <<<<<<<<<<<<<<
@@ -3454,13 +3436,13 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_8loglevel___get__(s
  *             self.thisptr.setLogLevel(v)
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->thisptr->getLogLevel()); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 131, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->thisptr->getLogLevel()); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pdal/libpdalpython.pyx":130
+  /* "pdal/libpdalpython.pyx":129
  * 
  *     property loglevel:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -3479,7 +3461,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_8loglevel___get__(s
   return __pyx_r;
 }
 
-/* "pdal/libpdalpython.pyx":132
+/* "pdal/libpdalpython.pyx":131
  *         def __get__(self):
  *             return self.thisptr.getLogLevel()
  *         def __set__(self, v):             # <<<<<<<<<<<<<<
@@ -3506,17 +3488,17 @@ static int __pyx_pf_4pdal_13libpdalpython_10PyPipeline_8loglevel_2__set__(struct
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "pdal/libpdalpython.pyx":133
+  /* "pdal/libpdalpython.pyx":132
  *             return self.thisptr.getLogLevel()
  *         def __set__(self, v):
  *             self.thisptr.setLogLevel(v)             # <<<<<<<<<<<<<<
  * 
  *     property log:
  */
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_v); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 133, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_v); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 132, __pyx_L1_error)
   __pyx_v_self->thisptr->setLogLevel(__pyx_t_1);
 
-  /* "pdal/libpdalpython.pyx":132
+  /* "pdal/libpdalpython.pyx":131
  *         def __get__(self):
  *             return self.thisptr.getLogLevel()
  *         def __set__(self, v):             # <<<<<<<<<<<<<<
@@ -3535,7 +3517,7 @@ static int __pyx_pf_4pdal_13libpdalpython_10PyPipeline_8loglevel_2__set__(struct
   return __pyx_r;
 }
 
-/* "pdal/libpdalpython.pyx":136
+/* "pdal/libpdalpython.pyx":135
  * 
  *     property log:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -3563,7 +3545,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_3log___get__(struct
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "pdal/libpdalpython.pyx":138
+  /* "pdal/libpdalpython.pyx":137
  *         def __get__(self):
  * 
  *             return self.thisptr.getLog()             # <<<<<<<<<<<<<<
@@ -3575,15 +3557,15 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_3log___get__(struct
     __pyx_t_1 = __pyx_v_self->thisptr->getLog();
   } catch(...) {
     __Pyx_CppExn2PyErr();
-    __PYX_ERR(1, 138, __pyx_L1_error)
+    __PYX_ERR(1, 137, __pyx_L1_error)
   }
-  __pyx_t_2 = __pyx_convert_PyUnicode_string_to_py_std__in_string(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 138, __pyx_L1_error)
+  __pyx_t_2 = __pyx_convert_PyUnicode_string_to_py_std__in_string(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 137, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pdal/libpdalpython.pyx":136
+  /* "pdal/libpdalpython.pyx":135
  * 
  *     property log:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -3602,7 +3584,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_3log___get__(struct
   return __pyx_r;
 }
 
-/* "pdal/libpdalpython.pyx":141
+/* "pdal/libpdalpython.pyx":140
  * 
  *     property schema:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -3635,19 +3617,19 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6schema___get__(str
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "pdal/libpdalpython.pyx":142
+  /* "pdal/libpdalpython.pyx":141
  *     property schema:
  *         def __get__(self):
  *             import json             # <<<<<<<<<<<<<<
  * 
  *             j = self.thisptr.getSchema()
  */
-  __pyx_t_1 = __Pyx_Import(__pyx_n_s_json, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 142, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Import(__pyx_n_s_json, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_json = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "pdal/libpdalpython.pyx":144
+  /* "pdal/libpdalpython.pyx":143
  *             import json
  * 
  *             j = self.thisptr.getSchema()             # <<<<<<<<<<<<<<
@@ -3658,11 +3640,11 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6schema___get__(str
     __pyx_t_2 = __pyx_v_self->thisptr->getSchema();
   } catch(...) {
     __Pyx_CppExn2PyErr();
-    __PYX_ERR(1, 144, __pyx_L1_error)
+    __PYX_ERR(1, 143, __pyx_L1_error)
   }
   __pyx_v_j = __pyx_t_2;
 
-  /* "pdal/libpdalpython.pyx":145
+  /* "pdal/libpdalpython.pyx":144
  * 
  *             j = self.thisptr.getSchema()
  *             return json.loads(j)             # <<<<<<<<<<<<<<
@@ -3670,9 +3652,9 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6schema___get__(str
  *     property arrays:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_json, __pyx_n_s_loads); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 145, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_json, __pyx_n_s_loads); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __pyx_convert_PyUnicode_string_to_py_std__in_string(__pyx_v_j); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 145, __pyx_L1_error)
+  __pyx_t_4 = __pyx_convert_PyUnicode_string_to_py_std__in_string(__pyx_v_j); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -3687,14 +3669,14 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6schema___get__(str
   __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 145, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 144, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pdal/libpdalpython.pyx":141
+  /* "pdal/libpdalpython.pyx":140
  * 
  *     property schema:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -3717,7 +3699,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6schema___get__(str
   return __pyx_r;
 }
 
-/* "pdal/libpdalpython.pyx":149
+/* "pdal/libpdalpython.pyx":148
  *     property arrays:
  * 
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -3754,7 +3736,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6arrays___get__(str
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "pdal/libpdalpython.pyx":150
+  /* "pdal/libpdalpython.pyx":149
  * 
  *         def __get__(self):
  *             v = self.thisptr.getArrays()             # <<<<<<<<<<<<<<
@@ -3765,23 +3747,23 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6arrays___get__(str
     __pyx_t_1 = __pyx_v_self->thisptr->getArrays();
   } catch(...) {
     __Pyx_CppExn2PyErr();
-    __PYX_ERR(1, 150, __pyx_L1_error)
+    __PYX_ERR(1, 149, __pyx_L1_error)
   }
   __pyx_v_v = __pyx_t_1;
 
-  /* "pdal/libpdalpython.pyx":151
+  /* "pdal/libpdalpython.pyx":150
  *         def __get__(self):
  *             v = self.thisptr.getArrays()
  *             output = []             # <<<<<<<<<<<<<<
  *             cdef vector[Array*].iterator it = v.begin()
  *             cdef Array* a
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 151, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 150, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_output = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "pdal/libpdalpython.pyx":152
+  /* "pdal/libpdalpython.pyx":151
  *             v = self.thisptr.getArrays()
  *             output = []
  *             cdef vector[Array*].iterator it = v.begin()             # <<<<<<<<<<<<<<
@@ -3790,7 +3772,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6arrays___get__(str
  */
   __pyx_v_it = __pyx_v_v.begin();
 
-  /* "pdal/libpdalpython.pyx":154
+  /* "pdal/libpdalpython.pyx":153
  *             cdef vector[Array*].iterator it = v.begin()
  *             cdef Array* a
  *             while it != v.end():             # <<<<<<<<<<<<<<
@@ -3801,7 +3783,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6arrays___get__(str
     __pyx_t_3 = ((__pyx_v_it != __pyx_v_v.end()) != 0);
     if (!__pyx_t_3) break;
 
-    /* "pdal/libpdalpython.pyx":155
+    /* "pdal/libpdalpython.pyx":154
  *             cdef Array* a
  *             while it != v.end():
  *                 ptr = deref(it)             # <<<<<<<<<<<<<<
@@ -3810,7 +3792,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6arrays___get__(str
  */
     __pyx_v_ptr = (*__pyx_v_it);
 
-    /* "pdal/libpdalpython.pyx":156
+    /* "pdal/libpdalpython.pyx":155
  *             while it != v.end():
  *                 ptr = deref(it)
  *                 a = ptr#.get()             # <<<<<<<<<<<<<<
@@ -3819,7 +3801,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6arrays___get__(str
  */
     __pyx_v_a = __pyx_v_ptr;
 
-    /* "pdal/libpdalpython.pyx":157
+    /* "pdal/libpdalpython.pyx":156
  *                 ptr = deref(it)
  *                 a = ptr#.get()
  *                 o = a.getPythonArray()             # <<<<<<<<<<<<<<
@@ -3830,20 +3812,20 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6arrays___get__(str
       __pyx_t_4 = __pyx_v_a->getPythonArray();
     } catch(...) {
       __Pyx_CppExn2PyErr();
-      __PYX_ERR(1, 157, __pyx_L1_error)
+      __PYX_ERR(1, 156, __pyx_L1_error)
     }
     __pyx_v_o = __pyx_t_4;
 
-    /* "pdal/libpdalpython.pyx":158
+    /* "pdal/libpdalpython.pyx":157
  *                 a = ptr#.get()
  *                 o = a.getPythonArray()
  *                 output.append(<object>o)             # <<<<<<<<<<<<<<
  *                 inc(it)
  *             return output
  */
-    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_output, ((PyObject *)__pyx_v_o)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 158, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_output, ((PyObject *)__pyx_v_o)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 157, __pyx_L1_error)
 
-    /* "pdal/libpdalpython.pyx":159
+    /* "pdal/libpdalpython.pyx":158
  *                 o = a.getPythonArray()
  *                 output.append(<object>o)
  *                 inc(it)             # <<<<<<<<<<<<<<
@@ -3853,7 +3835,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6arrays___get__(str
     (void)((++__pyx_v_it));
   }
 
-  /* "pdal/libpdalpython.pyx":160
+  /* "pdal/libpdalpython.pyx":159
  *                 output.append(<object>o)
  *                 inc(it)
  *             return output             # <<<<<<<<<<<<<<
@@ -3865,7 +3847,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6arrays___get__(str
   __pyx_r = __pyx_v_output;
   goto __pyx_L0;
 
-  /* "pdal/libpdalpython.pyx":149
+  /* "pdal/libpdalpython.pyx":148
  *     property arrays:
  * 
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -3885,7 +3867,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6arrays___get__(str
   return __pyx_r;
 }
 
-/* "pdal/libpdalpython.pyx":163
+/* "pdal/libpdalpython.pyx":162
  * 
  * 
  *     def execute(self):             # <<<<<<<<<<<<<<
@@ -3914,7 +3896,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_4execute(struct __p
   int64_t __pyx_t_3;
   __Pyx_RefNannySetupContext("execute", 0);
 
-  /* "pdal/libpdalpython.pyx":164
+  /* "pdal/libpdalpython.pyx":163
  * 
  *     def execute(self):
  *         if not self.thisptr:             # <<<<<<<<<<<<<<
@@ -3924,20 +3906,20 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_4execute(struct __p
   __pyx_t_1 = ((!(__pyx_v_self->thisptr != 0)) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "pdal/libpdalpython.pyx":165
+    /* "pdal/libpdalpython.pyx":164
  *     def execute(self):
  *         if not self.thisptr:
  *             raise Exception("C++ Pipeline object not constructed!")             # <<<<<<<<<<<<<<
  *         return self.thisptr.execute()
  * 
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 165, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 164, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(1, 165, __pyx_L1_error)
+    __PYX_ERR(1, 164, __pyx_L1_error)
 
-    /* "pdal/libpdalpython.pyx":164
+    /* "pdal/libpdalpython.pyx":163
  * 
  *     def execute(self):
  *         if not self.thisptr:             # <<<<<<<<<<<<<<
@@ -3946,7 +3928,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_4execute(struct __p
  */
   }
 
-  /* "pdal/libpdalpython.pyx":166
+  /* "pdal/libpdalpython.pyx":165
  *         if not self.thisptr:
  *             raise Exception("C++ Pipeline object not constructed!")
  *         return self.thisptr.execute()             # <<<<<<<<<<<<<<
@@ -3958,15 +3940,15 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_4execute(struct __p
     __pyx_t_3 = __pyx_v_self->thisptr->execute();
   } catch(...) {
     __Pyx_CppExn2PyErr();
-    __PYX_ERR(1, 166, __pyx_L1_error)
+    __PYX_ERR(1, 165, __pyx_L1_error)
   }
-  __pyx_t_2 = __Pyx_PyInt_From_int64_t(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 166, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int64_t(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 165, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pdal/libpdalpython.pyx":163
+  /* "pdal/libpdalpython.pyx":162
  * 
  * 
  *     def execute(self):             # <<<<<<<<<<<<<<
@@ -3985,7 +3967,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_4execute(struct __p
   return __pyx_r;
 }
 
-/* "pdal/libpdalpython.pyx":168
+/* "pdal/libpdalpython.pyx":167
  *         return self.thisptr.execute()
  * 
  *     def validate(self):             # <<<<<<<<<<<<<<
@@ -4014,7 +3996,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6validate(struct __
   bool __pyx_t_3;
   __Pyx_RefNannySetupContext("validate", 0);
 
-  /* "pdal/libpdalpython.pyx":169
+  /* "pdal/libpdalpython.pyx":168
  * 
  *     def validate(self):
  *         if not self.thisptr:             # <<<<<<<<<<<<<<
@@ -4024,19 +4006,19 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6validate(struct __
   __pyx_t_1 = ((!(__pyx_v_self->thisptr != 0)) != 0);
   if (unlikely(__pyx_t_1)) {
 
-    /* "pdal/libpdalpython.pyx":170
+    /* "pdal/libpdalpython.pyx":169
  *     def validate(self):
  *         if not self.thisptr:
  *             raise Exception("C++ Pipeline object not constructed!")             # <<<<<<<<<<<<<<
  *         return self.thisptr.validate()
  */
-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 170, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])), __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 169, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __PYX_ERR(1, 170, __pyx_L1_error)
+    __PYX_ERR(1, 169, __pyx_L1_error)
 
-    /* "pdal/libpdalpython.pyx":169
+    /* "pdal/libpdalpython.pyx":168
  * 
  *     def validate(self):
  *         if not self.thisptr:             # <<<<<<<<<<<<<<
@@ -4045,7 +4027,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6validate(struct __
  */
   }
 
-  /* "pdal/libpdalpython.pyx":171
+  /* "pdal/libpdalpython.pyx":170
  *         if not self.thisptr:
  *             raise Exception("C++ Pipeline object not constructed!")
  *         return self.thisptr.validate()             # <<<<<<<<<<<<<<
@@ -4055,15 +4037,15 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_6validate(struct __
     __pyx_t_3 = __pyx_v_self->thisptr->validate();
   } catch(...) {
     __Pyx_CppExn2PyErr();
-    __PYX_ERR(1, 171, __pyx_L1_error)
+    __PYX_ERR(1, 170, __pyx_L1_error)
   }
-  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 171, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 170, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pdal/libpdalpython.pyx":168
+  /* "pdal/libpdalpython.pyx":167
  *         return self.thisptr.execute()
  * 
  *     def validate(self):             # <<<<<<<<<<<<<<
@@ -4113,7 +4095,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_8__reduce_cython__(
  * def __setstate_cython__(self, __pyx_state):
  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -4166,7 +4148,7 @@ static PyObject *__pyx_pf_4pdal_13libpdalpython_10PyPipeline_10__setstate_cython
  * def __setstate_cython__(self, __pyx_state):
  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
  */
-  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -4306,7 +4288,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  * 
  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 272, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 272, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -4362,7 +4344,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  * 
  *             info.buf = PyArray_DATA(self)
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 276, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 276, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -4620,7 +4602,7 @@ static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, P
  *                 if   t == NPY_BYTE:        f = "b"
  *                 elif t == NPY_UBYTE:       f = "B"
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 306, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 306, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -5500,7 +5482,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  * 
  *         if ((child.byteorder == c'>' and little_endian) or
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 856, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 856, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -5568,7 +5550,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  *             # One could encode it in the format string and have Cython
  *             # complain instead, BUT: < and > in format strings also imply
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 860, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 860, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -5677,7 +5659,7 @@ static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx
  * 
  *             # Until ticket #99 is fixed, use integers to avoid warnings
  */
-        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 880, __pyx_L1_error)
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 880, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_Raise(__pyx_t_4, 0, 0, 0);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -6305,7 +6287,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) {
  * 
  * cdef inline int import_umath() except -1:
  */
-      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1038, __pyx_L5_except_error)
+      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1038, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_Raise(__pyx_t_8, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
@@ -6434,7 +6416,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) {
  * 
  * cdef inline int import_ufunc() except -1:
  */
-      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1044, __pyx_L5_except_error)
+      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1044, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_Raise(__pyx_t_8, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
@@ -6560,7 +6542,7 @@ static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) {
  *     except Exception:
  *         raise ImportError("numpy.core.umath failed to import")             # <<<<<<<<<<<<<<
  */
-      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1050, __pyx_L5_except_error)
+      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 1050, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_Raise(__pyx_t_8, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
@@ -7135,7 +7117,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_u_Format_string_allocated_too_shor, __pyx_k_Format_string_allocated_too_shor, sizeof(__pyx_k_Format_string_allocated_too_shor), 0, 1, 0, 0},
   {&__pyx_kp_u_Format_string_allocated_too_shor_2, __pyx_k_Format_string_allocated_too_shor_2, sizeof(__pyx_k_Format_string_allocated_too_shor_2), 0, 1, 0, 0},
   {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1},
-  {&__pyx_kp_u_Looping_arrays, __pyx_k_Looping_arrays, sizeof(__pyx_k_Looping_arrays), 0, 1, 0, 0},
   {&__pyx_kp_u_Non_native_byte_order_not_suppor, __pyx_k_Non_native_byte_order_not_suppor, sizeof(__pyx_k_Non_native_byte_order_not_suppor), 0, 1, 0, 0},
   {&__pyx_n_s_PyArray, __pyx_k_PyArray, sizeof(__pyx_k_PyArray), 0, 0, 1, 1},
   {&__pyx_n_s_PyPipeline, __pyx_k_PyPipeline, sizeof(__pyx_k_PyPipeline), 0, 0, 1, 1},
@@ -7174,7 +7155,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_output, __pyx_k_output, sizeof(__pyx_k_output), 0, 0, 1, 1},
   {&__pyx_n_s_pdal_libpdalpython, __pyx_k_pdal_libpdalpython, sizeof(__pyx_k_pdal_libpdalpython), 0, 0, 1, 1},
   {&__pyx_kp_s_pdal_libpdalpython_pyx, __pyx_k_pdal_libpdalpython_pyx, sizeof(__pyx_k_pdal_libpdalpython_pyx), 0, 0, 1, 0},
-  {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1},
   {&__pyx_n_s_ptr, __pyx_k_ptr, sizeof(__pyx_k_ptr), 0, 0, 1, 1},
   {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
   {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1},
@@ -7188,7 +7168,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
 };
 static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
   __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 2, __pyx_L1_error)
-  __pyx_builtin_print = __Pyx_GetBuiltinName(__pyx_n_s_print); if (!__pyx_builtin_print) __PYX_ERR(1, 109, __pyx_L1_error)
   __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(2, 272, __pyx_L1_error)
   __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(2, 285, __pyx_L1_error)
   __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(2, 856, __pyx_L1_error)
@@ -7221,27 +7200,16 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple__2);
   __Pyx_GIVEREF(__pyx_tuple__2);
 
-  /* "pdal/libpdalpython.pyx":109
- * 
- *         if arrays is not None:
- *             print("Looping arrays\n")             # <<<<<<<<<<<<<<
- *             for array in arrays:
- *                 a = new Array(array)
- */
-  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_Looping_arrays); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 109, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__3);
-  __Pyx_GIVEREF(__pyx_tuple__3);
-
-  /* "pdal/libpdalpython.pyx":165
+  /* "pdal/libpdalpython.pyx":164
  *     def execute(self):
  *         if not self.thisptr:
  *             raise Exception("C++ Pipeline object not constructed!")             # <<<<<<<<<<<<<<
  *         return self.thisptr.execute()
  * 
  */
-  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_C_Pipeline_object_not_constructe); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 165, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__4);
-  __Pyx_GIVEREF(__pyx_tuple__4);
+  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_C_Pipeline_object_not_constructe); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 164, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__3);
+  __Pyx_GIVEREF(__pyx_tuple__3);
 
   /* "(tree fragment)":2
  * def __reduce_cython__(self):
@@ -7249,18 +7217,18 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * def __setstate_cython__(self, __pyx_state):
  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
  */
-  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 2, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__5);
-  __Pyx_GIVEREF(__pyx_tuple__5);
+  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 2, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__4);
+  __Pyx_GIVEREF(__pyx_tuple__4);
 
   /* "(tree fragment)":4
  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
  * def __setstate_cython__(self, __pyx_state):
  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
  */
-  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 4, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__6);
-  __Pyx_GIVEREF(__pyx_tuple__6);
+  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__5);
+  __Pyx_GIVEREF(__pyx_tuple__5);
 
   /* "../../../miniconda3/envs/pdal/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":272
  *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
@@ -7269,9 +7237,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * 
  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
  */
-  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(2, 272, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__7);
-  __Pyx_GIVEREF(__pyx_tuple__7);
+  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(2, 272, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__6);
+  __Pyx_GIVEREF(__pyx_tuple__6);
 
   /* "../../../miniconda3/envs/pdal/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":276
  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
@@ -7280,9 +7248,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * 
  *             info.buf = PyArray_DATA(self)
  */
-  __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(2, 276, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__8);
-  __Pyx_GIVEREF(__pyx_tuple__8);
+  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(2, 276, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__7);
+  __Pyx_GIVEREF(__pyx_tuple__7);
 
   /* "../../../miniconda3/envs/pdal/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":306
  *                 if ((descr.byteorder == c'>' and little_endian) or
@@ -7291,9 +7259,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *                 if   t == NPY_BYTE:        f = "b"
  *                 elif t == NPY_UBYTE:       f = "B"
  */
-  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(2, 306, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__9);
-  __Pyx_GIVEREF(__pyx_tuple__9);
+  __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(2, 306, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__8);
+  __Pyx_GIVEREF(__pyx_tuple__8);
 
   /* "../../../miniconda3/envs/pdal/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":856
  * 
@@ -7302,9 +7270,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * 
  *         if ((child.byteorder == c'>' and little_endian) or
  */
-  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(2, 856, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__10);
-  __Pyx_GIVEREF(__pyx_tuple__10);
+  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(2, 856, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__9);
+  __Pyx_GIVEREF(__pyx_tuple__9);
 
   /* "../../../miniconda3/envs/pdal/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":880
  *             t = child.type_num
@@ -7313,9 +7281,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * 
  *             # Until ticket #99 is fixed, use integers to avoid warnings
  */
-  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(2, 880, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__11);
-  __Pyx_GIVEREF(__pyx_tuple__11);
+  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(2, 880, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__10);
+  __Pyx_GIVEREF(__pyx_tuple__10);
 
   /* "../../../miniconda3/envs/pdal/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1038
  *         _import_array()
@@ -7324,9 +7292,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * 
  * cdef inline int import_umath() except -1:
  */
-  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(2, 1038, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__12);
-  __Pyx_GIVEREF(__pyx_tuple__12);
+  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(2, 1038, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__11);
+  __Pyx_GIVEREF(__pyx_tuple__11);
 
   /* "../../../miniconda3/envs/pdal/lib/python3.7/site-packages/Cython/Includes/numpy/__init__.pxd":1044
  *         _import_umath()
@@ -7335,9 +7303,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  * 
  * cdef inline int import_ufunc() except -1:
  */
-  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(2, 1044, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__13);
-  __Pyx_GIVEREF(__pyx_tuple__13);
+  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_u_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(2, 1044, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__12);
+  __Pyx_GIVEREF(__pyx_tuple__12);
 
   /* "pdal/libpdalpython.pyx":24
  *     cdef string versionString() except+
@@ -7346,7 +7314,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     return versionString()
  * def getVersionMajor():
  */
-  __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getVersionString, 24, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(1, 24, __pyx_L1_error)
+  __pyx_codeobj__13 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getVersionString, 24, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__13)) __PYX_ERR(1, 24, __pyx_L1_error)
 
   /* "pdal/libpdalpython.pyx":26
  * def getVersionString():
@@ -7355,7 +7323,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     return versionMajor()
  * def getVersionMinor():
  */
-  __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getVersionMajor, 26, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) __PYX_ERR(1, 26, __pyx_L1_error)
+  __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getVersionMajor, 26, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(1, 26, __pyx_L1_error)
 
   /* "pdal/libpdalpython.pyx":28
  * def getVersionMajor():
@@ -7364,7 +7332,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     return versionMinor()
  * def getVersionPatch():
  */
-  __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getVersionMinor, 28, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(1, 28, __pyx_L1_error)
+  __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getVersionMinor, 28, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) __PYX_ERR(1, 28, __pyx_L1_error)
 
   /* "pdal/libpdalpython.pyx":30
  * def getVersionMinor():
@@ -7373,7 +7341,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     return versionPatch()
  * def getSha1():
  */
-  __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getVersionPatch, 30, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) __PYX_ERR(1, 30, __pyx_L1_error)
+  __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getVersionPatch, 30, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(1, 30, __pyx_L1_error)
 
   /* "pdal/libpdalpython.pyx":32
  * def getVersionPatch():
@@ -7382,7 +7350,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     return sha1()
  * def getDebugInformation():
  */
-  __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getSha1, 32, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(1, 32, __pyx_L1_error)
+  __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getSha1, 32, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) __PYX_ERR(1, 32, __pyx_L1_error)
 
   /* "pdal/libpdalpython.pyx":34
  * def getSha1():
@@ -7391,7 +7359,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     return debugInformation()
  * def getPluginInstallPath():
  */
-  __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getDebugInformation, 34, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) __PYX_ERR(1, 34, __pyx_L1_error)
+  __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getDebugInformation, 34, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(1, 34, __pyx_L1_error)
 
   /* "pdal/libpdalpython.pyx":36
  * def getDebugInformation():
@@ -7400,7 +7368,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *     return pluginInstallPath()
  * 
  */
-  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getPluginInstallPath, 36, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(1, 36, __pyx_L1_error)
+  __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getPluginInstallPath, 36, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) __PYX_ERR(1, 36, __pyx_L1_error)
 
   /* "pdal/libpdalpython.pyx":76
  * 
@@ -7409,10 +7377,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  *         cdef vector[Dimension] c_dims;
  *         c_dims = getValidDimensions()
  */
-  __pyx_tuple__21 = PyTuple_Pack(6, __pyx_n_s_c_dims, __pyx_n_s_output, __pyx_n_s_it, __pyx_n_s_ptr, __pyx_n_s_d, __pyx_n_s_kind); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(1, 76, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__21);
-  __Pyx_GIVEREF(__pyx_tuple__21);
-  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getDimensions, 76, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(1, 76, __pyx_L1_error)
+  __pyx_tuple__20 = PyTuple_Pack(6, __pyx_n_s_c_dims, __pyx_n_s_output, __pyx_n_s_it, __pyx_n_s_ptr, __pyx_n_s_d, __pyx_n_s_kind); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(1, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__20);
+  __Pyx_GIVEREF(__pyx_tuple__20);
+  __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(0, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__20, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pdal_libpdalpython_pyx, __pyx_n_s_getDimensions, 76, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) __PYX_ERR(1, 76, __pyx_L1_error)
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;


=====================================
pdal/libpdalpython.pyx
=====================================
@@ -106,7 +106,6 @@ cdef class PyPipeline:
         cdef Array* a
 
         if arrays is not None:
-            print("Looping arrays\n")
             for array in arrays:
                 a = new Array(array)
                 c_arrays.push_back(a)


=====================================
setup.py
=====================================
@@ -91,9 +91,6 @@ open_kwds = {}
 if sys.version_info >= (3,):
     open_kwds['encoding'] = 'utf-8'
 
-with open('VERSION.txt', 'w', **open_kwds) as fp:
-    fp.write(str(module_version))
-
 with open('README.rst', 'r', **open_kwds) as fp:
     readme = fp.read()
 


=====================================
test/test_pipeline.py
=====================================
@@ -159,6 +159,39 @@ class TestArrayLoad(PDALTest):
             self.assertEqual(len(data), 12)
             self.assertEqual(data['Intensity'].sum(), 1926)
 
+    def test_read_arrays(self):
+        """Can we read and filter data from a list of arrays to PDAL"""
+        if Version(pdal.info.version) < Version('1.8'):
+            return True
+
+        # just some dummy data
+        x_vals = [1.0, 2.0, 3.0, 4.0, 5.0]
+        y_vals = [6.0, 7.0, 8.0, 9.0, 10.0]
+        z_vals = [1.5, 3.5, 5.5, 7.5, 9.5]
+        test_data = np.array(
+            [(x, y, z) for x, y, z in zip(x_vals, y_vals, z_vals)],
+            dtype=[('X', np.float), ('Y', np.float), ('Z', np.float)]
+        )
+
+        pipeline = """
+        {
+            "pipeline": [
+                {
+                    "type":"filters.range",
+                    "limits":"X[2.5:4.5]"
+                }
+            ]
+        }
+        """
+
+        p = pdal.Pipeline(pipeline, arrays=[test_data,])
+        p.loglevel = 8
+        count = p.execute()
+        arrays = p.arrays
+        self.assertEqual(count, 2)
+        self.assertEqual(len(arrays), 1)
+
+
 class TestDimensions(PDALTest):
     def test_fetch_dimensions(self):
         """Ask PDAL for its valid dimensions list"""



View it on GitLab: https://salsa.debian.org/debian-gis-team/python-pdal/commit/461c6250bad81f9e4a2a4a2a9a368c1f701ba4ef

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/python-pdal/commit/461c6250bad81f9e4a2a4a2a9a368c1f701ba4ef
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20190920/797dca5d/attachment-0001.html>


More information about the Pkg-grass-devel mailing list