1 /* Generated by Cython 0.29.12 */
2 
3 /* BEGIN: Cython Metadata
4 {
5     "distutils": {
6         "depends": [
7             "yt/utilities/lib/tsearch.h"
8         ],
9         "include_dirs": [
10             "yt/utilities/lib/"
11         ],
12         "libraries": [
13             "m"
14         ],
15         "name": "yt.geometry.selection_routines",
16         "sources": [
17             "yt/geometry/selection_routines.pyx"
18         ]
19     },
20     "module_name": "yt.geometry.selection_routines"
21 }
22 END: Cython Metadata */
23 
24 #define PY_SSIZE_T_CLEAN
25 #include "Python.h"
26 #ifndef Py_PYTHON_H
27     #error Python headers needed to compile C extensions, please install development version of Python.
28 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
29     #error Cython requires Python 2.6+ or Python 3.3+.
30 #else
31 #define CYTHON_ABI "0_29_12"
32 #define CYTHON_HEX_VERSION 0x001D0CF0
33 #define CYTHON_FUTURE_DIVISION 0
34 #include <stddef.h>
35 #ifndef offsetof
36   #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
37 #endif
38 #if !defined(WIN32) && !defined(MS_WINDOWS)
39   #ifndef __stdcall
40     #define __stdcall
41   #endif
42   #ifndef __cdecl
43     #define __cdecl
44   #endif
45   #ifndef __fastcall
46     #define __fastcall
47   #endif
48 #endif
49 #ifndef DL_IMPORT
50   #define DL_IMPORT(t) t
51 #endif
52 #ifndef DL_EXPORT
53   #define DL_EXPORT(t) t
54 #endif
55 #define __PYX_COMMA ,
56 #ifndef HAVE_LONG_LONG
57   #if PY_VERSION_HEX >= 0x02070000
58     #define HAVE_LONG_LONG
59   #endif
60 #endif
61 #ifndef PY_LONG_LONG
62   #define PY_LONG_LONG LONG_LONG
63 #endif
64 #ifndef Py_HUGE_VAL
65   #define Py_HUGE_VAL HUGE_VAL
66 #endif
67 #ifdef PYPY_VERSION
68   #define CYTHON_COMPILING_IN_PYPY 1
69   #define CYTHON_COMPILING_IN_PYSTON 0
70   #define CYTHON_COMPILING_IN_CPYTHON 0
71   #undef CYTHON_USE_TYPE_SLOTS
72   #define CYTHON_USE_TYPE_SLOTS 0
73   #undef CYTHON_USE_PYTYPE_LOOKUP
74   #define CYTHON_USE_PYTYPE_LOOKUP 0
75   #if PY_VERSION_HEX < 0x03050000
76     #undef CYTHON_USE_ASYNC_SLOTS
77     #define CYTHON_USE_ASYNC_SLOTS 0
78   #elif !defined(CYTHON_USE_ASYNC_SLOTS)
79     #define CYTHON_USE_ASYNC_SLOTS 1
80   #endif
81   #undef CYTHON_USE_PYLIST_INTERNALS
82   #define CYTHON_USE_PYLIST_INTERNALS 0
83   #undef CYTHON_USE_UNICODE_INTERNALS
84   #define CYTHON_USE_UNICODE_INTERNALS 0
85   #undef CYTHON_USE_UNICODE_WRITER
86   #define CYTHON_USE_UNICODE_WRITER 0
87   #undef CYTHON_USE_PYLONG_INTERNALS
88   #define CYTHON_USE_PYLONG_INTERNALS 0
89   #undef CYTHON_AVOID_BORROWED_REFS
90   #define CYTHON_AVOID_BORROWED_REFS 1
91   #undef CYTHON_ASSUME_SAFE_MACROS
92   #define CYTHON_ASSUME_SAFE_MACROS 0
93   #undef CYTHON_UNPACK_METHODS
94   #define CYTHON_UNPACK_METHODS 0
95   #undef CYTHON_FAST_THREAD_STATE
96   #define CYTHON_FAST_THREAD_STATE 0
97   #undef CYTHON_FAST_PYCALL
98   #define CYTHON_FAST_PYCALL 0
99   #undef CYTHON_PEP489_MULTI_PHASE_INIT
100   #define CYTHON_PEP489_MULTI_PHASE_INIT 0
101   #undef CYTHON_USE_TP_FINALIZE
102   #define CYTHON_USE_TP_FINALIZE 0
103   #undef CYTHON_USE_DICT_VERSIONS
104   #define CYTHON_USE_DICT_VERSIONS 0
105   #undef CYTHON_USE_EXC_INFO_STACK
106   #define CYTHON_USE_EXC_INFO_STACK 0
107 #elif defined(PYSTON_VERSION)
108   #define CYTHON_COMPILING_IN_PYPY 0
109   #define CYTHON_COMPILING_IN_PYSTON 1
110   #define CYTHON_COMPILING_IN_CPYTHON 0
111   #ifndef CYTHON_USE_TYPE_SLOTS
112     #define CYTHON_USE_TYPE_SLOTS 1
113   #endif
114   #undef CYTHON_USE_PYTYPE_LOOKUP
115   #define CYTHON_USE_PYTYPE_LOOKUP 0
116   #undef CYTHON_USE_ASYNC_SLOTS
117   #define CYTHON_USE_ASYNC_SLOTS 0
118   #undef CYTHON_USE_PYLIST_INTERNALS
119   #define CYTHON_USE_PYLIST_INTERNALS 0
120   #ifndef CYTHON_USE_UNICODE_INTERNALS
121     #define CYTHON_USE_UNICODE_INTERNALS 1
122   #endif
123   #undef CYTHON_USE_UNICODE_WRITER
124   #define CYTHON_USE_UNICODE_WRITER 0
125   #undef CYTHON_USE_PYLONG_INTERNALS
126   #define CYTHON_USE_PYLONG_INTERNALS 0
127   #ifndef CYTHON_AVOID_BORROWED_REFS
128     #define CYTHON_AVOID_BORROWED_REFS 0
129   #endif
130   #ifndef CYTHON_ASSUME_SAFE_MACROS
131     #define CYTHON_ASSUME_SAFE_MACROS 1
132   #endif
133   #ifndef CYTHON_UNPACK_METHODS
134     #define CYTHON_UNPACK_METHODS 1
135   #endif
136   #undef CYTHON_FAST_THREAD_STATE
137   #define CYTHON_FAST_THREAD_STATE 0
138   #undef CYTHON_FAST_PYCALL
139   #define CYTHON_FAST_PYCALL 0
140   #undef CYTHON_PEP489_MULTI_PHASE_INIT
141   #define CYTHON_PEP489_MULTI_PHASE_INIT 0
142   #undef CYTHON_USE_TP_FINALIZE
143   #define CYTHON_USE_TP_FINALIZE 0
144   #undef CYTHON_USE_DICT_VERSIONS
145   #define CYTHON_USE_DICT_VERSIONS 0
146   #undef CYTHON_USE_EXC_INFO_STACK
147   #define CYTHON_USE_EXC_INFO_STACK 0
148 #else
149   #define CYTHON_COMPILING_IN_PYPY 0
150   #define CYTHON_COMPILING_IN_PYSTON 0
151   #define CYTHON_COMPILING_IN_CPYTHON 1
152   #ifndef CYTHON_USE_TYPE_SLOTS
153     #define CYTHON_USE_TYPE_SLOTS 1
154   #endif
155   #if PY_VERSION_HEX < 0x02070000
156     #undef CYTHON_USE_PYTYPE_LOOKUP
157     #define CYTHON_USE_PYTYPE_LOOKUP 0
158   #elif !defined(CYTHON_USE_PYTYPE_LOOKUP)
159     #define CYTHON_USE_PYTYPE_LOOKUP 1
160   #endif
161   #if PY_MAJOR_VERSION < 3
162     #undef CYTHON_USE_ASYNC_SLOTS
163     #define CYTHON_USE_ASYNC_SLOTS 0
164   #elif !defined(CYTHON_USE_ASYNC_SLOTS)
165     #define CYTHON_USE_ASYNC_SLOTS 1
166   #endif
167   #if PY_VERSION_HEX < 0x02070000
168     #undef CYTHON_USE_PYLONG_INTERNALS
169     #define CYTHON_USE_PYLONG_INTERNALS 0
170   #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
171     #define CYTHON_USE_PYLONG_INTERNALS 1
172   #endif
173   #ifndef CYTHON_USE_PYLIST_INTERNALS
174     #define CYTHON_USE_PYLIST_INTERNALS 1
175   #endif
176   #ifndef CYTHON_USE_UNICODE_INTERNALS
177     #define CYTHON_USE_UNICODE_INTERNALS 1
178   #endif
179   #if PY_VERSION_HEX < 0x030300F0
180     #undef CYTHON_USE_UNICODE_WRITER
181     #define CYTHON_USE_UNICODE_WRITER 0
182   #elif !defined(CYTHON_USE_UNICODE_WRITER)
183     #define CYTHON_USE_UNICODE_WRITER 1
184   #endif
185   #ifndef CYTHON_AVOID_BORROWED_REFS
186     #define CYTHON_AVOID_BORROWED_REFS 0
187   #endif
188   #ifndef CYTHON_ASSUME_SAFE_MACROS
189     #define CYTHON_ASSUME_SAFE_MACROS 1
190   #endif
191   #ifndef CYTHON_UNPACK_METHODS
192     #define CYTHON_UNPACK_METHODS 1
193   #endif
194   #ifndef CYTHON_FAST_THREAD_STATE
195     #define CYTHON_FAST_THREAD_STATE 1
196   #endif
197   #ifndef CYTHON_FAST_PYCALL
198     #define CYTHON_FAST_PYCALL 1
199   #endif
200   #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
201     #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
202   #endif
203   #ifndef CYTHON_USE_TP_FINALIZE
204     #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
205   #endif
206   #ifndef CYTHON_USE_DICT_VERSIONS
207     #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
208   #endif
209   #ifndef CYTHON_USE_EXC_INFO_STACK
210     #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3)
211   #endif
212 #endif
213 #if !defined(CYTHON_FAST_PYCCALL)
214 #define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
215 #endif
216 #if CYTHON_USE_PYLONG_INTERNALS
217   #include "longintrepr.h"
218   #undef SHIFT
219   #undef BASE
220   #undef MASK
221   #ifdef SIZEOF_VOID_P
222     enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
223   #endif
224 #endif
225 #ifndef __has_attribute
226   #define __has_attribute(x) 0
227 #endif
228 #ifndef __has_cpp_attribute
229   #define __has_cpp_attribute(x) 0
230 #endif
231 #ifndef CYTHON_RESTRICT
232   #if defined(__GNUC__)
233     #define CYTHON_RESTRICT __restrict__
234   #elif defined(_MSC_VER) && _MSC_VER >= 1400
235     #define CYTHON_RESTRICT __restrict
236   #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
237     #define CYTHON_RESTRICT restrict
238   #else
239     #define CYTHON_RESTRICT
240   #endif
241 #endif
242 #ifndef CYTHON_UNUSED
243 # if defined(__GNUC__)
244 #   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
245 #     define CYTHON_UNUSED __attribute__ ((__unused__))
246 #   else
247 #     define CYTHON_UNUSED
248 #   endif
249 # elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
250 #   define CYTHON_UNUSED __attribute__ ((__unused__))
251 # else
252 #   define CYTHON_UNUSED
253 # endif
254 #endif
255 #ifndef CYTHON_MAYBE_UNUSED_VAR
256 #  if defined(__cplusplus)
257      template<class T> void CYTHON_MAYBE_UNUSED_VAR( const T& ) { }
258 #  else
259 #    define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x)
260 #  endif
261 #endif
262 #ifndef CYTHON_NCP_UNUSED
263 # if CYTHON_COMPILING_IN_CPYTHON
264 #  define CYTHON_NCP_UNUSED
265 # else
266 #  define CYTHON_NCP_UNUSED CYTHON_UNUSED
267 # endif
268 #endif
269 #define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
270 #ifdef _MSC_VER
271     #ifndef _MSC_STDINT_H_
272         #if _MSC_VER < 1300
273            typedef unsigned char     uint8_t;
274            typedef unsigned int      uint32_t;
275         #else
276            typedef unsigned __int8   uint8_t;
277            typedef unsigned __int32  uint32_t;
278         #endif
279     #endif
280 #else
281    #include <stdint.h>
282 #endif
283 #ifndef CYTHON_FALLTHROUGH
284   #if defined(__cplusplus) && __cplusplus >= 201103L
285     #if __has_cpp_attribute(fallthrough)
286       #define CYTHON_FALLTHROUGH [[fallthrough]]
287     #elif __has_cpp_attribute(clang::fallthrough)
288       #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
289     #elif __has_cpp_attribute(gnu::fallthrough)
290       #define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
291     #endif
292   #endif
293   #ifndef CYTHON_FALLTHROUGH
294     #if __has_attribute(fallthrough)
295       #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
296     #else
297       #define CYTHON_FALLTHROUGH
298     #endif
299   #endif
300   #if defined(__clang__ ) && defined(__apple_build_version__)
301     #if __apple_build_version__ < 7000000
302       #undef  CYTHON_FALLTHROUGH
303       #define CYTHON_FALLTHROUGH
304     #endif
305   #endif
306 #endif
307 
308 #ifndef CYTHON_INLINE
309   #if defined(__clang__)
310     #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
311   #elif defined(__GNUC__)
312     #define CYTHON_INLINE __inline__
313   #elif defined(_MSC_VER)
314     #define CYTHON_INLINE __inline
315   #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
316     #define CYTHON_INLINE inline
317   #else
318     #define CYTHON_INLINE
319   #endif
320 #endif
321 
322 #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
323   #define Py_OptimizeFlag 0
324 #endif
325 #define __PYX_BUILD_PY_SSIZE_T "n"
326 #define CYTHON_FORMAT_SSIZE_T "z"
327 #if PY_MAJOR_VERSION < 3
328   #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
329   #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
330           PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
331   #define __Pyx_DefaultClassType PyClass_Type
332 #else
333   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
334 #if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
335   #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
336           PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
337 #else
338   #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
339           PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
340 #endif
341   #define __Pyx_DefaultClassType PyType_Type
342 #endif
343 #ifndef Py_TPFLAGS_CHECKTYPES
344   #define Py_TPFLAGS_CHECKTYPES 0
345 #endif
346 #ifndef Py_TPFLAGS_HAVE_INDEX
347   #define Py_TPFLAGS_HAVE_INDEX 0
348 #endif
349 #ifndef Py_TPFLAGS_HAVE_NEWBUFFER
350   #define Py_TPFLAGS_HAVE_NEWBUFFER 0
351 #endif
352 #ifndef Py_TPFLAGS_HAVE_FINALIZE
353   #define Py_TPFLAGS_HAVE_FINALIZE 0
354 #endif
355 #ifndef METH_STACKLESS
356   #define METH_STACKLESS 0
357 #endif
358 #if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL)
359   #ifndef METH_FASTCALL
360      #define METH_FASTCALL 0x80
361   #endif
362   typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
363   typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
364                                                           Py_ssize_t nargs, PyObject *kwnames);
365 #else
366   #define __Pyx_PyCFunctionFast _PyCFunctionFast
367   #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
368 #endif
369 #if CYTHON_FAST_PYCCALL
370 #define __Pyx_PyFastCFunction_Check(func)\
371     ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)))))
372 #else
373 #define __Pyx_PyFastCFunction_Check(func) 0
374 #endif
375 #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
376   #define PyObject_Malloc(s)   PyMem_Malloc(s)
377   #define PyObject_Free(p)     PyMem_Free(p)
378   #define PyObject_Realloc(p)  PyMem_Realloc(p)
379 #endif
380 #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1
381   #define PyMem_RawMalloc(n)           PyMem_Malloc(n)
382   #define PyMem_RawRealloc(p, n)       PyMem_Realloc(p, n)
383   #define PyMem_RawFree(p)             PyMem_Free(p)
384 #endif
385 #if CYTHON_COMPILING_IN_PYSTON
386   #define __Pyx_PyCode_HasFreeVars(co)  PyCode_HasFreeVars(co)
387   #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)
388 #else
389   #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
390   #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)
391 #endif
392 #if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000
393   #define __Pyx_PyThreadState_Current PyThreadState_GET()
394 #elif PY_VERSION_HEX >= 0x03060000
395   #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
396 #elif PY_VERSION_HEX >= 0x03000000
397   #define __Pyx_PyThreadState_Current PyThreadState_GET()
398 #else
399   #define __Pyx_PyThreadState_Current _PyThreadState_Current
400 #endif
401 #if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT)
402 #include "pythread.h"
403 #define Py_tss_NEEDS_INIT 0
404 typedef int Py_tss_t;
405 static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {
406   *key = PyThread_create_key();
407   return 0;
408 }
409 static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {
410   Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t));
411   *key = Py_tss_NEEDS_INIT;
412   return key;
413 }
414 static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {
415   PyObject_Free(key);
416 }
417 static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {
418   return *key != Py_tss_NEEDS_INIT;
419 }
420 static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {
421   PyThread_delete_key(*key);
422   *key = Py_tss_NEEDS_INIT;
423 }
424 static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {
425   return PyThread_set_key_value(*key, value);
426 }
427 static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
428   return PyThread_get_key_value(*key);
429 }
430 #endif
431 #if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)
432 #define __Pyx_PyDict_NewPresized(n)  ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
433 #else
434 #define __Pyx_PyDict_NewPresized(n)  PyDict_New()
435 #endif
436 #if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
437   #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
438   #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
439 #else
440   #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
441   #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
442 #endif
443 #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS
444 #define __Pyx_PyDict_GetItemStr(dict, name)  _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
445 #else
446 #define __Pyx_PyDict_GetItemStr(dict, name)  PyDict_GetItem(dict, name)
447 #endif
448 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
449   #define CYTHON_PEP393_ENABLED 1
450   #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
451                                               0 : _PyUnicode_Ready((PyObject *)(op)))
452   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
453   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
454   #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
455   #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)
456   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
457   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
458   #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
459   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
460 #else
461   #define CYTHON_PEP393_ENABLED 0
462   #define PyUnicode_1BYTE_KIND  1
463   #define PyUnicode_2BYTE_KIND  2
464   #define PyUnicode_4BYTE_KIND  4
465   #define __Pyx_PyUnicode_READY(op)       (0)
466   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
467   #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
468   #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)
469   #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))
470   #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
471   #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
472   #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
473   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
474 #endif
475 #if CYTHON_COMPILING_IN_PYPY
476   #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
477   #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
478 #else
479   #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
480   #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
481       PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
482 #endif
483 #if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
484   #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
485 #endif
486 #if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)
487   #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
488 #endif
489 #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
490   #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
491 #endif
492 #define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
493 #define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
494 #if PY_MAJOR_VERSION >= 3
495   #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)
496 #else
497   #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)
498 #endif
499 #if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
500   #define PyObject_ASCII(o)            PyObject_Repr(o)
501 #endif
502 #if PY_MAJOR_VERSION >= 3
503   #define PyBaseString_Type            PyUnicode_Type
504   #define PyStringObject               PyUnicodeObject
505   #define PyString_Type                PyUnicode_Type
506   #define PyString_Check               PyUnicode_Check
507   #define PyString_CheckExact          PyUnicode_CheckExact
508   #define PyObject_Unicode             PyObject_Str
509 #endif
510 #if PY_MAJOR_VERSION >= 3
511   #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
512   #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
513 #else
514   #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
515   #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
516 #endif
517 #ifndef PySet_CheckExact
518   #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
519 #endif
520 #if CYTHON_ASSUME_SAFE_MACROS
521   #define __Pyx_PySequence_SIZE(seq)  Py_SIZE(seq)
522 #else
523   #define __Pyx_PySequence_SIZE(seq)  PySequence_Size(seq)
524 #endif
525 #if PY_MAJOR_VERSION >= 3
526   #define PyIntObject                  PyLongObject
527   #define PyInt_Type                   PyLong_Type
528   #define PyInt_Check(op)              PyLong_Check(op)
529   #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
530   #define PyInt_FromString             PyLong_FromString
531   #define PyInt_FromUnicode            PyLong_FromUnicode
532   #define PyInt_FromLong               PyLong_FromLong
533   #define PyInt_FromSize_t             PyLong_FromSize_t
534   #define PyInt_FromSsize_t            PyLong_FromSsize_t
535   #define PyInt_AsLong                 PyLong_AsLong
536   #define PyInt_AS_LONG                PyLong_AS_LONG
537   #define PyInt_AsSsize_t              PyLong_AsSsize_t
538   #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
539   #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
540   #define PyNumber_Int                 PyNumber_Long
541 #endif
542 #if PY_MAJOR_VERSION >= 3
543   #define PyBoolObject                 PyLongObject
544 #endif
545 #if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
546   #ifndef PyUnicode_InternFromString
547     #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
548   #endif
549 #endif
550 #if PY_VERSION_HEX < 0x030200A4
551   typedef long Py_hash_t;
552   #define __Pyx_PyInt_FromHash_t PyInt_FromLong
553   #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
554 #else
555   #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
556   #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
557 #endif
558 #if PY_MAJOR_VERSION >= 3
559   #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func))
560 #else
561   #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
562 #endif
563 #if CYTHON_USE_ASYNC_SLOTS
564   #if PY_VERSION_HEX >= 0x030500B1
565     #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
566     #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
567   #else
568     #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
569   #endif
570 #else
571   #define __Pyx_PyType_AsAsync(obj) NULL
572 #endif
573 #ifndef __Pyx_PyAsyncMethodsStruct
574     typedef struct {
575         unaryfunc am_await;
576         unaryfunc am_aiter;
577         unaryfunc am_anext;
578     } __Pyx_PyAsyncMethodsStruct;
579 #endif
580 
581 #if defined(WIN32) || defined(MS_WINDOWS)
582   #define _USE_MATH_DEFINES
583 #endif
584 #include <math.h>
585 #ifdef NAN
586 #define __PYX_NAN() ((float) NAN)
587 #else
588 static CYTHON_INLINE float __PYX_NAN() {
589   float value;
590   memset(&value, 0xFF, sizeof(value));
591   return value;
592 }
593 #endif
594 #if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
595 #define __Pyx_truncl trunc
596 #else
597 #define __Pyx_truncl truncl
598 #endif
599 
600 
601 #define __PYX_ERR(f_index, lineno, Ln_error) \
602 { \
603   __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \
604 }
605 
606 #ifndef __PYX_EXTERN_C
607   #ifdef __cplusplus
608     #define __PYX_EXTERN_C extern "C"
609   #else
610     #define __PYX_EXTERN_C extern
611   #endif
612 #endif
613 
614 #define __PYX_HAVE__yt__geometry__selection_routines
615 #define __PYX_HAVE_API__yt__geometry__selection_routines
616 /* Early includes */
617 #include <string.h>
618 #include <stdio.h>
619 #include "numpy/arrayobject.h"
620 #include "numpy/ufuncobject.h"
621 #include <math.h>
622 #include <stdlib.h>
623 #include "tsearch.h"
624 #include <float.h>
625 #include "math.h"
626 #include "pythread.h"
627 #include "pystate.h"
628 #ifdef _OPENMP
629 #include <omp.h>
630 #endif /* _OPENMP */
631 
632 #if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
633 #define CYTHON_WITHOUT_ASSERTIONS
634 #endif
635 
636 typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
637                 const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
638 
639 #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
640 #define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
641 #define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8)
642 #define __PYX_DEFAULT_STRING_ENCODING ""
643 #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
644 #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
645 #define __Pyx_uchar_cast(c) ((unsigned char)c)
646 #define __Pyx_long_cast(x) ((long)x)
647 #define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (\
648     (sizeof(type) < sizeof(Py_ssize_t))  ||\
649     (sizeof(type) > sizeof(Py_ssize_t) &&\
650           likely(v < (type)PY_SSIZE_T_MAX ||\
651                  v == (type)PY_SSIZE_T_MAX)  &&\
652           (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
653                                 v == (type)PY_SSIZE_T_MIN)))  ||\
654     (sizeof(type) == sizeof(Py_ssize_t) &&\
655           (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
656                                v == (type)PY_SSIZE_T_MAX)))  )
657 static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
658     return (size_t) i < (size_t) limit;
659 }
660 #if defined (__cplusplus) && __cplusplus >= 201103L
661     #include <cstdlib>
662     #define __Pyx_sst_abs(value) std::abs(value)
663 #elif SIZEOF_INT >= SIZEOF_SIZE_T
664     #define __Pyx_sst_abs(value) abs(value)
665 #elif SIZEOF_LONG >= SIZEOF_SIZE_T
666     #define __Pyx_sst_abs(value) labs(value)
667 #elif defined (_MSC_VER)
668     #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
669 #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
670     #define __Pyx_sst_abs(value) llabs(value)
671 #elif defined (__GNUC__)
672     #define __Pyx_sst_abs(value) __builtin_llabs(value)
673 #else
674     #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
675 #endif
676 static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
677 static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
678 #define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
679 #define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
680 #define __Pyx_PyBytes_FromString        PyBytes_FromString
681 #define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
682 static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
683 #if PY_MAJOR_VERSION < 3
684     #define __Pyx_PyStr_FromString        __Pyx_PyBytes_FromString
685     #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
686 #else
687     #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString
688     #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
689 #endif
690 #define __Pyx_PyBytes_AsWritableString(s)     ((char*) PyBytes_AS_STRING(s))
691 #define __Pyx_PyBytes_AsWritableSString(s)    ((signed char*) PyBytes_AS_STRING(s))
692 #define __Pyx_PyBytes_AsWritableUString(s)    ((unsigned char*) PyBytes_AS_STRING(s))
693 #define __Pyx_PyBytes_AsString(s)     ((const char*) PyBytes_AS_STRING(s))
694 #define __Pyx_PyBytes_AsSString(s)    ((const signed char*) PyBytes_AS_STRING(s))
695 #define __Pyx_PyBytes_AsUString(s)    ((const unsigned char*) PyBytes_AS_STRING(s))
696 #define __Pyx_PyObject_AsWritableString(s)    ((char*) __Pyx_PyObject_AsString(s))
697 #define __Pyx_PyObject_AsWritableSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
698 #define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))
699 #define __Pyx_PyObject_AsSString(s)    ((const signed char*) __Pyx_PyObject_AsString(s))
700 #define __Pyx_PyObject_AsUString(s)    ((const unsigned char*) __Pyx_PyObject_AsString(s))
701 #define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)
702 #define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)
703 #define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)
704 #define __Pyx_PyStr_FromCString(s)     __Pyx_PyStr_FromString((const char*)s)
705 #define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
706 static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) {
707     const Py_UNICODE *u_end = u;
708     while (*u_end++) ;
709     return (size_t)(u_end - u - 1);
710 }
711 #define __Pyx_PyUnicode_FromUnicode(u)       PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))
712 #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode
713 #define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
714 #define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
715 #define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
716 static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
717 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
718 static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
719 static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
720 #define __Pyx_PySequence_Tuple(obj)\
721     (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
722 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
723 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
724 #if CYTHON_ASSUME_SAFE_MACROS
725 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
726 #else
727 #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
728 #endif
729 #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
730 #if PY_MAJOR_VERSION >= 3
731 #define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
732 #else
733 #define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
734 #endif
735 #define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x))
736 #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
737 static int __Pyx_sys_getdefaultencoding_not_ascii;
738 static int __Pyx_init_sys_getdefaultencoding_params(void) {
739     PyObject* sys;
740     PyObject* default_encoding = NULL;
741     PyObject* ascii_chars_u = NULL;
742     PyObject* ascii_chars_b = NULL;
743     const char* default_encoding_c;
744     sys = PyImport_ImportModule("sys");
745     if (!sys) goto bad;
746     default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);
747     Py_DECREF(sys);
748     if (!default_encoding) goto bad;
749     default_encoding_c = PyBytes_AsString(default_encoding);
750     if (!default_encoding_c) goto bad;
751     if (strcmp(default_encoding_c, "ascii") == 0) {
752         __Pyx_sys_getdefaultencoding_not_ascii = 0;
753     } else {
754         char ascii_chars[128];
755         int c;
756         for (c = 0; c < 128; c++) {
757             ascii_chars[c] = c;
758         }
759         __Pyx_sys_getdefaultencoding_not_ascii = 1;
760         ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
761         if (!ascii_chars_u) goto bad;
762         ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
763         if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
764             PyErr_Format(
765                 PyExc_ValueError,
766                 "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
767                 default_encoding_c);
768             goto bad;
769         }
770         Py_DECREF(ascii_chars_u);
771         Py_DECREF(ascii_chars_b);
772     }
773     Py_DECREF(default_encoding);
774     return 0;
775 bad:
776     Py_XDECREF(default_encoding);
777     Py_XDECREF(ascii_chars_u);
778     Py_XDECREF(ascii_chars_b);
779     return -1;
780 }
781 #endif
782 #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
783 #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
784 #else
785 #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
786 #if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
787 static char* __PYX_DEFAULT_STRING_ENCODING;
788 static int __Pyx_init_sys_getdefaultencoding_params(void) {
789     PyObject* sys;
790     PyObject* default_encoding = NULL;
791     char* default_encoding_c;
792     sys = PyImport_ImportModule("sys");
793     if (!sys) goto bad;
794     default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
795     Py_DECREF(sys);
796     if (!default_encoding) goto bad;
797     default_encoding_c = PyBytes_AsString(default_encoding);
798     if (!default_encoding_c) goto bad;
799     __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1);
800     if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
801     strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
802     Py_DECREF(default_encoding);
803     return 0;
804 bad:
805     Py_XDECREF(default_encoding);
806     return -1;
807 }
808 #endif
809 #endif
810 
811 
812 /* Test for GCC > 2.95 */
813 #if defined(__GNUC__)     && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
814   #define likely(x)   __builtin_expect(!!(x), 1)
815   #define unlikely(x) __builtin_expect(!!(x), 0)
816 #else /* !__GNUC__ or GCC < 2.95 */
817   #define likely(x)   (x)
818   #define unlikely(x) (x)
819 #endif /* __GNUC__ */
820 static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
821 
822 static PyObject *__pyx_m = NULL;
823 static PyObject *__pyx_d;
824 static PyObject *__pyx_b;
825 static PyObject *__pyx_cython_runtime = NULL;
826 static PyObject *__pyx_empty_tuple;
827 static PyObject *__pyx_empty_bytes;
828 static PyObject *__pyx_empty_unicode;
829 static int __pyx_lineno;
830 static int __pyx_clineno = 0;
831 static const char * __pyx_cfilenm= __FILE__;
832 static const char *__pyx_filename;
833 
834 /* Header.proto */
835 #if !defined(CYTHON_CCOMPLEX)
836   #if defined(__cplusplus)
837     #define CYTHON_CCOMPLEX 1
838   #elif defined(_Complex_I)
839     #define CYTHON_CCOMPLEX 1
840   #else
841     #define CYTHON_CCOMPLEX 0
842   #endif
843 #endif
844 #if CYTHON_CCOMPLEX
845   #ifdef __cplusplus
846     #include <complex>
847   #else
848     #include <complex.h>
849   #endif
850 #endif
851 #if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__)
852   #undef _Complex_I
853   #define _Complex_I 1.0fj
854 #endif
855 
856 
857 static const char *__pyx_f[] = {
858   "yt/geometry/selection_routines.pyx",
859   "yt/geometry/_selection_routines/selector_object.pxi",
860   "yt/geometry/_selection_routines/sphere_selector.pxi",
861   "yt/geometry/_selection_routines/cut_region_selector.pxi",
862   "yt/geometry/selection_routines.pxd",
863   "stringsource",
864   "yt/geometry/_selection_routines/point_selector.pxi",
865   "yt/geometry/_selection_routines/region_selector.pxi",
866   "yt/geometry/_selection_routines/disk_selector.pxi",
867   "yt/geometry/_selection_routines/cutting_plane_selector.pxi",
868   "yt/geometry/_selection_routines/slice_selector.pxi",
869   "yt/geometry/_selection_routines/ortho_ray_selector.pxi",
870   "yt/geometry/_selection_routines/ray_selector.pxi",
871   "yt/geometry/_selection_routines/data_collection_selector.pxi",
872   "yt/geometry/_selection_routines/ellipsoid_selector.pxi",
873   "yt/geometry/_selection_routines/grid_selector.pxi",
874   "yt/geometry/_selection_routines/octree_subset_selector.pxi",
875   "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi",
876   "yt/geometry/_selection_routines/always_selector.pxi",
877   "yt/geometry/_selection_routines/compose_selector.pxi",
878   "yt/geometry/_selection_routines/halo_particles_selector.pxi",
879   "yt/geometry/_selection_routines/boolean_selectors.pxi",
880   "__init__.pxd",
881   "yt/utilities/lib/fp_utils.pxd",
882   "yt/utilities/lib/geometry_utils.pxd",
883   "type.pxd",
884   "yt/geometry/oct_visitors.pxd",
885   "yt/utilities/lib/allocation_container.pxd",
886   "yt/geometry/oct_container.pxd",
887   "yt/utilities/lib/bitarray.pxd",
888   "yt/utilities/lib/partitioned_grid.pxd",
889   "yt/utilities/lib/image_samplers.pxd",
890 };
891 /* BufferFormatStructs.proto */
892 #define IS_UNSIGNED(type) (((type) -1) > 0)
893 struct __Pyx_StructField_;
894 #define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0)
895 typedef struct {
896   const char* name;
897   struct __Pyx_StructField_* fields;
898   size_t size;
899   size_t arraysize[8];
900   int ndim;
901   char typegroup;
902   char is_unsigned;
903   int flags;
904 } __Pyx_TypeInfo;
905 typedef struct __Pyx_StructField_ {
906   __Pyx_TypeInfo* type;
907   const char* name;
908   size_t offset;
909 } __Pyx_StructField;
910 typedef struct {
911   __Pyx_StructField* field;
912   size_t parent_offset;
913 } __Pyx_BufFmt_StackElem;
914 typedef struct {
915   __Pyx_StructField root;
916   __Pyx_BufFmt_StackElem* head;
917   size_t fmt_offset;
918   size_t new_count, enc_count;
919   size_t struct_alignment;
920   int is_complex;
921   char enc_type;
922   char new_packmode;
923   char enc_packmode;
924   char is_valid_array;
925 } __Pyx_BufFmt_Context;
926 
927 /* MemviewSliceStruct.proto */
928 struct __pyx_memoryview_obj;
929 typedef struct {
930   struct __pyx_memoryview_obj *memview;
931   char *data;
932   Py_ssize_t shape[8];
933   Py_ssize_t strides[8];
934   Py_ssize_t suboffsets[8];
935 } __Pyx_memviewslice;
936 #define __Pyx_MemoryView_Len(m)  (m.shape[0])
937 
938 /* Atomics.proto */
939 #include <pythread.h>
940 #ifndef CYTHON_ATOMICS
941     #define CYTHON_ATOMICS 1
942 #endif
943 #define __pyx_atomic_int_type int
944 #if CYTHON_ATOMICS && __GNUC__ >= 4 && (__GNUC_MINOR__ > 1 ||\
945                     (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL >= 2)) &&\
946                     !defined(__i386__)
947     #define __pyx_atomic_incr_aligned(value, lock) __sync_fetch_and_add(value, 1)
948     #define __pyx_atomic_decr_aligned(value, lock) __sync_fetch_and_sub(value, 1)
949     #ifdef __PYX_DEBUG_ATOMICS
950         #warning "Using GNU atomics"
951     #endif
952 #elif CYTHON_ATOMICS && defined(_MSC_VER) && 0
953     #include <Windows.h>
954     #undef __pyx_atomic_int_type
955     #define __pyx_atomic_int_type LONG
956     #define __pyx_atomic_incr_aligned(value, lock) InterlockedIncrement(value)
957     #define __pyx_atomic_decr_aligned(value, lock) InterlockedDecrement(value)
958     #ifdef __PYX_DEBUG_ATOMICS
959         #pragma message ("Using MSVC atomics")
960     #endif
961 #elif CYTHON_ATOMICS && (defined(__ICC) || defined(__INTEL_COMPILER)) && 0
962     #define __pyx_atomic_incr_aligned(value, lock) _InterlockedIncrement(value)
963     #define __pyx_atomic_decr_aligned(value, lock) _InterlockedDecrement(value)
964     #ifdef __PYX_DEBUG_ATOMICS
965         #warning "Using Intel atomics"
966     #endif
967 #else
968     #undef CYTHON_ATOMICS
969     #define CYTHON_ATOMICS 0
970     #ifdef __PYX_DEBUG_ATOMICS
971         #warning "Not using atomics"
972     #endif
973 #endif
974 typedef volatile __pyx_atomic_int_type __pyx_atomic_int;
975 #if CYTHON_ATOMICS
976     #define __pyx_add_acquisition_count(memview)\
977              __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock)
978     #define __pyx_sub_acquisition_count(memview)\
979             __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview), memview->lock)
980 #else
981     #define __pyx_add_acquisition_count(memview)\
982             __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock)
983     #define __pyx_sub_acquisition_count(memview)\
984             __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock)
985 #endif
986 
987 /* NoFastGil.proto */
988 #define __Pyx_PyGILState_Ensure PyGILState_Ensure
989 #define __Pyx_PyGILState_Release PyGILState_Release
990 #define __Pyx_FastGIL_Remember()
991 #define __Pyx_FastGIL_Forget()
992 #define __Pyx_FastGilFuncInit()
993 
994 /* ForceInitThreads.proto */
995 #ifndef __PYX_FORCE_INIT_THREADS
996   #define __PYX_FORCE_INIT_THREADS 0
997 #endif
998 
999 
1000 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":776
1001  * # in Cython to enable them only on the right systems.
1002  *
1003  * ctypedef npy_int8       int8_t             # <<<<<<<<<<<<<<
1004  * ctypedef npy_int16      int16_t
1005  * ctypedef npy_int32      int32_t
1006  */
1007 typedef npy_int8 __pyx_t_5numpy_int8_t;
1008 
1009 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":777
1010  *
1011  * ctypedef npy_int8       int8_t
1012  * ctypedef npy_int16      int16_t             # <<<<<<<<<<<<<<
1013  * ctypedef npy_int32      int32_t
1014  * ctypedef npy_int64      int64_t
1015  */
1016 typedef npy_int16 __pyx_t_5numpy_int16_t;
1017 
1018 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":778
1019  * ctypedef npy_int8       int8_t
1020  * ctypedef npy_int16      int16_t
1021  * ctypedef npy_int32      int32_t             # <<<<<<<<<<<<<<
1022  * ctypedef npy_int64      int64_t
1023  * #ctypedef npy_int96      int96_t
1024  */
1025 typedef npy_int32 __pyx_t_5numpy_int32_t;
1026 
1027 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":779
1028  * ctypedef npy_int16      int16_t
1029  * ctypedef npy_int32      int32_t
1030  * ctypedef npy_int64      int64_t             # <<<<<<<<<<<<<<
1031  * #ctypedef npy_int96      int96_t
1032  * #ctypedef npy_int128     int128_t
1033  */
1034 typedef npy_int64 __pyx_t_5numpy_int64_t;
1035 
1036 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":783
1037  * #ctypedef npy_int128     int128_t
1038  *
1039  * ctypedef npy_uint8      uint8_t             # <<<<<<<<<<<<<<
1040  * ctypedef npy_uint16     uint16_t
1041  * ctypedef npy_uint32     uint32_t
1042  */
1043 typedef npy_uint8 __pyx_t_5numpy_uint8_t;
1044 
1045 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":784
1046  *
1047  * ctypedef npy_uint8      uint8_t
1048  * ctypedef npy_uint16     uint16_t             # <<<<<<<<<<<<<<
1049  * ctypedef npy_uint32     uint32_t
1050  * ctypedef npy_uint64     uint64_t
1051  */
1052 typedef npy_uint16 __pyx_t_5numpy_uint16_t;
1053 
1054 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":785
1055  * ctypedef npy_uint8      uint8_t
1056  * ctypedef npy_uint16     uint16_t
1057  * ctypedef npy_uint32     uint32_t             # <<<<<<<<<<<<<<
1058  * ctypedef npy_uint64     uint64_t
1059  * #ctypedef npy_uint96     uint96_t
1060  */
1061 typedef npy_uint32 __pyx_t_5numpy_uint32_t;
1062 
1063 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":786
1064  * ctypedef npy_uint16     uint16_t
1065  * ctypedef npy_uint32     uint32_t
1066  * ctypedef npy_uint64     uint64_t             # <<<<<<<<<<<<<<
1067  * #ctypedef npy_uint96     uint96_t
1068  * #ctypedef npy_uint128    uint128_t
1069  */
1070 typedef npy_uint64 __pyx_t_5numpy_uint64_t;
1071 
1072 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":790
1073  * #ctypedef npy_uint128    uint128_t
1074  *
1075  * ctypedef npy_float32    float32_t             # <<<<<<<<<<<<<<
1076  * ctypedef npy_float64    float64_t
1077  * #ctypedef npy_float80    float80_t
1078  */
1079 typedef npy_float32 __pyx_t_5numpy_float32_t;
1080 
1081 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":791
1082  *
1083  * ctypedef npy_float32    float32_t
1084  * ctypedef npy_float64    float64_t             # <<<<<<<<<<<<<<
1085  * #ctypedef npy_float80    float80_t
1086  * #ctypedef npy_float128   float128_t
1087  */
1088 typedef npy_float64 __pyx_t_5numpy_float64_t;
1089 
1090 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":800
1091  * # The int types are mapped a bit surprising --
1092  * # numpy.int corresponds to 'l' and numpy.long to 'q'
1093  * ctypedef npy_long       int_t             # <<<<<<<<<<<<<<
1094  * ctypedef npy_longlong   long_t
1095  * ctypedef npy_longlong   longlong_t
1096  */
1097 typedef npy_long __pyx_t_5numpy_int_t;
1098 
1099 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":801
1100  * # numpy.int corresponds to 'l' and numpy.long to 'q'
1101  * ctypedef npy_long       int_t
1102  * ctypedef npy_longlong   long_t             # <<<<<<<<<<<<<<
1103  * ctypedef npy_longlong   longlong_t
1104  *
1105  */
1106 typedef npy_longlong __pyx_t_5numpy_long_t;
1107 
1108 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":802
1109  * ctypedef npy_long       int_t
1110  * ctypedef npy_longlong   long_t
1111  * ctypedef npy_longlong   longlong_t             # <<<<<<<<<<<<<<
1112  *
1113  * ctypedef npy_ulong      uint_t
1114  */
1115 typedef npy_longlong __pyx_t_5numpy_longlong_t;
1116 
1117 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":804
1118  * ctypedef npy_longlong   longlong_t
1119  *
1120  * ctypedef npy_ulong      uint_t             # <<<<<<<<<<<<<<
1121  * ctypedef npy_ulonglong  ulong_t
1122  * ctypedef npy_ulonglong  ulonglong_t
1123  */
1124 typedef npy_ulong __pyx_t_5numpy_uint_t;
1125 
1126 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":805
1127  *
1128  * ctypedef npy_ulong      uint_t
1129  * ctypedef npy_ulonglong  ulong_t             # <<<<<<<<<<<<<<
1130  * ctypedef npy_ulonglong  ulonglong_t
1131  *
1132  */
1133 typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
1134 
1135 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":806
1136  * ctypedef npy_ulong      uint_t
1137  * ctypedef npy_ulonglong  ulong_t
1138  * ctypedef npy_ulonglong  ulonglong_t             # <<<<<<<<<<<<<<
1139  *
1140  * ctypedef npy_intp       intp_t
1141  */
1142 typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
1143 
1144 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":808
1145  * ctypedef npy_ulonglong  ulonglong_t
1146  *
1147  * ctypedef npy_intp       intp_t             # <<<<<<<<<<<<<<
1148  * ctypedef npy_uintp      uintp_t
1149  *
1150  */
1151 typedef npy_intp __pyx_t_5numpy_intp_t;
1152 
1153 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":809
1154  *
1155  * ctypedef npy_intp       intp_t
1156  * ctypedef npy_uintp      uintp_t             # <<<<<<<<<<<<<<
1157  *
1158  * ctypedef npy_double     float_t
1159  */
1160 typedef npy_uintp __pyx_t_5numpy_uintp_t;
1161 
1162 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":811
1163  * ctypedef npy_uintp      uintp_t
1164  *
1165  * ctypedef npy_double     float_t             # <<<<<<<<<<<<<<
1166  * ctypedef npy_double     double_t
1167  * ctypedef npy_longdouble longdouble_t
1168  */
1169 typedef npy_double __pyx_t_5numpy_float_t;
1170 
1171 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":812
1172  *
1173  * ctypedef npy_double     float_t
1174  * ctypedef npy_double     double_t             # <<<<<<<<<<<<<<
1175  * ctypedef npy_longdouble longdouble_t
1176  *
1177  */
1178 typedef npy_double __pyx_t_5numpy_double_t;
1179 
1180 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":813
1181  * ctypedef npy_double     float_t
1182  * ctypedef npy_double     double_t
1183  * ctypedef npy_longdouble longdouble_t             # <<<<<<<<<<<<<<
1184  *
1185  * ctypedef npy_cfloat      cfloat_t
1186  */
1187 typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
1188 /* Declarations.proto */
1189 #if CYTHON_CCOMPLEX
1190   #ifdef __cplusplus
1191     typedef ::std::complex< float > __pyx_t_float_complex;
1192   #else
1193     typedef float _Complex __pyx_t_float_complex;
1194   #endif
1195 #else
1196     typedef struct { float real, imag; } __pyx_t_float_complex;
1197 #endif
1198 static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
1199 
1200 /* Declarations.proto */
1201 #if CYTHON_CCOMPLEX
1202   #ifdef __cplusplus
1203     typedef ::std::complex< double > __pyx_t_double_complex;
1204   #else
1205     typedef double _Complex __pyx_t_double_complex;
1206   #endif
1207 #else
1208     typedef struct { double real, imag; } __pyx_t_double_complex;
1209 #endif
1210 static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
1211 
1212 
1213 /*--- Type declarations ---*/
1214 struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor;
1215 struct __pyx_obj_2yt_8geometry_12oct_visitors_CountTotalOcts;
1216 struct __pyx_obj_2yt_8geometry_12oct_visitors_CountTotalCells;
1217 struct __pyx_obj_2yt_8geometry_12oct_visitors_MarkOcts;
1218 struct __pyx_obj_2yt_8geometry_12oct_visitors_MaskOcts;
1219 struct __pyx_obj_2yt_8geometry_12oct_visitors_IndexOcts;
1220 struct __pyx_obj_2yt_8geometry_12oct_visitors_MaskedIndexOcts;
1221 struct __pyx_obj_2yt_8geometry_12oct_visitors_IndexMaskMapOcts;
1222 struct __pyx_obj_2yt_8geometry_12oct_visitors_ICoordsOcts;
1223 struct __pyx_obj_2yt_8geometry_12oct_visitors_IResOcts;
1224 struct __pyx_obj_2yt_8geometry_12oct_visitors_FCoordsOcts;
1225 struct __pyx_obj_2yt_8geometry_12oct_visitors_FWidthOcts;
1226 struct __pyx_obj_2yt_8geometry_12oct_visitors_CopyArrayI64;
1227 struct __pyx_obj_2yt_8geometry_12oct_visitors_CopyArrayF64;
1228 struct __pyx_obj_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8;
1229 struct __pyx_obj_2yt_8geometry_12oct_visitors_IdentifyOcts;
1230 struct __pyx_obj_2yt_8geometry_12oct_visitors_AssignDomainInd;
1231 struct __pyx_obj_2yt_8geometry_12oct_visitors_FillFileIndicesO;
1232 struct __pyx_obj_2yt_8geometry_12oct_visitors_FillFileIndicesR;
1233 struct __pyx_obj_2yt_8geometry_12oct_visitors_CountByDomain;
1234 struct __pyx_obj_2yt_8geometry_12oct_visitors_StoreOctree;
1235 struct __pyx_obj_2yt_8geometry_12oct_visitors_LoadOctree;
1236 struct __pyx_obj_2yt_8geometry_12oct_visitors_MortonIndexOcts;
1237 struct __pyx_obj_2yt_8geometry_12oct_visitors_StoreIndex;
1238 struct __pyx_obj_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor;
1239 struct __pyx_obj_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor;
1240 struct __pyx_obj_2yt_8geometry_12oct_visitors_NeighbourCellVisitor;
1241 struct __pyx_obj_2yt_9utilities_3lib_20allocation_container_ObjectPool;
1242 struct __pyx_obj_2yt_8geometry_13oct_container_OctObjectPool;
1243 struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer;
1244 struct __pyx_obj_2yt_8geometry_13oct_container_SparseOctreeContainer;
1245 struct __pyx_obj_2yt_8geometry_13oct_container_RAMSESOctreeContainer;
1246 struct __pyx_obj_2yt_9utilities_3lib_8bitarray_bitarray;
1247 struct __pyx_obj_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid;
1248 struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ImageSampler;
1249 struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ProjectionSampler;
1250 struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler;
1251 struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler;
1252 struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler;
1253 struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject;
1254 struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector;
1255 struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector;
1256 struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector;
1257 struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector;
1258 struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector;
1259 struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector;
1260 struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector;
1261 struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector;
1262 struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector;
1263 struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector;
1264 struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector;
1265 struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector;
1266 struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector;
1267 struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector;
1268 struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector;
1269 struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector;
1270 struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector;
1271 struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector;
1272 struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector;
1273 struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector;
1274 struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector;
1275 struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector;
1276 struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector;
1277 struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector;
1278 struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector;
1279 struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector;
1280 struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__;
1281 struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr;
1282 struct __pyx_array_obj;
1283 struct __pyx_MemviewEnum_obj;
1284 struct __pyx_memoryview_obj;
1285 struct __pyx_memoryviewslice_obj;
1286 
1287 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":815
1288  * ctypedef npy_longdouble longdouble_t
1289  *
1290  * ctypedef npy_cfloat      cfloat_t             # <<<<<<<<<<<<<<
1291  * ctypedef npy_cdouble     cdouble_t
1292  * ctypedef npy_clongdouble clongdouble_t
1293  */
1294 typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
1295 
1296 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":816
1297  *
1298  * ctypedef npy_cfloat      cfloat_t
1299  * ctypedef npy_cdouble     cdouble_t             # <<<<<<<<<<<<<<
1300  * ctypedef npy_clongdouble clongdouble_t
1301  *
1302  */
1303 typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
1304 
1305 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":817
1306  * ctypedef npy_cfloat      cfloat_t
1307  * ctypedef npy_cdouble     cdouble_t
1308  * ctypedef npy_clongdouble clongdouble_t             # <<<<<<<<<<<<<<
1309  *
1310  * ctypedef npy_cdouble     complex_t
1311  */
1312 typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
1313 
1314 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":819
1315  * ctypedef npy_clongdouble clongdouble_t
1316  *
1317  * ctypedef npy_cdouble     complex_t             # <<<<<<<<<<<<<<
1318  *
1319  * cdef inline object PyArray_MultiIterNew1(a):
1320  */
1321 typedef npy_cdouble __pyx_t_5numpy_complex_t;
1322 struct __pyx_t_2yt_8geometry_13grid_visitors_GridTreeNode;
1323 struct __pyx_t_2yt_8geometry_13grid_visitors_GridTreeNodePadded;
1324 struct __pyx_t_2yt_8geometry_13grid_visitors_GridVisitorData;
1325 
1326 /* "grid_visitors.pxd":13
1327  *
1328  *
1329  * cdef struct GridTreeNode:             # <<<<<<<<<<<<<<
1330  *     np.int32_t num_children
1331  *     np.int32_t level
1332  */
1333 struct __pyx_t_2yt_8geometry_13grid_visitors_GridTreeNode {
1334   __pyx_t_5numpy_int32_t num_children;
1335   __pyx_t_5numpy_int32_t level;
1336   __pyx_t_5numpy_int64_t index;
1337   __pyx_t_5numpy_float64_t left_edge[3];
1338   __pyx_t_5numpy_float64_t right_edge[3];
1339   struct __pyx_t_2yt_8geometry_13grid_visitors_GridTreeNode **children;
1340   __pyx_t_5numpy_int64_t start_index[3];
1341   __pyx_t_5numpy_int32_t dims[3];
1342   __pyx_t_5numpy_float64_t dds[3];
1343 };
1344 
1345 /* "grid_visitors.pxd":24
1346  *     np.float64_t dds[3]
1347  *
1348  * cdef struct GridTreeNodePadded:             # <<<<<<<<<<<<<<
1349  *     np.int32_t num_children
1350  *     np.int32_t level
1351  */
1352 struct __pyx_t_2yt_8geometry_13grid_visitors_GridTreeNodePadded {
1353   __pyx_t_5numpy_int32_t num_children;
1354   __pyx_t_5numpy_int32_t level;
1355   __pyx_t_5numpy_int64_t index;
1356   __pyx_t_5numpy_float64_t left_edge_x;
1357   __pyx_t_5numpy_float64_t left_edge_y;
1358   __pyx_t_5numpy_float64_t left_edge_z;
1359   __pyx_t_5numpy_float64_t right_edge_x;
1360   __pyx_t_5numpy_float64_t right_edge_y;
1361   __pyx_t_5numpy_float64_t right_edge_z;
1362   __pyx_t_5numpy_int_t children_pointers;
1363   __pyx_t_5numpy_int64_t start_index_x;
1364   __pyx_t_5numpy_int64_t start_index_y;
1365   __pyx_t_5numpy_int64_t start_index_z;
1366   __pyx_t_5numpy_int32_t dims_x;
1367   __pyx_t_5numpy_int32_t dims_y;
1368   __pyx_t_5numpy_int32_t dims_z;
1369   __pyx_t_5numpy_float64_t dds_x;
1370   __pyx_t_5numpy_float64_t dds_y;
1371   __pyx_t_5numpy_float64_t dds_z;
1372 };
1373 
1374 /* "grid_visitors.pxd":45
1375  *     np.float64_t dds_z
1376  *
1377  * cdef struct GridVisitorData:             # <<<<<<<<<<<<<<
1378  *     GridTreeNode *grid
1379  *     np.uint64_t index
1380  */
1381 struct __pyx_t_2yt_8geometry_13grid_visitors_GridVisitorData {
1382   struct __pyx_t_2yt_8geometry_13grid_visitors_GridTreeNode *grid;
1383   __pyx_t_5numpy_uint64_t index;
1384   __pyx_t_5numpy_uint64_t global_index;
1385   __pyx_t_5numpy_int64_t pos[3];
1386   int n_tuples;
1387   int **child_tuples;
1388   void *array;
1389   int ref_factor;
1390 };
1391 
1392 /* "grid_visitors.pxd":61
1393  * cdef np.uint8_t check_child_masked(GridVisitorData *data) nogil
1394  *
1395  * ctypedef void grid_visitor_function(GridVisitorData *data,             # <<<<<<<<<<<<<<
1396  *                                          np.uint8_t selected) nogil
1397  * # This is similar in spirit to the way oct visitor functions work.  However,
1398  */
1399 typedef void __pyx_t_2yt_8geometry_13grid_visitors_grid_visitor_function(struct __pyx_t_2yt_8geometry_13grid_visitors_GridVisitorData *, __pyx_t_5numpy_uint8_t);
1400 struct __pyx_t_2yt_8geometry_12oct_visitors_Oct;
1401 struct __pyx_t_2yt_8geometry_12oct_visitors_OctInfo;
1402 struct __pyx_t_2yt_8geometry_12oct_visitors_OctPadded;
1403 
1404 /* "oct_visitors.pxd":13
1405  *
1406  *
1407  * cdef struct Oct             # <<<<<<<<<<<<<<
1408  * cdef struct Oct:
1409  *     np.int64_t file_ind     # index with respect to the order in which it was
1410  */
1411 struct __pyx_t_2yt_8geometry_12oct_visitors_Oct {
1412   __pyx_t_5numpy_int64_t file_ind;
1413   __pyx_t_5numpy_int64_t domain_ind;
1414   __pyx_t_5numpy_int64_t domain;
1415   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct **children;
1416 };
1417 
1418 /* "oct_visitors.pxd":21
1419  *     Oct **children          # Up to 8 long
1420  *
1421  * cdef struct OctInfo:             # <<<<<<<<<<<<<<
1422  *     np.float64_t left_edge[3]
1423  *     np.float64_t dds[3]
1424  */
1425 struct __pyx_t_2yt_8geometry_12oct_visitors_OctInfo {
1426   __pyx_t_5numpy_float64_t left_edge[3];
1427   __pyx_t_5numpy_float64_t dds[3];
1428   __pyx_t_5numpy_int64_t ipos[3];
1429   __pyx_t_5numpy_int32_t level;
1430 };
1431 
1432 /* "oct_visitors.pxd":27
1433  *     np.int32_t level
1434  *
1435  * cdef struct OctPadded:             # <<<<<<<<<<<<<<
1436  *     np.int64_t file_ind
1437  *     np.int64_t domain_ind
1438  */
1439 struct __pyx_t_2yt_8geometry_12oct_visitors_OctPadded {
1440   __pyx_t_5numpy_int64_t file_ind;
1441   __pyx_t_5numpy_int64_t domain_ind;
1442   __pyx_t_5numpy_int64_t domain;
1443   __pyx_t_5numpy_int64_t padding;
1444 };
1445 struct __pyx_t_2yt_9utilities_3lib_20allocation_container_AllocationContainer;
1446 struct __pyx_opt_args_2yt_9utilities_3lib_20allocation_container_10ObjectPool_allocate_objs;
1447 
1448 /* "yt/utilities/lib/allocation_container.pxd":13
1449  *
1450  *
1451  * cdef struct AllocationContainer:             # <<<<<<<<<<<<<<
1452  *     np.uint64_t n
1453  *     np.uint64_t n_assigned
1454  */
1455 struct __pyx_t_2yt_9utilities_3lib_20allocation_container_AllocationContainer {
1456   __pyx_t_5numpy_uint64_t n;
1457   __pyx_t_5numpy_uint64_t n_assigned;
1458   __pyx_t_5numpy_uint64_t offset;
1459   __pyx_t_5numpy_int64_t con_id;
1460   void *my_objs;
1461 };
1462 
1463 /* "yt/utilities/lib/allocation_container.pxd":24
1464  *     cdef np.uint64_t n_con
1465  *     cdef AllocationContainer* containers
1466  *     cdef void allocate_objs(self, int n_objs, np.int64_t con_id = ?) except *             # <<<<<<<<<<<<<<
1467  *     cdef void setup_objs(self, void *obj, np.uint64_t count,
1468  *                          np.uint64_t offset, np.int64_t con_id)
1469  */
1470 struct __pyx_opt_args_2yt_9utilities_3lib_20allocation_container_10ObjectPool_allocate_objs {
1471   int __pyx_n;
1472   __pyx_t_5numpy_int64_t con_id;
1473 };
1474 struct __pyx_t_2yt_8geometry_13oct_container_OctKey;
1475 struct __pyx_t_2yt_8geometry_13oct_container_OctList;
1476 struct __pyx_t_2yt_8geometry_13oct_container_OctAllocationContainer;
1477 struct __pyx_opt_args_2yt_8geometry_13oct_container_15OctreeContainer_get;
1478 struct __pyx_opt_args_2yt_8geometry_13oct_container_15OctreeContainer_visit_all_octs;
1479 
1480 /* "oct_container.pxd":25
1481  * cdef int ORDER_MAX
1482  *
1483  * cdef struct OctKey:             # <<<<<<<<<<<<<<
1484  *     np.int64_t key
1485  *     Oct *node
1486  */
1487 struct __pyx_t_2yt_8geometry_13oct_container_OctKey {
1488   __pyx_t_5numpy_int64_t key;
1489   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *node;
1490   __pyx_t_5numpy_int64_t *indices;
1491   __pyx_t_5numpy_int64_t pcount;
1492 };
1493 
1494 /* "oct_container.pxd":32
1495  *     np.int64_t pcount
1496  *
1497  * cdef struct OctList             # <<<<<<<<<<<<<<
1498  *
1499  * cdef struct OctList:
1500  */
1501 struct __pyx_t_2yt_8geometry_13oct_container_OctList {
1502   struct __pyx_t_2yt_8geometry_13oct_container_OctList *next;
1503   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1504 };
1505 
1506 /* "oct_container.pxd":40
1507  * # NOTE: This object *has* to be the same size as the AllocationContainer
1508  * # object.  There's an assert in the __cinit__ function.
1509  * cdef struct OctAllocationContainer:             # <<<<<<<<<<<<<<
1510  *     np.uint64_t n
1511  *     np.uint64_t n_assigned
1512  */
1513 struct __pyx_t_2yt_8geometry_13oct_container_OctAllocationContainer {
1514   __pyx_t_5numpy_uint64_t n;
1515   __pyx_t_5numpy_uint64_t n_assigned;
1516   __pyx_t_5numpy_uint64_t offset;
1517   __pyx_t_5numpy_int64_t con_id;
1518   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *my_objs;
1519 };
1520 
1521 /* "oct_container.pxd":66
1522  *     cdef public np.int64_t nocts
1523  *     cdef public int num_domains
1524  *     cdef Oct *get(self, np.float64_t ppos[3], OctInfo *oinfo = ?,             # <<<<<<<<<<<<<<
1525  *                   int max_level = ?) nogil
1526  *     cdef int get_root(self, int ind[3], Oct **o) nogil
1527  */
1528 struct __pyx_opt_args_2yt_8geometry_13oct_container_15OctreeContainer_get {
1529   int __pyx_n;
1530   struct __pyx_t_2yt_8geometry_12oct_visitors_OctInfo *oinfo;
1531   int max_level;
1532 };
1533 
1534 /* "oct_container.pxd":74
1535  *     # AllocationContainer.offset if such a thing exists.
1536  *     cdef np.int64_t get_domain_offset(self, int domain_id)
1537  *     cdef void visit_all_octs(self,             # <<<<<<<<<<<<<<
1538  *                         selection_routines.SelectorObject selector,
1539  *                         OctVisitor visitor,
1540  */
1541 struct __pyx_opt_args_2yt_8geometry_13oct_container_15OctreeContainer_visit_all_octs {
1542   int __pyx_n;
1543   int vc;
1544   __pyx_t_5numpy_int64_t *indices;
1545 };
1546 struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer;
1547 
1548 /* "volume_container.pxd":13
1549  *
1550  *
1551  * cdef struct VolumeContainer:             # <<<<<<<<<<<<<<
1552  *     #-----------------------------------------------------------------------------
1553  *     # Encapsulates a volume container used for volume rendering.
1554  */
1555 struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer {
1556   int n_fields;
1557   __pyx_t_5numpy_float64_t **data;
1558   __pyx_t_5numpy_uint8_t *mask;
1559   __pyx_t_5numpy_float64_t left_edge[3];
1560   __pyx_t_5numpy_float64_t right_edge[3];
1561   __pyx_t_5numpy_float64_t dds[3];
1562   __pyx_t_5numpy_float64_t idds[3];
1563   int dims[3];
1564 };
1565 struct __pyx_t_2yt_9utilities_3lib_14image_samplers_ImageAccumulator;
1566 
1567 /* "image_samplers.pxd":25
1568  * cdef struct VolumeRenderAccumulator
1569  *
1570  * ctypedef int calculate_extent_function(ImageSampler image,             # <<<<<<<<<<<<<<
1571  *             VolumeContainer *vc, np.int64_t rv[4]) nogil except -1
1572  *
1573  */
1574 typedef int __pyx_t_2yt_9utilities_3lib_14image_samplers_calculate_extent_function(struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ImageSampler *, struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer *, __pyx_t_5numpy_int64_t *);
1575 
1576 /* "image_samplers.pxd":28
1577  *             VolumeContainer *vc, np.int64_t rv[4]) nogil except -1
1578  *
1579  * ctypedef void generate_vector_info_function(ImageSampler im,             # <<<<<<<<<<<<<<
1580  *             np.int64_t vi, np.int64_t vj,
1581  *             np.float64_t width[2],
1582  */
1583 typedef void __pyx_t_2yt_9utilities_3lib_14image_samplers_generate_vector_info_function(struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ImageSampler *, __pyx_t_5numpy_int64_t, __pyx_t_5numpy_int64_t, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *);
1584 
1585 /* "image_samplers.pxd":33
1586  *             np.float64_t v_dir[3], np.float64_t v_pos[3]) nogil
1587  *
1588  * cdef struct ImageAccumulator:             # <<<<<<<<<<<<<<
1589  *     np.float64_t rgba[Nch]
1590  *     void *supp_data
1591  */
1592 struct __pyx_t_2yt_9utilities_3lib_14image_samplers_ImageAccumulator {
1593   __pyx_t_5numpy_float64_t rgba[4];
1594   void *supp_data;
1595 };
1596 struct __pyx_opt_args_2yt_9utilities_3lib_14grid_traversal_walk_volume;
1597 
1598 /* "yt/utilities/lib/grid_traversal.pxd":18
1599  * from .volume_container cimport VolumeContainer, vc_index, vc_pos_index
1600  *
1601  * ctypedef void sampler_function(             # <<<<<<<<<<<<<<
1602  *                 VolumeContainer *vc,
1603  *                 np.float64_t v_pos[3],
1604  */
1605 typedef void __pyx_t_2yt_9utilities_3lib_14grid_traversal_sampler_function(struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t, int *, void *);
1606 
1607 /* "yt/utilities/lib/grid_traversal.pxd":47
1608  * # Returns: The number of voxels hit during the traversal phase. If the traversal phase is not reached, returns 0.
1609  * #-----------------------------------------------------------------------------
1610  * cdef int walk_volume(VolumeContainer *vc,             # <<<<<<<<<<<<<<
1611  *                      np.float64_t v_pos[3],
1612  *                      np.float64_t v_dir[3],
1613  */
1614 struct __pyx_opt_args_2yt_9utilities_3lib_14grid_traversal_walk_volume {
1615   int __pyx_n;
1616   __pyx_t_5numpy_float64_t *return_t;
1617   __pyx_t_5numpy_float64_t max_t;
1618 };
1619 struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_recursively_visit_octs;
1620 struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid;
1621 struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid_edge;
1622 struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_visit_grid_cells;
1623 struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator;
1624 struct __pyx_opt_args_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_grid;
1625 struct __pyx_opt_args_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_grid;
1626 struct __pyx_opt_args_2yt_8geometry_18selection_routines_14AlwaysSelector_select_grid;
1627 struct __pyx_opt_args_2yt_8geometry_18selection_routines_15ComposeSelector_select_grid;
1628 struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_grid;
1629 struct __pyx_opt_args_2yt_8geometry_18selection_routines_17BooleanORSelector_select_grid;
1630 struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_grid;
1631 struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_grid;
1632 struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_grid;
1633 struct __pyx_opt_args_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_grid;
1634 struct __pyx_opt_args_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_grid;
1635 
1636 /* "yt/geometry/selection_routines.pxd":34
1637  *     cdef np.int64_t _hash
1638  *
1639  *     cdef void recursively_visit_octs(self, Oct *root,             # <<<<<<<<<<<<<<
1640  *                         np.float64_t pos[3], np.float64_t dds[3],
1641  *                         int level,
1642  */
1643 struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_recursively_visit_octs {
1644   int __pyx_n;
1645   int visit_covered;
1646 };
1647 
1648 /* "yt/geometry/selection_routines.pxd":42
1649  *                               np.float64_t spos[3], np.float64_t sdds[3],
1650  *                               OctVisitor visitor, int i, int j, int k)
1651  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1652  *                                np.float64_t right_edge[3],
1653  *                                np.int32_t level, Oct *o = ?) nogil
1654  */
1655 struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid {
1656   int __pyx_n;
1657   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1658 };
1659 
1660 /* "yt/geometry/selection_routines.pxd":45
1661  *                                np.float64_t right_edge[3],
1662  *                                np.int32_t level, Oct *o = ?) nogil
1663  *     cdef int select_grid_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1664  *                                     np.float64_t right_edge[3],
1665  *                                     np.int32_t level, Oct *o = ?) nogil
1666  */
1667 struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid_edge {
1668   int __pyx_n;
1669   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1670 };
1671 
1672 /* "yt/geometry/selection_routines.pxd":62
1673  *                                 np.ndarray[np.uint8_t, ndim=3] mask,
1674  *                                 int level)
1675  *     cdef void visit_grid_cells(self, GridVisitorData *data,             # <<<<<<<<<<<<<<
1676  *                     grid_visitor_function *func, np.uint8_t *cached_mask = ?)
1677  *
1678  */
1679 struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_visit_grid_cells {
1680   int __pyx_n;
1681   __pyx_t_5numpy_uint8_t *cached_mask;
1682 };
1683 
1684 /* "yt/geometry/_selection_routines/ray_selector.pxi":1
1685  * cdef struct IntegrationAccumulator:             # <<<<<<<<<<<<<<
1686  *     np.float64_t *t
1687  *     np.float64_t *dt
1688  */
1689 struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator {
1690   __pyx_t_5numpy_float64_t *t;
1691   __pyx_t_5numpy_float64_t *dt;
1692   __pyx_t_5numpy_uint8_t *child_mask;
1693   int hits;
1694 };
1695 
1696 /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":48
1697  *     @cython.wraparound(False)
1698  *     @cython.cdivision(True)
1699  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1700  *                          np.float64_t right_edge[3], np.int32_t level,
1701  *                          Oct *o = NULL) nogil:
1702  */
1703 struct __pyx_opt_args_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_grid {
1704   int __pyx_n;
1705   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1706 };
1707 
1708 /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":63
1709  *         return self.base_selector.select_bbox(left_edge, right_edge)
1710  *
1711  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1712  *                          np.float64_t right_edge[3], np.int32_t level,
1713  *                          Oct *o = NULL) nogil:
1714  */
1715 struct __pyx_opt_args_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_grid {
1716   int __pyx_n;
1717   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1718 };
1719 
1720 /* "yt/geometry/_selection_routines/always_selector.pxi":23
1721  *         return 1
1722  *
1723  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1724  *                          np.float64_t right_edge[3], np.int32_t level,
1725  *                          Oct *o = NULL) nogil:
1726  */
1727 struct __pyx_opt_args_2yt_8geometry_18selection_routines_14AlwaysSelector_select_grid {
1728   int __pyx_n;
1729   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1730 };
1731 
1732 /* "yt/geometry/_selection_routines/compose_selector.pxi":26
1733  *             return 0
1734  *
1735  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1736  *                          np.float64_t right_edge[3], np.int32_t level,
1737  *                          Oct *o = NULL) nogil:
1738  */
1739 struct __pyx_opt_args_2yt_8geometry_18selection_routines_15ComposeSelector_select_grid {
1740   int __pyx_n;
1741   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1742 };
1743 
1744 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":33
1745  *         return max(rv1, rv2)
1746  *
1747  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1748  *                          np.float64_t right_edge[3], np.int32_t level,
1749  *                          Oct *o = NULL) nogil:
1750  */
1751 struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_grid {
1752   int __pyx_n;
1753   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1754 };
1755 
1756 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":85
1757  *         return max(rv1, rv2)
1758  *
1759  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1760  *                          np.float64_t right_edge[3], np.int32_t level,
1761  *                          Oct *o = NULL) nogil:
1762  */
1763 struct __pyx_opt_args_2yt_8geometry_18selection_routines_17BooleanORSelector_select_grid {
1764   int __pyx_n;
1765   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1766 };
1767 
1768 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":135
1769  *         return 2
1770  *
1771  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1772  *                          np.float64_t right_edge[3], np.int32_t level,
1773  *                          Oct *o = NULL) nogil:
1774  */
1775 struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_grid {
1776   int __pyx_n;
1777   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1778 };
1779 
1780 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":185
1781  *         return 2  # part of bbox only touched by selector fully covering bbox
1782  *
1783  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1784  *                          np.float64_t right_edge[3], np.int32_t level,
1785  *                          Oct *o = NULL) nogil:
1786  */
1787 struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_grid {
1788   int __pyx_n;
1789   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1790 };
1791 
1792 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":235
1793  *         return 2
1794  *
1795  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1796  *                          np.float64_t right_edge[3], np.int32_t level,
1797  *                          Oct *o = NULL) nogil:
1798  */
1799 struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_grid {
1800   int __pyx_n;
1801   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1802 };
1803 
1804 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":309
1805  *     @cython.boundscheck(False)
1806  *     @cython.wraparound(False)
1807  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1808  *                          np.float64_t right_edge[3], np.int32_t level,
1809  *                          Oct *o = NULL) nogil:
1810  */
1811 struct __pyx_opt_args_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_grid {
1812   int __pyx_n;
1813   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1814 };
1815 
1816 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":392
1817  *     @cython.boundscheck(False)
1818  *     @cython.wraparound(False)
1819  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
1820  *                          np.float64_t right_edge[3], np.int32_t level,
1821  *                          Oct *o = NULL) nogil:
1822  */
1823 struct __pyx_opt_args_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_grid {
1824   int __pyx_n;
1825   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *o;
1826 };
1827 
1828 /* "oct_visitors.pxd":33
1829  *     np.int64_t padding
1830  *
1831  * cdef class OctVisitor:             # <<<<<<<<<<<<<<
1832  *     cdef np.uint64_t index
1833  *     cdef np.uint64_t last
1834  */
1835 struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor {
1836   PyObject_HEAD
1837   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor *__pyx_vtab;
1838   __pyx_t_5numpy_uint64_t index;
1839   __pyx_t_5numpy_uint64_t last;
1840   __pyx_t_5numpy_int64_t global_index;
1841   __pyx_t_5numpy_int64_t pos[3];
1842   __pyx_t_5numpy_uint8_t ind[3];
1843   int dims;
1844   __pyx_t_5numpy_int32_t domain;
1845   __pyx_t_5numpy_int8_t level;
1846   __pyx_t_5numpy_int8_t oref;
1847   __pyx_t_5numpy_int32_t nz;
1848 };
1849 
1850 
1851 /* "oct_visitors.pxd":59
1852  *         return (((self.ind[2]*d)+self.ind[1])*d+self.ind[0])
1853  *
1854  * cdef class CountTotalOcts(OctVisitor):             # <<<<<<<<<<<<<<
1855  *     pass
1856  *
1857  */
1858 struct __pyx_obj_2yt_8geometry_12oct_visitors_CountTotalOcts {
1859   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
1860 };
1861 
1862 
1863 /* "oct_visitors.pxd":62
1864  *     pass
1865  *
1866  * cdef class CountTotalCells(OctVisitor):             # <<<<<<<<<<<<<<
1867  *     pass
1868  *
1869  */
1870 struct __pyx_obj_2yt_8geometry_12oct_visitors_CountTotalCells {
1871   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
1872 };
1873 
1874 
1875 /* "oct_visitors.pxd":65
1876  *     pass
1877  *
1878  * cdef class MarkOcts(OctVisitor):             # <<<<<<<<<<<<<<
1879  *     # Unused
1880  *     cdef np.uint8_t[:,:,:,:] mark
1881  */
1882 struct __pyx_obj_2yt_8geometry_12oct_visitors_MarkOcts {
1883   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
1884   __Pyx_memviewslice mark;
1885 };
1886 
1887 
1888 /* "oct_visitors.pxd":69
1889  *     cdef np.uint8_t[:,:,:,:] mark
1890  *
1891  * cdef class MaskOcts(OctVisitor):             # <<<<<<<<<<<<<<
1892  *     cdef np.uint8_t[:,:,:,:] mask
1893  *
1894  */
1895 struct __pyx_obj_2yt_8geometry_12oct_visitors_MaskOcts {
1896   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
1897   __Pyx_memviewslice mask;
1898 };
1899 
1900 
1901 /* "oct_visitors.pxd":72
1902  *     cdef np.uint8_t[:,:,:,:] mask
1903  *
1904  * cdef class IndexOcts(OctVisitor):             # <<<<<<<<<<<<<<
1905  *     cdef np.int64_t[:] oct_index
1906  *
1907  */
1908 struct __pyx_obj_2yt_8geometry_12oct_visitors_IndexOcts {
1909   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
1910   __Pyx_memviewslice oct_index;
1911 };
1912 
1913 
1914 /* "oct_visitors.pxd":75
1915  *     cdef np.int64_t[:] oct_index
1916  *
1917  * cdef class MaskedIndexOcts(OctVisitor):             # <<<<<<<<<<<<<<
1918  *     cdef np.int64_t[:] oct_index
1919  *     cdef np.uint8_t[:] oct_mask
1920  */
1921 struct __pyx_obj_2yt_8geometry_12oct_visitors_MaskedIndexOcts {
1922   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
1923   __Pyx_memviewslice oct_index;
1924   __Pyx_memviewslice oct_mask;
1925 };
1926 
1927 
1928 /* "oct_visitors.pxd":79
1929  *     cdef np.uint8_t[:] oct_mask
1930  *
1931  * cdef class IndexMaskMapOcts(OctVisitor):             # <<<<<<<<<<<<<<
1932  *     cdef np.int64_t[:] oct_index
1933  *     cdef np.uint8_t[:] oct_mask
1934  */
1935 struct __pyx_obj_2yt_8geometry_12oct_visitors_IndexMaskMapOcts {
1936   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
1937   __Pyx_memviewslice oct_index;
1938   __Pyx_memviewslice oct_mask;
1939   __Pyx_memviewslice map_domain_ind;
1940   __pyx_t_5numpy_uint64_t map_index;
1941 };
1942 
1943 
1944 /* "oct_visitors.pxd":85
1945  *     cdef np.uint64_t map_index
1946  *
1947  * cdef class ICoordsOcts(OctVisitor):             # <<<<<<<<<<<<<<
1948  *     cdef np.int64_t[:,:] icoords
1949  *
1950  */
1951 struct __pyx_obj_2yt_8geometry_12oct_visitors_ICoordsOcts {
1952   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
1953   __Pyx_memviewslice icoords;
1954 };
1955 
1956 
1957 /* "oct_visitors.pxd":88
1958  *     cdef np.int64_t[:,:] icoords
1959  *
1960  * cdef class IResOcts(OctVisitor):             # <<<<<<<<<<<<<<
1961  *     cdef np.int64_t[:] ires
1962  *
1963  */
1964 struct __pyx_obj_2yt_8geometry_12oct_visitors_IResOcts {
1965   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
1966   __Pyx_memviewslice ires;
1967 };
1968 
1969 
1970 /* "oct_visitors.pxd":91
1971  *     cdef np.int64_t[:] ires
1972  *
1973  * cdef class FCoordsOcts(OctVisitor):             # <<<<<<<<<<<<<<
1974  *     cdef np.float64_t[:,:] fcoords
1975  *
1976  */
1977 struct __pyx_obj_2yt_8geometry_12oct_visitors_FCoordsOcts {
1978   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
1979   __Pyx_memviewslice fcoords;
1980 };
1981 
1982 
1983 /* "oct_visitors.pxd":94
1984  *     cdef np.float64_t[:,:] fcoords
1985  *
1986  * cdef class FWidthOcts(OctVisitor):             # <<<<<<<<<<<<<<
1987  *     cdef np.float64_t[:,:] fwidth
1988  *
1989  */
1990 struct __pyx_obj_2yt_8geometry_12oct_visitors_FWidthOcts {
1991   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
1992   __Pyx_memviewslice fwidth;
1993 };
1994 
1995 
1996 /* "oct_visitors.pxd":97
1997  *     cdef np.float64_t[:,:] fwidth
1998  *
1999  * cdef class CopyArrayI64(OctVisitor):             # <<<<<<<<<<<<<<
2000  *     cdef np.int64_t[:,:,:,:,:,:] source
2001  *     cdef np.int64_t[:,:] dest
2002  */
2003 struct __pyx_obj_2yt_8geometry_12oct_visitors_CopyArrayI64 {
2004   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2005   __Pyx_memviewslice source;
2006   __Pyx_memviewslice dest;
2007 };
2008 
2009 
2010 /* "oct_visitors.pxd":101
2011  *     cdef np.int64_t[:,:] dest
2012  *
2013  * cdef class CopyArrayF64(OctVisitor):             # <<<<<<<<<<<<<<
2014  *     cdef np.float64_t[:,:,:,:,:] source
2015  *     cdef np.float64_t[:,:] dest
2016  */
2017 struct __pyx_obj_2yt_8geometry_12oct_visitors_CopyArrayF64 {
2018   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2019   __Pyx_memviewslice source;
2020   __Pyx_memviewslice dest;
2021 };
2022 
2023 
2024 /* "oct_visitors.pxd":105
2025  *     cdef np.float64_t[:,:] dest
2026  *
2027  * cdef class CopyFileIndArrayI8(OctVisitor):             # <<<<<<<<<<<<<<
2028  *     cdef np.int64_t root
2029  *     cdef np.uint8_t[:] source
2030  */
2031 struct __pyx_obj_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8 {
2032   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2033   __pyx_t_5numpy_int64_t root;
2034   __Pyx_memviewslice source;
2035   __Pyx_memviewslice dest;
2036 };
2037 
2038 
2039 /* "oct_visitors.pxd":110
2040  *     cdef np.uint8_t[:] dest
2041  *
2042  * cdef class IdentifyOcts(OctVisitor):             # <<<<<<<<<<<<<<
2043  *     cdef np.uint8_t[:] domain_mask
2044  *
2045  */
2046 struct __pyx_obj_2yt_8geometry_12oct_visitors_IdentifyOcts {
2047   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2048   __Pyx_memviewslice domain_mask;
2049 };
2050 
2051 
2052 /* "oct_visitors.pxd":113
2053  *     cdef np.uint8_t[:] domain_mask
2054  *
2055  * cdef class AssignDomainInd(OctVisitor):             # <<<<<<<<<<<<<<
2056  *     pass
2057  *
2058  */
2059 struct __pyx_obj_2yt_8geometry_12oct_visitors_AssignDomainInd {
2060   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2061 };
2062 
2063 
2064 /* "oct_visitors.pxd":116
2065  *     pass
2066  *
2067  * cdef class FillFileIndicesO(OctVisitor):             # <<<<<<<<<<<<<<
2068  *     cdef np.uint8_t[:] levels
2069  *     cdef np.int64_t[:] file_inds
2070  */
2071 struct __pyx_obj_2yt_8geometry_12oct_visitors_FillFileIndicesO {
2072   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2073   __Pyx_memviewslice levels;
2074   __Pyx_memviewslice file_inds;
2075   __Pyx_memviewslice cell_inds;
2076 };
2077 
2078 
2079 /* "oct_visitors.pxd":121
2080  *     cdef np.uint8_t[:] cell_inds
2081  *
2082  * cdef class FillFileIndicesR(OctVisitor):             # <<<<<<<<<<<<<<
2083  *     cdef np.uint8_t[:] levels
2084  *     cdef np.int64_t[:] file_inds
2085  */
2086 struct __pyx_obj_2yt_8geometry_12oct_visitors_FillFileIndicesR {
2087   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2088   __Pyx_memviewslice levels;
2089   __Pyx_memviewslice file_inds;
2090   __Pyx_memviewslice cell_inds;
2091 };
2092 
2093 
2094 /* "oct_visitors.pxd":126
2095  *     cdef np.uint8_t[:] cell_inds
2096  *
2097  * cdef class CountByDomain(OctVisitor):             # <<<<<<<<<<<<<<
2098  *     cdef np.int64_t[:] domain_counts
2099  *
2100  */
2101 struct __pyx_obj_2yt_8geometry_12oct_visitors_CountByDomain {
2102   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2103   __Pyx_memviewslice domain_counts;
2104 };
2105 
2106 
2107 /* "oct_visitors.pxd":129
2108  *     cdef np.int64_t[:] domain_counts
2109  *
2110  * cdef class StoreOctree(OctVisitor):             # <<<<<<<<<<<<<<
2111  *     cdef np.uint8_t[:] ref_mask
2112  *
2113  */
2114 struct __pyx_obj_2yt_8geometry_12oct_visitors_StoreOctree {
2115   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2116   __Pyx_memviewslice ref_mask;
2117 };
2118 
2119 
2120 /* "oct_visitors.pxd":132
2121  *     cdef np.uint8_t[:] ref_mask
2122  *
2123  * cdef class LoadOctree(OctVisitor):             # <<<<<<<<<<<<<<
2124  *     cdef np.uint8_t[:] ref_mask
2125  *     cdef Oct* octs
2126  */
2127 struct __pyx_obj_2yt_8geometry_12oct_visitors_LoadOctree {
2128   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2129   __Pyx_memviewslice ref_mask;
2130   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *octs;
2131   __pyx_t_5numpy_uint64_t *nocts;
2132   __pyx_t_5numpy_uint64_t *nfinest;
2133 };
2134 
2135 
2136 /* "oct_visitors.pxd":138
2137  *     cdef np.uint64_t *nfinest
2138  *
2139  * cdef class MortonIndexOcts(OctVisitor):             # <<<<<<<<<<<<<<
2140  *     cdef np.uint8_t[:] level_arr
2141  *     cdef np.uint64_t[:] morton_ind
2142  */
2143 struct __pyx_obj_2yt_8geometry_12oct_visitors_MortonIndexOcts {
2144   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2145   __Pyx_memviewslice level_arr;
2146   __Pyx_memviewslice morton_ind;
2147 };
2148 
2149 
2150 /* "oct_visitors.pxd":149
2151  *
2152  *
2153  * cdef class StoreIndex(OctVisitor):             # <<<<<<<<<<<<<<
2154  *     cdef np.int64_t[:,:,:,:] cell_inds
2155  *
2156  */
2157 struct __pyx_obj_2yt_8geometry_12oct_visitors_StoreIndex {
2158   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2159   __Pyx_memviewslice cell_inds;
2160 };
2161 
2162 
2163 /* "oct_visitors.pxd":153
2164  *
2165  * # cimport oct_container
2166  * cdef class BaseNeighbourVisitor(OctVisitor):             # <<<<<<<<<<<<<<
2167  *     cdef int idim      # 0,1,2 for x,y,z
2168  *     cdef int direction # +1 for +x, -1 for -x
2169  */
2170 struct __pyx_obj_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor {
2171   struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2172   int idim;
2173   int direction;
2174   __pyx_t_5numpy_uint8_t neigh_ind[3];
2175   int other_oct;
2176   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *neighbour;
2177   struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *octree;
2178   struct __pyx_t_2yt_8geometry_12oct_visitors_OctInfo oi;
2179   int n_ghost_zones;
2180 };
2181 
2182 
2183 /* "oct_visitors.pxd":169
2184  *         return (((self.neigh_ind[2]*d)+self.neigh_ind[1])*d+self.neigh_ind[0])
2185  *
2186  * cdef class NeighbourCellIndexVisitor(BaseNeighbourVisitor):             # <<<<<<<<<<<<<<
2187  *     cdef np.uint8_t[::1] cell_inds
2188  *     cdef np.int64_t[::1] domain_inds
2189  */
2190 struct __pyx_obj_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor {
2191   struct __pyx_obj_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor __pyx_base;
2192   __Pyx_memviewslice cell_inds;
2193   __Pyx_memviewslice domain_inds;
2194 };
2195 
2196 
2197 /* "oct_visitors.pxd":173
2198  *     cdef np.int64_t[::1] domain_inds
2199  *
2200  * cdef class NeighbourCellVisitor(BaseNeighbourVisitor):             # <<<<<<<<<<<<<<
2201  *     cdef np.uint8_t[::1] levels
2202  *     cdef np.int64_t[::1] file_inds
2203  */
2204 struct __pyx_obj_2yt_8geometry_12oct_visitors_NeighbourCellVisitor {
2205   struct __pyx_obj_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor __pyx_base;
2206   __Pyx_memviewslice levels;
2207   __Pyx_memviewslice file_inds;
2208   __Pyx_memviewslice cell_inds;
2209   __Pyx_memviewslice domains;
2210 };
2211 
2212 
2213 /* "yt/utilities/lib/allocation_container.pxd":20
2214  *     void *my_objs
2215  *
2216  * cdef class ObjectPool:             # <<<<<<<<<<<<<<
2217  *     cdef public np.uint64_t itemsize
2218  *     cdef np.uint64_t n_con
2219  */
2220 struct __pyx_obj_2yt_9utilities_3lib_20allocation_container_ObjectPool {
2221   PyObject_HEAD
2222   struct __pyx_vtabstruct_2yt_9utilities_3lib_20allocation_container_ObjectPool *__pyx_vtab;
2223   __pyx_t_5numpy_uint64_t itemsize;
2224   __pyx_t_5numpy_uint64_t n_con;
2225   struct __pyx_t_2yt_9utilities_3lib_20allocation_container_AllocationContainer *containers;
2226 };
2227 
2228 
2229 /* "oct_container.pxd":47
2230  *     Oct *my_objs
2231  *
2232  * cdef class OctObjectPool(ObjectPool):             # <<<<<<<<<<<<<<
2233  *     cdef inline OctAllocationContainer *get_cont(self, int i):
2234  *         return <OctAllocationContainer*> (&self.containers[i])
2235  */
2236 struct __pyx_obj_2yt_8geometry_13oct_container_OctObjectPool {
2237   struct __pyx_obj_2yt_9utilities_3lib_20allocation_container_ObjectPool __pyx_base;
2238 };
2239 
2240 
2241 /* "oct_container.pxd":55
2242  * cdef void OctList_delete(OctList *list)
2243  *
2244  * cdef class OctreeContainer:             # <<<<<<<<<<<<<<
2245  *     cdef public OctObjectPool domains
2246  *     cdef Oct ****root_mesh
2247  */
2248 struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer {
2249   PyObject_HEAD
2250   struct __pyx_vtabstruct_2yt_8geometry_13oct_container_OctreeContainer *__pyx_vtab;
2251   struct __pyx_obj_2yt_8geometry_13oct_container_OctObjectPool *domains;
2252   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct ****root_mesh;
2253   int partial_coverage;
2254   int level_offset;
2255   int nn[3];
2256   __pyx_t_5numpy_uint8_t oref;
2257   __pyx_t_5numpy_float64_t DLE[3];
2258   __pyx_t_5numpy_float64_t DRE[3];
2259   __pyx_t_5numpy_int64_t nocts;
2260   int num_domains;
2261   PyObject *fill_style;
2262 };
2263 
2264 
2265 /* "oct_container.pxd":85
2266  *     cdef public object fill_style
2267  *
2268  * cdef class SparseOctreeContainer(OctreeContainer):             # <<<<<<<<<<<<<<
2269  *     cdef OctKey *root_nodes
2270  *     cdef void *tree_root
2271  */
2272 struct __pyx_obj_2yt_8geometry_13oct_container_SparseOctreeContainer {
2273   struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer __pyx_base;
2274   struct __pyx_t_2yt_8geometry_13oct_container_OctKey *root_nodes;
2275   void *tree_root;
2276   int num_root;
2277   int max_root;
2278 };
2279 
2280 
2281 /* "oct_container.pxd":93
2282  *     cdef np.int64_t ipos_to_key(self, int pos[3]) nogil
2283  *
2284  * cdef class RAMSESOctreeContainer(SparseOctreeContainer):             # <<<<<<<<<<<<<<
2285  *     pass
2286  *
2287  */
2288 struct __pyx_obj_2yt_8geometry_13oct_container_RAMSESOctreeContainer {
2289   struct __pyx_obj_2yt_8geometry_13oct_container_SparseOctreeContainer __pyx_base;
2290 };
2291 
2292 
2293 /* "yt/utilities/lib/bitarray.pxd":28
2294  *     return 1
2295  *
2296  * cdef class bitarray:             # <<<<<<<<<<<<<<
2297  *     cdef np.uint8_t *buf
2298  *     cdef np.uint64_t size
2299  */
2300 struct __pyx_obj_2yt_9utilities_3lib_8bitarray_bitarray {
2301   PyObject_HEAD
2302   struct __pyx_vtabstruct_2yt_9utilities_3lib_8bitarray_bitarray *__pyx_vtab;
2303   __pyx_t_5numpy_uint8_t *buf;
2304   __pyx_t_5numpy_uint64_t size;
2305   __pyx_t_5numpy_uint64_t buf_size;
2306   PyObject *ibuf;
2307 };
2308 
2309 
2310 /* "partitioned_grid.pxd":18
2311  *
2312  *
2313  * cdef class PartitionedGrid:             # <<<<<<<<<<<<<<
2314  *     cdef public object my_data
2315  *     cdef public object source_mask
2316  */
2317 struct __pyx_obj_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid {
2318   PyObject_HEAD
2319   struct __pyx_vtabstruct_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid *__pyx_vtab;
2320   PyObject *my_data;
2321   PyObject *source_mask;
2322   PyObject *LeftEdge;
2323   PyObject *RightEdge;
2324   int parent_grid_id;
2325   struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer *container;
2326   __pyx_t_5numpy_float64_t star_er;
2327   __pyx_t_5numpy_float64_t star_sigma_num;
2328   __pyx_t_5numpy_float64_t star_coeff;
2329 };
2330 
2331 
2332 /* "image_samplers.pxd":37
2333  *     void *supp_data
2334  *
2335  * cdef class ImageSampler:             # <<<<<<<<<<<<<<
2336  *     cdef np.float64_t[:,:,:] vp_pos
2337  *     cdef np.float64_t[:,:,:] vp_dir
2338  */
2339 struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ImageSampler {
2340   PyObject_HEAD
2341   struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_ImageSampler *__pyx_vtab;
2342   __Pyx_memviewslice vp_pos;
2343   __Pyx_memviewslice vp_dir;
2344   __pyx_t_5numpy_float64_t *center;
2345   __Pyx_memviewslice image;
2346   __Pyx_memviewslice zbuffer;
2347   __Pyx_memviewslice image_used;
2348   __Pyx_memviewslice mesh_lines;
2349   __pyx_t_5numpy_float64_t pdx;
2350   __pyx_t_5numpy_float64_t pdy;
2351   __pyx_t_5numpy_float64_t bounds[4];
2352   __Pyx_memviewslice camera_data;
2353   int nv[2];
2354   __pyx_t_5numpy_float64_t *x_vec;
2355   __pyx_t_5numpy_float64_t *y_vec;
2356   PyObject *acenter;
2357   PyObject *aimage;
2358   PyObject *ax_vec;
2359   PyObject *ay_vec;
2360   PyObject *azbuffer;
2361   PyObject *aimage_used;
2362   PyObject *amesh_lines;
2363   void *supp_data;
2364   __pyx_t_5numpy_float64_t width[3];
2365   PyObject *lens_type;
2366   PyObject *volume_method;
2367   __pyx_t_2yt_9utilities_3lib_14image_samplers_calculate_extent_function *extent_function;
2368   __pyx_t_2yt_9utilities_3lib_14image_samplers_generate_vector_info_function *vector_function;
2369 };
2370 
2371 
2372 /* "image_samplers.pxd":71
2373  *                 void *data) nogil
2374  *
2375  * cdef class ProjectionSampler(ImageSampler):             # <<<<<<<<<<<<<<
2376  *     pass
2377  *
2378  */
2379 struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ProjectionSampler {
2380   struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ImageSampler __pyx_base;
2381 };
2382 
2383 
2384 /* "image_samplers.pxd":74
2385  *     pass
2386  *
2387  * cdef class InterpolatedProjectionSampler(ImageSampler):             # <<<<<<<<<<<<<<
2388  *     cdef VolumeRenderAccumulator *vra
2389  *     cdef public object tf_obj
2390  */
2391 struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler {
2392   struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ImageSampler __pyx_base;
2393   struct __pyx_t_2yt_9utilities_3lib_14image_samplers_VolumeRenderAccumulator *vra;
2394   PyObject *tf_obj;
2395   PyObject *my_field_tables;
2396 };
2397 
2398 
2399 /* "image_samplers.pxd":79
2400  *     cdef public object my_field_tables
2401  *
2402  * cdef class VolumeRenderSampler(ImageSampler):             # <<<<<<<<<<<<<<
2403  *     cdef VolumeRenderAccumulator *vra
2404  *     cdef public object tf_obj
2405  */
2406 struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler {
2407   struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ImageSampler __pyx_base;
2408   struct __pyx_t_2yt_9utilities_3lib_14image_samplers_VolumeRenderAccumulator *vra;
2409   PyObject *tf_obj;
2410   PyObject *my_field_tables;
2411   PyObject *tree_containers;
2412 };
2413 
2414 
2415 /* "image_samplers.pxd":85
2416  *     cdef object tree_containers
2417  *
2418  * cdef class LightSourceRenderSampler(ImageSampler):             # <<<<<<<<<<<<<<
2419  *     cdef VolumeRenderAccumulator *vra
2420  *     cdef public object tf_obj
2421  */
2422 struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler {
2423   struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ImageSampler __pyx_base;
2424   struct __pyx_t_2yt_9utilities_3lib_14image_samplers_VolumeRenderAccumulator *vra;
2425   PyObject *tf_obj;
2426   PyObject *my_field_tables;
2427 };
2428 
2429 
2430 /* "yt/geometry/selection_routines.pxd":24
2431  *
2432  *
2433  * cdef class SelectorObject:             # <<<<<<<<<<<<<<
2434  *     cdef public np.int32_t min_level
2435  *     cdef public np.int32_t max_level
2436  */
2437 struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject {
2438   PyObject_HEAD
2439   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *__pyx_vtab;
2440   __pyx_t_5numpy_int32_t min_level;
2441   __pyx_t_5numpy_int32_t max_level;
2442   int overlap_cells;
2443   __pyx_t_5numpy_float64_t domain_width[3];
2444   __pyx_t_5numpy_float64_t domain_center[3];
2445   int periodicity[3];
2446   int _hash_initialized;
2447   __pyx_t_5numpy_int64_t _hash;
2448 };
2449 
2450 
2451 /* "yt/geometry/selection_routines.pxd":70
2452  *         self, np.float64_t x1, np.float64_t x2, int d) nogil
2453  *
2454  * cdef class AlwaysSelector(SelectorObject):             # <<<<<<<<<<<<<<
2455  *     pass
2456  *
2457  */
2458 struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector {
2459   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2460 };
2461 
2462 
2463 /* "yt/geometry/selection_routines.pxd":73
2464  *     pass
2465  *
2466  * cdef class OctreeSubsetSelector(SelectorObject):             # <<<<<<<<<<<<<<
2467  *     cdef public SelectorObject base_selector
2468  *     cdef public np.int64_t domain_id
2469  */
2470 struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector {
2471   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2472   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *base_selector;
2473   __pyx_t_5numpy_int64_t domain_id;
2474 };
2475 
2476 
2477 /* "yt/geometry/selection_routines.pxd":77
2478  *     cdef public np.int64_t domain_id
2479  *
2480  * cdef class BooleanSelector(SelectorObject):             # <<<<<<<<<<<<<<
2481  *     cdef public SelectorObject sel1
2482  *     cdef public SelectorObject sel2
2483  */
2484 struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector {
2485   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2486   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *sel1;
2487   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *sel2;
2488 };
2489 
2490 
2491 /* "yt/geometry/_selection_routines/point_selector.pxi":1
2492  * cdef class PointSelector(SelectorObject):             # <<<<<<<<<<<<<<
2493  *     cdef public np.float64_t p[3]
2494  *
2495  */
2496 struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector {
2497   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2498   __pyx_t_5numpy_float64_t p[3];
2499 };
2500 
2501 
2502 /* "yt/geometry/_selection_routines/sphere_selector.pxi":1
2503  * cdef class SphereSelector(SelectorObject):             # <<<<<<<<<<<<<<
2504  *     cdef public np.float64_t radius
2505  *     cdef public np.float64_t radius2
2506  */
2507 struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector {
2508   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2509   __pyx_t_5numpy_float64_t radius;
2510   __pyx_t_5numpy_float64_t radius2;
2511   __pyx_t_5numpy_float64_t center[3];
2512   __pyx_t_5numpy_float64_t bbox[3][2];
2513   int check_box[3];
2514 };
2515 
2516 
2517 /* "yt/geometry/_selection_routines/region_selector.pxi":1
2518  * cdef class RegionSelector(SelectorObject):             # <<<<<<<<<<<<<<
2519  *     cdef public np.float64_t left_edge[3]
2520  *     cdef public np.float64_t right_edge[3]
2521  */
2522 struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector {
2523   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2524   __pyx_t_5numpy_float64_t left_edge[3];
2525   __pyx_t_5numpy_float64_t right_edge[3];
2526   __pyx_t_5numpy_float64_t right_edge_shift[3];
2527   int is_all_data;
2528   int loose_selection;
2529   int check_period[3];
2530 };
2531 
2532 
2533 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":1
2534  * cdef class CutRegionSelector(SelectorObject):             # <<<<<<<<<<<<<<
2535  *     cdef set _positions
2536  *     cdef tuple _conditionals
2537  */
2538 struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector {
2539   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2540   PyObject *_positions;
2541   PyObject *_conditionals;
2542 };
2543 
2544 
2545 /* "yt/geometry/_selection_routines/disk_selector.pxi":1
2546  * cdef class DiskSelector(SelectorObject):             # <<<<<<<<<<<<<<
2547  *     cdef public np.float64_t norm_vec[3]
2548  *     cdef public np.float64_t center[3]
2549  */
2550 struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector {
2551   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2552   __pyx_t_5numpy_float64_t norm_vec[3];
2553   __pyx_t_5numpy_float64_t center[3];
2554   __pyx_t_5numpy_float64_t radius;
2555   __pyx_t_5numpy_float64_t radius2;
2556   __pyx_t_5numpy_float64_t height;
2557 };
2558 
2559 
2560 /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":1
2561  * cdef class CuttingPlaneSelector(SelectorObject):             # <<<<<<<<<<<<<<
2562  *     cdef public np.float64_t norm_vec[3]
2563  *     cdef public np.float64_t d
2564  */
2565 struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector {
2566   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2567   __pyx_t_5numpy_float64_t norm_vec[3];
2568   __pyx_t_5numpy_float64_t d;
2569 };
2570 
2571 
2572 /* "yt/geometry/_selection_routines/slice_selector.pxi":1
2573  * cdef class SliceSelector(SelectorObject):             # <<<<<<<<<<<<<<
2574  *     cdef public int axis
2575  *     cdef public np.float64_t coord
2576  */
2577 struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector {
2578   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2579   int axis;
2580   __pyx_t_5numpy_float64_t coord;
2581   int ax;
2582   int ay;
2583   int reduced_dimensionality;
2584 };
2585 
2586 
2587 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":1
2588  * cdef class OrthoRaySelector(SelectorObject):             # <<<<<<<<<<<<<<
2589  *
2590  *     cdef public np.uint8_t px_ax
2591  */
2592 struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector {
2593   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2594   __pyx_t_5numpy_uint8_t px_ax;
2595   __pyx_t_5numpy_uint8_t py_ax;
2596   __pyx_t_5numpy_float64_t px;
2597   __pyx_t_5numpy_float64_t py;
2598   int axis;
2599 };
2600 
2601 
2602 /* "yt/geometry/_selection_routines/ray_selector.pxi":23
2603  *     am.dt[di] = (exit_t - enter_t)
2604  *
2605  * cdef class RaySelector(SelectorObject):             # <<<<<<<<<<<<<<
2606  *
2607  *     cdef public np.float64_t p1[3]
2608  */
2609 struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector {
2610   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2611   __pyx_t_5numpy_float64_t p1[3];
2612   __pyx_t_5numpy_float64_t p2[3];
2613   __pyx_t_5numpy_float64_t vec[3];
2614 };
2615 
2616 
2617 /* "yt/geometry/_selection_routines/data_collection_selector.pxi":1
2618  * cdef class DataCollectionSelector(SelectorObject):             # <<<<<<<<<<<<<<
2619  *     cdef object obj_ids
2620  *     cdef np.int64_t nids
2621  */
2622 struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector {
2623   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2624   PyObject *obj_ids;
2625   __pyx_t_5numpy_int64_t nids;
2626 };
2627 
2628 
2629 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":1
2630  * cdef class EllipsoidSelector(SelectorObject):             # <<<<<<<<<<<<<<
2631  *     cdef public np.float64_t vec[3][3]
2632  *     cdef public np.float64_t mag[3]
2633  */
2634 struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector {
2635   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2636   __pyx_t_5numpy_float64_t vec[3][3];
2637   __pyx_t_5numpy_float64_t mag[3];
2638   __pyx_t_5numpy_float64_t center[3];
2639 };
2640 
2641 
2642 /* "yt/geometry/_selection_routines/grid_selector.pxi":1
2643  * cdef class GridSelector(SelectorObject):             # <<<<<<<<<<<<<<
2644  *     cdef object ind
2645  *
2646  */
2647 struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector {
2648   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2649   PyObject *ind;
2650 };
2651 
2652 
2653 /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":1
2654  * cdef class IndexedOctreeSubsetSelector(SelectorObject):             # <<<<<<<<<<<<<<
2655  *     # This is a numpy array, which will be a bool of ndim 1
2656  *     cdef np.uint64_t min_ind
2657  */
2658 struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector {
2659   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2660   __pyx_t_5numpy_uint64_t min_ind;
2661   __pyx_t_5numpy_uint64_t max_ind;
2662   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *base_selector;
2663   int filter_bbox;
2664   __pyx_t_5numpy_float64_t DLE[3];
2665   __pyx_t_5numpy_float64_t DRE[3];
2666 };
2667 
2668 
2669 /* "yt/geometry/_selection_routines/compose_selector.pxi":1
2670  * cdef class ComposeSelector(SelectorObject):             # <<<<<<<<<<<<<<
2671  *     cdef SelectorObject selector1
2672  *     cdef SelectorObject selector2
2673  */
2674 struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector {
2675   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2676   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *selector1;
2677   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *selector2;
2678 };
2679 
2680 
2681 /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":1
2682  * cdef class HaloParticlesSelector(SelectorObject):             # <<<<<<<<<<<<<<
2683  *     cdef public object base_source
2684  *     cdef SelectorObject base_selector
2685  */
2686 struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector {
2687   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2688   PyObject *base_source;
2689   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *base_selector;
2690   PyObject *pind;
2691   __pyx_t_5numpy_int64_t halo_id;
2692 };
2693 
2694 
2695 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":16
2696  *             self.sel2 = dobj.dobj2.selector
2697  *
2698  * cdef class BooleanANDSelector(BooleanSelector):             # <<<<<<<<<<<<<<
2699  *     cdef int select_bbox(self, np.float64_t left_edge[3],
2700  *                                np.float64_t right_edge[3]) nogil:
2701  */
2702 struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector {
2703   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector __pyx_base;
2704 };
2705 
2706 
2707 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":68
2708  *                 self.sel2._hash_vals())
2709  *
2710  * cdef class BooleanORSelector(BooleanSelector):             # <<<<<<<<<<<<<<
2711  *     cdef int select_bbox(self, np.float64_t left_edge[3],
2712  *                                np.float64_t right_edge[3]) nogil:
2713  */
2714 struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector {
2715   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector __pyx_base;
2716 };
2717 
2718 
2719 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":121
2720  *                 self.sel2._hash_vals())
2721  *
2722  * cdef class BooleanNOTSelector(BooleanSelector):             # <<<<<<<<<<<<<<
2723  *     cdef int select_bbox(self, np.float64_t left_edge[3],
2724  *                                np.float64_t right_edge[3]) nogil:
2725  */
2726 struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector {
2727   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector __pyx_base;
2728 };
2729 
2730 
2731 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":159
2732  *                 ("not",))
2733  *
2734  * cdef class BooleanXORSelector(BooleanSelector):             # <<<<<<<<<<<<<<
2735  *
2736  *     cdef int select_bbox(self, np.float64_t left_edge[3],
2737  */
2738 struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector {
2739   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector __pyx_base;
2740 };
2741 
2742 
2743 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":213
2744  *                 self.sel2._hash_vals())
2745  *
2746  * cdef class BooleanNEGSelector(BooleanSelector):             # <<<<<<<<<<<<<<
2747  *
2748  *     cdef int select_bbox(self, np.float64_t left_edge[3],
2749  */
2750 struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector {
2751   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector __pyx_base;
2752 };
2753 
2754 
2755 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":266
2756  *                 self.sel2._hash_vals())
2757  *
2758  * cdef class ChainedBooleanSelector(SelectorObject):             # <<<<<<<<<<<<<<
2759  *     cdef int n_obj
2760  *     cdef np.ndarray selectors
2761  */
2762 struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector {
2763   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
2764   int n_obj;
2765   PyArrayObject *selectors;
2766 };
2767 
2768 
2769 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":276
2770  *             self.selectors[i] = dobj.data_objects[i].selector
2771  *
2772  * cdef class ChainedBooleanANDSelector(ChainedBooleanSelector):             # <<<<<<<<<<<<<<
2773  *     @cython.cdivision(True)
2774  *     @cython.boundscheck(False)
2775  */
2776 struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector {
2777   struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector __pyx_base;
2778 };
2779 
2780 
2781 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":359
2782  * intersection_selector = ChainedBooleanANDSelector
2783  *
2784  * cdef class ChainedBooleanORSelector(ChainedBooleanSelector):             # <<<<<<<<<<<<<<
2785  *     @cython.cdivision(True)
2786  *     @cython.boundscheck(False)
2787  */
2788 struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector {
2789   struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector __pyx_base;
2790 };
2791 
2792 
2793 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":5
2794  *     cdef tuple _conditionals
2795  *
2796  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
2797  *         axis_name = dobj.ds.coordinates.axis_name
2798  *         positions = np.array([dobj['index', axis_name[0]],
2799  */
2800 struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ {
2801   PyObject_HEAD
2802   PyObject *__pyx_v_positions;
2803 };
2804 
2805 
2806 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":11
2807  *                               dobj['index', axis_name[2]]]).T
2808  *         self._conditionals = tuple(dobj.conditionals)
2809  *         self._positions = set(tuple(position) for position in positions)             # <<<<<<<<<<<<<<
2810  *
2811  *     cdef int select_bbox(self,  np.float64_t left_edge[3],
2812  */
2813 struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr {
2814   PyObject_HEAD
2815   struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *__pyx_outer_scope;
2816   PyObject *__pyx_v_position;
2817 };
2818 
2819 
2820 /* "View.MemoryView":105
2821  *
2822  * @cname("__pyx_array")
2823  * cdef class array:             # <<<<<<<<<<<<<<
2824  *
2825  *     cdef:
2826  */
2827 struct __pyx_array_obj {
2828   PyObject_HEAD
2829   struct __pyx_vtabstruct_array *__pyx_vtab;
2830   char *data;
2831   Py_ssize_t len;
2832   char *format;
2833   int ndim;
2834   Py_ssize_t *_shape;
2835   Py_ssize_t *_strides;
2836   Py_ssize_t itemsize;
2837   PyObject *mode;
2838   PyObject *_format;
2839   void (*callback_free_data)(void *);
2840   int free_data;
2841   int dtype_is_object;
2842 };
2843 
2844 
2845 /* "View.MemoryView":279
2846  *
2847  * @cname('__pyx_MemviewEnum')
2848  * cdef class Enum(object):             # <<<<<<<<<<<<<<
2849  *     cdef object name
2850  *     def __init__(self, name):
2851  */
2852 struct __pyx_MemviewEnum_obj {
2853   PyObject_HEAD
2854   PyObject *name;
2855 };
2856 
2857 
2858 /* "View.MemoryView":330
2859  *
2860  * @cname('__pyx_memoryview')
2861  * cdef class memoryview(object):             # <<<<<<<<<<<<<<
2862  *
2863  *     cdef object obj
2864  */
2865 struct __pyx_memoryview_obj {
2866   PyObject_HEAD
2867   struct __pyx_vtabstruct_memoryview *__pyx_vtab;
2868   PyObject *obj;
2869   PyObject *_size;
2870   PyObject *_array_interface;
2871   PyThread_type_lock lock;
2872   __pyx_atomic_int acquisition_count[2];
2873   __pyx_atomic_int *acquisition_count_aligned_p;
2874   Py_buffer view;
2875   int flags;
2876   int dtype_is_object;
2877   __Pyx_TypeInfo *typeinfo;
2878 };
2879 
2880 
2881 /* "View.MemoryView":961
2882  *
2883  * @cname('__pyx_memoryviewslice')
2884  * cdef class _memoryviewslice(memoryview):             # <<<<<<<<<<<<<<
2885  *     "Internal class for passing memoryview slices to Python"
2886  *
2887  */
2888 struct __pyx_memoryviewslice_obj {
2889   struct __pyx_memoryview_obj __pyx_base;
2890   __Pyx_memviewslice from_slice;
2891   PyObject *from_object;
2892   PyObject *(*to_object_func)(char *);
2893   int (*to_dtype_func)(char *, PyObject *);
2894 };
2895 
2896 
2897 
2898 /* "oct_visitors.pxd":33
2899  *     np.int64_t padding
2900  *
2901  * cdef class OctVisitor:             # <<<<<<<<<<<<<<
2902  *     cdef np.uint64_t index
2903  *     cdef np.uint64_t last
2904  */
2905 
2906 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor {
2907   void (*visit)(struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *, __pyx_t_5numpy_uint8_t);
2908   int (*oind)(struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *);
2909   int (*rind)(struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *);
2910 };
2911 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor *__pyx_vtabptr_2yt_8geometry_12oct_visitors_OctVisitor;
2912 static CYTHON_INLINE int __pyx_f_2yt_8geometry_12oct_visitors_10OctVisitor_oind(struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *);
2913 static CYTHON_INLINE int __pyx_f_2yt_8geometry_12oct_visitors_10OctVisitor_rind(struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *);
2914 
2915 
2916 /* "oct_visitors.pxd":59
2917  *         return (((self.ind[2]*d)+self.ind[1])*d+self.ind[0])
2918  *
2919  * cdef class CountTotalOcts(OctVisitor):             # <<<<<<<<<<<<<<
2920  *     pass
2921  *
2922  */
2923 
2924 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CountTotalOcts {
2925   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2926 };
2927 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CountTotalOcts *__pyx_vtabptr_2yt_8geometry_12oct_visitors_CountTotalOcts;
2928 
2929 
2930 /* "oct_visitors.pxd":62
2931  *     pass
2932  *
2933  * cdef class CountTotalCells(OctVisitor):             # <<<<<<<<<<<<<<
2934  *     pass
2935  *
2936  */
2937 
2938 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CountTotalCells {
2939   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2940 };
2941 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CountTotalCells *__pyx_vtabptr_2yt_8geometry_12oct_visitors_CountTotalCells;
2942 
2943 
2944 /* "oct_visitors.pxd":65
2945  *     pass
2946  *
2947  * cdef class MarkOcts(OctVisitor):             # <<<<<<<<<<<<<<
2948  *     # Unused
2949  *     cdef np.uint8_t[:,:,:,:] mark
2950  */
2951 
2952 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_MarkOcts {
2953   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2954 };
2955 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_MarkOcts *__pyx_vtabptr_2yt_8geometry_12oct_visitors_MarkOcts;
2956 
2957 
2958 /* "oct_visitors.pxd":69
2959  *     cdef np.uint8_t[:,:,:,:] mark
2960  *
2961  * cdef class MaskOcts(OctVisitor):             # <<<<<<<<<<<<<<
2962  *     cdef np.uint8_t[:,:,:,:] mask
2963  *
2964  */
2965 
2966 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_MaskOcts {
2967   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2968 };
2969 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_MaskOcts *__pyx_vtabptr_2yt_8geometry_12oct_visitors_MaskOcts;
2970 
2971 
2972 /* "oct_visitors.pxd":72
2973  *     cdef np.uint8_t[:,:,:,:] mask
2974  *
2975  * cdef class IndexOcts(OctVisitor):             # <<<<<<<<<<<<<<
2976  *     cdef np.int64_t[:] oct_index
2977  *
2978  */
2979 
2980 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_IndexOcts {
2981   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2982 };
2983 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_IndexOcts *__pyx_vtabptr_2yt_8geometry_12oct_visitors_IndexOcts;
2984 
2985 
2986 /* "oct_visitors.pxd":75
2987  *     cdef np.int64_t[:] oct_index
2988  *
2989  * cdef class MaskedIndexOcts(OctVisitor):             # <<<<<<<<<<<<<<
2990  *     cdef np.int64_t[:] oct_index
2991  *     cdef np.uint8_t[:] oct_mask
2992  */
2993 
2994 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_MaskedIndexOcts {
2995   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
2996 };
2997 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_MaskedIndexOcts *__pyx_vtabptr_2yt_8geometry_12oct_visitors_MaskedIndexOcts;
2998 
2999 
3000 /* "oct_visitors.pxd":79
3001  *     cdef np.uint8_t[:] oct_mask
3002  *
3003  * cdef class IndexMaskMapOcts(OctVisitor):             # <<<<<<<<<<<<<<
3004  *     cdef np.int64_t[:] oct_index
3005  *     cdef np.uint8_t[:] oct_mask
3006  */
3007 
3008 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_IndexMaskMapOcts {
3009   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3010 };
3011 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_IndexMaskMapOcts *__pyx_vtabptr_2yt_8geometry_12oct_visitors_IndexMaskMapOcts;
3012 
3013 
3014 /* "oct_visitors.pxd":85
3015  *     cdef np.uint64_t map_index
3016  *
3017  * cdef class ICoordsOcts(OctVisitor):             # <<<<<<<<<<<<<<
3018  *     cdef np.int64_t[:,:] icoords
3019  *
3020  */
3021 
3022 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_ICoordsOcts {
3023   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3024 };
3025 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_ICoordsOcts *__pyx_vtabptr_2yt_8geometry_12oct_visitors_ICoordsOcts;
3026 
3027 
3028 /* "oct_visitors.pxd":88
3029  *     cdef np.int64_t[:,:] icoords
3030  *
3031  * cdef class IResOcts(OctVisitor):             # <<<<<<<<<<<<<<
3032  *     cdef np.int64_t[:] ires
3033  *
3034  */
3035 
3036 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_IResOcts {
3037   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3038 };
3039 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_IResOcts *__pyx_vtabptr_2yt_8geometry_12oct_visitors_IResOcts;
3040 
3041 
3042 /* "oct_visitors.pxd":91
3043  *     cdef np.int64_t[:] ires
3044  *
3045  * cdef class FCoordsOcts(OctVisitor):             # <<<<<<<<<<<<<<
3046  *     cdef np.float64_t[:,:] fcoords
3047  *
3048  */
3049 
3050 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_FCoordsOcts {
3051   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3052 };
3053 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_FCoordsOcts *__pyx_vtabptr_2yt_8geometry_12oct_visitors_FCoordsOcts;
3054 
3055 
3056 /* "oct_visitors.pxd":94
3057  *     cdef np.float64_t[:,:] fcoords
3058  *
3059  * cdef class FWidthOcts(OctVisitor):             # <<<<<<<<<<<<<<
3060  *     cdef np.float64_t[:,:] fwidth
3061  *
3062  */
3063 
3064 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_FWidthOcts {
3065   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3066 };
3067 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_FWidthOcts *__pyx_vtabptr_2yt_8geometry_12oct_visitors_FWidthOcts;
3068 
3069 
3070 /* "oct_visitors.pxd":97
3071  *     cdef np.float64_t[:,:] fwidth
3072  *
3073  * cdef class CopyArrayI64(OctVisitor):             # <<<<<<<<<<<<<<
3074  *     cdef np.int64_t[:,:,:,:,:,:] source
3075  *     cdef np.int64_t[:,:] dest
3076  */
3077 
3078 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CopyArrayI64 {
3079   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3080 };
3081 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CopyArrayI64 *__pyx_vtabptr_2yt_8geometry_12oct_visitors_CopyArrayI64;
3082 
3083 
3084 /* "oct_visitors.pxd":101
3085  *     cdef np.int64_t[:,:] dest
3086  *
3087  * cdef class CopyArrayF64(OctVisitor):             # <<<<<<<<<<<<<<
3088  *     cdef np.float64_t[:,:,:,:,:] source
3089  *     cdef np.float64_t[:,:] dest
3090  */
3091 
3092 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CopyArrayF64 {
3093   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3094 };
3095 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CopyArrayF64 *__pyx_vtabptr_2yt_8geometry_12oct_visitors_CopyArrayF64;
3096 
3097 
3098 /* "oct_visitors.pxd":105
3099  *     cdef np.float64_t[:,:] dest
3100  *
3101  * cdef class CopyFileIndArrayI8(OctVisitor):             # <<<<<<<<<<<<<<
3102  *     cdef np.int64_t root
3103  *     cdef np.uint8_t[:] source
3104  */
3105 
3106 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8 {
3107   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3108 };
3109 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8 *__pyx_vtabptr_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8;
3110 
3111 
3112 /* "oct_visitors.pxd":110
3113  *     cdef np.uint8_t[:] dest
3114  *
3115  * cdef class IdentifyOcts(OctVisitor):             # <<<<<<<<<<<<<<
3116  *     cdef np.uint8_t[:] domain_mask
3117  *
3118  */
3119 
3120 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_IdentifyOcts {
3121   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3122 };
3123 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_IdentifyOcts *__pyx_vtabptr_2yt_8geometry_12oct_visitors_IdentifyOcts;
3124 
3125 
3126 /* "oct_visitors.pxd":113
3127  *     cdef np.uint8_t[:] domain_mask
3128  *
3129  * cdef class AssignDomainInd(OctVisitor):             # <<<<<<<<<<<<<<
3130  *     pass
3131  *
3132  */
3133 
3134 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_AssignDomainInd {
3135   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3136 };
3137 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_AssignDomainInd *__pyx_vtabptr_2yt_8geometry_12oct_visitors_AssignDomainInd;
3138 
3139 
3140 /* "oct_visitors.pxd":116
3141  *     pass
3142  *
3143  * cdef class FillFileIndicesO(OctVisitor):             # <<<<<<<<<<<<<<
3144  *     cdef np.uint8_t[:] levels
3145  *     cdef np.int64_t[:] file_inds
3146  */
3147 
3148 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_FillFileIndicesO {
3149   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3150 };
3151 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_FillFileIndicesO *__pyx_vtabptr_2yt_8geometry_12oct_visitors_FillFileIndicesO;
3152 
3153 
3154 /* "oct_visitors.pxd":121
3155  *     cdef np.uint8_t[:] cell_inds
3156  *
3157  * cdef class FillFileIndicesR(OctVisitor):             # <<<<<<<<<<<<<<
3158  *     cdef np.uint8_t[:] levels
3159  *     cdef np.int64_t[:] file_inds
3160  */
3161 
3162 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_FillFileIndicesR {
3163   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3164 };
3165 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_FillFileIndicesR *__pyx_vtabptr_2yt_8geometry_12oct_visitors_FillFileIndicesR;
3166 
3167 
3168 /* "oct_visitors.pxd":126
3169  *     cdef np.uint8_t[:] cell_inds
3170  *
3171  * cdef class CountByDomain(OctVisitor):             # <<<<<<<<<<<<<<
3172  *     cdef np.int64_t[:] domain_counts
3173  *
3174  */
3175 
3176 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CountByDomain {
3177   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3178 };
3179 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CountByDomain *__pyx_vtabptr_2yt_8geometry_12oct_visitors_CountByDomain;
3180 
3181 
3182 /* "oct_visitors.pxd":129
3183  *     cdef np.int64_t[:] domain_counts
3184  *
3185  * cdef class StoreOctree(OctVisitor):             # <<<<<<<<<<<<<<
3186  *     cdef np.uint8_t[:] ref_mask
3187  *
3188  */
3189 
3190 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_StoreOctree {
3191   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3192 };
3193 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_StoreOctree *__pyx_vtabptr_2yt_8geometry_12oct_visitors_StoreOctree;
3194 
3195 
3196 /* "oct_visitors.pxd":132
3197  *     cdef np.uint8_t[:] ref_mask
3198  *
3199  * cdef class LoadOctree(OctVisitor):             # <<<<<<<<<<<<<<
3200  *     cdef np.uint8_t[:] ref_mask
3201  *     cdef Oct* octs
3202  */
3203 
3204 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_LoadOctree {
3205   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3206 };
3207 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_LoadOctree *__pyx_vtabptr_2yt_8geometry_12oct_visitors_LoadOctree;
3208 
3209 
3210 /* "oct_visitors.pxd":138
3211  *     cdef np.uint64_t *nfinest
3212  *
3213  * cdef class MortonIndexOcts(OctVisitor):             # <<<<<<<<<<<<<<
3214  *     cdef np.uint8_t[:] level_arr
3215  *     cdef np.uint64_t[:] morton_ind
3216  */
3217 
3218 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_MortonIndexOcts {
3219   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3220 };
3221 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_MortonIndexOcts *__pyx_vtabptr_2yt_8geometry_12oct_visitors_MortonIndexOcts;
3222 
3223 
3224 /* "oct_visitors.pxd":149
3225  *
3226  *
3227  * cdef class StoreIndex(OctVisitor):             # <<<<<<<<<<<<<<
3228  *     cdef np.int64_t[:,:,:,:] cell_inds
3229  *
3230  */
3231 
3232 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_StoreIndex {
3233   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3234 };
3235 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_StoreIndex *__pyx_vtabptr_2yt_8geometry_12oct_visitors_StoreIndex;
3236 
3237 
3238 /* "oct_visitors.pxd":153
3239  *
3240  * # cimport oct_container
3241  * cdef class BaseNeighbourVisitor(OctVisitor):             # <<<<<<<<<<<<<<
3242  *     cdef int idim      # 0,1,2 for x,y,z
3243  *     cdef int direction # +1 for +x, -1 for -x
3244  */
3245 
3246 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor {
3247   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor __pyx_base;
3248   void (*set_neighbour_info)(struct __pyx_obj_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor *, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *, int *);
3249   __pyx_t_5numpy_uint8_t (*neighbour_rind)(struct __pyx_obj_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor *);
3250 };
3251 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor *__pyx_vtabptr_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor;
3252 static CYTHON_INLINE __pyx_t_5numpy_uint8_t __pyx_f_2yt_8geometry_12oct_visitors_20BaseNeighbourVisitor_neighbour_rind(struct __pyx_obj_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor *);
3253 
3254 
3255 /* "oct_visitors.pxd":169
3256  *         return (((self.neigh_ind[2]*d)+self.neigh_ind[1])*d+self.neigh_ind[0])
3257  *
3258  * cdef class NeighbourCellIndexVisitor(BaseNeighbourVisitor):             # <<<<<<<<<<<<<<
3259  *     cdef np.uint8_t[::1] cell_inds
3260  *     cdef np.int64_t[::1] domain_inds
3261  */
3262 
3263 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor {
3264   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor __pyx_base;
3265 };
3266 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor *__pyx_vtabptr_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor;
3267 
3268 
3269 /* "oct_visitors.pxd":173
3270  *     cdef np.int64_t[::1] domain_inds
3271  *
3272  * cdef class NeighbourCellVisitor(BaseNeighbourVisitor):             # <<<<<<<<<<<<<<
3273  *     cdef np.uint8_t[::1] levels
3274  *     cdef np.int64_t[::1] file_inds
3275  */
3276 
3277 struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_NeighbourCellVisitor {
3278   struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor __pyx_base;
3279 };
3280 static struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_NeighbourCellVisitor *__pyx_vtabptr_2yt_8geometry_12oct_visitors_NeighbourCellVisitor;
3281 
3282 
3283 /* "yt/utilities/lib/allocation_container.pxd":20
3284  *     void *my_objs
3285  *
3286  * cdef class ObjectPool:             # <<<<<<<<<<<<<<
3287  *     cdef public np.uint64_t itemsize
3288  *     cdef np.uint64_t n_con
3289  */
3290 
3291 struct __pyx_vtabstruct_2yt_9utilities_3lib_20allocation_container_ObjectPool {
3292   void (*allocate_objs)(struct __pyx_obj_2yt_9utilities_3lib_20allocation_container_ObjectPool *, int, struct __pyx_opt_args_2yt_9utilities_3lib_20allocation_container_10ObjectPool_allocate_objs *__pyx_optional_args);
3293   void (*setup_objs)(struct __pyx_obj_2yt_9utilities_3lib_20allocation_container_ObjectPool *, void *, __pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t, __pyx_t_5numpy_int64_t);
3294   void (*teardown_objs)(struct __pyx_obj_2yt_9utilities_3lib_20allocation_container_ObjectPool *, void *, __pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t, __pyx_t_5numpy_int64_t);
3295 };
3296 static struct __pyx_vtabstruct_2yt_9utilities_3lib_20allocation_container_ObjectPool *__pyx_vtabptr_2yt_9utilities_3lib_20allocation_container_ObjectPool;
3297 
3298 
3299 /* "oct_container.pxd":47
3300  *     Oct *my_objs
3301  *
3302  * cdef class OctObjectPool(ObjectPool):             # <<<<<<<<<<<<<<
3303  *     cdef inline OctAllocationContainer *get_cont(self, int i):
3304  *         return <OctAllocationContainer*> (&self.containers[i])
3305  */
3306 
3307 struct __pyx_vtabstruct_2yt_8geometry_13oct_container_OctObjectPool {
3308   struct __pyx_vtabstruct_2yt_9utilities_3lib_20allocation_container_ObjectPool __pyx_base;
3309   struct __pyx_t_2yt_8geometry_13oct_container_OctAllocationContainer *(*get_cont)(struct __pyx_obj_2yt_8geometry_13oct_container_OctObjectPool *, int);
3310 };
3311 static struct __pyx_vtabstruct_2yt_8geometry_13oct_container_OctObjectPool *__pyx_vtabptr_2yt_8geometry_13oct_container_OctObjectPool;
3312 static CYTHON_INLINE struct __pyx_t_2yt_8geometry_13oct_container_OctAllocationContainer *__pyx_f_2yt_8geometry_13oct_container_13OctObjectPool_get_cont(struct __pyx_obj_2yt_8geometry_13oct_container_OctObjectPool *, int);
3313 
3314 
3315 /* "oct_container.pxd":55
3316  * cdef void OctList_delete(OctList *list)
3317  *
3318  * cdef class OctreeContainer:             # <<<<<<<<<<<<<<
3319  *     cdef public OctObjectPool domains
3320  *     cdef Oct ****root_mesh
3321  */
3322 
3323 struct __pyx_vtabstruct_2yt_8geometry_13oct_container_OctreeContainer {
3324   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *(*get)(struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *, __pyx_t_5numpy_float64_t *, struct __pyx_opt_args_2yt_8geometry_13oct_container_15OctreeContainer_get *__pyx_optional_args);
3325   int (*get_root)(struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *, int *, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct **);
3326   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct **(*neighbors)(struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *, struct __pyx_t_2yt_8geometry_12oct_visitors_OctInfo *, __pyx_t_5numpy_int64_t *, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *, int *);
3327   __pyx_t_5numpy_int64_t (*get_domain_offset)(struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *, int);
3328   void (*visit_all_octs)(struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *, struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *, struct __pyx_opt_args_2yt_8geometry_13oct_container_15OctreeContainer_visit_all_octs *__pyx_optional_args);
3329   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *(*next_root)(struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *, int, int *);
3330   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *(*next_child)(struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *, int, int *, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *);
3331   void (*append_domain)(struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *, __pyx_t_5numpy_int64_t);
3332 };
3333 static struct __pyx_vtabstruct_2yt_8geometry_13oct_container_OctreeContainer *__pyx_vtabptr_2yt_8geometry_13oct_container_OctreeContainer;
3334 
3335 
3336 /* "oct_container.pxd":85
3337  *     cdef public object fill_style
3338  *
3339  * cdef class SparseOctreeContainer(OctreeContainer):             # <<<<<<<<<<<<<<
3340  *     cdef OctKey *root_nodes
3341  *     cdef void *tree_root
3342  */
3343 
3344 struct __pyx_vtabstruct_2yt_8geometry_13oct_container_SparseOctreeContainer {
3345   struct __pyx_vtabstruct_2yt_8geometry_13oct_container_OctreeContainer __pyx_base;
3346   void (*key_to_ipos)(struct __pyx_obj_2yt_8geometry_13oct_container_SparseOctreeContainer *, __pyx_t_5numpy_int64_t, __pyx_t_5numpy_int64_t *);
3347   __pyx_t_5numpy_int64_t (*ipos_to_key)(struct __pyx_obj_2yt_8geometry_13oct_container_SparseOctreeContainer *, int *);
3348 };
3349 static struct __pyx_vtabstruct_2yt_8geometry_13oct_container_SparseOctreeContainer *__pyx_vtabptr_2yt_8geometry_13oct_container_SparseOctreeContainer;
3350 
3351 
3352 /* "oct_container.pxd":93
3353  *     cdef np.int64_t ipos_to_key(self, int pos[3]) nogil
3354  *
3355  * cdef class RAMSESOctreeContainer(SparseOctreeContainer):             # <<<<<<<<<<<<<<
3356  *     pass
3357  *
3358  */
3359 
3360 struct __pyx_vtabstruct_2yt_8geometry_13oct_container_RAMSESOctreeContainer {
3361   struct __pyx_vtabstruct_2yt_8geometry_13oct_container_SparseOctreeContainer __pyx_base;
3362 };
3363 static struct __pyx_vtabstruct_2yt_8geometry_13oct_container_RAMSESOctreeContainer *__pyx_vtabptr_2yt_8geometry_13oct_container_RAMSESOctreeContainer;
3364 
3365 
3366 /* "yt/utilities/lib/bitarray.pxd":28
3367  *     return 1
3368  *
3369  * cdef class bitarray:             # <<<<<<<<<<<<<<
3370  *     cdef np.uint8_t *buf
3371  *     cdef np.uint64_t size
3372  */
3373 
3374 struct __pyx_vtabstruct_2yt_9utilities_3lib_8bitarray_bitarray {
3375   void (*_set_value)(struct __pyx_obj_2yt_9utilities_3lib_8bitarray_bitarray *, __pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint8_t);
3376   __pyx_t_5numpy_uint8_t (*_query_value)(struct __pyx_obj_2yt_9utilities_3lib_8bitarray_bitarray *, __pyx_t_5numpy_uint64_t);
3377 };
3378 static struct __pyx_vtabstruct_2yt_9utilities_3lib_8bitarray_bitarray *__pyx_vtabptr_2yt_9utilities_3lib_8bitarray_bitarray;
3379 
3380 
3381 /* "partitioned_grid.pxd":18
3382  *
3383  *
3384  * cdef class PartitionedGrid:             # <<<<<<<<<<<<<<
3385  *     cdef public object my_data
3386  *     cdef public object source_mask
3387  */
3388 
3389 struct __pyx_vtabstruct_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid {
3390   void (*get_vector_field)(struct __pyx_obj_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *);
3391 };
3392 static struct __pyx_vtabstruct_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid *__pyx_vtabptr_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid;
3393 
3394 
3395 /* "image_samplers.pxd":37
3396  *     void *supp_data
3397  *
3398  * cdef class ImageSampler:             # <<<<<<<<<<<<<<
3399  *     cdef np.float64_t[:,:,:] vp_pos
3400  *     cdef np.float64_t[:,:,:] vp_dir
3401  */
3402 
3403 struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_ImageSampler {
3404   void (*setup)(struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ImageSampler *, struct __pyx_obj_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid *);
3405   void (*sample)(struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t, int *, void *);
3406 };
3407 static struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_ImageSampler *__pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_ImageSampler;
3408 
3409 
3410 /* "image_samplers.pxd":71
3411  *                 void *data) nogil
3412  *
3413  * cdef class ProjectionSampler(ImageSampler):             # <<<<<<<<<<<<<<
3414  *     pass
3415  *
3416  */
3417 
3418 struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_ProjectionSampler {
3419   struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_ImageSampler __pyx_base;
3420 };
3421 static struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_ProjectionSampler *__pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_ProjectionSampler;
3422 
3423 
3424 /* "image_samplers.pxd":74
3425  *     pass
3426  *
3427  * cdef class InterpolatedProjectionSampler(ImageSampler):             # <<<<<<<<<<<<<<
3428  *     cdef VolumeRenderAccumulator *vra
3429  *     cdef public object tf_obj
3430  */
3431 
3432 struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler {
3433   struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_ImageSampler __pyx_base;
3434 };
3435 static struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler *__pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler;
3436 
3437 
3438 /* "image_samplers.pxd":79
3439  *     cdef public object my_field_tables
3440  *
3441  * cdef class VolumeRenderSampler(ImageSampler):             # <<<<<<<<<<<<<<
3442  *     cdef VolumeRenderAccumulator *vra
3443  *     cdef public object tf_obj
3444  */
3445 
3446 struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler {
3447   struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_ImageSampler __pyx_base;
3448 };
3449 static struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler *__pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler;
3450 
3451 
3452 /* "image_samplers.pxd":85
3453  *     cdef object tree_containers
3454  *
3455  * cdef class LightSourceRenderSampler(ImageSampler):             # <<<<<<<<<<<<<<
3456  *     cdef VolumeRenderAccumulator *vra
3457  *     cdef public object tf_obj
3458  */
3459 
3460 struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler {
3461   struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_ImageSampler __pyx_base;
3462 };
3463 static struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler *__pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler;
3464 
3465 
3466 /* "yt/geometry/_selection_routines/selector_object.pxi":1
3467  * cdef class SelectorObject:             # <<<<<<<<<<<<<<
3468  *
3469  *     def __cinit__(self, dobj, *args):
3470  */
3471 
3472 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject {
3473   void (*recursively_visit_octs)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, int, struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_recursively_visit_octs *__pyx_optional_args);
3474   void (*visit_oct_cells)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *, int, int, int);
3475   int (*select_grid)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args);
3476   int (*select_grid_edge)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid_edge *__pyx_optional_args);
3477   int (*select_cell)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *);
3478   int (*select_point)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *);
3479   int (*select_sphere)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t);
3480   int (*select_bbox)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *);
3481   int (*select_bbox_edge)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *);
3482   int (*fill_mask_selector)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, int *, PyArrayObject *, PyArrayObject *, int);
3483   void (*visit_grid_cells)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, struct __pyx_t_2yt_8geometry_13grid_visitors_GridVisitorData *, __pyx_t_2yt_8geometry_13grid_visitors_grid_visitor_function *, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_visit_grid_cells *__pyx_optional_args);
3484   __pyx_t_5numpy_float64_t (*periodic_difference)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t, int);
3485 };
3486 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
3487 
3488 
3489 /* "yt/geometry/_selection_routines/always_selector.pxi":1
3490  * cdef class AlwaysSelector(SelectorObject):             # <<<<<<<<<<<<<<
3491  *
3492  *     def __init__(self, dobj):
3493  */
3494 
3495 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_AlwaysSelector {
3496   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3497 };
3498 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_AlwaysSelector;
3499 
3500 
3501 /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":1
3502  * cdef class OctreeSubsetSelector(SelectorObject):             # <<<<<<<<<<<<<<
3503  *
3504  *     def __init__(self, dobj):
3505  */
3506 
3507 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_OctreeSubsetSelector {
3508   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3509 };
3510 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_OctreeSubsetSelector;
3511 
3512 
3513 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":2
3514  *
3515  * cdef class BooleanSelector(SelectorObject):             # <<<<<<<<<<<<<<
3516  *
3517  *     def __init__(self, dobj):
3518  */
3519 
3520 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanSelector {
3521   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3522 };
3523 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanSelector;
3524 
3525 
3526 /* "yt/geometry/_selection_routines/point_selector.pxi":1
3527  * cdef class PointSelector(SelectorObject):             # <<<<<<<<<<<<<<
3528  *     cdef public np.float64_t p[3]
3529  *
3530  */
3531 
3532 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_PointSelector {
3533   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3534 };
3535 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_PointSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_PointSelector;
3536 
3537 
3538 /* "yt/geometry/_selection_routines/sphere_selector.pxi":1
3539  * cdef class SphereSelector(SelectorObject):             # <<<<<<<<<<<<<<
3540  *     cdef public np.float64_t radius
3541  *     cdef public np.float64_t radius2
3542  */
3543 
3544 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SphereSelector {
3545   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3546 };
3547 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SphereSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_SphereSelector;
3548 
3549 
3550 /* "yt/geometry/_selection_routines/region_selector.pxi":1
3551  * cdef class RegionSelector(SelectorObject):             # <<<<<<<<<<<<<<
3552  *     cdef public np.float64_t left_edge[3]
3553  *     cdef public np.float64_t right_edge[3]
3554  */
3555 
3556 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_RegionSelector {
3557   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3558 };
3559 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_RegionSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_RegionSelector;
3560 
3561 
3562 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":1
3563  * cdef class CutRegionSelector(SelectorObject):             # <<<<<<<<<<<<<<
3564  *     cdef set _positions
3565  *     cdef tuple _conditionals
3566  */
3567 
3568 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_CutRegionSelector {
3569   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3570   int (*select_bbox_dge)(struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *);
3571 };
3572 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_CutRegionSelector;
3573 
3574 
3575 /* "yt/geometry/_selection_routines/disk_selector.pxi":1
3576  * cdef class DiskSelector(SelectorObject):             # <<<<<<<<<<<<<<
3577  *     cdef public np.float64_t norm_vec[3]
3578  *     cdef public np.float64_t center[3]
3579  */
3580 
3581 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_DiskSelector {
3582   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3583 };
3584 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_DiskSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_DiskSelector;
3585 
3586 
3587 /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":1
3588  * cdef class CuttingPlaneSelector(SelectorObject):             # <<<<<<<<<<<<<<
3589  *     cdef public np.float64_t norm_vec[3]
3590  *     cdef public np.float64_t d
3591  */
3592 
3593 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_CuttingPlaneSelector {
3594   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3595 };
3596 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_CuttingPlaneSelector;
3597 
3598 
3599 /* "yt/geometry/_selection_routines/slice_selector.pxi":1
3600  * cdef class SliceSelector(SelectorObject):             # <<<<<<<<<<<<<<
3601  *     cdef public int axis
3602  *     cdef public np.float64_t coord
3603  */
3604 
3605 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SliceSelector {
3606   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3607 };
3608 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SliceSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_SliceSelector;
3609 
3610 
3611 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":1
3612  * cdef class OrthoRaySelector(SelectorObject):             # <<<<<<<<<<<<<<
3613  *
3614  *     cdef public np.uint8_t px_ax
3615  */
3616 
3617 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_OrthoRaySelector {
3618   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3619 };
3620 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_OrthoRaySelector;
3621 
3622 
3623 /* "yt/geometry/_selection_routines/ray_selector.pxi":23
3624  *     am.dt[di] = (exit_t - enter_t)
3625  *
3626  * cdef class RaySelector(SelectorObject):             # <<<<<<<<<<<<<<
3627  *
3628  *     cdef public np.float64_t p1[3]
3629  */
3630 
3631 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_RaySelector {
3632   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3633 };
3634 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_RaySelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_RaySelector;
3635 
3636 
3637 /* "yt/geometry/_selection_routines/data_collection_selector.pxi":1
3638  * cdef class DataCollectionSelector(SelectorObject):             # <<<<<<<<<<<<<<
3639  *     cdef object obj_ids
3640  *     cdef np.int64_t nids
3641  */
3642 
3643 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_DataCollectionSelector {
3644   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3645 };
3646 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_DataCollectionSelector;
3647 
3648 
3649 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":1
3650  * cdef class EllipsoidSelector(SelectorObject):             # <<<<<<<<<<<<<<
3651  *     cdef public np.float64_t vec[3][3]
3652  *     cdef public np.float64_t mag[3]
3653  */
3654 
3655 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_EllipsoidSelector {
3656   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3657 };
3658 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_EllipsoidSelector;
3659 
3660 
3661 /* "yt/geometry/_selection_routines/grid_selector.pxi":1
3662  * cdef class GridSelector(SelectorObject):             # <<<<<<<<<<<<<<
3663  *     cdef object ind
3664  *
3665  */
3666 
3667 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_GridSelector {
3668   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3669 };
3670 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_GridSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_GridSelector;
3671 
3672 
3673 /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":1
3674  * cdef class IndexedOctreeSubsetSelector(SelectorObject):             # <<<<<<<<<<<<<<
3675  *     # This is a numpy array, which will be a bool of ndim 1
3676  *     cdef np.uint64_t min_ind
3677  */
3678 
3679 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector {
3680   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3681 };
3682 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector;
3683 
3684 
3685 /* "yt/geometry/_selection_routines/compose_selector.pxi":1
3686  * cdef class ComposeSelector(SelectorObject):             # <<<<<<<<<<<<<<
3687  *     cdef SelectorObject selector1
3688  *     cdef SelectorObject selector2
3689  */
3690 
3691 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ComposeSelector {
3692   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3693 };
3694 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_ComposeSelector;
3695 
3696 
3697 /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":1
3698  * cdef class HaloParticlesSelector(SelectorObject):             # <<<<<<<<<<<<<<
3699  *     cdef public object base_source
3700  *     cdef SelectorObject base_selector
3701  */
3702 
3703 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_HaloParticlesSelector {
3704   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3705 };
3706 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_HaloParticlesSelector;
3707 
3708 
3709 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":16
3710  *             self.sel2 = dobj.dobj2.selector
3711  *
3712  * cdef class BooleanANDSelector(BooleanSelector):             # <<<<<<<<<<<<<<
3713  *     cdef int select_bbox(self, np.float64_t left_edge[3],
3714  *                                np.float64_t right_edge[3]) nogil:
3715  */
3716 
3717 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanANDSelector {
3718   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanSelector __pyx_base;
3719 };
3720 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanANDSelector;
3721 
3722 
3723 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":68
3724  *                 self.sel2._hash_vals())
3725  *
3726  * cdef class BooleanORSelector(BooleanSelector):             # <<<<<<<<<<<<<<
3727  *     cdef int select_bbox(self, np.float64_t left_edge[3],
3728  *                                np.float64_t right_edge[3]) nogil:
3729  */
3730 
3731 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanORSelector {
3732   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanSelector __pyx_base;
3733 };
3734 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanORSelector;
3735 
3736 
3737 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":121
3738  *                 self.sel2._hash_vals())
3739  *
3740  * cdef class BooleanNOTSelector(BooleanSelector):             # <<<<<<<<<<<<<<
3741  *     cdef int select_bbox(self, np.float64_t left_edge[3],
3742  *                                np.float64_t right_edge[3]) nogil:
3743  */
3744 
3745 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanNOTSelector {
3746   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanSelector __pyx_base;
3747 };
3748 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanNOTSelector;
3749 
3750 
3751 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":159
3752  *                 ("not",))
3753  *
3754  * cdef class BooleanXORSelector(BooleanSelector):             # <<<<<<<<<<<<<<
3755  *
3756  *     cdef int select_bbox(self, np.float64_t left_edge[3],
3757  */
3758 
3759 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanXORSelector {
3760   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanSelector __pyx_base;
3761 };
3762 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanXORSelector;
3763 
3764 
3765 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":213
3766  *                 self.sel2._hash_vals())
3767  *
3768  * cdef class BooleanNEGSelector(BooleanSelector):             # <<<<<<<<<<<<<<
3769  *
3770  *     cdef int select_bbox(self, np.float64_t left_edge[3],
3771  */
3772 
3773 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanNEGSelector {
3774   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanSelector __pyx_base;
3775 };
3776 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanNEGSelector;
3777 
3778 
3779 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":266
3780  *                 self.sel2._hash_vals())
3781  *
3782  * cdef class ChainedBooleanSelector(SelectorObject):             # <<<<<<<<<<<<<<
3783  *     cdef int n_obj
3784  *     cdef np.ndarray selectors
3785  */
3786 
3787 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ChainedBooleanSelector {
3788   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_base;
3789 };
3790 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ChainedBooleanSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanSelector;
3791 
3792 
3793 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":276
3794  *             self.selectors[i] = dobj.data_objects[i].selector
3795  *
3796  * cdef class ChainedBooleanANDSelector(ChainedBooleanSelector):             # <<<<<<<<<<<<<<
3797  *     @cython.cdivision(True)
3798  *     @cython.boundscheck(False)
3799  */
3800 
3801 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector {
3802   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ChainedBooleanSelector __pyx_base;
3803 };
3804 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector;
3805 
3806 
3807 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":359
3808  * intersection_selector = ChainedBooleanANDSelector
3809  *
3810  * cdef class ChainedBooleanORSelector(ChainedBooleanSelector):             # <<<<<<<<<<<<<<
3811  *     @cython.cdivision(True)
3812  *     @cython.boundscheck(False)
3813  */
3814 
3815 struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ChainedBooleanORSelector {
3816   struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ChainedBooleanSelector __pyx_base;
3817 };
3818 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanORSelector;
3819 
3820 
3821 /* "View.MemoryView":105
3822  *
3823  * @cname("__pyx_array")
3824  * cdef class array:             # <<<<<<<<<<<<<<
3825  *
3826  *     cdef:
3827  */
3828 
3829 struct __pyx_vtabstruct_array {
3830   PyObject *(*get_memview)(struct __pyx_array_obj *);
3831 };
3832 static struct __pyx_vtabstruct_array *__pyx_vtabptr_array;
3833 
3834 
3835 /* "View.MemoryView":330
3836  *
3837  * @cname('__pyx_memoryview')
3838  * cdef class memoryview(object):             # <<<<<<<<<<<<<<
3839  *
3840  *     cdef object obj
3841  */
3842 
3843 struct __pyx_vtabstruct_memoryview {
3844   char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *);
3845   PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *);
3846   PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *);
3847   PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *);
3848   PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *);
3849   PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *);
3850   PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *);
3851 };
3852 static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview;
3853 
3854 
3855 /* "View.MemoryView":961
3856  *
3857  * @cname('__pyx_memoryviewslice')
3858  * cdef class _memoryviewslice(memoryview):             # <<<<<<<<<<<<<<
3859  *     "Internal class for passing memoryview slices to Python"
3860  *
3861  */
3862 
3863 struct __pyx_vtabstruct__memoryviewslice {
3864   struct __pyx_vtabstruct_memoryview __pyx_base;
3865 };
3866 static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice;
3867 
3868 /* --- Runtime support code (head) --- */
3869 /* Refnanny.proto */
3870 #ifndef CYTHON_REFNANNY
3871   #define CYTHON_REFNANNY 0
3872 #endif
3873 #if CYTHON_REFNANNY
3874   typedef struct {
3875     void (*INCREF)(void*, PyObject*, int);
3876     void (*DECREF)(void*, PyObject*, int);
3877     void (*GOTREF)(void*, PyObject*, int);
3878     void (*GIVEREF)(void*, PyObject*, int);
3879     void* (*SetupContext)(const char*, int, const char*);
3880     void (*FinishContext)(void**);
3881   } __Pyx_RefNannyAPIStruct;
3882   static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
3883   static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
3884   #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
3885 #ifdef WITH_THREAD
3886   #define __Pyx_RefNannySetupContext(name, acquire_gil)\
3887           if (acquire_gil) {\
3888               PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
3889               __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
3890               PyGILState_Release(__pyx_gilstate_save);\
3891           } else {\
3892               __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
3893           }
3894 #else
3895   #define __Pyx_RefNannySetupContext(name, acquire_gil)\
3896           __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
3897 #endif
3898   #define __Pyx_RefNannyFinishContext()\
3899           __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
3900   #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
3901   #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
3902   #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
3903   #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
3904   #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
3905   #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
3906   #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
3907   #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
3908 #else
3909   #define __Pyx_RefNannyDeclarations
3910   #define __Pyx_RefNannySetupContext(name, acquire_gil)
3911   #define __Pyx_RefNannyFinishContext()
3912   #define __Pyx_INCREF(r) Py_INCREF(r)
3913   #define __Pyx_DECREF(r) Py_DECREF(r)
3914   #define __Pyx_GOTREF(r)
3915   #define __Pyx_GIVEREF(r)
3916   #define __Pyx_XINCREF(r) Py_XINCREF(r)
3917   #define __Pyx_XDECREF(r) Py_XDECREF(r)
3918   #define __Pyx_XGOTREF(r)
3919   #define __Pyx_XGIVEREF(r)
3920 #endif
3921 #define __Pyx_XDECREF_SET(r, v) do {\
3922         PyObject *tmp = (PyObject *) r;\
3923         r = v; __Pyx_XDECREF(tmp);\
3924     } while (0)
3925 #define __Pyx_DECREF_SET(r, v) do {\
3926         PyObject *tmp = (PyObject *) r;\
3927         r = v; __Pyx_DECREF(tmp);\
3928     } while (0)
3929 #define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
3930 #define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
3931 
3932 /* PyObjectGetAttrStr.proto */
3933 #if CYTHON_USE_TYPE_SLOTS
3934 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
3935 #else
3936 #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
3937 #endif
3938 
3939 /* GetBuiltinName.proto */
3940 static PyObject *__Pyx_GetBuiltinName(PyObject *name);
3941 
3942 /* RaiseArgTupleInvalid.proto */
3943 static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
3944     Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);
3945 
3946 /* RaiseDoubleKeywords.proto */
3947 static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
3948 
3949 /* ParseKeywords.proto */
3950 static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\
3951     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\
3952     const char* function_name);
3953 
3954 /* ArgTypeTest.proto */
3955 #define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
3956     ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\
3957         __Pyx__ArgTypeTest(obj, type, name, exact))
3958 static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);
3959 
3960 /* IsLittleEndian.proto */
3961 static CYTHON_INLINE int __Pyx_Is_Little_Endian(void);
3962 
3963 /* BufferFormatCheck.proto */
3964 static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts);
3965 static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
3966                               __Pyx_BufFmt_StackElem* stack,
3967                               __Pyx_TypeInfo* type);
3968 
3969 /* BufferGetAndValidate.proto */
3970 #define __Pyx_GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack)\
3971     ((obj == Py_None || obj == NULL) ?\
3972     (__Pyx_ZeroBuffer(buf), 0) :\
3973     __Pyx__GetBufferAndValidate(buf, obj, dtype, flags, nd, cast, stack))
3974 static int  __Pyx__GetBufferAndValidate(Py_buffer* buf, PyObject* obj,
3975     __Pyx_TypeInfo* dtype, int flags, int nd, int cast, __Pyx_BufFmt_StackElem* stack);
3976 static void __Pyx_ZeroBuffer(Py_buffer* buf);
3977 static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info);
3978 static Py_ssize_t __Pyx_minusones[] = { -1, -1, -1, -1, -1, -1, -1, -1 };
3979 static Py_ssize_t __Pyx_zeros[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
3980 
3981 /* PyDictVersioning.proto */
3982 #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
3983 #define __PYX_DICT_VERSION_INIT  ((PY_UINT64_T) -1)
3984 #define __PYX_GET_DICT_VERSION(dict)  (((PyDictObject*)(dict))->ma_version_tag)
3985 #define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\
3986     (version_var) = __PYX_GET_DICT_VERSION(dict);\
3987     (cache_var) = (value);
3988 #define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\
3989     static PY_UINT64_T __pyx_dict_version = 0;\
3990     static PyObject *__pyx_dict_cached_value = NULL;\
3991     if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\
3992         (VAR) = __pyx_dict_cached_value;\
3993     } else {\
3994         (VAR) = __pyx_dict_cached_value = (LOOKUP);\
3995         __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\
3996     }\
3997 }
3998 static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);
3999 static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);
4000 static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);
4001 #else
4002 #define __PYX_GET_DICT_VERSION(dict)  (0)
4003 #define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)
4004 #define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP)  (VAR) = (LOOKUP);
4005 #endif
4006 
4007 /* GetModuleGlobalName.proto */
4008 #if CYTHON_USE_DICT_VERSIONS
4009 #define __Pyx_GetModuleGlobalName(var, name)  {\
4010     static PY_UINT64_T __pyx_dict_version = 0;\
4011     static PyObject *__pyx_dict_cached_value = NULL;\
4012     (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
4013         (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
4014         __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
4015 }
4016 #define __Pyx_GetModuleGlobalNameUncached(var, name)  {\
4017     PY_UINT64_T __pyx_dict_version;\
4018     PyObject *__pyx_dict_cached_value;\
4019     (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
4020 }
4021 static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
4022 #else
4023 #define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
4024 #define __Pyx_GetModuleGlobalNameUncached(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
4025 static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);
4026 #endif
4027 
4028 /* PyObjectCall.proto */
4029 #if CYTHON_COMPILING_IN_CPYTHON
4030 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
4031 #else
4032 #define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
4033 #endif
4034 
4035 /* ExtTypeTest.proto */
4036 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
4037 
4038 /* BufferFallbackError.proto */
4039 static void __Pyx_RaiseBufferFallbackError(void);
4040 
4041 #define __Pyx_BufPtrStrided3d(type, buf, i0, s0, i1, s1, i2, s2) (type)((char*)buf + i0 * s0 + i1 * s1 + i2 * s2)
4042 #define __Pyx_BufPtrStrided2d(type, buf, i0, s0, i1, s1) (type)((char*)buf + i0 * s0 + i1 * s1)
4043 /* PyThreadStateGet.proto */
4044 #if CYTHON_FAST_THREAD_STATE
4045 #define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
4046 #define __Pyx_PyThreadState_assign  __pyx_tstate = __Pyx_PyThreadState_Current;
4047 #define __Pyx_PyErr_Occurred()  __pyx_tstate->curexc_type
4048 #else
4049 #define __Pyx_PyThreadState_declare
4050 #define __Pyx_PyThreadState_assign
4051 #define __Pyx_PyErr_Occurred()  PyErr_Occurred()
4052 #endif
4053 
4054 /* PyErrFetchRestore.proto */
4055 #if CYTHON_FAST_THREAD_STATE
4056 #define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
4057 #define __Pyx_ErrRestoreWithState(type, value, tb)  __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
4058 #define __Pyx_ErrFetchWithState(type, value, tb)    __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
4059 #define __Pyx_ErrRestore(type, value, tb)  __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
4060 #define __Pyx_ErrFetch(type, value, tb)    __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
4061 static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
4062 static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
4063 #if CYTHON_COMPILING_IN_CPYTHON
4064 #define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
4065 #else
4066 #define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
4067 #endif
4068 #else
4069 #define __Pyx_PyErr_Clear() PyErr_Clear()
4070 #define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
4071 #define __Pyx_ErrRestoreWithState(type, value, tb)  PyErr_Restore(type, value, tb)
4072 #define __Pyx_ErrFetchWithState(type, value, tb)  PyErr_Fetch(type, value, tb)
4073 #define __Pyx_ErrRestoreInState(tstate, type, value, tb)  PyErr_Restore(type, value, tb)
4074 #define __Pyx_ErrFetchInState(tstate, type, value, tb)  PyErr_Fetch(type, value, tb)
4075 #define __Pyx_ErrRestore(type, value, tb)  PyErr_Restore(type, value, tb)
4076 #define __Pyx_ErrFetch(type, value, tb)  PyErr_Fetch(type, value, tb)
4077 #endif
4078 
4079 #define __Pyx_BufPtrStrided1d(type, buf, i0, s0) (type)((char*)buf + i0 * s0)
4080 /* RaiseException.proto */
4081 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
4082 
4083 /* MemviewSliceInit.proto */
4084 #define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d
4085 #define __Pyx_MEMVIEW_DIRECT   1
4086 #define __Pyx_MEMVIEW_PTR      2
4087 #define __Pyx_MEMVIEW_FULL     4
4088 #define __Pyx_MEMVIEW_CONTIG   8
4089 #define __Pyx_MEMVIEW_STRIDED  16
4090 #define __Pyx_MEMVIEW_FOLLOW   32
4091 #define __Pyx_IS_C_CONTIG 1
4092 #define __Pyx_IS_F_CONTIG 2
4093 static int __Pyx_init_memviewslice(
4094                 struct __pyx_memoryview_obj *memview,
4095                 int ndim,
4096                 __Pyx_memviewslice *memviewslice,
4097                 int memview_is_new_reference);
4098 static CYTHON_INLINE int __pyx_add_acquisition_count_locked(
4099     __pyx_atomic_int *acquisition_count, PyThread_type_lock lock);
4100 static CYTHON_INLINE int __pyx_sub_acquisition_count_locked(
4101     __pyx_atomic_int *acquisition_count, PyThread_type_lock lock);
4102 #define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p)
4103 #define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview))
4104 #define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__)
4105 #define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__)
4106 static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int);
4107 static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int);
4108 
4109 /* PyErrExceptionMatches.proto */
4110 #if CYTHON_FAST_THREAD_STATE
4111 #define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
4112 static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
4113 #else
4114 #define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)
4115 #endif
4116 
4117 /* GetAttr.proto */
4118 static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);
4119 
4120 /* GetAttr3.proto */
4121 static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *);
4122 
4123 /* BufferIndexError.proto */
4124 static void __Pyx_RaiseBufferIndexError(int axis);
4125 
4126 /* GetItemInt.proto */
4127 #define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
4128     (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
4129     __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
4130     (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
4131                __Pyx_GetItemInt_Generic(o, to_py_func(i))))
4132 #define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
4133     (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
4134     __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
4135     (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
4136 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
4137                                                               int wraparound, int boundscheck);
4138 #define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
4139     (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
4140     __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
4141     (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
4142 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
4143                                                               int wraparound, int boundscheck);
4144 static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
4145 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
4146                                                      int is_list, int wraparound, int boundscheck);
4147 
4148 /* PyCFunctionFastCall.proto */
4149 #if CYTHON_FAST_PYCCALL
4150 static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);
4151 #else
4152 #define __Pyx_PyCFunction_FastCall(func, args, nargs)  (assert(0), NULL)
4153 #endif
4154 
4155 /* PyFunctionFastCall.proto */
4156 #if CYTHON_FAST_PYCALL
4157 #define __Pyx_PyFunction_FastCall(func, args, nargs)\
4158     __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
4159 #if 1 || PY_VERSION_HEX < 0x030600B1
4160 static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs);
4161 #else
4162 #define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)
4163 #endif
4164 #define __Pyx_BUILD_ASSERT_EXPR(cond)\
4165     (sizeof(char [1 - 2*!(cond)]) - 1)
4166 #ifndef Py_MEMBER_SIZE
4167 #define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
4168 #endif
4169   static size_t __pyx_pyframe_localsplus_offset = 0;
4170   #include "frameobject.h"
4171   #define __Pxy_PyFrame_Initialize_Offsets()\
4172     ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
4173      (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
4174   #define __Pyx_PyFrame_GetLocalsplus(frame)\
4175     (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
4176 #endif
4177 
4178 /* PyObjectCall2Args.proto */
4179 static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2);
4180 
4181 /* PyObjectCallMethO.proto */
4182 #if CYTHON_COMPILING_IN_CPYTHON
4183 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
4184 #endif
4185 
4186 /* PyObjectCallOneArg.proto */
4187 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
4188 
4189 /* WriteUnraisableException.proto */
4190 static void __Pyx_WriteUnraisable(const char *name, int clineno,
4191                                   int lineno, const char *filename,
4192                                   int full_traceback, int nogil);
4193 
4194 /* PyDictContains.proto */
4195 static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) {
4196     int result = PyDict_Contains(dict, item);
4197     return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
4198 }
4199 
4200 /* DictGetItem.proto */
4201 #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
4202 static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key);
4203 #define __Pyx_PyObject_Dict_GetItem(obj, name)\
4204     (likely(PyDict_CheckExact(obj)) ?\
4205      __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name))
4206 #else
4207 #define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
4208 #define __Pyx_PyObject_Dict_GetItem(obj, name)  PyObject_GetItem(obj, name)
4209 #endif
4210 
4211 /* UnicodeAsUCS4.proto */
4212 static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject*);
4213 
4214 /* object_ord.proto */
4215 #if PY_MAJOR_VERSION >= 3
4216 #define __Pyx_PyObject_Ord(c)\
4217     (likely(PyUnicode_Check(c)) ? (long)__Pyx_PyUnicode_AsPy_UCS4(c) : __Pyx__PyObject_Ord(c))
4218 #else
4219 #define __Pyx_PyObject_Ord(c) __Pyx__PyObject_Ord(c)
4220 #endif
4221 static long __Pyx__PyObject_Ord(PyObject* c);
4222 
4223 /* SetItemInt.proto */
4224 #define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
4225     (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
4226     __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\
4227     (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\
4228                __Pyx_SetItemInt_Generic(o, to_py_func(i), v)))
4229 static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v);
4230 static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v,
4231                                                int is_list, int wraparound, int boundscheck);
4232 
4233 /* IterFinish.proto */
4234 static CYTHON_INLINE int __Pyx_IterFinish(void);
4235 
4236 /* PyObjectCallNoArg.proto */
4237 #if CYTHON_COMPILING_IN_CPYTHON
4238 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
4239 #else
4240 #define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL)
4241 #endif
4242 
4243 /* PyObjectGetMethod.proto */
4244 static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
4245 
4246 /* PyObjectCallMethod0.proto */
4247 static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);
4248 
4249 /* RaiseNeedMoreValuesToUnpack.proto */
4250 static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
4251 
4252 /* RaiseTooManyValuesToUnpack.proto */
4253 static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
4254 
4255 /* UnpackItemEndCheck.proto */
4256 static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
4257 
4258 /* RaiseNoneIterError.proto */
4259 static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
4260 
4261 /* UnpackTupleError.proto */
4262 static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index);
4263 
4264 /* UnpackTuple2.proto */
4265 #define __Pyx_unpack_tuple2(tuple, value1, value2, is_tuple, has_known_size, decref_tuple)\
4266     (likely(is_tuple || PyTuple_Check(tuple)) ?\
4267         (likely(has_known_size || PyTuple_GET_SIZE(tuple) == 2) ?\
4268             __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple) :\
4269             (__Pyx_UnpackTupleError(tuple, 2), -1)) :\
4270         __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple))
4271 static CYTHON_INLINE int __Pyx_unpack_tuple2_exact(
4272     PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple);
4273 static int __Pyx_unpack_tuple2_generic(
4274     PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple);
4275 
4276 /* dict_iter.proto */
4277 static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name,
4278                                                    Py_ssize_t* p_orig_length, int* p_is_dict);
4279 static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos,
4280                                               PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict);
4281 
4282 /* ListAppend.proto */
4283 #if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
4284 static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
4285     PyListObject* L = (PyListObject*) list;
4286     Py_ssize_t len = Py_SIZE(list);
4287     if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) {
4288         Py_INCREF(x);
4289         PyList_SET_ITEM(list, len, x);
4290         Py_SIZE(list) = len+1;
4291         return 0;
4292     }
4293     return PyList_Append(list, x);
4294 }
4295 #else
4296 #define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
4297 #endif
4298 
4299 /* UnpackUnboundCMethod.proto */
4300 typedef struct {
4301     PyObject *type;
4302     PyObject **method_name;
4303     PyCFunction func;
4304     PyObject *method;
4305     int flag;
4306 } __Pyx_CachedCFunction;
4307 
4308 /* CallUnboundCMethod1.proto */
4309 static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg);
4310 #if CYTHON_COMPILING_IN_CPYTHON
4311 static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg);
4312 #else
4313 #define __Pyx_CallUnboundCMethod1(cfunc, self, arg)  __Pyx__CallUnboundCMethod1(cfunc, self, arg)
4314 #endif
4315 
4316 /* IncludeStringH.proto */
4317 #include <string.h>
4318 
4319 /* None.proto */
4320 static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname);
4321 
4322 /* ObjectGetItem.proto */
4323 #if CYTHON_USE_TYPE_SLOTS
4324 static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key);
4325 #else
4326 #define __Pyx_PyObject_GetItem(obj, key)  PyObject_GetItem(obj, key)
4327 #endif
4328 
4329 /* pyfrozenset_new.proto */
4330 static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it);
4331 
4332 /* PySetContains.proto */
4333 static CYTHON_INLINE int __Pyx_PySet_ContainsTF(PyObject* key, PyObject* set, int eq);
4334 
4335 /* PyIntBinop.proto */
4336 #if !CYTHON_COMPILING_IN_PYPY
4337 static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
4338 #else
4339 #define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\
4340     (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2))
4341 #endif
4342 
4343 /* None.proto */
4344 static CYTHON_INLINE long __Pyx_mod_long(long, long);
4345 
4346 /* PyIntBinop.proto */
4347 #if !CYTHON_COMPILING_IN_PYPY
4348 static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
4349 #else
4350 #define __Pyx_PyInt_SubtractObjC(op1, op2, intval, inplace, zerodivision_check)\
4351     (inplace ? PyNumber_InPlaceSubtract(op1, op2) : PyNumber_Subtract(op1, op2))
4352 #endif
4353 
4354 /* PyFloatBinop.proto */
4355 #if !CYTHON_COMPILING_IN_PYPY
4356 static PyObject* __Pyx_PyFloat_DivideCObj(PyObject *op1, PyObject *op2, double floatval, int inplace, int zerodivision_check);
4357 #else
4358 #define __Pyx_PyFloat_DivideCObj(op1, op2, floatval, inplace, zerodivision_check)\
4359     ((inplace ? __Pyx_PyNumber_InPlaceDivide(op1, op2) : __Pyx_PyNumber_Divide(op1, op2)))
4360     #endif
4361 
4362 /* HasAttr.proto */
4363 static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
4364 
4365 /* GetTopmostException.proto */
4366 #if CYTHON_USE_EXC_INFO_STACK
4367 static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
4368 #endif
4369 
4370 /* SaveResetException.proto */
4371 #if CYTHON_FAST_THREAD_STATE
4372 #define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
4373 static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
4374 #define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
4375 static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
4376 #else
4377 #define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)
4378 #define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)
4379 #endif
4380 
4381 /* GetException.proto */
4382 #if CYTHON_FAST_THREAD_STATE
4383 #define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)
4384 static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
4385 #else
4386 static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
4387 #endif
4388 
4389 /* BytesEquals.proto */
4390 static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
4391 
4392 /* UnicodeEquals.proto */
4393 static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);
4394 
4395 /* StrEquals.proto */
4396 #if PY_MAJOR_VERSION >= 3
4397 #define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
4398 #else
4399 #define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
4400 #endif
4401 
4402 /* None.proto */
4403 static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t);
4404 
4405 /* UnaryNegOverflows.proto */
4406 #define UNARY_NEG_WOULD_OVERFLOW(x)\
4407         (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x)))
4408 
4409 static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
4410 static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/
4411 /* decode_c_string_utf16.proto */
4412 static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) {
4413     int byteorder = 0;
4414     return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
4415 }
4416 static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) {
4417     int byteorder = -1;
4418     return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
4419 }
4420 static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) {
4421     int byteorder = 1;
4422     return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
4423 }
4424 
4425 /* decode_c_string.proto */
4426 static CYTHON_INLINE PyObject* __Pyx_decode_c_string(
4427          const char* cstring, Py_ssize_t start, Py_ssize_t stop,
4428          const char* encoding, const char* errors,
4429          PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors));
4430 
4431 /* SwapException.proto */
4432 #if CYTHON_FAST_THREAD_STATE
4433 #define __Pyx_ExceptionSwap(type, value, tb)  __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
4434 static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
4435 #else
4436 static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
4437 #endif
4438 
4439 /* Import.proto */
4440 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
4441 
4442 /* FastTypeChecks.proto */
4443 #if CYTHON_COMPILING_IN_CPYTHON
4444 #define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
4445 static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
4446 static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
4447 static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
4448 #else
4449 #define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
4450 #define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
4451 #define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
4452 #endif
4453 #define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
4454 
4455 static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
4456 /* ListCompAppend.proto */
4457 #if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
4458 static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
4459     PyListObject* L = (PyListObject*) list;
4460     Py_ssize_t len = Py_SIZE(list);
4461     if (likely(L->allocated > len)) {
4462         Py_INCREF(x);
4463         PyList_SET_ITEM(list, len, x);
4464         Py_SIZE(list) = len+1;
4465         return 0;
4466     }
4467     return PyList_Append(list, x);
4468 }
4469 #else
4470 #define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
4471 #endif
4472 
4473 /* ListExtend.proto */
4474 static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) {
4475 #if CYTHON_COMPILING_IN_CPYTHON
4476     PyObject* none = _PyList_Extend((PyListObject*)L, v);
4477     if (unlikely(!none))
4478         return -1;
4479     Py_DECREF(none);
4480     return 0;
4481 #else
4482     return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v);
4483 #endif
4484 }
4485 
4486 /* None.proto */
4487 static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);
4488 
4489 /* None.proto */
4490 static CYTHON_INLINE long __Pyx_div_long(long, long);
4491 
4492 /* ImportFrom.proto */
4493 static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
4494 
4495 /* CallNextTpTraverse.proto */
4496 static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse);
4497 
4498 /* CallNextTpClear.proto */
4499 static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_dealloc);
4500 
4501 /* PyObject_GenericGetAttrNoDict.proto */
4502 #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
4503 static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name);
4504 #else
4505 #define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr
4506 #endif
4507 
4508 /* PyObject_GenericGetAttr.proto */
4509 #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
4510 static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name);
4511 #else
4512 #define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr
4513 #endif
4514 
4515 /* SetVTable.proto */
4516 static int __Pyx_SetVtable(PyObject *dict, void *vtable);
4517 
4518 /* SetupReduce.proto */
4519 static int __Pyx_setup_reduce(PyObject* type_obj);
4520 
4521 /* TypeImport.proto */
4522 #ifndef __PYX_HAVE_RT_ImportType_proto
4523 #define __PYX_HAVE_RT_ImportType_proto
4524 enum __Pyx_ImportType_CheckSize {
4525    __Pyx_ImportType_CheckSize_Error = 0,
4526    __Pyx_ImportType_CheckSize_Warn = 1,
4527    __Pyx_ImportType_CheckSize_Ignore = 2
4528 };
4529 static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size);
4530 #endif
4531 
4532 /* GetVTable.proto */
4533 static void* __Pyx_GetVtable(PyObject *dict);
4534 
4535 /* FetchCommonType.proto */
4536 static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);
4537 
4538 /* CythonFunction.proto */
4539 #define __Pyx_CyFunction_USED 1
4540 #define __Pyx_CYFUNCTION_STATICMETHOD  0x01
4541 #define __Pyx_CYFUNCTION_CLASSMETHOD   0x02
4542 #define __Pyx_CYFUNCTION_CCLASS        0x04
4543 #define __Pyx_CyFunction_GetClosure(f)\
4544     (((__pyx_CyFunctionObject *) (f))->func_closure)
4545 #define __Pyx_CyFunction_GetClassObj(f)\
4546     (((__pyx_CyFunctionObject *) (f))->func_classobj)
4547 #define __Pyx_CyFunction_Defaults(type, f)\
4548     ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
4549 #define __Pyx_CyFunction_SetDefaultsGetter(f, g)\
4550     ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
4551 typedef struct {
4552     PyCFunctionObject func;
4553 #if PY_VERSION_HEX < 0x030500A0
4554     PyObject *func_weakreflist;
4555 #endif
4556     PyObject *func_dict;
4557     PyObject *func_name;
4558     PyObject *func_qualname;
4559     PyObject *func_doc;
4560     PyObject *func_globals;
4561     PyObject *func_code;
4562     PyObject *func_closure;
4563     PyObject *func_classobj;
4564     void *defaults;
4565     int defaults_pyobjects;
4566     int flags;
4567     PyObject *defaults_tuple;
4568     PyObject *defaults_kwdict;
4569     PyObject *(*defaults_getter)(PyObject *);
4570     PyObject *func_annotations;
4571 } __pyx_CyFunctionObject;
4572 static PyTypeObject *__pyx_CyFunctionType = 0;
4573 #define __Pyx_CyFunction_Check(obj)  (__Pyx_TypeCheck(obj, __pyx_CyFunctionType))
4574 #define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code)\
4575     __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code)
4576 static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml,
4577                                       int flags, PyObject* qualname,
4578                                       PyObject *self,
4579                                       PyObject *module, PyObject *globals,
4580                                       PyObject* code);
4581 static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m,
4582                                                          size_t size,
4583                                                          int pyobjects);
4584 static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
4585                                                             PyObject *tuple);
4586 static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
4587                                                              PyObject *dict);
4588 static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
4589                                                               PyObject *dict);
4590 static int __pyx_CyFunction_init(void);
4591 
4592 /* FusedFunction.proto */
4593 typedef struct {
4594     __pyx_CyFunctionObject func;
4595     PyObject *__signatures__;
4596     PyObject *type;
4597     PyObject *self;
4598 } __pyx_FusedFunctionObject;
4599 #define __pyx_FusedFunction_NewEx(ml, flags, qualname, self, module, globals, code)\
4600         __pyx_FusedFunction_New(__pyx_FusedFunctionType, ml, flags, qualname, self, module, globals, code)
4601 static PyObject *__pyx_FusedFunction_New(PyTypeObject *type,
4602                                          PyMethodDef *ml, int flags,
4603                                          PyObject *qualname, PyObject *self,
4604                                          PyObject *module, PyObject *globals,
4605                                          PyObject *code);
4606 static int __pyx_FusedFunction_clear(__pyx_FusedFunctionObject *self);
4607 static PyTypeObject *__pyx_FusedFunctionType = NULL;
4608 static int __pyx_FusedFunction_init(void);
4609 #define __Pyx_FusedFunction_USED
4610 
4611 /* CLineInTraceback.proto */
4612 #ifdef CYTHON_CLINE_IN_TRACEBACK
4613 #define __Pyx_CLineForTraceback(tstate, c_line)  (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
4614 #else
4615 static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
4616 #endif
4617 
4618 /* CodeObjectCache.proto */
4619 typedef struct {
4620     PyCodeObject* code_object;
4621     int code_line;
4622 } __Pyx_CodeObjectCacheEntry;
4623 struct __Pyx_CodeObjectCache {
4624     int count;
4625     int max_count;
4626     __Pyx_CodeObjectCacheEntry* entries;
4627 };
4628 static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
4629 static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
4630 static PyCodeObject *__pyx_find_code_object(int code_line);
4631 static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
4632 
4633 /* AddTraceback.proto */
4634 static void __Pyx_AddTraceback(const char *funcname, int c_line,
4635                                int py_line, const char *filename);
4636 
4637 #if PY_MAJOR_VERSION < 3
4638     static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
4639     static void __Pyx_ReleaseBuffer(Py_buffer *view);
4640 #else
4641     #define __Pyx_GetBuffer PyObject_GetBuffer
4642     #define __Pyx_ReleaseBuffer PyBuffer_Release
4643 #endif
4644 
4645 
4646 /* BufferStructDeclare.proto */
4647 typedef struct {
4648   Py_ssize_t shape, strides, suboffsets;
4649 } __Pyx_Buf_DimInfo;
4650 typedef struct {
4651   size_t refcount;
4652   Py_buffer pybuffer;
4653 } __Pyx_Buffer;
4654 typedef struct {
4655   __Pyx_Buffer *rcbuffer;
4656   char *data;
4657   __Pyx_Buf_DimInfo diminfo[8];
4658 } __Pyx_LocalBuf_ND;
4659 
4660 /* MemviewSliceIsContig.proto */
4661 static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim);
4662 
4663 /* OverlappingSlices.proto */
4664 static int __pyx_slices_overlap(__Pyx_memviewslice *slice1,
4665                                 __Pyx_memviewslice *slice2,
4666                                 int ndim, size_t itemsize);
4667 
4668 /* Capsule.proto */
4669 static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig);
4670 
4671 /* TypeInfoCompare.proto */
4672 static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b);
4673 
4674 /* MemviewSliceValidateAndInit.proto */
4675 static int __Pyx_ValidateAndInit_memviewslice(
4676                 int *axes_specs,
4677                 int c_or_f_flag,
4678                 int buf_flags,
4679                 int ndim,
4680                 __Pyx_TypeInfo *dtype,
4681                 __Pyx_BufFmt_StackElem stack[],
4682                 __Pyx_memviewslice *memviewslice,
4683                 PyObject *original_obj);
4684 
4685 /* ObjectToMemviewSlice.proto */
4686 static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_float(PyObject *, int writable_flag);
4687 
4688 /* ObjectToMemviewSlice.proto */
4689 static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_double(PyObject *, int writable_flag);
4690 
4691 /* ObjectToMemviewSlice.proto */
4692 static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(PyObject *, int writable_flag);
4693 
4694 /* CIntToPy.proto */
4695 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
4696 
4697 /* CIntToPy.proto */
4698 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_Py_intptr_t(Py_intptr_t value);
4699 
4700 /* CIntToPy.proto */
4701 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_npy_int64(npy_int64 value);
4702 
4703 /* MemviewDtypeToObject.proto */
4704 static CYTHON_INLINE PyObject *__pyx_memview_get_nn___pyx_t_5numpy_float64_t(const char *itemp);
4705 static CYTHON_INLINE int __pyx_memview_set_nn___pyx_t_5numpy_float64_t(const char *itemp, PyObject *obj);
4706 
4707 /* CIntToPy.proto */
4708 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
4709 
4710 /* CIntToPy.proto */
4711 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_npy_uint64(npy_uint64 value);
4712 
4713 /* CIntToPy.proto */
4714 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_npy_int32(npy_int32 value);
4715 
4716 /* CIntToPy.proto */
4717 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_npy_uint8(npy_uint8 value);
4718 
4719 /* Print.proto */
4720 static int __Pyx_Print(PyObject*, PyObject *, int);
4721 #if CYTHON_COMPILING_IN_PYPY || PY_MAJOR_VERSION >= 3
4722 static PyObject* __pyx_print = 0;
4723 static PyObject* __pyx_print_kwargs = 0;
4724 #endif
4725 
4726 /* RealImag.proto */
4727 #if CYTHON_CCOMPLEX
4728   #ifdef __cplusplus
4729     #define __Pyx_CREAL(z) ((z).real())
4730     #define __Pyx_CIMAG(z) ((z).imag())
4731   #else
4732     #define __Pyx_CREAL(z) (__real__(z))
4733     #define __Pyx_CIMAG(z) (__imag__(z))
4734   #endif
4735 #else
4736     #define __Pyx_CREAL(z) ((z).real)
4737     #define __Pyx_CIMAG(z) ((z).imag)
4738 #endif
4739 #if defined(__cplusplus) && CYTHON_CCOMPLEX\
4740         && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103)
4741     #define __Pyx_SET_CREAL(z,x) ((z).real(x))
4742     #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
4743 #else
4744     #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x)
4745     #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)
4746 #endif
4747 
4748 /* Arithmetic.proto */
4749 #if CYTHON_CCOMPLEX
4750     #define __Pyx_c_eq_float(a, b)   ((a)==(b))
4751     #define __Pyx_c_sum_float(a, b)  ((a)+(b))
4752     #define __Pyx_c_diff_float(a, b) ((a)-(b))
4753     #define __Pyx_c_prod_float(a, b) ((a)*(b))
4754     #define __Pyx_c_quot_float(a, b) ((a)/(b))
4755     #define __Pyx_c_neg_float(a)     (-(a))
4756   #ifdef __cplusplus
4757     #define __Pyx_c_is_zero_float(z) ((z)==(float)0)
4758     #define __Pyx_c_conj_float(z)    (::std::conj(z))
4759     #if 1
4760         #define __Pyx_c_abs_float(z)     (::std::abs(z))
4761         #define __Pyx_c_pow_float(a, b)  (::std::pow(a, b))
4762     #endif
4763   #else
4764     #define __Pyx_c_is_zero_float(z) ((z)==0)
4765     #define __Pyx_c_conj_float(z)    (conjf(z))
4766     #if 1
4767         #define __Pyx_c_abs_float(z)     (cabsf(z))
4768         #define __Pyx_c_pow_float(a, b)  (cpowf(a, b))
4769     #endif
4770  #endif
4771 #else
4772     static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex, __pyx_t_float_complex);
4773     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex, __pyx_t_float_complex);
4774     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex, __pyx_t_float_complex);
4775     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex, __pyx_t_float_complex);
4776     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex, __pyx_t_float_complex);
4777     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex);
4778     static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex);
4779     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex);
4780     #if 1
4781         static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex);
4782         static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex, __pyx_t_float_complex);
4783     #endif
4784 #endif
4785 
4786 /* Arithmetic.proto */
4787 #if CYTHON_CCOMPLEX
4788     #define __Pyx_c_eq_double(a, b)   ((a)==(b))
4789     #define __Pyx_c_sum_double(a, b)  ((a)+(b))
4790     #define __Pyx_c_diff_double(a, b) ((a)-(b))
4791     #define __Pyx_c_prod_double(a, b) ((a)*(b))
4792     #define __Pyx_c_quot_double(a, b) ((a)/(b))
4793     #define __Pyx_c_neg_double(a)     (-(a))
4794   #ifdef __cplusplus
4795     #define __Pyx_c_is_zero_double(z) ((z)==(double)0)
4796     #define __Pyx_c_conj_double(z)    (::std::conj(z))
4797     #if 1
4798         #define __Pyx_c_abs_double(z)     (::std::abs(z))
4799         #define __Pyx_c_pow_double(a, b)  (::std::pow(a, b))
4800     #endif
4801   #else
4802     #define __Pyx_c_is_zero_double(z) ((z)==0)
4803     #define __Pyx_c_conj_double(z)    (conj(z))
4804     #if 1
4805         #define __Pyx_c_abs_double(z)     (cabs(z))
4806         #define __Pyx_c_pow_double(a, b)  (cpow(a, b))
4807     #endif
4808  #endif
4809 #else
4810     static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex);
4811     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex);
4812     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex);
4813     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex);
4814     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex);
4815     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex);
4816     static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex);
4817     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex);
4818     #if 1
4819         static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex);
4820         static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex);
4821     #endif
4822 #endif
4823 
4824 /* CIntToPy.proto */
4825 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value);
4826 
4827 /* MemviewSliceCopyTemplate.proto */
4828 static __Pyx_memviewslice
4829 __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs,
4830                                  const char *mode, int ndim,
4831                                  size_t sizeof_dtype, int contig_flag,
4832                                  int dtype_is_object);
4833 
4834 /* CIntFromPy.proto */
4835 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
4836 
4837 /* CIntFromPy.proto */
4838 static CYTHON_INLINE npy_int64 __Pyx_PyInt_As_npy_int64(PyObject *);
4839 
4840 /* CIntFromPy.proto */
4841 static CYTHON_INLINE npy_int32 __Pyx_PyInt_As_npy_int32(PyObject *);
4842 
4843 /* CIntFromPy.proto */
4844 static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
4845 
4846 /* CIntFromPy.proto */
4847 static CYTHON_INLINE npy_uint64 __Pyx_PyInt_As_npy_uint64(PyObject *);
4848 
4849 /* CIntFromPy.proto */
4850 static CYTHON_INLINE npy_uint8 __Pyx_PyInt_As_npy_uint8(PyObject *);
4851 
4852 /* CIntFromPy.proto */
4853 static CYTHON_INLINE Py_intptr_t __Pyx_PyInt_As_Py_intptr_t(PyObject *);
4854 
4855 /* BytesContains.proto */
4856 static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character);
4857 
4858 /* CIntFromPy.proto */
4859 static CYTHON_INLINE npy_uint32 __Pyx_PyInt_As_npy_uint32(PyObject *);
4860 
4861 /* PrintOne.proto */
4862 static int __Pyx_PrintOne(PyObject* stream, PyObject *o);
4863 
4864 /* ImportNumPyArray.proto */
4865 static PyObject *__pyx_numpy_ndarray = NULL;
4866 static PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void);
4867 
4868 /* CIntFromPy.proto */
4869 static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *);
4870 
4871 /* CIntFromPy.proto */
4872 static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *);
4873 
4874 /* ObjectToMemviewSlice.proto */
4875 static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(PyObject *, int writable_flag);
4876 
4877 /* PyObjectCallMethod1.proto */
4878 static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg);
4879 
4880 /* CoroutineBase.proto */
4881 typedef PyObject *(*__pyx_coroutine_body_t)(PyObject *, PyThreadState *, PyObject *);
4882 #if CYTHON_USE_EXC_INFO_STACK
4883 #define __Pyx_ExcInfoStruct  _PyErr_StackItem
4884 #else
4885 typedef struct {
4886     PyObject *exc_type;
4887     PyObject *exc_value;
4888     PyObject *exc_traceback;
4889 } __Pyx_ExcInfoStruct;
4890 #endif
4891 typedef struct {
4892     PyObject_HEAD
4893     __pyx_coroutine_body_t body;
4894     PyObject *closure;
4895     __Pyx_ExcInfoStruct gi_exc_state;
4896     PyObject *gi_weakreflist;
4897     PyObject *classobj;
4898     PyObject *yieldfrom;
4899     PyObject *gi_name;
4900     PyObject *gi_qualname;
4901     PyObject *gi_modulename;
4902     PyObject *gi_code;
4903     int resume_label;
4904     char is_running;
4905 } __pyx_CoroutineObject;
4906 static __pyx_CoroutineObject *__Pyx__Coroutine_New(
4907     PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
4908     PyObject *name, PyObject *qualname, PyObject *module_name);
4909 static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
4910             __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
4911             PyObject *name, PyObject *qualname, PyObject *module_name);
4912 static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self);
4913 static int __Pyx_Coroutine_clear(PyObject *self);
4914 static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value);
4915 static PyObject *__Pyx_Coroutine_Close(PyObject *self);
4916 static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args);
4917 #if CYTHON_USE_EXC_INFO_STACK
4918 #define __Pyx_Coroutine_SwapException(self)
4919 #define __Pyx_Coroutine_ResetAndClearException(self)  __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state)
4920 #else
4921 #define __Pyx_Coroutine_SwapException(self) {\
4922     __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\
4923     __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\
4924     }
4925 #define __Pyx_Coroutine_ResetAndClearException(self) {\
4926     __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\
4927     (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\
4928     }
4929 #endif
4930 #if CYTHON_FAST_THREAD_STATE
4931 #define __Pyx_PyGen_FetchStopIterationValue(pvalue)\
4932     __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue)
4933 #else
4934 #define __Pyx_PyGen_FetchStopIterationValue(pvalue)\
4935     __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue)
4936 #endif
4937 static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue);
4938 static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state);
4939 
4940 /* PatchModuleWithCoroutine.proto */
4941 static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code);
4942 
4943 /* PatchGeneratorABC.proto */
4944 static int __Pyx_patch_abc(void);
4945 
4946 /* Generator.proto */
4947 #define __Pyx_Generator_USED
4948 static PyTypeObject *__pyx_GeneratorType = 0;
4949 #define __Pyx_Generator_CheckExact(obj) (Py_TYPE(obj) == __pyx_GeneratorType)
4950 #define __Pyx_Generator_New(body, code, closure, name, qualname, module_name)\
4951     __Pyx__Coroutine_New(__pyx_GeneratorType, body, code, closure, name, qualname, module_name)
4952 static PyObject *__Pyx_Generator_Next(PyObject *self);
4953 static int __pyx_Generator_init(void);
4954 
4955 /* CheckBinaryVersion.proto */
4956 static int __Pyx_check_binary_version(void);
4957 
4958 /* VoidPtrImport.proto */
4959 static int __Pyx_ImportVoidPtr(PyObject *module, const char *name, void **p, const char *sig);
4960 
4961 /* FunctionImport.proto */
4962 static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig);
4963 
4964 /* InitStrings.proto */
4965 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
4966 
4967 static void __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_recursively_visit_octs(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_root, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds, int __pyx_v_level, struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *__pyx_v_visitor, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_recursively_visit_octs *__pyx_optional_args); /* proto*/
4968 static void __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_visit_oct_cells(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_root, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_ch, __pyx_t_5numpy_float64_t *__pyx_v_spos, __pyx_t_5numpy_float64_t *__pyx_v_sdds, struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *__pyx_v_visitor, int __pyx_v_i, int __pyx_v_j, int __pyx_v_k); /* proto*/
4969 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args); /* proto*/
4970 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_grid_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid_edge *__pyx_optional_args); /* proto*/
4971 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_cell(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
4972 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
4973 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_sphere(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
4974 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_bbox(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
4975 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_bbox_edge(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
4976 static __pyx_t_5numpy_float64_t __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_periodic_difference(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, __pyx_t_5numpy_float64_t __pyx_v_x1, __pyx_t_5numpy_float64_t __pyx_v_x2, int __pyx_v_d); /* proto*/
4977 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_fill_mask_selector(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_float64_t *__pyx_v_dds, int *__pyx_v_dim, PyArrayObject *__pyx_v_child_mask, PyArrayObject *__pyx_v_mask, int __pyx_v_level); /* proto*/
4978 static void __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_visit_grid_cells(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, struct __pyx_t_2yt_8geometry_13grid_visitors_GridVisitorData *__pyx_v_data, __pyx_t_2yt_8geometry_13grid_visitors_grid_visitor_function *__pyx_v_func, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_visit_grid_cells *__pyx_optional_args); /* proto*/
4979 static int __pyx_f_2yt_8geometry_18selection_routines_13PointSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
4980 static int __pyx_f_2yt_8geometry_18selection_routines_13PointSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
4981 static int __pyx_f_2yt_8geometry_18selection_routines_13PointSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
4982 static int __pyx_f_2yt_8geometry_18selection_routines_13PointSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
4983 static int __pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
4984 static int __pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
4985 static int __pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
4986 static int __pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
4987 static int __pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
4988 static int __pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
4989 static int __pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
4990 static int __pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
4991 static int __pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
4992 static int __pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
4993 static int __pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_fill_mask_selector(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_float64_t *__pyx_v_dds, int *__pyx_v_dim, PyArrayObject *__pyx_v_child_mask, PyArrayObject *__pyx_v_mask, int __pyx_v_level); /* proto*/
4994 static int __pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_bbox(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
4995 static int __pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_bbox_dge(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
4996 static int __pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
4997 static int __pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
4998 static int __pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_sphere(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
4999 static int __pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5000 static int __pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5001 static int __pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5002 static int __pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_bbox(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5003 static int __pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_bbox_edge(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5004 static int __pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5005 static int __pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5006 static int __pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5007 static int __pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5008 static int __pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5009 static int __pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5010 static int __pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5011 static int __pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5012 static int __pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5013 static int __pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5014 static int __pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5015 static int __pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5016 static int __pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5017 static int __pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5018 static int __pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5019 static int __pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5020 static int __pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5021 static int __pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5022 static int __pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5023 static int __pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5024 static int __pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5025 static int __pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5026 static int __pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5027 static int __pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5028 static int __pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5029 static int __pyx_f_2yt_8geometry_18selection_routines_12GridSelector_select_cell(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5030 static int __pyx_f_2yt_8geometry_18selection_routines_12GridSelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5031 static int __pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_sphere(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5032 static int __pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_cell(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5033 static int __pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5034 static int __pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5035 static int __pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_grid *__pyx_optional_args); /* proto*/
5036 static int __pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_sphere(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5037 static int __pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_cell(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5038 static int __pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5039 static int __pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5040 static int __pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_grid *__pyx_optional_args); /* proto*/
5041 static int __pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_cell(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5042 static int __pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_grid(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge, CYTHON_UNUSED __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14AlwaysSelector_select_grid *__pyx_optional_args); /* proto*/
5043 static int __pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5044 static int __pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_sphere(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5045 static int __pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_bbox(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5046 static int __pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_bbox_edge(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5047 static int __pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5048 static int __pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_15ComposeSelector_select_grid *__pyx_optional_args); /* proto*/
5049 static int __pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5050 static int __pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5051 static int __pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5052 static int __pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5053 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5054 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5055 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_grid *__pyx_optional_args); /* proto*/
5056 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5057 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5058 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5059 static int __pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5060 static int __pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5061 static int __pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_17BooleanORSelector_select_grid *__pyx_optional_args); /* proto*/
5062 static int __pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5063 static int __pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5064 static int __pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5065 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_bbox(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5066 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5067 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_grid(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge, CYTHON_UNUSED __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_grid *__pyx_optional_args); /* proto*/
5068 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5069 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5070 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5071 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_bbox(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5072 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5073 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_grid(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge, CYTHON_UNUSED __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_grid *__pyx_optional_args); /* proto*/
5074 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5075 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5076 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5077 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5078 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5079 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_grid *__pyx_optional_args); /* proto*/
5080 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5081 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5082 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5083 static int __pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5084 static int __pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5085 static int __pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_grid *__pyx_optional_args); /* proto*/
5086 static int __pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5087 static int __pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5088 static int __pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5089 static int __pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5090 static int __pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge); /* proto*/
5091 static int __pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_grid *__pyx_optional_args); /* proto*/
5092 static int __pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds); /* proto*/
5093 static int __pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos); /* proto*/
5094 static int __pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius); /* proto*/
5095 static CYTHON_INLINE int __pyx_f_2yt_8geometry_12oct_visitors_10OctVisitor_oind(struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *__pyx_v_self); /* proto*/
5096 static CYTHON_INLINE int __pyx_f_2yt_8geometry_12oct_visitors_10OctVisitor_rind(struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *__pyx_v_self); /* proto*/
5097 static CYTHON_INLINE __pyx_t_5numpy_uint8_t __pyx_f_2yt_8geometry_12oct_visitors_20BaseNeighbourVisitor_neighbour_rind(struct __pyx_obj_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor *__pyx_v_self); /* proto*/
5098 static CYTHON_INLINE struct __pyx_t_2yt_8geometry_13oct_container_OctAllocationContainer *__pyx_f_2yt_8geometry_13oct_container_13OctObjectPool_get_cont(struct __pyx_obj_2yt_8geometry_13oct_container_OctObjectPool *__pyx_v_self, int __pyx_v_i); /* proto*/
5099 static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/
5100 static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/
5101 static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/
5102 static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src); /* proto*/
5103 static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value); /* proto*/
5104 static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/
5105 static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/
5106 static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/
5107 static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/
5108 static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/
5109 
5110 /* Module declarations from 'cpython.buffer' */
5111 
5112 /* Module declarations from 'libc.string' */
5113 
5114 /* Module declarations from 'libc.stdio' */
5115 
5116 /* Module declarations from '__builtin__' */
5117 
5118 /* Module declarations from 'cpython.type' */
5119 static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0;
5120 
5121 /* Module declarations from 'cpython' */
5122 
5123 /* Module declarations from 'cpython.object' */
5124 
5125 /* Module declarations from 'cpython.ref' */
5126 
5127 /* Module declarations from 'cpython.mem' */
5128 
5129 /* Module declarations from 'numpy' */
5130 
5131 /* Module declarations from 'numpy' */
5132 static PyTypeObject *__pyx_ptype_5numpy_dtype = 0;
5133 static PyTypeObject *__pyx_ptype_5numpy_flatiter = 0;
5134 static PyTypeObject *__pyx_ptype_5numpy_broadcast = 0;
5135 static PyTypeObject *__pyx_ptype_5numpy_ndarray = 0;
5136 static PyTypeObject *__pyx_ptype_5numpy_ufunc = 0;
5137 static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *, char *, char *, int *); /*proto*/
5138 
5139 /* Module declarations from 'yt.geometry.grid_visitors' */
5140 static __pyx_t_5numpy_uint8_t (*__pyx_f_2yt_8geometry_13grid_visitors_check_child_masked)(struct __pyx_t_2yt_8geometry_13grid_visitors_GridVisitorData *); /*proto*/
5141 
5142 /* Module declarations from 'cython.view' */
5143 
5144 /* Module declarations from 'cython' */
5145 
5146 /* Module declarations from 'yt.geometry.oct_visitors' */
5147 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_OctVisitor = 0;
5148 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_CountTotalOcts = 0;
5149 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_CountTotalCells = 0;
5150 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_MarkOcts = 0;
5151 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_MaskOcts = 0;
5152 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_IndexOcts = 0;
5153 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_MaskedIndexOcts = 0;
5154 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_IndexMaskMapOcts = 0;
5155 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_ICoordsOcts = 0;
5156 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_IResOcts = 0;
5157 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_FCoordsOcts = 0;
5158 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_FWidthOcts = 0;
5159 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_CopyArrayI64 = 0;
5160 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_CopyArrayF64 = 0;
5161 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8 = 0;
5162 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_IdentifyOcts = 0;
5163 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_AssignDomainInd = 0;
5164 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_FillFileIndicesO = 0;
5165 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_FillFileIndicesR = 0;
5166 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_CountByDomain = 0;
5167 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_StoreOctree = 0;
5168 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_LoadOctree = 0;
5169 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_MortonIndexOcts = 0;
5170 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_StoreIndex = 0;
5171 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor = 0;
5172 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor = 0;
5173 static PyTypeObject *__pyx_ptype_2yt_8geometry_12oct_visitors_NeighbourCellVisitor = 0;
5174 static CYTHON_INLINE int __pyx_f_2yt_8geometry_12oct_visitors_cind(int, int, int); /*proto*/
5175 
5176 /* Module declarations from 'libc.math' */
5177 
5178 /* Module declarations from 'libc.stdlib' */
5179 
5180 /* Module declarations from 'yt.utilities.lib.allocation_container' */
5181 static PyTypeObject *__pyx_ptype_2yt_9utilities_3lib_20allocation_container_ObjectPool = 0;
5182 
5183 /* Module declarations from 'yt.utilities.lib.fp_utils' */
5184 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_imax(__pyx_t_5numpy_int64_t, __pyx_t_5numpy_int64_t); /*proto*/
5185 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_fmax(__pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t); /*proto*/
5186 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_imin(__pyx_t_5numpy_int64_t, __pyx_t_5numpy_int64_t); /*proto*/
5187 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_fmin(__pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t); /*proto*/
5188 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_iclip(__pyx_t_5numpy_int64_t, __pyx_t_5numpy_int64_t, __pyx_t_5numpy_int64_t); /*proto*/
5189 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_fclip(__pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t); /*proto*/
5190 static CYTHON_INLINE PyObject *__pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(PyObject *); /*proto*/
5191 
5192 /* Module declarations from 'yt.geometry.oct_container' */
5193 static PyTypeObject *__pyx_ptype_2yt_8geometry_13oct_container_OctObjectPool = 0;
5194 static PyTypeObject *__pyx_ptype_2yt_8geometry_13oct_container_OctreeContainer = 0;
5195 static PyTypeObject *__pyx_ptype_2yt_8geometry_13oct_container_SparseOctreeContainer = 0;
5196 static PyTypeObject *__pyx_ptype_2yt_8geometry_13oct_container_RAMSESOctreeContainer = 0;
5197 static int *__pyx_vp_2yt_8geometry_13oct_container_ORDER_MAX = 0;
5198 #define __pyx_v_2yt_8geometry_13oct_container_ORDER_MAX (*__pyx_vp_2yt_8geometry_13oct_container_ORDER_MAX)
5199 
5200 /* Module declarations from 'libc.float' */
5201 
5202 /* Module declarations from 'yt.utilities.lib.geometry_utils' */
5203 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_ifrexp(__pyx_t_5numpy_float64_t, __pyx_t_5numpy_int64_t *); /*proto*/
5204 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_msdb(__pyx_t_5numpy_int64_t, __pyx_t_5numpy_int64_t); /*proto*/
5205 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_xor_msb(__pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t); /*proto*/
5206 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_spread_64bits_by2(__pyx_t_5numpy_uint64_t); /*proto*/
5207 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_compact_64bits_by2(__pyx_t_5numpy_uint64_t); /*proto*/
5208 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_encode_morton_64bit(__pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t); /*proto*/
5209 static CYTHON_INLINE void __pyx_f_2yt_9utilities_3lib_14geometry_utils_decode_morton_64bit(__pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t *); /*proto*/
5210 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_bounded_morton_dds(__pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *); /*proto*/
5211 static __pyx_t_5numpy_uint32_t (*__pyx_f_2yt_9utilities_3lib_14geometry_utils_morton_neighbors_coarse)(__pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t, int *, __pyx_t_5numpy_uint32_t, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice); /*proto*/
5212 static __pyx_t_5numpy_uint32_t (*__pyx_f_2yt_9utilities_3lib_14geometry_utils_morton_neighbors_refined)(__pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t, int *, __pyx_t_5numpy_uint32_t, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice); /*proto*/
5213 
5214 /* Module declarations from 'yt.utilities.lib.bitarray' */
5215 static PyTypeObject *__pyx_ptype_2yt_9utilities_3lib_8bitarray_bitarray = 0;
5216 static CYTHON_INLINE void __pyx_f_2yt_9utilities_3lib_8bitarray_ba_set_value(__pyx_t_5numpy_uint8_t *, __pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint8_t); /*proto*/
5217 static CYTHON_INLINE __pyx_t_5numpy_uint8_t __pyx_f_2yt_9utilities_3lib_8bitarray_ba_get_value(__pyx_t_5numpy_uint8_t *, __pyx_t_5numpy_uint64_t); /*proto*/
5218 
5219 /* Module declarations from 'yt.utilities.lib.fnv_hash' */
5220 static __pyx_t_5numpy_int64_t (*__pyx_f_2yt_9utilities_3lib_8fnv_hash_c_fnv_hash)(__Pyx_memviewslice); /*proto*/
5221 
5222 /* Module declarations from 'yt.utilities.lib.volume_container' */
5223 static CYTHON_INLINE int __pyx_f_2yt_9utilities_3lib_16volume_container_vc_index(struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer *, int, int, int); /*proto*/
5224 static CYTHON_INLINE int __pyx_f_2yt_9utilities_3lib_16volume_container_vc_pos_index(struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer *, __pyx_t_5numpy_float64_t *); /*proto*/
5225 
5226 /* Module declarations from 'yt.utilities.lib.partitioned_grid' */
5227 static PyTypeObject *__pyx_ptype_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid = 0;
5228 
5229 /* Module declarations from 'yt.utilities.lib.image_samplers' */
5230 static PyTypeObject *__pyx_ptype_2yt_9utilities_3lib_14image_samplers_ImageSampler = 0;
5231 static PyTypeObject *__pyx_ptype_2yt_9utilities_3lib_14image_samplers_ProjectionSampler = 0;
5232 static PyTypeObject *__pyx_ptype_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler = 0;
5233 static PyTypeObject *__pyx_ptype_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler = 0;
5234 static PyTypeObject *__pyx_ptype_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler = 0;
5235 
5236 /* Module declarations from 'yt.utilities.lib.grid_traversal' */
5237 static int (*__pyx_f_2yt_9utilities_3lib_14grid_traversal_walk_volume)(struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_2yt_9utilities_3lib_14grid_traversal_sampler_function *, void *, struct __pyx_opt_args_2yt_9utilities_3lib_14grid_traversal_walk_volume *__pyx_optional_args); /*proto*/
5238 
5239 /* Module declarations from 'yt.geometry.selection_routines' */
5240 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject = 0;
5241 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_AlwaysSelector = 0;
5242 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_OctreeSubsetSelector = 0;
5243 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_BooleanSelector = 0;
5244 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_PointSelector = 0;
5245 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_SphereSelector = 0;
5246 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_RegionSelector = 0;
5247 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_CutRegionSelector = 0;
5248 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_DiskSelector = 0;
5249 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_CuttingPlaneSelector = 0;
5250 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_SliceSelector = 0;
5251 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_OrthoRaySelector = 0;
5252 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_RaySelector = 0;
5253 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_DataCollectionSelector = 0;
5254 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_EllipsoidSelector = 0;
5255 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_GridSelector = 0;
5256 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector = 0;
5257 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_ComposeSelector = 0;
5258 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_HaloParticlesSelector = 0;
5259 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_BooleanANDSelector = 0;
5260 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_BooleanORSelector = 0;
5261 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_BooleanNOTSelector = 0;
5262 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_BooleanXORSelector = 0;
5263 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_BooleanNEGSelector = 0;
5264 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_ChainedBooleanSelector = 0;
5265 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector = 0;
5266 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines_ChainedBooleanORSelector = 0;
5267 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ = 0;
5268 static PyTypeObject *__pyx_ptype_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr = 0;
5269 static PyTypeObject *__pyx_array_type = 0;
5270 static PyTypeObject *__pyx_MemviewEnum_type = 0;
5271 static PyTypeObject *__pyx_memoryview_type = 0;
5272 static PyTypeObject *__pyx_memoryviewslice_type = 0;
5273 static __pyx_t_5numpy_float64_t __pyx_v_2yt_8geometry_18selection_routines_grid_eps;
5274 static PyObject *generic = 0;
5275 static PyObject *strided = 0;
5276 static PyObject *indirect = 0;
5277 static PyObject *contiguous = 0;
5278 static PyObject *indirect_contiguous = 0;
5279 static int __pyx_memoryview_thread_locks_used;
5280 static PyThread_type_lock __pyx_memoryview_thread_locks[8];
5281 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_8geometry_18selection_routines__periodic_dist(__pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t, int); /*proto*/
5282 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_8geometry_18selection_routines_dot(__pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *); /*proto*/
5283 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_8geometry_18selection_routines_norm(__pyx_t_5numpy_float64_t *); /*proto*/
5284 static void __pyx_f_2yt_8geometry_18selection_routines_dt_sampler(struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t, int *, void *); /*proto*/
5285 static PyObject *__pyx_fuse_0__pyx_f_2yt_8geometry_18selection_routines__mask_fill(PyArrayObject *, __pyx_t_5numpy_int64_t, PyArrayObject *, PyArrayObject *); /*proto*/
5286 static PyObject *__pyx_fuse_1__pyx_f_2yt_8geometry_18selection_routines__mask_fill(PyArrayObject *, __pyx_t_5numpy_int64_t, PyArrayObject *, PyArrayObject *); /*proto*/
5287 static CYTHON_INLINE PyObject *__Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_t_5numpy_float64_t *, Py_ssize_t); /*proto*/
5288 static CYTHON_INLINE PyObject *__Pyx_carray_to_tuple___pyx_t_5numpy_float64_t(__pyx_t_5numpy_float64_t *, Py_ssize_t); /*proto*/
5289 static int __Pyx_carray_from_py___pyx_t_5numpy_float64_t(PyObject *, __pyx_t_5numpy_float64_t *, Py_ssize_t); /*proto*/
5290 static CYTHON_INLINE PyObject *__Pyx_carray_to_py_int(int *, Py_ssize_t); /*proto*/
5291 static CYTHON_INLINE PyObject *__Pyx_carray_to_tuple_int(int *, Py_ssize_t); /*proto*/
5292 static int __Pyx_carray_from_py_int(PyObject *, int *, Py_ssize_t); /*proto*/
5293 static CYTHON_INLINE PyObject *__Pyx_carray_to_py___pyx_t_5numpy_float64_t___5b_3_5d_(__pyx_t_5numpy_float64_t (*)[3], Py_ssize_t); /*proto*/
5294 static CYTHON_INLINE PyObject *__Pyx_carray_to_tuple___pyx_t_5numpy_float64_t___5b_3_5d_(__pyx_t_5numpy_float64_t (*)[3], Py_ssize_t); /*proto*/
5295 static int __Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_(PyObject *, __pyx_t_5numpy_float64_t (*)[3], Py_ssize_t); /*proto*/
5296 static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/
5297 static void *__pyx_align_pointer(void *, size_t); /*proto*/
5298 static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/
5299 static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/
5300 static PyObject *_unellipsify(PyObject *, int); /*proto*/
5301 static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/
5302 static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/
5303 static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/
5304 static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/
5305 static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/
5306 static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/
5307 static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
5308 static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
5309 static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/
5310 static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
5311 static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/
5312 static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/
5313 static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/
5314 static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/
5315 static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/
5316 static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/
5317 static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/
5318 static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/
5319 static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/
5320 static int __pyx_memoryview_err(PyObject *, char *); /*proto*/
5321 static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/
5322 static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/
5323 static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/
5324 static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/
5325 static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/
5326 static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/
5327 static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/
5328 static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/
5329 static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t = { "uint8_t", NULL, sizeof(__pyx_t_5numpy_uint8_t), { 0 }, 0, IS_UNSIGNED(__pyx_t_5numpy_uint8_t) ? 'U' : 'I', IS_UNSIGNED(__pyx_t_5numpy_uint8_t), 0 };
5330 static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t = { "int64_t", NULL, sizeof(__pyx_t_5numpy_int64_t), { 0 }, 0, IS_UNSIGNED(__pyx_t_5numpy_int64_t) ? 'U' : 'I', IS_UNSIGNED(__pyx_t_5numpy_int64_t), 0 };
5331 static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t = { "float64_t", NULL, sizeof(__pyx_t_5numpy_float64_t), { 0 }, 0, 'R', 0, 0 };
5332 static __Pyx_TypeInfo __Pyx_TypeInfo_float = { "float", NULL, sizeof(float), { 0 }, 0, 'R', 0, 0 };
5333 static __Pyx_TypeInfo __Pyx_TypeInfo_double = { "double", NULL, sizeof(double), { 0 }, 0, 'R', 0, 0 };
5334 static __Pyx_TypeInfo __Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t = { "int32_t", NULL, sizeof(__pyx_t_5numpy_int32_t), { 0 }, 0, IS_UNSIGNED(__pyx_t_5numpy_int32_t) ? 'U' : 'I', IS_UNSIGNED(__pyx_t_5numpy_int32_t), 0 };
5335 static __Pyx_TypeInfo __Pyx_TypeInfo_unsigned_char = { "unsigned char", NULL, sizeof(unsigned char), { 0 }, 0, IS_UNSIGNED(unsigned char) ? 'U' : 'I', IS_UNSIGNED(unsigned char), 0 };
5336 #define __Pyx_MODULE_NAME "yt.geometry.selection_routines"
5337 extern int __pyx_module_is_main_yt__geometry__selection_routines;
5338 int __pyx_module_is_main_yt__geometry__selection_routines = 0;
5339 
5340 /* Implementation of 'yt.geometry.selection_routines' */
5341 static PyObject *__pyx_builtin_range;
5342 static PyObject *__pyx_builtin_RuntimeError;
5343 static PyObject *__pyx_builtin_TypeError;
5344 static PyObject *__pyx_builtin_NotImplementedError;
5345 static PyObject *__pyx_builtin_super;
5346 static PyObject *__pyx_builtin_enumerate;
5347 static PyObject *__pyx_builtin_ValueError;
5348 static PyObject *__pyx_builtin_ImportError;
5349 static PyObject *__pyx_builtin_OverflowError;
5350 static PyObject *__pyx_builtin_IndexError;
5351 static PyObject *__pyx_builtin_MemoryError;
5352 static PyObject *__pyx_builtin_Ellipsis;
5353 static PyObject *__pyx_builtin_id;
5354 static const char __pyx_k_A[] = "_A";
5355 static const char __pyx_k_B[] = "_B";
5356 static const char __pyx_k_C[] = "_C";
5357 static const char __pyx_k_O[] = "O";
5358 static const char __pyx_k_T[] = "T";
5359 static const char __pyx_k_c[] = "c";
5360 static const char __pyx_k_d[] = "d";
5361 static const char __pyx_k_i[] = "i";
5362 static const char __pyx_k_j[] = "j";
5363 static const char __pyx_k_k[] = "k";
5364 static const char __pyx_k_p[] = "p";
5365 static const char __pyx_k_s[] = "s";
5366 static const char __pyx_k_x[] = "x";
5367 static const char __pyx_k_y[] = "y";
5368 static const char __pyx_k_z[] = "z";
5369 static const char __pyx_k__2[] = "()";
5370 static const char __pyx_k__3[] = "|";
5371 static const char __pyx_k_ax[] = "ax";
5372 static const char __pyx_k_ay[] = "ay";
5373 static const char __pyx_k_cx[] = "cx";
5374 static const char __pyx_k_cy[] = "cy";
5375 static const char __pyx_k_cz[] = "cz";
5376 static const char __pyx_k_ds[] = "ds";
5377 static const char __pyx_k_dx[] = "dx";
5378 static const char __pyx_k_dy[] = "dy";
5379 static const char __pyx_k_dz[] = "dz";
5380 static const char __pyx_k_e0[] = "_e0";
5381 static const char __pyx_k_e1[] = "_e1";
5382 static const char __pyx_k_e2[] = "_e2";
5383 static const char __pyx_k_id[] = "id";
5384 static const char __pyx_k_np[] = "np";
5385 static const char __pyx_k_nz[] = "nz";
5386 static const char __pyx_k_or[] = "or";
5387 static const char __pyx_k_p1[] = "p1";
5388 static const char __pyx_k_p2[] = "p2";
5389 static const char __pyx_k_px[] = "px";
5390 static const char __pyx_k_py[] = "py";
5391 static const char __pyx_k_pz[] = "pz";
5392 static const char __pyx_k_all[] = "all";
5393 static const char __pyx_k_and[] = "and";
5394 static const char __pyx_k_d_2[] = "_d";
5395 static const char __pyx_k_dds[] = "dds";
5396 static const char __pyx_k_end[] = "end";
5397 static const char __pyx_k_eps[] = "eps";
5398 static const char __pyx_k_inf[] = "inf";
5399 static const char __pyx_k_mag[] = "mag";
5400 static const char __pyx_k_n_c[] = "n_c";
5401 static const char __pyx_k_n_p[] = "n_p";
5402 static const char __pyx_k_neg[] = "neg";
5403 static const char __pyx_k_new[] = "__new__";
5404 static const char __pyx_k_not[] = "not";
5405 static const char __pyx_k_obj[] = "obj";
5406 static const char __pyx_k_out[] = "out";
5407 static const char __pyx_k_p_0[] = "p[0]";
5408 static const char __pyx_k_p_1[] = "p[1]";
5409 static const char __pyx_k_p_2[] = "p[2]";
5410 static const char __pyx_k_pos[] = "pos";
5411 static const char __pyx_k_vec[] = "vec";
5412 static const char __pyx_k_xor[] = "xor";
5413 static const char __pyx_k_args[] = "args";
5414 static const char __pyx_k_axis[] = "axis";
5415 static const char __pyx_k_base[] = "base";
5416 static const char __pyx_k_bool[] = "bool";
5417 static const char __pyx_k_cpos[] = "cpos";
5418 static const char __pyx_k_dict[] = "__dict__";
5419 static const char __pyx_k_dobj[] = "dobj";
5420 static const char __pyx_k_file[] = "file";
5421 static const char __pyx_k_fmod[] = "fmod";
5422 static const char __pyx_k_kind[] = "kind";
5423 static const char __pyx_k_main[] = "__main__";
5424 static const char __pyx_k_mask[] = "mask";
5425 static const char __pyx_k_mesh[] = "mesh";
5426 static const char __pyx_k_mode[] = "mode";
5427 static const char __pyx_k_name[] = "name";
5428 static const char __pyx_k_ndim[] = "ndim";
5429 static const char __pyx_k_ones[] = "ones";
5430 static const char __pyx_k_p1_0[] = "p1[0]";
5431 static const char __pyx_k_p1_1[] = "p1[1]";
5432 static const char __pyx_k_p1_2[] = "p1[2]";
5433 static const char __pyx_k_p2_0[] = "p2[0]";
5434 static const char __pyx_k_p2_1[] = "p2[1]";
5435 static const char __pyx_k_p2_2[] = "p2[2]";
5436 static const char __pyx_k_pack[] = "pack";
5437 static const char __pyx_k_self[] = "self";
5438 static const char __pyx_k_send[] = "send";
5439 static const char __pyx_k_size[] = "size";
5440 static const char __pyx_k_step[] = "step";
5441 static const char __pyx_k_stop[] = "stop";
5442 static const char __pyx_k_test[] = "__test__";
5443 static const char __pyx_k_vals[] = "vals";
5444 static const char __pyx_k_view[] = "view";
5445 static const char __pyx_k_ASCII[] = "ASCII";
5446 static const char __pyx_k_Level[] = "Level";
5447 static const char __pyx_k_array[] = "array";
5448 static const char __pyx_k_ascii[] = "ascii";
5449 static const char __pyx_k_class[] = "__class__";
5450 static const char __pyx_k_close[] = "close";
5451 static const char __pyx_k_coord[] = "coord";
5452 static const char __pyx_k_count[] = "count";
5453 static const char __pyx_k_dobj1[] = "dobj1";
5454 static const char __pyx_k_dobj2[] = "dobj2";
5455 static const char __pyx_k_dtype[] = "dtype";
5456 static const char __pyx_k_empty[] = "empty";
5457 static const char __pyx_k_error[] = "error";
5458 static const char __pyx_k_finfo[] = "finfo";
5459 static const char __pyx_k_flags[] = "flags";
5460 static const char __pyx_k_float[] = "float";
5461 static const char __pyx_k_index[] = "index";
5462 static const char __pyx_k_int64[] = "int64";
5463 static const char __pyx_k_mag_0[] = "mag[0]";
5464 static const char __pyx_k_mag_1[] = "mag[1]";
5465 static const char __pyx_k_mag_2[] = "mag[2]";
5466 static const char __pyx_k_numpy[] = "numpy";
5467 static const char __pyx_k_print[] = "print";
5468 static const char __pyx_k_px_ax[] = "px_ax";
5469 static const char __pyx_k_py_ax[] = "py_ax";
5470 static const char __pyx_k_radii[] = "radii";
5471 static const char __pyx_k_range[] = "range";
5472 static const char __pyx_k_shape[] = "shape";
5473 static const char __pyx_k_split[] = "split";
5474 static const char __pyx_k_start[] = "start";
5475 static const char __pyx_k_strip[] = "strip";
5476 static const char __pyx_k_super[] = "super";
5477 static const char __pyx_k_throw[] = "throw";
5478 static const char __pyx_k_uint8[] = "uint8";
5479 static const char __pyx_k_units[] = "units";
5480 static const char __pyx_k_vec_0[] = "vec[0]";
5481 static const char __pyx_k_vec_1[] = "vec[1]";
5482 static const char __pyx_k_vec_2[] = "vec[2]";
5483 static const char __pyx_k_zeros[] = "zeros";
5484 static const char __pyx_k_always[] = "always";
5485 static const char __pyx_k_astype[] = "astype";
5486 static const char __pyx_k_center[] = "center";
5487 static const char __pyx_k_double[] = "double";
5488 static const char __pyx_k_encode[] = "encode";
5489 static const char __pyx_k_extend[] = "extend";
5490 static const char __pyx_k_format[] = "format";
5491 static const char __pyx_k_height[] = "height";
5492 static const char __pyx_k_import[] = "__import__";
5493 static const char __pyx_k_kwargs[] = "kwargs";
5494 static const char __pyx_k_levels[] = "levels";
5495 static const char __pyx_k_name_2[] = "__name__";
5496 static const char __pyx_k_object[] = "object";
5497 static const char __pyx_k_octree[] = "octree";
5498 static const char __pyx_k_offset[] = "offset";
5499 static const char __pyx_k_pickle[] = "pickle";
5500 static const char __pyx_k_radius[] = "radius";
5501 static const char __pyx_k_reduce[] = "__reduce__";
5502 static const char __pyx_k_struct[] = "struct";
5503 static const char __pyx_k_unpack[] = "unpack";
5504 static const char __pyx_k_update[] = "update";
5505 static const char __pyx_k_float32[] = "float32";
5506 static const char __pyx_k_float64[] = "float64";
5507 static const char __pyx_k_fortran[] = "fortran";
5508 static const char __pyx_k_genexpr[] = "genexpr";
5509 static const char __pyx_k_indices[] = "indices";
5510 static const char __pyx_k_max_ind[] = "max_ind";
5511 static const char __pyx_k_memview[] = "memview";
5512 static const char __pyx_k_min_ind[] = "min_ind";
5513 static const char __pyx_k_obj_ids[] = "_obj_ids";
5514 static const char __pyx_k_radii_2[] = "_radii";
5515 static const char __pyx_k_radius2[] = "radius2";
5516 static const char __pyx_k_tobytes[] = "tobytes";
5517 static const char __pyx_k_vec_0_0[] = "vec[0][0]";
5518 static const char __pyx_k_vec_0_1[] = "vec[0][1]";
5519 static const char __pyx_k_vec_0_2[] = "vec[0][2]";
5520 static const char __pyx_k_vec_1_0[] = "vec[1][0]";
5521 static const char __pyx_k_vec_1_1[] = "vec[1][1]";
5522 static const char __pyx_k_vec_1_2[] = "vec[1][2]";
5523 static const char __pyx_k_vec_2_0[] = "vec[2][0]";
5524 static const char __pyx_k_vec_2_1[] = "vec[2][1]";
5525 static const char __pyx_k_vec_2_2[] = "vec[2][2]";
5526 static const char __pyx_k_Ellipsis[] = "Ellipsis";
5527 static const char __pyx_k_LeftEdge[] = "LeftEdge";
5528 static const char __pyx_k_center_0[] = "center[0]";
5529 static const char __pyx_k_center_1[] = "center[1]";
5530 static const char __pyx_k_center_2[] = "center[2]";
5531 static const char __pyx_k_defaults[] = "defaults";
5532 static const char __pyx_k_getstate[] = "__getstate__";
5533 static const char __pyx_k_itemsize[] = "itemsize";
5534 static const char __pyx_k_norm_vec[] = "_norm_vec";
5535 static const char __pyx_k_pyx_type[] = "__pyx_type";
5536 static const char __pyx_k_selector[] = "selector";
5537 static const char __pyx_k_set_bbox[] = "set_bbox";
5538 static const char __pyx_k_setstate[] = "__setstate__";
5539 static const char __pyx_k_RightEdge[] = "RightEdge";
5540 static const char __pyx_k_TypeError[] = "TypeError";
5541 static const char __pyx_k_axis_name[] = "axis_name";
5542 static const char __pyx_k_base_hash[] = "_base_hash";
5543 static const char __pyx_k_check_box[] = "check_box";
5544 static const char __pyx_k_domain_id[] = "domain_id";
5545 static const char __pyx_k_end_point[] = "end_point";
5546 static const char __pyx_k_enumerate[] = "enumerate";
5547 static const char __pyx_k_hash_vals[] = "_hash_vals";
5548 static const char __pyx_k_id_offset[] = "_id_offset";
5549 static const char __pyx_k_left_edge[] = "left_edge";
5550 static const char __pyx_k_mask_fill[] = "mask_fill";
5551 static const char __pyx_k_max_level[] = "max_level";
5552 static const char __pyx_k_min_level[] = "min_level";
5553 static const char __pyx_k_pyx_state[] = "__pyx_state";
5554 static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
5555 static const char __pyx_k_selector1[] = "selector1";
5556 static const char __pyx_k_selector2[] = "selector2";
5557 static const char __pyx_k_transpose[] = "transpose";
5558 static const char __pyx_k_IndexError[] = "IndexError";
5559 static const char __pyx_k_ValueError[] = "ValueError";
5560 static const char __pyx_k_atleast_1d[] = "atleast_1d";
5561 static const char __pyx_k_chained_or[] = "chained_or";
5562 static const char __pyx_k_child_mask[] = "child_mask";
5563 static const char __pyx_k_left_edges[] = "left_edges";
5564 static const char __pyx_k_logical_or[] = "logical_or";
5565 static const char __pyx_k_norm_vec_0[] = "norm_vec[0]";
5566 static const char __pyx_k_norm_vec_1[] = "norm_vec[1]";
5567 static const char __pyx_k_norm_vec_2[] = "norm_vec[2]";
5568 static const char __pyx_k_norm_vec_3[] = "norm_vec";
5569 static const char __pyx_k_pyx_result[] = "__pyx_result";
5570 static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
5571 static const char __pyx_k_right_edge[] = "right_edge";
5572 static const char __pyx_k_to_ndarray[] = "to_ndarray";
5573 static const char __pyx_k_ImportError[] = "ImportError";
5574 static const char __pyx_k_MemoryError[] = "MemoryError";
5575 static const char __pyx_k_PickleError[] = "PickleError";
5576 static const char __pyx_k_RaySelector[] = "RaySelector";
5577 static const char __pyx_k_base_source[] = "base_source";
5578 static const char __pyx_k_chained_and[] = "chained_and";
5579 static const char __pyx_k_code_length[] = "code_length";
5580 static const char __pyx_k_coordinates[] = "coordinates";
5581 static const char __pyx_k_filter_bbox[] = "filter_bbox";
5582 static const char __pyx_k_is_all_data[] = "is_all_data";
5583 static const char __pyx_k_left_edge_0[] = "left_edge[0]";
5584 static const char __pyx_k_left_edge_1[] = "left_edge[1]";
5585 static const char __pyx_k_left_edge_2[] = "left_edge[2]";
5586 static const char __pyx_k_oct_handler[] = "oct_handler";
5587 static const char __pyx_k_periodicity[] = "periodicity";
5588 static const char __pyx_k_right_edges[] = "right_edges";
5589 static const char __pyx_k_start_point[] = "start_point";
5590 static const char __pyx_k_DiskSelector[] = "DiskSelector";
5591 static const char __pyx_k_GridSelector[] = "GridSelector";
5592 static const char __pyx_k_RuntimeError[] = "RuntimeError";
5593 static const char __pyx_k_check_period[] = "check_period";
5594 static const char __pyx_k_conditionals[] = "conditionals";
5595 static const char __pyx_k_count_points[] = "count_points";
5596 static const char __pyx_k_data_objects[] = "data_objects";
5597 static const char __pyx_k_domain_width[] = "domain_width";
5598 static const char __pyx_k_index_offset[] = "_index_offset";
5599 static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
5600 static const char __pyx_k_ray_selector[] = "ray_selector";
5601 static const char __pyx_k_right_edge_0[] = "right_edge[0]";
5602 static const char __pyx_k_right_edge_1[] = "right_edge[1]";
5603 static const char __pyx_k_right_edge_2[] = "right_edge[2]";
5604 static const char __pyx_k_select_grids[] = "select_grids";
5605 static const char __pyx_k_stringsource[] = "stringsource";
5606 static const char __pyx_k_OverflowError[] = "OverflowError";
5607 static const char __pyx_k_PointSelector[] = "PointSelector";
5608 static const char __pyx_k_SliceSelector[] = "SliceSelector";
5609 static const char __pyx_k_base_selector[] = "base_selector";
5610 static const char __pyx_k_conditional_s[] = "conditional[%s]";
5611 static const char __pyx_k_disk_selector[] = "disk_selector";
5612 static const char __pyx_k_domain_center[] = "domain_center";
5613 static const char __pyx_k_grid_selector[] = "grid_selector";
5614 static const char __pyx_k_overlap_cells[] = "overlap_cells";
5615 static const char __pyx_k_periodicity_0[] = "periodicity[0]";
5616 static const char __pyx_k_periodicity_1[] = "periodicity[1]";
5617 static const char __pyx_k_periodicity_2[] = "periodicity[2]";
5618 static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer";
5619 static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
5620 static const char __pyx_k_select_points[] = "select_points";
5621 static const char __pyx_k_AlwaysSelector[] = "AlwaysSelector";
5622 static const char __pyx_k_RegionSelector[] = "RegionSelector";
5623 static const char __pyx_k_SelectorObject[] = "SelectorObject";
5624 static const char __pyx_k_SphereSelector[] = "SphereSelector";
5625 static const char __pyx_k_dimensionality[] = "dimensionality";
5626 static const char __pyx_k_domain_width_0[] = "domain_width[0]";
5627 static const char __pyx_k_domain_width_1[] = "domain_width[1]";
5628 static const char __pyx_k_domain_width_2[] = "domain_width[2]";
5629 static const char __pyx_k_halo_particles[] = "halo_particles";
5630 static const char __pyx_k_point_selector[] = "point_selector";
5631 static const char __pyx_k_slice_selector[] = "slice_selector";
5632 static const char __pyx_k_union_selector[] = "union_selector";
5633 static const char __pyx_k_BooleanSelector[] = "BooleanSelector";
5634 static const char __pyx_k_ComposeSelector[] = "ComposeSelector";
5635 static const char __pyx_k_View_MemoryView[] = "View.MemoryView";
5636 static const char __pyx_k_allocate_buffer[] = "allocate_buffer";
5637 static const char __pyx_k_always_selector[] = "always_selector";
5638 static const char __pyx_k_domain_override[] = "_domain_override";
5639 static const char __pyx_k_dtype_is_object[] = "dtype_is_object";
5640 static const char __pyx_k_loose_selection[] = "loose_selection";
5641 static const char __pyx_k_points_in_cells[] = "points_in_cells";
5642 static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError";
5643 static const char __pyx_k_region_selector[] = "region_selector";
5644 static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
5645 static const char __pyx_k_sphere_selector[] = "sphere_selector";
5646 static const char __pyx_k_ActiveDimensions[] = "ActiveDimensions";
5647 static const char __pyx_k_OrthoRaySelector[] = "OrthoRaySelector";
5648 static const char __pyx_k_compose_selector[] = "compose_selector";
5649 static const char __pyx_k_convert_to_units[] = "convert_to_units";
5650 static const char __pyx_k_cutting_selector[] = "cutting_selector";
5651 static const char __pyx_k_domain_left_edge[] = "domain_left_edge";
5652 static const char __pyx_k_particle_indices[] = "particle_indices";
5653 static const char __pyx_k_right_edge_shift[] = "right_edge_shift";
5654 static const char __pyx_k_BooleanORSelector[] = "BooleanORSelector";
5655 static const char __pyx_k_CutRegionSelector[] = "CutRegionSelector";
5656 static const char __pyx_k_EllipsoidSelector[] = "EllipsoidSelector";
5657 static const char __pyx_k_domain_right_edge[] = "domain_right_edge";
5658 static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum";
5659 static const char __pyx_k_BooleanANDSelector[] = "BooleanANDSelector";
5660 static const char __pyx_k_BooleanNEGSelector[] = "BooleanNEGSelector";
5661 static const char __pyx_k_BooleanNOTSelector[] = "BooleanNOTSelector";
5662 static const char __pyx_k_BooleanXORSelector[] = "BooleanXORSelector";
5663 static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
5664 static const char __pyx_k_ellipsoid_selector[] = "ellipsoid_selector";
5665 static const char __pyx_k_get_state_attnames[] = "_get_state_attnames";
5666 static const char __pyx_k_ortho_ray_selector[] = "ortho_ray_selector";
5667 static const char __pyx_k_strided_and_direct[] = "<strided and direct>";
5668 static const char __pyx_k_NotImplementedError[] = "NotImplementedError";
5669 static const char __pyx_k_connectivity_coords[] = "connectivity_coords";
5670 static const char __pyx_k_connectivity_length[] = "_connectivity_length";
5671 static const char __pyx_k_cut_region_selector[] = "cut_region_selector";
5672 static const char __pyx_k_CuttingPlaneSelector[] = "CuttingPlaneSelector";
5673 static const char __pyx_k_OctreeSubsetSelector[] = "OctreeSubsetSelector";
5674 static const char __pyx_k_connectivity_indices[] = "connectivity_indices";
5675 static const char __pyx_k_strided_and_indirect[] = "<strided and indirect>";
5676 static const char __pyx_k_HaloParticlesSelector[] = "HaloParticlesSelector";
5677 static const char __pyx_k_contiguous_and_direct[] = "<contiguous and direct>";
5678 static const char __pyx_k_init___locals_genexpr[] = "__init__.<locals>.genexpr";
5679 static const char __pyx_k_intersection_selector[] = "intersection_selector";
5680 static const char __pyx_k_ChainedBooleanSelector[] = "ChainedBooleanSelector";
5681 static const char __pyx_k_DataCollectionSelector[] = "DataCollectionSelector";
5682 static const char __pyx_k_MemoryView_of_r_object[] = "<MemoryView of %r object>";
5683 static const char __pyx_k_octree_subset_selector[] = "octree_subset_selector";
5684 static const char __pyx_k_reduced_dimensionality[] = "reduced_dimensionality";
5685 static const char __pyx_k_MemoryView_of_r_at_0x_x[] = "<MemoryView of %r at 0x%x>";
5686 static const char __pyx_k_contiguous_and_indirect[] = "<contiguous and indirect>";
5687 static const char __pyx_k_convert_mask_to_indices[] = "convert_mask_to_indices";
5688 static const char __pyx_k_halo_particles_selector[] = "halo_particles_selector";
5689 static const char __pyx_k_Cannot_index_with_type_s[] = "Cannot index with type '%s'";
5690 static const char __pyx_k_ChainedBooleanORSelector[] = "ChainedBooleanORSelector";
5691 static const char __pyx_k_data_collection_selector[] = "data_collection_selector";
5692 static const char __pyx_k_ChainedBooleanANDSelector[] = "ChainedBooleanANDSelector";
5693 static const char __pyx_k_Invalid_shape_in_axis_d_d[] = "Invalid shape in axis %d: %d.";
5694 static const char __pyx_k_Geometry_selection_routines[] = "\nGeometry selection routines.\n\n\n\n\n";
5695 static const char __pyx_k_IndexedOctreeSubsetSelector[] = "IndexedOctreeSubsetSelector";
5696 static const char __pyx_k_No_matching_signature_found[] = "No matching signature found";
5697 static const char __pyx_k_SelectorObject_count_points[] = "SelectorObject.count_points";
5698 static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array";
5699 static const char __pyx_k_ndarray_is_not_C_contiguous[] = "ndarray is not C contiguous";
5700 static const char __pyx_k_SelectorObject_select_points[] = "SelectorObject.select_points";
5701 static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data.";
5702 static const char __pyx_k_indexed_octree_subset_selector[] = "indexed_octree_subset_selector";
5703 static const char __pyx_k_strided_and_direct_or_indirect[] = "<strided and direct or indirect>";
5704 static const char __pyx_k_yt_geometry_selection_routines[] = "yt.geometry.selection_routines";
5705 static const char __pyx_k_numpy_core_multiarray_failed_to[] = "numpy.core.multiarray failed to import";
5706 static const char __pyx_k_unknown_dtype_code_in_numpy_pxd[] = "unknown dtype code in numpy.pxd (%d)";
5707 static const char __pyx_k_yt_geometry__selection_routines[] = "yt/geometry/_selection_routines/selector_object.pxi";
5708 static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides";
5709 static const char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory.";
5710 static const char __pyx_k_Cannot_assign_to_read_only_memor[] = "Cannot assign to read-only memoryview";
5711 static const char __pyx_k_Cannot_create_writable_memory_vi[] = "Cannot create writable memory view from read-only memoryview";
5712 static const char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array";
5713 static const char __pyx_k_Expected_at_least_d_argument_s_g[] = "Expected at least %d argument%s, got %d";
5714 static const char __pyx_k_Format_string_allocated_too_shor[] = "Format string allocated too short, see comment in numpy.pxd";
5715 static const char __pyx_k_Function_call_with_ambiguous_arg[] = "Function call with ambiguous argument types";
5716 static const char __pyx_k_Incompatible_checksums_s_vs_0xb0[] = "Incompatible checksums (%s vs 0xb068931 = (name))";
5717 static const char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported";
5718 static const char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got %s";
5719 static const char __pyx_k_Non_native_byte_order_not_suppor[] = "Non-native byte order not supported";
5720 static const char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis %d)";
5721 static const char __pyx_k_Region_right_edge_s_left_edge_wi[] = "Region right edge[%s] < left edge: width = %s";
5722 static const char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object";
5723 static const char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension %d (got %d and %d)";
5724 static const char __pyx_k_ndarray_is_not_Fortran_contiguou[] = "ndarray is not Fortran contiguous";
5725 static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__";
5726 static const char __pyx_k_numpy_core_umath_failed_to_impor[] = "numpy.core.umath failed to import";
5727 static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides.";
5728 static const char __pyx_k_yt_attempted_to_read_outside_the[] = "yt attempted to read outside the boundaries of a non-periodic domain along dimension %s.\nRegion left edge = %s, Region right edge = %s\nDataset left edge = %s, Dataset right edge = %s\n\nThis commonly happens when trying to compute ghost cells up to the domain boundary. Two possible solutions are to select a smaller region that does not border domain edge (see https://yt-project.org/docs/analyzing/objects.html?highlight=region)\nor override the periodicity with\nds.force_periodicity()";
5729 static const char __pyx_k_yt_geometry_selection_routines_p[] = "yt/geometry/selection_routines.pyx";
5730 static const char __pyx_k_Format_string_allocated_too_shor_2[] = "Format string allocated too short.";
5731 static PyObject *__pyx_n_s_A;
5732 static PyObject *__pyx_n_s_ASCII;
5733 static PyObject *__pyx_n_s_ActiveDimensions;
5734 static PyObject *__pyx_n_s_AlwaysSelector;
5735 static PyObject *__pyx_n_s_B;
5736 static PyObject *__pyx_n_s_BooleanANDSelector;
5737 static PyObject *__pyx_n_s_BooleanNEGSelector;
5738 static PyObject *__pyx_n_s_BooleanNOTSelector;
5739 static PyObject *__pyx_n_s_BooleanORSelector;
5740 static PyObject *__pyx_n_s_BooleanSelector;
5741 static PyObject *__pyx_n_s_BooleanXORSelector;
5742 static PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri;
5743 static PyObject *__pyx_n_s_C;
5744 static PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is;
5745 static PyObject *__pyx_kp_s_Cannot_assign_to_read_only_memor;
5746 static PyObject *__pyx_kp_s_Cannot_create_writable_memory_vi;
5747 static PyObject *__pyx_kp_s_Cannot_index_with_type_s;
5748 static PyObject *__pyx_n_s_ChainedBooleanANDSelector;
5749 static PyObject *__pyx_n_s_ChainedBooleanORSelector;
5750 static PyObject *__pyx_n_s_ChainedBooleanSelector;
5751 static PyObject *__pyx_n_s_ComposeSelector;
5752 static PyObject *__pyx_n_s_CutRegionSelector;
5753 static PyObject *__pyx_n_s_CuttingPlaneSelector;
5754 static PyObject *__pyx_n_s_DataCollectionSelector;
5755 static PyObject *__pyx_n_s_DiskSelector;
5756 static PyObject *__pyx_n_s_Ellipsis;
5757 static PyObject *__pyx_n_s_EllipsoidSelector;
5758 static PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr;
5759 static PyObject *__pyx_kp_s_Expected_at_least_d_argument_s_g;
5760 static PyObject *__pyx_kp_u_Format_string_allocated_too_shor;
5761 static PyObject *__pyx_kp_u_Format_string_allocated_too_shor_2;
5762 static PyObject *__pyx_kp_s_Function_call_with_ambiguous_arg;
5763 static PyObject *__pyx_n_s_GridSelector;
5764 static PyObject *__pyx_n_s_HaloParticlesSelector;
5765 static PyObject *__pyx_n_s_ImportError;
5766 static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xb0;
5767 static PyObject *__pyx_n_s_IndexError;
5768 static PyObject *__pyx_n_s_IndexedOctreeSubsetSelector;
5769 static PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte;
5770 static PyObject *__pyx_kp_s_Invalid_mode_expected_c_or_fortr;
5771 static PyObject *__pyx_kp_s_Invalid_shape_in_axis_d_d;
5772 static PyObject *__pyx_n_s_LeftEdge;
5773 static PyObject *__pyx_n_s_Level;
5774 static PyObject *__pyx_n_s_MemoryError;
5775 static PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x;
5776 static PyObject *__pyx_kp_s_MemoryView_of_r_object;
5777 static PyObject *__pyx_kp_s_No_matching_signature_found;
5778 static PyObject *__pyx_kp_u_Non_native_byte_order_not_suppor;
5779 static PyObject *__pyx_n_s_NotImplementedError;
5780 static PyObject *__pyx_n_b_O;
5781 static PyObject *__pyx_n_s_OctreeSubsetSelector;
5782 static PyObject *__pyx_n_s_OrthoRaySelector;
5783 static PyObject *__pyx_kp_s_Out_of_bounds_on_buffer_access_a;
5784 static PyObject *__pyx_n_s_OverflowError;
5785 static PyObject *__pyx_n_s_PickleError;
5786 static PyObject *__pyx_n_s_PointSelector;
5787 static PyObject *__pyx_n_s_RaySelector;
5788 static PyObject *__pyx_n_s_RegionSelector;
5789 static PyObject *__pyx_kp_s_Region_right_edge_s_left_edge_wi;
5790 static PyObject *__pyx_n_s_RightEdge;
5791 static PyObject *__pyx_n_s_RuntimeError;
5792 static PyObject *__pyx_n_s_SelectorObject;
5793 static PyObject *__pyx_n_s_SelectorObject_count_points;
5794 static PyObject *__pyx_n_s_SelectorObject_select_points;
5795 static PyObject *__pyx_n_s_SliceSelector;
5796 static PyObject *__pyx_n_s_SphereSelector;
5797 static PyObject *__pyx_n_s_T;
5798 static PyObject *__pyx_n_s_TypeError;
5799 static PyObject *__pyx_kp_s_Unable_to_convert_item_to_object;
5800 static PyObject *__pyx_n_s_ValueError;
5801 static PyObject *__pyx_n_s_View_MemoryView;
5802 static PyObject *__pyx_kp_s__2;
5803 static PyObject *__pyx_kp_s__3;
5804 static PyObject *__pyx_n_s_all;
5805 static PyObject *__pyx_n_s_allocate_buffer;
5806 static PyObject *__pyx_n_s_always;
5807 static PyObject *__pyx_n_s_always_selector;
5808 static PyObject *__pyx_n_s_and;
5809 static PyObject *__pyx_n_s_args;
5810 static PyObject *__pyx_n_s_array;
5811 static PyObject *__pyx_n_s_ascii;
5812 static PyObject *__pyx_n_s_astype;
5813 static PyObject *__pyx_n_s_atleast_1d;
5814 static PyObject *__pyx_n_s_ax;
5815 static PyObject *__pyx_n_s_axis;
5816 static PyObject *__pyx_n_s_axis_name;
5817 static PyObject *__pyx_n_s_ay;
5818 static PyObject *__pyx_n_s_base;
5819 static PyObject *__pyx_n_s_base_hash;
5820 static PyObject *__pyx_n_s_base_selector;
5821 static PyObject *__pyx_n_s_base_source;
5822 static PyObject *__pyx_n_s_bool;
5823 static PyObject *__pyx_n_s_c;
5824 static PyObject *__pyx_n_u_c;
5825 static PyObject *__pyx_n_s_center;
5826 static PyObject *__pyx_kp_s_center_0;
5827 static PyObject *__pyx_kp_s_center_1;
5828 static PyObject *__pyx_kp_s_center_2;
5829 static PyObject *__pyx_n_s_chained_and;
5830 static PyObject *__pyx_n_s_chained_or;
5831 static PyObject *__pyx_n_s_check_box;
5832 static PyObject *__pyx_n_s_check_period;
5833 static PyObject *__pyx_n_s_child_mask;
5834 static PyObject *__pyx_n_s_class;
5835 static PyObject *__pyx_n_s_cline_in_traceback;
5836 static PyObject *__pyx_n_s_close;
5837 static PyObject *__pyx_n_s_code_length;
5838 static PyObject *__pyx_n_s_compose_selector;
5839 static PyObject *__pyx_kp_s_conditional_s;
5840 static PyObject *__pyx_n_s_conditionals;
5841 static PyObject *__pyx_n_s_connectivity_coords;
5842 static PyObject *__pyx_n_s_connectivity_indices;
5843 static PyObject *__pyx_n_s_connectivity_length;
5844 static PyObject *__pyx_kp_s_contiguous_and_direct;
5845 static PyObject *__pyx_kp_s_contiguous_and_indirect;
5846 static PyObject *__pyx_n_s_convert_mask_to_indices;
5847 static PyObject *__pyx_n_s_convert_to_units;
5848 static PyObject *__pyx_n_s_coord;
5849 static PyObject *__pyx_n_s_coordinates;
5850 static PyObject *__pyx_n_s_count;
5851 static PyObject *__pyx_n_s_count_points;
5852 static PyObject *__pyx_n_s_cpos;
5853 static PyObject *__pyx_n_s_cut_region_selector;
5854 static PyObject *__pyx_n_s_cutting_selector;
5855 static PyObject *__pyx_n_s_cx;
5856 static PyObject *__pyx_n_s_cy;
5857 static PyObject *__pyx_n_s_cz;
5858 static PyObject *__pyx_n_s_d;
5859 static PyObject *__pyx_n_s_d_2;
5860 static PyObject *__pyx_n_s_data_collection_selector;
5861 static PyObject *__pyx_n_s_data_objects;
5862 static PyObject *__pyx_n_s_dds;
5863 static PyObject *__pyx_n_s_defaults;
5864 static PyObject *__pyx_n_s_dict;
5865 static PyObject *__pyx_n_s_dimensionality;
5866 static PyObject *__pyx_n_s_disk_selector;
5867 static PyObject *__pyx_n_s_dobj;
5868 static PyObject *__pyx_n_s_dobj1;
5869 static PyObject *__pyx_n_s_dobj2;
5870 static PyObject *__pyx_n_s_domain_center;
5871 static PyObject *__pyx_n_s_domain_id;
5872 static PyObject *__pyx_n_s_domain_left_edge;
5873 static PyObject *__pyx_n_s_domain_override;
5874 static PyObject *__pyx_n_s_domain_right_edge;
5875 static PyObject *__pyx_n_s_domain_width;
5876 static PyObject *__pyx_kp_s_domain_width_0;
5877 static PyObject *__pyx_kp_s_domain_width_1;
5878 static PyObject *__pyx_kp_s_domain_width_2;
5879 static PyObject *__pyx_n_s_double;
5880 static PyObject *__pyx_n_s_ds;
5881 static PyObject *__pyx_n_s_dtype;
5882 static PyObject *__pyx_n_s_dtype_is_object;
5883 static PyObject *__pyx_n_s_dx;
5884 static PyObject *__pyx_n_s_dy;
5885 static PyObject *__pyx_n_s_dz;
5886 static PyObject *__pyx_n_s_e0;
5887 static PyObject *__pyx_n_s_e1;
5888 static PyObject *__pyx_n_s_e2;
5889 static PyObject *__pyx_n_s_ellipsoid_selector;
5890 static PyObject *__pyx_n_s_empty;
5891 static PyObject *__pyx_n_s_encode;
5892 static PyObject *__pyx_n_s_end;
5893 static PyObject *__pyx_n_s_end_point;
5894 static PyObject *__pyx_n_s_enumerate;
5895 static PyObject *__pyx_n_s_eps;
5896 static PyObject *__pyx_n_s_error;
5897 static PyObject *__pyx_n_s_extend;
5898 static PyObject *__pyx_n_s_file;
5899 static PyObject *__pyx_n_s_filter_bbox;
5900 static PyObject *__pyx_n_s_finfo;
5901 static PyObject *__pyx_n_s_flags;
5902 static PyObject *__pyx_n_s_float;
5903 static PyObject *__pyx_n_s_float32;
5904 static PyObject *__pyx_n_s_float64;
5905 static PyObject *__pyx_n_s_fmod;
5906 static PyObject *__pyx_n_s_format;
5907 static PyObject *__pyx_n_s_fortran;
5908 static PyObject *__pyx_n_u_fortran;
5909 static PyObject *__pyx_n_s_genexpr;
5910 static PyObject *__pyx_n_s_get_state_attnames;
5911 static PyObject *__pyx_n_s_getstate;
5912 static PyObject *__pyx_kp_s_got_differing_extents_in_dimensi;
5913 static PyObject *__pyx_n_s_grid_selector;
5914 static PyObject *__pyx_n_s_halo_particles;
5915 static PyObject *__pyx_n_s_halo_particles_selector;
5916 static PyObject *__pyx_n_s_hash_vals;
5917 static PyObject *__pyx_n_s_height;
5918 static PyObject *__pyx_n_s_i;
5919 static PyObject *__pyx_n_s_id;
5920 static PyObject *__pyx_n_s_id_offset;
5921 static PyObject *__pyx_n_s_import;
5922 static PyObject *__pyx_n_s_index;
5923 static PyObject *__pyx_n_s_index_offset;
5924 static PyObject *__pyx_n_s_indexed_octree_subset_selector;
5925 static PyObject *__pyx_n_s_indices;
5926 static PyObject *__pyx_n_s_inf;
5927 static PyObject *__pyx_n_s_init___locals_genexpr;
5928 static PyObject *__pyx_n_s_int64;
5929 static PyObject *__pyx_n_s_intersection_selector;
5930 static PyObject *__pyx_n_s_is_all_data;
5931 static PyObject *__pyx_n_s_itemsize;
5932 static PyObject *__pyx_kp_s_itemsize_0_for_cython_array;
5933 static PyObject *__pyx_n_s_j;
5934 static PyObject *__pyx_n_s_k;
5935 static PyObject *__pyx_n_s_kind;
5936 static PyObject *__pyx_n_s_kwargs;
5937 static PyObject *__pyx_n_s_left_edge;
5938 static PyObject *__pyx_kp_s_left_edge_0;
5939 static PyObject *__pyx_kp_s_left_edge_1;
5940 static PyObject *__pyx_kp_s_left_edge_2;
5941 static PyObject *__pyx_n_s_left_edges;
5942 static PyObject *__pyx_n_s_levels;
5943 static PyObject *__pyx_n_s_logical_or;
5944 static PyObject *__pyx_n_s_loose_selection;
5945 static PyObject *__pyx_n_s_mag;
5946 static PyObject *__pyx_kp_s_mag_0;
5947 static PyObject *__pyx_kp_s_mag_1;
5948 static PyObject *__pyx_kp_s_mag_2;
5949 static PyObject *__pyx_n_s_main;
5950 static PyObject *__pyx_n_s_mask;
5951 static PyObject *__pyx_n_s_mask_fill;
5952 static PyObject *__pyx_n_s_max_ind;
5953 static PyObject *__pyx_n_s_max_level;
5954 static PyObject *__pyx_n_s_memview;
5955 static PyObject *__pyx_n_s_mesh;
5956 static PyObject *__pyx_n_s_min_ind;
5957 static PyObject *__pyx_n_s_min_level;
5958 static PyObject *__pyx_n_s_mode;
5959 static PyObject *__pyx_n_s_n_c;
5960 static PyObject *__pyx_n_s_n_p;
5961 static PyObject *__pyx_n_s_name;
5962 static PyObject *__pyx_n_s_name_2;
5963 static PyObject *__pyx_kp_u_ndarray_is_not_C_contiguous;
5964 static PyObject *__pyx_kp_u_ndarray_is_not_Fortran_contiguou;
5965 static PyObject *__pyx_n_s_ndim;
5966 static PyObject *__pyx_n_s_neg;
5967 static PyObject *__pyx_n_s_new;
5968 static PyObject *__pyx_kp_s_no_default___reduce___due_to_non;
5969 static PyObject *__pyx_n_s_norm_vec;
5970 static PyObject *__pyx_kp_s_norm_vec_0;
5971 static PyObject *__pyx_kp_s_norm_vec_1;
5972 static PyObject *__pyx_kp_s_norm_vec_2;
5973 static PyObject *__pyx_n_s_norm_vec_3;
5974 static PyObject *__pyx_n_s_not;
5975 static PyObject *__pyx_n_s_np;
5976 static PyObject *__pyx_n_s_numpy;
5977 static PyObject *__pyx_kp_s_numpy_core_multiarray_failed_to;
5978 static PyObject *__pyx_kp_s_numpy_core_umath_failed_to_impor;
5979 static PyObject *__pyx_n_s_nz;
5980 static PyObject *__pyx_n_s_obj;
5981 static PyObject *__pyx_n_s_obj_ids;
5982 static PyObject *__pyx_n_s_object;
5983 static PyObject *__pyx_n_s_oct_handler;
5984 static PyObject *__pyx_n_s_octree;
5985 static PyObject *__pyx_n_s_octree_subset_selector;
5986 static PyObject *__pyx_n_s_offset;
5987 static PyObject *__pyx_n_s_ones;
5988 static PyObject *__pyx_n_s_or;
5989 static PyObject *__pyx_n_s_ortho_ray_selector;
5990 static PyObject *__pyx_n_s_out;
5991 static PyObject *__pyx_n_s_overlap_cells;
5992 static PyObject *__pyx_n_s_p;
5993 static PyObject *__pyx_n_s_p1;
5994 static PyObject *__pyx_kp_s_p1_0;
5995 static PyObject *__pyx_kp_s_p1_1;
5996 static PyObject *__pyx_kp_s_p1_2;
5997 static PyObject *__pyx_n_s_p2;
5998 static PyObject *__pyx_kp_s_p2_0;
5999 static PyObject *__pyx_kp_s_p2_1;
6000 static PyObject *__pyx_kp_s_p2_2;
6001 static PyObject *__pyx_kp_s_p_0;
6002 static PyObject *__pyx_kp_s_p_1;
6003 static PyObject *__pyx_kp_s_p_2;
6004 static PyObject *__pyx_n_s_pack;
6005 static PyObject *__pyx_n_s_particle_indices;
6006 static PyObject *__pyx_n_s_periodicity;
6007 static PyObject *__pyx_kp_s_periodicity_0;
6008 static PyObject *__pyx_kp_s_periodicity_1;
6009 static PyObject *__pyx_kp_s_periodicity_2;
6010 static PyObject *__pyx_n_s_pickle;
6011 static PyObject *__pyx_n_s_point_selector;
6012 static PyObject *__pyx_n_s_points_in_cells;
6013 static PyObject *__pyx_n_s_pos;
6014 static PyObject *__pyx_n_s_print;
6015 static PyObject *__pyx_n_s_px;
6016 static PyObject *__pyx_n_s_px_ax;
6017 static PyObject *__pyx_n_s_py;
6018 static PyObject *__pyx_n_s_py_ax;
6019 static PyObject *__pyx_n_s_pyx_PickleError;
6020 static PyObject *__pyx_n_s_pyx_checksum;
6021 static PyObject *__pyx_n_s_pyx_getbuffer;
6022 static PyObject *__pyx_n_s_pyx_result;
6023 static PyObject *__pyx_n_s_pyx_state;
6024 static PyObject *__pyx_n_s_pyx_type;
6025 static PyObject *__pyx_n_s_pyx_unpickle_Enum;
6026 static PyObject *__pyx_n_s_pyx_vtable;
6027 static PyObject *__pyx_n_s_pz;
6028 static PyObject *__pyx_n_s_radii;
6029 static PyObject *__pyx_n_s_radii_2;
6030 static PyObject *__pyx_n_s_radius;
6031 static PyObject *__pyx_n_s_radius2;
6032 static PyObject *__pyx_n_s_range;
6033 static PyObject *__pyx_n_s_ray_selector;
6034 static PyObject *__pyx_n_s_reduce;
6035 static PyObject *__pyx_n_s_reduce_cython;
6036 static PyObject *__pyx_n_s_reduce_ex;
6037 static PyObject *__pyx_n_s_reduced_dimensionality;
6038 static PyObject *__pyx_n_s_region_selector;
6039 static PyObject *__pyx_n_s_right_edge;
6040 static PyObject *__pyx_kp_s_right_edge_0;
6041 static PyObject *__pyx_kp_s_right_edge_1;
6042 static PyObject *__pyx_kp_s_right_edge_2;
6043 static PyObject *__pyx_n_s_right_edge_shift;
6044 static PyObject *__pyx_n_s_right_edges;
6045 static PyObject *__pyx_n_s_s;
6046 static PyObject *__pyx_n_s_select_grids;
6047 static PyObject *__pyx_n_s_select_points;
6048 static PyObject *__pyx_n_s_selector;
6049 static PyObject *__pyx_n_s_selector1;
6050 static PyObject *__pyx_n_s_selector2;
6051 static PyObject *__pyx_n_s_self;
6052 static PyObject *__pyx_n_s_send;
6053 static PyObject *__pyx_n_s_set_bbox;
6054 static PyObject *__pyx_n_s_setstate;
6055 static PyObject *__pyx_n_s_setstate_cython;
6056 static PyObject *__pyx_n_s_shape;
6057 static PyObject *__pyx_n_s_size;
6058 static PyObject *__pyx_n_s_slice_selector;
6059 static PyObject *__pyx_n_s_sphere_selector;
6060 static PyObject *__pyx_n_s_split;
6061 static PyObject *__pyx_n_s_start;
6062 static PyObject *__pyx_n_s_start_point;
6063 static PyObject *__pyx_n_s_step;
6064 static PyObject *__pyx_n_s_stop;
6065 static PyObject *__pyx_kp_s_strided_and_direct;
6066 static PyObject *__pyx_kp_s_strided_and_direct_or_indirect;
6067 static PyObject *__pyx_kp_s_strided_and_indirect;
6068 static PyObject *__pyx_kp_s_stringsource;
6069 static PyObject *__pyx_n_s_strip;
6070 static PyObject *__pyx_n_s_struct;
6071 static PyObject *__pyx_n_s_super;
6072 static PyObject *__pyx_n_s_test;
6073 static PyObject *__pyx_n_s_throw;
6074 static PyObject *__pyx_n_s_to_ndarray;
6075 static PyObject *__pyx_n_s_tobytes;
6076 static PyObject *__pyx_n_s_transpose;
6077 static PyObject *__pyx_n_s_uint8;
6078 static PyObject *__pyx_kp_s_unable_to_allocate_array_data;
6079 static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str;
6080 static PyObject *__pyx_n_s_union_selector;
6081 static PyObject *__pyx_n_s_units;
6082 static PyObject *__pyx_kp_u_unknown_dtype_code_in_numpy_pxd;
6083 static PyObject *__pyx_n_s_unpack;
6084 static PyObject *__pyx_n_s_update;
6085 static PyObject *__pyx_n_s_vals;
6086 static PyObject *__pyx_n_s_vec;
6087 static PyObject *__pyx_kp_s_vec_0;
6088 static PyObject *__pyx_kp_s_vec_0_0;
6089 static PyObject *__pyx_kp_s_vec_0_1;
6090 static PyObject *__pyx_kp_s_vec_0_2;
6091 static PyObject *__pyx_kp_s_vec_1;
6092 static PyObject *__pyx_kp_s_vec_1_0;
6093 static PyObject *__pyx_kp_s_vec_1_1;
6094 static PyObject *__pyx_kp_s_vec_1_2;
6095 static PyObject *__pyx_kp_s_vec_2;
6096 static PyObject *__pyx_kp_s_vec_2_0;
6097 static PyObject *__pyx_kp_s_vec_2_1;
6098 static PyObject *__pyx_kp_s_vec_2_2;
6099 static PyObject *__pyx_n_s_view;
6100 static PyObject *__pyx_n_s_x;
6101 static PyObject *__pyx_n_s_xor;
6102 static PyObject *__pyx_n_s_y;
6103 static PyObject *__pyx_kp_s_yt_attempted_to_read_outside_the;
6104 static PyObject *__pyx_kp_s_yt_geometry__selection_routines;
6105 static PyObject *__pyx_n_s_yt_geometry_selection_routines;
6106 static PyObject *__pyx_kp_s_yt_geometry_selection_routines_p;
6107 static PyObject *__pyx_n_s_z;
6108 static PyObject *__pyx_n_s_zeros;
6109 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_convert_mask_to_indices(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mask, int __pyx_v_count, int __pyx_v_transpose); /* proto */
6110 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_2mask_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_out, __pyx_t_5numpy_int64_t __pyx_v_offset, PyArrayObject *__pyx_v_mask, PyArrayObject *__pyx_v_vals); /* proto */
6111 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_4points_in_cells(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_cx, __Pyx_memviewslice __pyx_v_cy, __Pyx_memviewslice __pyx_v_cz, __Pyx_memviewslice __pyx_v_dx, __Pyx_memviewslice __pyx_v_dy, __Pyx_memviewslice __pyx_v_dz, __Pyx_memviewslice __pyx_v_px, __Pyx_memviewslice __pyx_v_py, __Pyx_memviewslice __pyx_v_pz); /* proto */
6112 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject___cinit__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_dobj, CYTHON_UNUSED PyObject *__pyx_v_args); /* proto */
6113 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_2get_periodicity(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6114 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_4select_grids(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyArrayObject *__pyx_v_left_edges, PyArrayObject *__pyx_v_right_edges, PyArrayObject *__pyx_v_levels); /* proto */
6115 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_6count_octs(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *__pyx_v_octree, int __pyx_v_domain_id); /* proto */
6116 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_8count_oct_cells(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *__pyx_v_octree, int __pyx_v_domain_id); /* proto */
6117 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_10fill_mesh_mask(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_mesh); /* proto */
6118 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_12fill_mesh_cell_mask(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_mesh); /* proto */
6119 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_14fill_mask(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_gobj); /* proto */
6120 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_16count_points(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults); /* proto */
6121 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_34count_points(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyArrayObject *__pyx_v_x, PyArrayObject *__pyx_v_y, PyArrayObject *__pyx_v_z, PyObject *__pyx_v_radii); /* proto */
6122 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_36count_points(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyArrayObject *__pyx_v_x, PyArrayObject *__pyx_v_y, PyArrayObject *__pyx_v_z, PyObject *__pyx_v_radii); /* proto */
6123 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_18select_points(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults); /* proto */
6124 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_40select_points(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyArrayObject *__pyx_v_x, PyArrayObject *__pyx_v_y, PyArrayObject *__pyx_v_z, PyObject *__pyx_v_radii); /* proto */
6125 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_42select_points(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyArrayObject *__pyx_v_x, PyArrayObject *__pyx_v_y, PyArrayObject *__pyx_v_z, PyObject *__pyx_v_radii); /* proto */
6126 static Py_hash_t __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_20__hash__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6127 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_22_hash_vals(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6128 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_24_base_hash(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6129 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_26_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6130 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_28__getstate__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6131 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_30__getnewargs__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6132 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_32__setstate__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_state_tuple); /* proto */
6133 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_9min_level___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6134 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_9min_level_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6135 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_9max_level___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6136 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_9max_level_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6137 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_13overlap_cells___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6138 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_13overlap_cells_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6139 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_12domain_width___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6140 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_12domain_width_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6141 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_13domain_center___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6142 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_13domain_center_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6143 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_11periodicity___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6144 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_11periodicity_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6145 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_46__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self); /* proto */
6146 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_48__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6147 static int __pyx_pf_2yt_8geometry_18selection_routines_13PointSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6148 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self); /* proto */
6149 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_4_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self); /* proto */
6150 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_1p___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self); /* proto */
6151 static int __pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_1p_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6152 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self); /* proto */
6153 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6154 static int __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6155 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_2set_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_center); /* proto */
6156 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_4_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self); /* proto */
6157 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self); /* proto */
6158 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_8__setstate__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_hashes); /* proto */
6159 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6radius___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self); /* proto */
6160 static int __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6radius_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6161 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_7radius2___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self); /* proto */
6162 static int __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_7radius2_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6163 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6center___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self); /* proto */
6164 static int __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6center_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6165 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_9check_box___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self); /* proto */
6166 static int __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_9check_box_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6167 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self); /* proto */
6168 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6169 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6170 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self); /* proto */
6171 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_4_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self); /* proto */
6172 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_9left_edge___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self); /* proto */
6173 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_9left_edge_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6174 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_10right_edge___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self); /* proto */
6175 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_10right_edge_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6176 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_16right_edge_shift___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self); /* proto */
6177 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_16right_edge_shift_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6178 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_11is_all_data___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self); /* proto */
6179 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_11is_all_data_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6180 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_15loose_selection___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self); /* proto */
6181 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_15loose_selection_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6182 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_12check_period___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self); /* proto */
6183 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_12check_period_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6184 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self); /* proto */
6185 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6186 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector_8__init___genexpr(PyObject *__pyx_self); /* proto */
6187 static int __pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6188 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self); /* proto */
6189 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self); /* proto */
6190 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6191 static int __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6192 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self); /* proto */
6193 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_4_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self); /* proto */
6194 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_8norm_vec___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self); /* proto */
6195 static int __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_8norm_vec_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6196 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6center___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self); /* proto */
6197 static int __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6center_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6198 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6radius___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self); /* proto */
6199 static int __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6radius_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6200 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_7radius2___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self); /* proto */
6201 static int __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_7radius2_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6202 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6height___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self); /* proto */
6203 static int __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6height_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6204 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self); /* proto */
6205 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6206 static int __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6207 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self); /* proto */
6208 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_4_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self); /* proto */
6209 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8norm_vec___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self); /* proto */
6210 static int __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8norm_vec_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6211 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1d___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self); /* proto */
6212 static int __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1d_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6213 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self); /* proto */
6214 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6215 static int __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6216 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2fill_mask(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_gobj); /* proto */
6217 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_4_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self); /* proto */
6218 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_6_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self); /* proto */
6219 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_4axis___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self); /* proto */
6220 static int __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_4axis_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6221 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_5coord___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self); /* proto */
6222 static int __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_5coord_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6223 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2ax___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self); /* proto */
6224 static int __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2ax_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6225 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2ay___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self); /* proto */
6226 static int __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2ay_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6227 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_22reduced_dimensionality___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self); /* proto */
6228 static int __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_22reduced_dimensionality_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6229 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self); /* proto */
6230 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6231 static int __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6232 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2fill_mask(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_gobj); /* proto */
6233 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_4_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self); /* proto */
6234 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_6_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self); /* proto */
6235 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_5px_ax___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self); /* proto */
6236 static int __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_5px_ax_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6237 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_5py_ax___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self); /* proto */
6238 static int __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_5py_ax_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6239 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2px___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self); /* proto */
6240 static int __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2px_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6241 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2py___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self); /* proto */
6242 static int __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2py_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6243 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_4axis___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self); /* proto */
6244 static int __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_4axis_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6245 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self); /* proto */
6246 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6247 static int __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6248 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2fill_mask(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_gobj); /* proto */
6249 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_4get_dt(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_gobj); /* proto */
6250 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_6get_dt_mesh(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_mesh, PyObject *__pyx_v_nz, int __pyx_v_offset); /* proto */
6251 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_8_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self); /* proto */
6252 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_10_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self); /* proto */
6253 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2p1___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self); /* proto */
6254 static int __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2p1_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6255 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2p2___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self); /* proto */
6256 static int __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2p2_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6257 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_3vec___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self); /* proto */
6258 static int __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_3vec_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6259 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_12__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self); /* proto */
6260 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_14__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6261 static int __pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6262 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_2select_grids(struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_v_self, PyArrayObject *__pyx_v_left_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_levels); /* proto */
6263 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_4fill_mask(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_v_self, PyObject *__pyx_v_gobj); /* proto */
6264 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_6_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_v_self); /* proto */
6265 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_v_self); /* proto */
6266 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6267 static int __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6268 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self); /* proto */
6269 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_4_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self); /* proto */
6270 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_3vec___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self); /* proto */
6271 static int __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_3vec_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6272 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_3mag___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self); /* proto */
6273 static int __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_3mag_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6274 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_6center___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self); /* proto */
6275 static int __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_6center_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6276 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self); /* proto */
6277 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6278 static int __pyx_pf_2yt_8geometry_18selection_routines_12GridSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6279 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_2select_grids(struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self, PyArrayObject *__pyx_v_left_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_levels); /* proto */
6280 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_4fill_mask(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self, PyObject *__pyx_v_gobj); /* proto */
6281 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_6_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self); /* proto */
6282 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self); /* proto */
6283 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6284 static int __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6285 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_2select_grids(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED PyArrayObject *__pyx_v_left_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_levels); /* proto */
6286 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_4_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self); /* proto */
6287 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self); /* proto */
6288 static int __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6289 static int __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_4__del__(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self); /* proto */
6290 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9domain_id___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self); /* proto */
6291 static int __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9domain_id_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6292 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self); /* proto */
6293 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6294 static int __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6295 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_2select_grids(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED PyArrayObject *__pyx_v_left_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_levels); /* proto */
6296 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_4_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self); /* proto */
6297 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self); /* proto */
6298 static int __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6299 static int __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_4__del__(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self); /* proto */
6300 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self); /* proto */
6301 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6302 static int __pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dobj); /* proto */
6303 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector_2select_grids(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, PyArrayObject *__pyx_v_left_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_levels); /* proto */
6304 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector_4_hash_vals(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self); /* proto */
6305 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self); /* proto */
6306 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6307 static int __pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dobj, PyObject *__pyx_v_selector1, PyObject *__pyx_v_selector2); /* proto */
6308 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector_2select_grids(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, PyArrayObject *__pyx_v_left_edges, PyArrayObject *__pyx_v_right_edges, PyArrayObject *__pyx_v_levels); /* proto */
6309 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector_4_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self); /* proto */
6310 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self); /* proto */
6311 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6312 static int __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6313 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self); /* proto */
6314 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self); /* proto */
6315 static int __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6316 static int __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_4__del__(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self); /* proto */
6317 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7halo_id___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self); /* proto */
6318 static int __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7halo_id_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6319 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self); /* proto */
6320 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6321 static int __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6322 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self); /* proto */
6323 static int __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6324 static int __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_4__del__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self); /* proto */
6325 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self); /* proto */
6326 static int __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
6327 static int __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_4__del__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self); /* proto */
6328 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self); /* proto */
6329 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6330 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanANDSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self); /* proto */
6331 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanANDSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self); /* proto */
6332 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanANDSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6333 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17BooleanORSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self); /* proto */
6334 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17BooleanORSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self); /* proto */
6335 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17BooleanORSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6336 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanNOTSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self); /* proto */
6337 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanNOTSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self); /* proto */
6338 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanNOTSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6339 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanXORSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self); /* proto */
6340 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanXORSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self); /* proto */
6341 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanXORSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6342 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanNEGSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self); /* proto */
6343 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanNEGSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self); /* proto */
6344 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanNEGSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6345 static int __pyx_pf_2yt_8geometry_18selection_routines_22ChainedBooleanSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *__pyx_v_self, PyObject *__pyx_v_dobj); /* proto */
6346 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *__pyx_v_self); /* proto */
6347 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6348 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self); /* proto */
6349 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self); /* proto */
6350 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6351 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self); /* proto */
6352 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self); /* proto */
6353 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6354 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
6355 static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
6356 static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */
6357 static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
6358 static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */
6359 static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */
6360 static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self); /* proto */
6361 static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */
6362 static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
6363 static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */
6364 static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self); /* proto */
6365 static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6366 static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
6367 static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */
6368 static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */
6369 static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
6370 static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */
6371 static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6372 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
6373 static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */
6374 static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
6375 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6376 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6377 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6378 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6379 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6380 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6381 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6382 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6383 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6384 static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6385 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6386 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6387 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6388 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6389 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6390 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6391 static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
6392 static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6393 static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
6394 static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
6395 static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
6396 static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
6397 static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
6398 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6399 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_AlwaysSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6400 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_OctreeSubsetSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6401 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_BooleanSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6402 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_PointSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6403 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_SphereSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6404 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_RegionSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6405 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_CutRegionSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6406 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_DiskSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6407 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_CuttingPlaneSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6408 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_SliceSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6409 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_OrthoRaySelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6410 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_RaySelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6411 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_DataCollectionSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6412 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_EllipsoidSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6413 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_GridSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6414 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6415 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_ComposeSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6416 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_HaloParticlesSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6417 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_BooleanANDSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6418 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_BooleanORSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6419 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_BooleanNOTSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6420 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_BooleanXORSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6421 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_BooleanNEGSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6422 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_ChainedBooleanSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6423 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6424 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_ChainedBooleanORSelector(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6425 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines___pyx_scope_struct____init__(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6426 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6427 static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6428 static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6429 static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6430 static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
6431 static __Pyx_CachedCFunction __pyx_umethod_PyByteArray_Type_extend = {0, &__pyx_n_s_extend, 0, 0, 0};
6432 static PyObject *__pyx_float_0_0;
6433 static PyObject *__pyx_float_1_0;
6434 static PyObject *__pyx_int_0;
6435 static PyObject *__pyx_int_1;
6436 static PyObject *__pyx_int_3;
6437 static PyObject *__pyx_int_5;
6438 static PyObject *__pyx_int_99;
6439 static PyObject *__pyx_int_184977713;
6440 static PyObject *__pyx_int_neg_1;
6441 static PyObject *__pyx_tuple_;
6442 static PyObject *__pyx_tuple__4;
6443 static PyObject *__pyx_tuple__5;
6444 static PyObject *__pyx_tuple__6;
6445 static PyObject *__pyx_tuple__7;
6446 static PyObject *__pyx_tuple__8;
6447 static PyObject *__pyx_tuple__9;
6448 static PyObject *__pyx_tuple__10;
6449 static PyObject *__pyx_tuple__11;
6450 static PyObject *__pyx_tuple__12;
6451 static PyObject *__pyx_tuple__13;
6452 static PyObject *__pyx_tuple__14;
6453 static PyObject *__pyx_tuple__15;
6454 static PyObject *__pyx_tuple__16;
6455 static PyObject *__pyx_tuple__17;
6456 static PyObject *__pyx_tuple__18;
6457 static PyObject *__pyx_tuple__19;
6458 static PyObject *__pyx_tuple__20;
6459 static PyObject *__pyx_tuple__21;
6460 static PyObject *__pyx_tuple__22;
6461 static PyObject *__pyx_tuple__23;
6462 static PyObject *__pyx_tuple__24;
6463 static PyObject *__pyx_tuple__25;
6464 static PyObject *__pyx_tuple__26;
6465 static PyObject *__pyx_tuple__27;
6466 static PyObject *__pyx_tuple__28;
6467 static PyObject *__pyx_tuple__29;
6468 static PyObject *__pyx_tuple__30;
6469 static PyObject *__pyx_tuple__31;
6470 static PyObject *__pyx_tuple__32;
6471 static PyObject *__pyx_tuple__33;
6472 static PyObject *__pyx_tuple__34;
6473 static PyObject *__pyx_tuple__35;
6474 static PyObject *__pyx_tuple__36;
6475 static PyObject *__pyx_tuple__37;
6476 static PyObject *__pyx_tuple__38;
6477 static PyObject *__pyx_tuple__39;
6478 static PyObject *__pyx_tuple__40;
6479 static PyObject *__pyx_tuple__41;
6480 static PyObject *__pyx_tuple__42;
6481 static PyObject *__pyx_tuple__43;
6482 static PyObject *__pyx_tuple__44;
6483 static PyObject *__pyx_tuple__45;
6484 static PyObject *__pyx_tuple__46;
6485 static PyObject *__pyx_tuple__47;
6486 static PyObject *__pyx_tuple__48;
6487 static PyObject *__pyx_tuple__49;
6488 static PyObject *__pyx_tuple__50;
6489 static PyObject *__pyx_tuple__51;
6490 static PyObject *__pyx_tuple__52;
6491 static PyObject *__pyx_tuple__53;
6492 static PyObject *__pyx_tuple__54;
6493 static PyObject *__pyx_tuple__55;
6494 static PyObject *__pyx_tuple__56;
6495 static PyObject *__pyx_tuple__57;
6496 static PyObject *__pyx_tuple__58;
6497 static PyObject *__pyx_tuple__59;
6498 static PyObject *__pyx_tuple__60;
6499 static PyObject *__pyx_tuple__61;
6500 static PyObject *__pyx_tuple__62;
6501 static PyObject *__pyx_tuple__63;
6502 static PyObject *__pyx_tuple__64;
6503 static PyObject *__pyx_tuple__65;
6504 static PyObject *__pyx_tuple__66;
6505 static PyObject *__pyx_tuple__67;
6506 static PyObject *__pyx_tuple__68;
6507 static PyObject *__pyx_tuple__69;
6508 static PyObject *__pyx_tuple__70;
6509 static PyObject *__pyx_tuple__71;
6510 static PyObject *__pyx_tuple__72;
6511 static PyObject *__pyx_tuple__73;
6512 static PyObject *__pyx_tuple__74;
6513 static PyObject *__pyx_tuple__75;
6514 static PyObject *__pyx_tuple__76;
6515 static PyObject *__pyx_tuple__77;
6516 static PyObject *__pyx_tuple__78;
6517 static PyObject *__pyx_tuple__79;
6518 static PyObject *__pyx_tuple__80;
6519 static PyObject *__pyx_tuple__81;
6520 static PyObject *__pyx_tuple__82;
6521 static PyObject *__pyx_tuple__83;
6522 static PyObject *__pyx_tuple__84;
6523 static PyObject *__pyx_tuple__85;
6524 static PyObject *__pyx_tuple__86;
6525 static PyObject *__pyx_tuple__87;
6526 static PyObject *__pyx_tuple__88;
6527 static PyObject *__pyx_tuple__89;
6528 static PyObject *__pyx_tuple__90;
6529 static PyObject *__pyx_tuple__91;
6530 static PyObject *__pyx_tuple__92;
6531 static PyObject *__pyx_tuple__93;
6532 static PyObject *__pyx_tuple__94;
6533 static PyObject *__pyx_tuple__95;
6534 static PyObject *__pyx_tuple__96;
6535 static PyObject *__pyx_tuple__97;
6536 static PyObject *__pyx_tuple__98;
6537 static PyObject *__pyx_tuple__99;
6538 static PyObject *__pyx_slice__102;
6539 static PyObject *__pyx_tuple__100;
6540 static PyObject *__pyx_tuple__101;
6541 static PyObject *__pyx_tuple__103;
6542 static PyObject *__pyx_tuple__104;
6543 static PyObject *__pyx_tuple__105;
6544 static PyObject *__pyx_tuple__106;
6545 static PyObject *__pyx_tuple__108;
6546 static PyObject *__pyx_tuple__110;
6547 static PyObject *__pyx_tuple__112;
6548 static PyObject *__pyx_tuple__114;
6549 static PyObject *__pyx_tuple__116;
6550 static PyObject *__pyx_tuple__117;
6551 static PyObject *__pyx_tuple__118;
6552 static PyObject *__pyx_tuple__119;
6553 static PyObject *__pyx_tuple__120;
6554 static PyObject *__pyx_tuple__121;
6555 static PyObject *__pyx_codeobj__107;
6556 static PyObject *__pyx_codeobj__109;
6557 static PyObject *__pyx_codeobj__111;
6558 static PyObject *__pyx_codeobj__113;
6559 static PyObject *__pyx_codeobj__115;
6560 static PyObject *__pyx_codeobj__122;
6561 /* Late includes */
6562 
6563 /* "yt/geometry/selection_routines.pyx":54
6564  * grid_eps = 0.0
6565  *
6566  * cdef inline np.float64_t dot(np.float64_t* v1,             # <<<<<<<<<<<<<<
6567  *                              np.float64_t* v2) nogil:
6568  *     return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]
6569  */
6570 
6571 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_8geometry_18selection_routines_dot(__pyx_t_5numpy_float64_t *__pyx_v_v1, __pyx_t_5numpy_float64_t *__pyx_v_v2) {
6572   __pyx_t_5numpy_float64_t __pyx_r;
6573 
6574   /* "yt/geometry/selection_routines.pyx":56
6575  * cdef inline np.float64_t dot(np.float64_t* v1,
6576  *                              np.float64_t* v2) nogil:
6577  *     return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]             # <<<<<<<<<<<<<<
6578  *
6579  * cdef inline np.float64_t norm(np.float64_t* v) nogil:
6580  */
6581   __pyx_r = ((((__pyx_v_v1[0]) * (__pyx_v_v2[0])) + ((__pyx_v_v1[1]) * (__pyx_v_v2[1]))) + ((__pyx_v_v1[2]) * (__pyx_v_v2[2])));
6582   goto __pyx_L0;
6583 
6584   /* "yt/geometry/selection_routines.pyx":54
6585  * grid_eps = 0.0
6586  *
6587  * cdef inline np.float64_t dot(np.float64_t* v1,             # <<<<<<<<<<<<<<
6588  *                              np.float64_t* v2) nogil:
6589  *     return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]
6590  */
6591 
6592   /* function exit code */
6593   __pyx_L0:;
6594   return __pyx_r;
6595 }
6596 
6597 /* "yt/geometry/selection_routines.pyx":58
6598  *     return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]
6599  *
6600  * cdef inline np.float64_t norm(np.float64_t* v) nogil:             # <<<<<<<<<<<<<<
6601  *     return sqrt(dot(v, v))
6602  *
6603  */
6604 
6605 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_8geometry_18selection_routines_norm(__pyx_t_5numpy_float64_t *__pyx_v_v) {
6606   __pyx_t_5numpy_float64_t __pyx_r;
6607 
6608   /* "yt/geometry/selection_routines.pyx":59
6609  *
6610  * cdef inline np.float64_t norm(np.float64_t* v) nogil:
6611  *     return sqrt(dot(v, v))             # <<<<<<<<<<<<<<
6612  *
6613  * # These routines are separated into a couple different categories:
6614  */
6615   __pyx_r = sqrt(__pyx_f_2yt_8geometry_18selection_routines_dot(__pyx_v_v, __pyx_v_v));
6616   goto __pyx_L0;
6617 
6618   /* "yt/geometry/selection_routines.pyx":58
6619  *     return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2]
6620  *
6621  * cdef inline np.float64_t norm(np.float64_t* v) nogil:             # <<<<<<<<<<<<<<
6622  *     return sqrt(dot(v, v))
6623  *
6624  */
6625 
6626   /* function exit code */
6627   __pyx_L0:;
6628   return __pyx_r;
6629 }
6630 
6631 /* "yt/geometry/selection_routines.pyx":75
6632  * @cython.wraparound(False)
6633  * @cython.cdivision(True)
6634  * def convert_mask_to_indices(np.ndarray[np.uint8_t, ndim=3, cast=True] mask,             # <<<<<<<<<<<<<<
6635  *             int count, int transpose = 0):
6636  *     cdef int i, j, k, cpos
6637  */
6638 
6639 /* Python wrapper */
6640 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_1convert_mask_to_indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
6641 static PyMethodDef __pyx_mdef_2yt_8geometry_18selection_routines_1convert_mask_to_indices = {"convert_mask_to_indices", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_1convert_mask_to_indices, METH_VARARGS|METH_KEYWORDS, 0};
6642 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_1convert_mask_to_indices(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
6643   PyArrayObject *__pyx_v_mask = 0;
6644   int __pyx_v_count;
6645   int __pyx_v_transpose;
6646   PyObject *__pyx_r = 0;
6647   __Pyx_RefNannyDeclarations
6648   __Pyx_RefNannySetupContext("convert_mask_to_indices (wrapper)", 0);
6649   {
6650     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mask,&__pyx_n_s_count,&__pyx_n_s_transpose,0};
6651     PyObject* values[3] = {0,0,0};
6652     if (unlikely(__pyx_kwds)) {
6653       Py_ssize_t kw_args;
6654       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
6655       switch (pos_args) {
6656         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
6657         CYTHON_FALLTHROUGH;
6658         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
6659         CYTHON_FALLTHROUGH;
6660         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
6661         CYTHON_FALLTHROUGH;
6662         case  0: break;
6663         default: goto __pyx_L5_argtuple_error;
6664       }
6665       kw_args = PyDict_Size(__pyx_kwds);
6666       switch (pos_args) {
6667         case  0:
6668         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mask)) != 0)) kw_args--;
6669         else goto __pyx_L5_argtuple_error;
6670         CYTHON_FALLTHROUGH;
6671         case  1:
6672         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_count)) != 0)) kw_args--;
6673         else {
6674           __Pyx_RaiseArgtupleInvalid("convert_mask_to_indices", 0, 2, 3, 1); __PYX_ERR(0, 75, __pyx_L3_error)
6675         }
6676         CYTHON_FALLTHROUGH;
6677         case  2:
6678         if (kw_args > 0) {
6679           PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_transpose);
6680           if (value) { values[2] = value; kw_args--; }
6681         }
6682       }
6683       if (unlikely(kw_args > 0)) {
6684         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convert_mask_to_indices") < 0)) __PYX_ERR(0, 75, __pyx_L3_error)
6685       }
6686     } else {
6687       switch (PyTuple_GET_SIZE(__pyx_args)) {
6688         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
6689         CYTHON_FALLTHROUGH;
6690         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
6691         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
6692         break;
6693         default: goto __pyx_L5_argtuple_error;
6694       }
6695     }
6696     __pyx_v_mask = ((PyArrayObject *)values[0]);
6697     __pyx_v_count = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_count == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 76, __pyx_L3_error)
6698     if (values[2]) {
6699       __pyx_v_transpose = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_transpose == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 76, __pyx_L3_error)
6700     } else {
6701       __pyx_v_transpose = ((int)0);
6702     }
6703   }
6704   goto __pyx_L4_argument_unpacking_done;
6705   __pyx_L5_argtuple_error:;
6706   __Pyx_RaiseArgtupleInvalid("convert_mask_to_indices", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 75, __pyx_L3_error)
6707   __pyx_L3_error:;
6708   __Pyx_AddTraceback("yt.geometry.selection_routines.convert_mask_to_indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
6709   __Pyx_RefNannyFinishContext();
6710   return NULL;
6711   __pyx_L4_argument_unpacking_done:;
6712   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mask), __pyx_ptype_5numpy_ndarray, 1, "mask", 0))) __PYX_ERR(0, 75, __pyx_L1_error)
6713   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_convert_mask_to_indices(__pyx_self, __pyx_v_mask, __pyx_v_count, __pyx_v_transpose);
6714 
6715   /* function exit code */
6716   goto __pyx_L0;
6717   __pyx_L1_error:;
6718   __pyx_r = NULL;
6719   __pyx_L0:;
6720   __Pyx_RefNannyFinishContext();
6721   return __pyx_r;
6722 }
6723 
6724 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_convert_mask_to_indices(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_mask, int __pyx_v_count, int __pyx_v_transpose) {
6725   int __pyx_v_i;
6726   int __pyx_v_j;
6727   int __pyx_v_k;
6728   int __pyx_v_cpos;
6729   PyArrayObject *__pyx_v_indices = 0;
6730   __Pyx_LocalBuf_ND __pyx_pybuffernd_indices;
6731   __Pyx_Buffer __pyx_pybuffer_indices;
6732   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
6733   __Pyx_Buffer __pyx_pybuffer_mask;
6734   PyObject *__pyx_r = NULL;
6735   __Pyx_RefNannyDeclarations
6736   PyObject *__pyx_t_1 = NULL;
6737   PyObject *__pyx_t_2 = NULL;
6738   PyObject *__pyx_t_3 = NULL;
6739   PyObject *__pyx_t_4 = NULL;
6740   PyArrayObject *__pyx_t_5 = NULL;
6741   int __pyx_t_6;
6742   PyObject *__pyx_t_7 = NULL;
6743   PyObject *__pyx_t_8 = NULL;
6744   PyObject *__pyx_t_9 = NULL;
6745   npy_intp __pyx_t_10;
6746   npy_intp __pyx_t_11;
6747   npy_intp __pyx_t_12;
6748   npy_intp __pyx_t_13;
6749   int __pyx_t_14;
6750   npy_intp __pyx_t_15;
6751   npy_intp __pyx_t_16;
6752   int __pyx_t_17;
6753   Py_ssize_t __pyx_t_18;
6754   Py_ssize_t __pyx_t_19;
6755   Py_ssize_t __pyx_t_20;
6756   int __pyx_t_21;
6757   Py_ssize_t __pyx_t_22;
6758   Py_ssize_t __pyx_t_23;
6759   Py_ssize_t __pyx_t_24;
6760   Py_ssize_t __pyx_t_25;
6761   Py_ssize_t __pyx_t_26;
6762   Py_ssize_t __pyx_t_27;
6763   Py_ssize_t __pyx_t_28;
6764   Py_ssize_t __pyx_t_29;
6765   Py_ssize_t __pyx_t_30;
6766   Py_ssize_t __pyx_t_31;
6767   Py_ssize_t __pyx_t_32;
6768   Py_ssize_t __pyx_t_33;
6769   __Pyx_RefNannySetupContext("convert_mask_to_indices", 0);
6770   __pyx_pybuffer_indices.pybuffer.buf = NULL;
6771   __pyx_pybuffer_indices.refcount = 0;
6772   __pyx_pybuffernd_indices.data = NULL;
6773   __pyx_pybuffernd_indices.rcbuffer = &__pyx_pybuffer_indices;
6774   __pyx_pybuffer_mask.pybuffer.buf = NULL;
6775   __pyx_pybuffer_mask.refcount = 0;
6776   __pyx_pybuffernd_mask.data = NULL;
6777   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
6778   {
6779     __Pyx_BufFmt_StackElem __pyx_stack[1];
6780     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack) == -1)) __PYX_ERR(0, 75, __pyx_L1_error)
6781   }
6782   __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_mask.diminfo[2].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_mask.diminfo[2].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[2];
6783 
6784   /* "yt/geometry/selection_routines.pyx":79
6785  *     cdef int i, j, k, cpos
6786  *     cdef np.ndarray[np.int64_t, ndim=2] indices
6787  *     indices = np.zeros((count, 3), dtype='int64')             # <<<<<<<<<<<<<<
6788  *     cpos = 0
6789  *     for i in range(mask.shape[0]):
6790  */
6791   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
6792   __Pyx_GOTREF(__pyx_t_1);
6793   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 79, __pyx_L1_error)
6794   __Pyx_GOTREF(__pyx_t_2);
6795   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
6796   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
6797   __Pyx_GOTREF(__pyx_t_1);
6798   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 79, __pyx_L1_error)
6799   __Pyx_GOTREF(__pyx_t_3);
6800   __Pyx_GIVEREF(__pyx_t_1);
6801   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
6802   __Pyx_INCREF(__pyx_int_3);
6803   __Pyx_GIVEREF(__pyx_int_3);
6804   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_3);
6805   __pyx_t_1 = 0;
6806   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L1_error)
6807   __Pyx_GOTREF(__pyx_t_1);
6808   __Pyx_GIVEREF(__pyx_t_3);
6809   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
6810   __pyx_t_3 = 0;
6811   __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 79, __pyx_L1_error)
6812   __Pyx_GOTREF(__pyx_t_3);
6813   if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_n_s_int64) < 0) __PYX_ERR(0, 79, __pyx_L1_error)
6814   __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 79, __pyx_L1_error)
6815   __Pyx_GOTREF(__pyx_t_4);
6816   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
6817   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
6818   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
6819   if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 79, __pyx_L1_error)
6820   __pyx_t_5 = ((PyArrayObject *)__pyx_t_4);
6821   {
6822     __Pyx_BufFmt_StackElem __pyx_stack[1];
6823     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indices.rcbuffer->pybuffer);
6824     __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indices.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack);
6825     if (unlikely(__pyx_t_6 < 0)) {
6826       PyErr_Fetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
6827       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indices.rcbuffer->pybuffer, (PyObject*)__pyx_v_indices, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 2, 0, __pyx_stack) == -1)) {
6828         Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9);
6829         __Pyx_RaiseBufferFallbackError();
6830       } else {
6831         PyErr_Restore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
6832       }
6833       __pyx_t_7 = __pyx_t_8 = __pyx_t_9 = 0;
6834     }
6835     __pyx_pybuffernd_indices.diminfo[0].strides = __pyx_pybuffernd_indices.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indices.diminfo[0].shape = __pyx_pybuffernd_indices.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_indices.diminfo[1].strides = __pyx_pybuffernd_indices.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_indices.diminfo[1].shape = __pyx_pybuffernd_indices.rcbuffer->pybuffer.shape[1];
6836     if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 79, __pyx_L1_error)
6837   }
6838   __pyx_t_5 = 0;
6839   __pyx_v_indices = ((PyArrayObject *)__pyx_t_4);
6840   __pyx_t_4 = 0;
6841 
6842   /* "yt/geometry/selection_routines.pyx":80
6843  *     cdef np.ndarray[np.int64_t, ndim=2] indices
6844  *     indices = np.zeros((count, 3), dtype='int64')
6845  *     cpos = 0             # <<<<<<<<<<<<<<
6846  *     for i in range(mask.shape[0]):
6847  *         for j in range(mask.shape[1]):
6848  */
6849   __pyx_v_cpos = 0;
6850 
6851   /* "yt/geometry/selection_routines.pyx":81
6852  *     indices = np.zeros((count, 3), dtype='int64')
6853  *     cpos = 0
6854  *     for i in range(mask.shape[0]):             # <<<<<<<<<<<<<<
6855  *         for j in range(mask.shape[1]):
6856  *             for k in range(mask.shape[2]):
6857  */
6858   __pyx_t_10 = (__pyx_v_mask->dimensions[0]);
6859   __pyx_t_11 = __pyx_t_10;
6860   for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_11; __pyx_t_6+=1) {
6861     __pyx_v_i = __pyx_t_6;
6862 
6863     /* "yt/geometry/selection_routines.pyx":82
6864  *     cpos = 0
6865  *     for i in range(mask.shape[0]):
6866  *         for j in range(mask.shape[1]):             # <<<<<<<<<<<<<<
6867  *             for k in range(mask.shape[2]):
6868  *                 if mask[i, j, k] == 1:
6869  */
6870     __pyx_t_12 = (__pyx_v_mask->dimensions[1]);
6871     __pyx_t_13 = __pyx_t_12;
6872     for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
6873       __pyx_v_j = __pyx_t_14;
6874 
6875       /* "yt/geometry/selection_routines.pyx":83
6876  *     for i in range(mask.shape[0]):
6877  *         for j in range(mask.shape[1]):
6878  *             for k in range(mask.shape[2]):             # <<<<<<<<<<<<<<
6879  *                 if mask[i, j, k] == 1:
6880  *                     if transpose == 1:
6881  */
6882       __pyx_t_15 = (__pyx_v_mask->dimensions[2]);
6883       __pyx_t_16 = __pyx_t_15;
6884       for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
6885         __pyx_v_k = __pyx_t_17;
6886 
6887         /* "yt/geometry/selection_routines.pyx":84
6888  *         for j in range(mask.shape[1]):
6889  *             for k in range(mask.shape[2]):
6890  *                 if mask[i, j, k] == 1:             # <<<<<<<<<<<<<<
6891  *                     if transpose == 1:
6892  *                         indices[cpos, 0] = k
6893  */
6894         __pyx_t_18 = __pyx_v_i;
6895         __pyx_t_19 = __pyx_v_j;
6896         __pyx_t_20 = __pyx_v_k;
6897         __pyx_t_21 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_mask.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_mask.diminfo[2].strides)) == 1) != 0);
6898         if (__pyx_t_21) {
6899 
6900           /* "yt/geometry/selection_routines.pyx":85
6901  *             for k in range(mask.shape[2]):
6902  *                 if mask[i, j, k] == 1:
6903  *                     if transpose == 1:             # <<<<<<<<<<<<<<
6904  *                         indices[cpos, 0] = k
6905  *                         indices[cpos, 1] = j
6906  */
6907           __pyx_t_21 = ((__pyx_v_transpose == 1) != 0);
6908           if (__pyx_t_21) {
6909 
6910             /* "yt/geometry/selection_routines.pyx":86
6911  *                 if mask[i, j, k] == 1:
6912  *                     if transpose == 1:
6913  *                         indices[cpos, 0] = k             # <<<<<<<<<<<<<<
6914  *                         indices[cpos, 1] = j
6915  *                         indices[cpos, 2] = i
6916  */
6917             __pyx_t_22 = __pyx_v_cpos;
6918             __pyx_t_23 = 0;
6919             *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_indices.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_indices.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_indices.diminfo[1].strides) = __pyx_v_k;
6920 
6921             /* "yt/geometry/selection_routines.pyx":87
6922  *                     if transpose == 1:
6923  *                         indices[cpos, 0] = k
6924  *                         indices[cpos, 1] = j             # <<<<<<<<<<<<<<
6925  *                         indices[cpos, 2] = i
6926  *                     else:
6927  */
6928             __pyx_t_24 = __pyx_v_cpos;
6929             __pyx_t_25 = 1;
6930             *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_indices.rcbuffer->pybuffer.buf, __pyx_t_24, __pyx_pybuffernd_indices.diminfo[0].strides, __pyx_t_25, __pyx_pybuffernd_indices.diminfo[1].strides) = __pyx_v_j;
6931 
6932             /* "yt/geometry/selection_routines.pyx":88
6933  *                         indices[cpos, 0] = k
6934  *                         indices[cpos, 1] = j
6935  *                         indices[cpos, 2] = i             # <<<<<<<<<<<<<<
6936  *                     else:
6937  *                         indices[cpos, 0] = i
6938  */
6939             __pyx_t_26 = __pyx_v_cpos;
6940             __pyx_t_27 = 2;
6941             *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_indices.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_indices.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_indices.diminfo[1].strides) = __pyx_v_i;
6942 
6943             /* "yt/geometry/selection_routines.pyx":85
6944  *             for k in range(mask.shape[2]):
6945  *                 if mask[i, j, k] == 1:
6946  *                     if transpose == 1:             # <<<<<<<<<<<<<<
6947  *                         indices[cpos, 0] = k
6948  *                         indices[cpos, 1] = j
6949  */
6950             goto __pyx_L10;
6951           }
6952 
6953           /* "yt/geometry/selection_routines.pyx":90
6954  *                         indices[cpos, 2] = i
6955  *                     else:
6956  *                         indices[cpos, 0] = i             # <<<<<<<<<<<<<<
6957  *                         indices[cpos, 1] = j
6958  *                         indices[cpos, 2] = k
6959  */
6960           /*else*/ {
6961             __pyx_t_28 = __pyx_v_cpos;
6962             __pyx_t_29 = 0;
6963             *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_indices.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_indices.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_indices.diminfo[1].strides) = __pyx_v_i;
6964 
6965             /* "yt/geometry/selection_routines.pyx":91
6966  *                     else:
6967  *                         indices[cpos, 0] = i
6968  *                         indices[cpos, 1] = j             # <<<<<<<<<<<<<<
6969  *                         indices[cpos, 2] = k
6970  *                     cpos += 1
6971  */
6972             __pyx_t_30 = __pyx_v_cpos;
6973             __pyx_t_31 = 1;
6974             *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_indices.rcbuffer->pybuffer.buf, __pyx_t_30, __pyx_pybuffernd_indices.diminfo[0].strides, __pyx_t_31, __pyx_pybuffernd_indices.diminfo[1].strides) = __pyx_v_j;
6975 
6976             /* "yt/geometry/selection_routines.pyx":92
6977  *                         indices[cpos, 0] = i
6978  *                         indices[cpos, 1] = j
6979  *                         indices[cpos, 2] = k             # <<<<<<<<<<<<<<
6980  *                     cpos += 1
6981  *     return indices
6982  */
6983             __pyx_t_32 = __pyx_v_cpos;
6984             __pyx_t_33 = 2;
6985             *__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_indices.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_indices.diminfo[0].strides, __pyx_t_33, __pyx_pybuffernd_indices.diminfo[1].strides) = __pyx_v_k;
6986           }
6987           __pyx_L10:;
6988 
6989           /* "yt/geometry/selection_routines.pyx":93
6990  *                         indices[cpos, 1] = j
6991  *                         indices[cpos, 2] = k
6992  *                     cpos += 1             # <<<<<<<<<<<<<<
6993  *     return indices
6994  *
6995  */
6996           __pyx_v_cpos = (__pyx_v_cpos + 1);
6997 
6998           /* "yt/geometry/selection_routines.pyx":84
6999  *         for j in range(mask.shape[1]):
7000  *             for k in range(mask.shape[2]):
7001  *                 if mask[i, j, k] == 1:             # <<<<<<<<<<<<<<
7002  *                     if transpose == 1:
7003  *                         indices[cpos, 0] = k
7004  */
7005         }
7006       }
7007     }
7008   }
7009 
7010   /* "yt/geometry/selection_routines.pyx":94
7011  *                         indices[cpos, 2] = k
7012  *                     cpos += 1
7013  *     return indices             # <<<<<<<<<<<<<<
7014  *
7015  *
7016  */
7017   __Pyx_XDECREF(__pyx_r);
7018   __Pyx_INCREF(((PyObject *)__pyx_v_indices));
7019   __pyx_r = ((PyObject *)__pyx_v_indices);
7020   goto __pyx_L0;
7021 
7022   /* "yt/geometry/selection_routines.pyx":75
7023  * @cython.wraparound(False)
7024  * @cython.cdivision(True)
7025  * def convert_mask_to_indices(np.ndarray[np.uint8_t, ndim=3, cast=True] mask,             # <<<<<<<<<<<<<<
7026  *             int count, int transpose = 0):
7027  *     cdef int i, j, k, cpos
7028  */
7029 
7030   /* function exit code */
7031   __pyx_L1_error:;
7032   __Pyx_XDECREF(__pyx_t_1);
7033   __Pyx_XDECREF(__pyx_t_2);
7034   __Pyx_XDECREF(__pyx_t_3);
7035   __Pyx_XDECREF(__pyx_t_4);
7036   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
7037     __Pyx_PyThreadState_declare
7038     __Pyx_PyThreadState_assign
7039     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
7040     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indices.rcbuffer->pybuffer);
7041     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
7042   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
7043   __Pyx_AddTraceback("yt.geometry.selection_routines.convert_mask_to_indices", __pyx_clineno, __pyx_lineno, __pyx_filename);
7044   __pyx_r = NULL;
7045   goto __pyx_L2;
7046   __pyx_L0:;
7047   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indices.rcbuffer->pybuffer);
7048   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
7049   __pyx_L2:;
7050   __Pyx_XDECREF((PyObject *)__pyx_v_indices);
7051   __Pyx_XGIVEREF(__pyx_r);
7052   __Pyx_RefNannyFinishContext();
7053   return __pyx_r;
7054 }
7055 
7056 /* "yt/geometry/selection_routines.pyx":100
7057  * @cython.wraparound(False)
7058  * @cython.cdivision(True)
7059  * cdef _mask_fill(np.ndarray[np.float64_t, ndim=1] out,             # <<<<<<<<<<<<<<
7060  *                 np.int64_t offset,
7061  *                 np.ndarray[np.uint8_t, ndim=3, cast=True] mask,
7062  */
7063 
7064 static PyObject *__pyx_fuse_0__pyx_f_2yt_8geometry_18selection_routines__mask_fill(PyArrayObject *__pyx_v_out, __pyx_t_5numpy_int64_t __pyx_v_offset, PyArrayObject *__pyx_v_mask, PyArrayObject *__pyx_v_vals) {
7065   __pyx_t_5numpy_int64_t __pyx_v_count;
7066   int __pyx_v_i;
7067   int __pyx_v_j;
7068   int __pyx_v_k;
7069   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
7070   __Pyx_Buffer __pyx_pybuffer_mask;
7071   __Pyx_LocalBuf_ND __pyx_pybuffernd_out;
7072   __Pyx_Buffer __pyx_pybuffer_out;
7073   __Pyx_LocalBuf_ND __pyx_pybuffernd_vals;
7074   __Pyx_Buffer __pyx_pybuffer_vals;
7075   PyObject *__pyx_r = NULL;
7076   __Pyx_RefNannyDeclarations
7077   npy_intp __pyx_t_1;
7078   npy_intp __pyx_t_2;
7079   int __pyx_t_3;
7080   npy_intp __pyx_t_4;
7081   npy_intp __pyx_t_5;
7082   int __pyx_t_6;
7083   npy_intp __pyx_t_7;
7084   npy_intp __pyx_t_8;
7085   int __pyx_t_9;
7086   Py_ssize_t __pyx_t_10;
7087   Py_ssize_t __pyx_t_11;
7088   Py_ssize_t __pyx_t_12;
7089   int __pyx_t_13;
7090   Py_ssize_t __pyx_t_14;
7091   Py_ssize_t __pyx_t_15;
7092   Py_ssize_t __pyx_t_16;
7093   __pyx_t_5numpy_int64_t __pyx_t_17;
7094   PyObject *__pyx_t_18 = NULL;
7095   __Pyx_RefNannySetupContext("__pyx_fuse_0_mask_fill", 0);
7096   __pyx_pybuffer_out.pybuffer.buf = NULL;
7097   __pyx_pybuffer_out.refcount = 0;
7098   __pyx_pybuffernd_out.data = NULL;
7099   __pyx_pybuffernd_out.rcbuffer = &__pyx_pybuffer_out;
7100   __pyx_pybuffer_mask.pybuffer.buf = NULL;
7101   __pyx_pybuffer_mask.refcount = 0;
7102   __pyx_pybuffernd_mask.data = NULL;
7103   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
7104   __pyx_pybuffer_vals.pybuffer.buf = NULL;
7105   __pyx_pybuffer_vals.refcount = 0;
7106   __pyx_pybuffernd_vals.data = NULL;
7107   __pyx_pybuffernd_vals.rcbuffer = &__pyx_pybuffer_vals;
7108   {
7109     __Pyx_BufFmt_StackElem __pyx_stack[1];
7110     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out.rcbuffer->pybuffer, (PyObject*)__pyx_v_out, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 100, __pyx_L1_error)
7111   }
7112   __pyx_pybuffernd_out.diminfo[0].strides = __pyx_pybuffernd_out.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out.diminfo[0].shape = __pyx_pybuffernd_out.rcbuffer->pybuffer.shape[0];
7113   {
7114     __Pyx_BufFmt_StackElem __pyx_stack[1];
7115     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack) == -1)) __PYX_ERR(0, 100, __pyx_L1_error)
7116   }
7117   __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_mask.diminfo[2].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_mask.diminfo[2].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[2];
7118   {
7119     __Pyx_BufFmt_StackElem __pyx_stack[1];
7120     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vals.rcbuffer->pybuffer, (PyObject*)__pyx_v_vals, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 100, __pyx_L1_error)
7121   }
7122   __pyx_pybuffernd_vals.diminfo[0].strides = __pyx_pybuffernd_vals.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vals.diminfo[0].shape = __pyx_pybuffernd_vals.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vals.diminfo[1].strides = __pyx_pybuffernd_vals.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vals.diminfo[1].shape = __pyx_pybuffernd_vals.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_vals.diminfo[2].strides = __pyx_pybuffernd_vals.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_vals.diminfo[2].shape = __pyx_pybuffernd_vals.rcbuffer->pybuffer.shape[2];
7123 
7124   /* "yt/geometry/selection_routines.pyx":104
7125  *                 np.ndarray[np.uint8_t, ndim=3, cast=True] mask,
7126  *                 np.ndarray[floating, ndim=3] vals):
7127  *     cdef np.int64_t count = 0             # <<<<<<<<<<<<<<
7128  *     cdef int i, j, k
7129  *     for i in range(mask.shape[0]):
7130  */
7131   __pyx_v_count = 0;
7132 
7133   /* "yt/geometry/selection_routines.pyx":106
7134  *     cdef np.int64_t count = 0
7135  *     cdef int i, j, k
7136  *     for i in range(mask.shape[0]):             # <<<<<<<<<<<<<<
7137  *         for j in range(mask.shape[1]):
7138  *             for k in range(mask.shape[2]):
7139  */
7140   __pyx_t_1 = (__pyx_v_mask->dimensions[0]);
7141   __pyx_t_2 = __pyx_t_1;
7142   for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
7143     __pyx_v_i = __pyx_t_3;
7144 
7145     /* "yt/geometry/selection_routines.pyx":107
7146  *     cdef int i, j, k
7147  *     for i in range(mask.shape[0]):
7148  *         for j in range(mask.shape[1]):             # <<<<<<<<<<<<<<
7149  *             for k in range(mask.shape[2]):
7150  *                 if mask[i, j, k] == 1:
7151  */
7152     __pyx_t_4 = (__pyx_v_mask->dimensions[1]);
7153     __pyx_t_5 = __pyx_t_4;
7154     for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
7155       __pyx_v_j = __pyx_t_6;
7156 
7157       /* "yt/geometry/selection_routines.pyx":108
7158  *     for i in range(mask.shape[0]):
7159  *         for j in range(mask.shape[1]):
7160  *             for k in range(mask.shape[2]):             # <<<<<<<<<<<<<<
7161  *                 if mask[i, j, k] == 1:
7162  *                     out[offset + count] = vals[i, j, k]
7163  */
7164       __pyx_t_7 = (__pyx_v_mask->dimensions[2]);
7165       __pyx_t_8 = __pyx_t_7;
7166       for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
7167         __pyx_v_k = __pyx_t_9;
7168 
7169         /* "yt/geometry/selection_routines.pyx":109
7170  *         for j in range(mask.shape[1]):
7171  *             for k in range(mask.shape[2]):
7172  *                 if mask[i, j, k] == 1:             # <<<<<<<<<<<<<<
7173  *                     out[offset + count] = vals[i, j, k]
7174  *                     count += 1
7175  */
7176         __pyx_t_10 = __pyx_v_i;
7177         __pyx_t_11 = __pyx_v_j;
7178         __pyx_t_12 = __pyx_v_k;
7179         __pyx_t_13 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_mask.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_mask.diminfo[2].strides)) == 1) != 0);
7180         if (__pyx_t_13) {
7181 
7182           /* "yt/geometry/selection_routines.pyx":110
7183  *             for k in range(mask.shape[2]):
7184  *                 if mask[i, j, k] == 1:
7185  *                     out[offset + count] = vals[i, j, k]             # <<<<<<<<<<<<<<
7186  *                     count += 1
7187  *     return count
7188  */
7189           __pyx_t_14 = __pyx_v_i;
7190           __pyx_t_15 = __pyx_v_j;
7191           __pyx_t_16 = __pyx_v_k;
7192           __pyx_t_17 = (__pyx_v_offset + __pyx_v_count);
7193           *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_out.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_out.diminfo[0].strides) = (*__Pyx_BufPtrStrided3d(float *, __pyx_pybuffernd_vals.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_vals.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_vals.diminfo[1].strides, __pyx_t_16, __pyx_pybuffernd_vals.diminfo[2].strides));
7194 
7195           /* "yt/geometry/selection_routines.pyx":111
7196  *                 if mask[i, j, k] == 1:
7197  *                     out[offset + count] = vals[i, j, k]
7198  *                     count += 1             # <<<<<<<<<<<<<<
7199  *     return count
7200  *
7201  */
7202           __pyx_v_count = (__pyx_v_count + 1);
7203 
7204           /* "yt/geometry/selection_routines.pyx":109
7205  *         for j in range(mask.shape[1]):
7206  *             for k in range(mask.shape[2]):
7207  *                 if mask[i, j, k] == 1:             # <<<<<<<<<<<<<<
7208  *                     out[offset + count] = vals[i, j, k]
7209  *                     count += 1
7210  */
7211         }
7212       }
7213     }
7214   }
7215 
7216   /* "yt/geometry/selection_routines.pyx":112
7217  *                     out[offset + count] = vals[i, j, k]
7218  *                     count += 1
7219  *     return count             # <<<<<<<<<<<<<<
7220  *
7221  * def mask_fill(np.ndarray[np.float64_t, ndim=1] out,
7222  */
7223   __Pyx_XDECREF(__pyx_r);
7224   __pyx_t_18 = __Pyx_PyInt_From_npy_int64(__pyx_v_count); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 112, __pyx_L1_error)
7225   __Pyx_GOTREF(__pyx_t_18);
7226   __pyx_r = __pyx_t_18;
7227   __pyx_t_18 = 0;
7228   goto __pyx_L0;
7229 
7230   /* "yt/geometry/selection_routines.pyx":100
7231  * @cython.wraparound(False)
7232  * @cython.cdivision(True)
7233  * cdef _mask_fill(np.ndarray[np.float64_t, ndim=1] out,             # <<<<<<<<<<<<<<
7234  *                 np.int64_t offset,
7235  *                 np.ndarray[np.uint8_t, ndim=3, cast=True] mask,
7236  */
7237 
7238   /* function exit code */
7239   __pyx_L1_error:;
7240   __Pyx_XDECREF(__pyx_t_18);
7241   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
7242     __Pyx_PyThreadState_declare
7243     __Pyx_PyThreadState_assign
7244     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
7245     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
7246     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out.rcbuffer->pybuffer);
7247     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vals.rcbuffer->pybuffer);
7248   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
7249   __Pyx_AddTraceback("yt.geometry.selection_routines._mask_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
7250   __pyx_r = 0;
7251   goto __pyx_L2;
7252   __pyx_L0:;
7253   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
7254   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out.rcbuffer->pybuffer);
7255   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vals.rcbuffer->pybuffer);
7256   __pyx_L2:;
7257   __Pyx_XGIVEREF(__pyx_r);
7258   __Pyx_RefNannyFinishContext();
7259   return __pyx_r;
7260 }
7261 
7262 static PyObject *__pyx_fuse_1__pyx_f_2yt_8geometry_18selection_routines__mask_fill(PyArrayObject *__pyx_v_out, __pyx_t_5numpy_int64_t __pyx_v_offset, PyArrayObject *__pyx_v_mask, PyArrayObject *__pyx_v_vals) {
7263   __pyx_t_5numpy_int64_t __pyx_v_count;
7264   int __pyx_v_i;
7265   int __pyx_v_j;
7266   int __pyx_v_k;
7267   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
7268   __Pyx_Buffer __pyx_pybuffer_mask;
7269   __Pyx_LocalBuf_ND __pyx_pybuffernd_out;
7270   __Pyx_Buffer __pyx_pybuffer_out;
7271   __Pyx_LocalBuf_ND __pyx_pybuffernd_vals;
7272   __Pyx_Buffer __pyx_pybuffer_vals;
7273   PyObject *__pyx_r = NULL;
7274   __Pyx_RefNannyDeclarations
7275   npy_intp __pyx_t_1;
7276   npy_intp __pyx_t_2;
7277   int __pyx_t_3;
7278   npy_intp __pyx_t_4;
7279   npy_intp __pyx_t_5;
7280   int __pyx_t_6;
7281   npy_intp __pyx_t_7;
7282   npy_intp __pyx_t_8;
7283   int __pyx_t_9;
7284   Py_ssize_t __pyx_t_10;
7285   Py_ssize_t __pyx_t_11;
7286   Py_ssize_t __pyx_t_12;
7287   int __pyx_t_13;
7288   Py_ssize_t __pyx_t_14;
7289   Py_ssize_t __pyx_t_15;
7290   Py_ssize_t __pyx_t_16;
7291   __pyx_t_5numpy_int64_t __pyx_t_17;
7292   PyObject *__pyx_t_18 = NULL;
7293   __Pyx_RefNannySetupContext("__pyx_fuse_1_mask_fill", 0);
7294   __pyx_pybuffer_out.pybuffer.buf = NULL;
7295   __pyx_pybuffer_out.refcount = 0;
7296   __pyx_pybuffernd_out.data = NULL;
7297   __pyx_pybuffernd_out.rcbuffer = &__pyx_pybuffer_out;
7298   __pyx_pybuffer_mask.pybuffer.buf = NULL;
7299   __pyx_pybuffer_mask.refcount = 0;
7300   __pyx_pybuffernd_mask.data = NULL;
7301   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
7302   __pyx_pybuffer_vals.pybuffer.buf = NULL;
7303   __pyx_pybuffer_vals.refcount = 0;
7304   __pyx_pybuffernd_vals.data = NULL;
7305   __pyx_pybuffernd_vals.rcbuffer = &__pyx_pybuffer_vals;
7306   {
7307     __Pyx_BufFmt_StackElem __pyx_stack[1];
7308     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out.rcbuffer->pybuffer, (PyObject*)__pyx_v_out, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 100, __pyx_L1_error)
7309   }
7310   __pyx_pybuffernd_out.diminfo[0].strides = __pyx_pybuffernd_out.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out.diminfo[0].shape = __pyx_pybuffernd_out.rcbuffer->pybuffer.shape[0];
7311   {
7312     __Pyx_BufFmt_StackElem __pyx_stack[1];
7313     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack) == -1)) __PYX_ERR(0, 100, __pyx_L1_error)
7314   }
7315   __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_mask.diminfo[2].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_mask.diminfo[2].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[2];
7316   {
7317     __Pyx_BufFmt_StackElem __pyx_stack[1];
7318     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_vals.rcbuffer->pybuffer, (PyObject*)__pyx_v_vals, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) __PYX_ERR(0, 100, __pyx_L1_error)
7319   }
7320   __pyx_pybuffernd_vals.diminfo[0].strides = __pyx_pybuffernd_vals.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_vals.diminfo[0].shape = __pyx_pybuffernd_vals.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_vals.diminfo[1].strides = __pyx_pybuffernd_vals.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_vals.diminfo[1].shape = __pyx_pybuffernd_vals.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_vals.diminfo[2].strides = __pyx_pybuffernd_vals.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_vals.diminfo[2].shape = __pyx_pybuffernd_vals.rcbuffer->pybuffer.shape[2];
7321 
7322   /* "yt/geometry/selection_routines.pyx":104
7323  *                 np.ndarray[np.uint8_t, ndim=3, cast=True] mask,
7324  *                 np.ndarray[floating, ndim=3] vals):
7325  *     cdef np.int64_t count = 0             # <<<<<<<<<<<<<<
7326  *     cdef int i, j, k
7327  *     for i in range(mask.shape[0]):
7328  */
7329   __pyx_v_count = 0;
7330 
7331   /* "yt/geometry/selection_routines.pyx":106
7332  *     cdef np.int64_t count = 0
7333  *     cdef int i, j, k
7334  *     for i in range(mask.shape[0]):             # <<<<<<<<<<<<<<
7335  *         for j in range(mask.shape[1]):
7336  *             for k in range(mask.shape[2]):
7337  */
7338   __pyx_t_1 = (__pyx_v_mask->dimensions[0]);
7339   __pyx_t_2 = __pyx_t_1;
7340   for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
7341     __pyx_v_i = __pyx_t_3;
7342 
7343     /* "yt/geometry/selection_routines.pyx":107
7344  *     cdef int i, j, k
7345  *     for i in range(mask.shape[0]):
7346  *         for j in range(mask.shape[1]):             # <<<<<<<<<<<<<<
7347  *             for k in range(mask.shape[2]):
7348  *                 if mask[i, j, k] == 1:
7349  */
7350     __pyx_t_4 = (__pyx_v_mask->dimensions[1]);
7351     __pyx_t_5 = __pyx_t_4;
7352     for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
7353       __pyx_v_j = __pyx_t_6;
7354 
7355       /* "yt/geometry/selection_routines.pyx":108
7356  *     for i in range(mask.shape[0]):
7357  *         for j in range(mask.shape[1]):
7358  *             for k in range(mask.shape[2]):             # <<<<<<<<<<<<<<
7359  *                 if mask[i, j, k] == 1:
7360  *                     out[offset + count] = vals[i, j, k]
7361  */
7362       __pyx_t_7 = (__pyx_v_mask->dimensions[2]);
7363       __pyx_t_8 = __pyx_t_7;
7364       for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
7365         __pyx_v_k = __pyx_t_9;
7366 
7367         /* "yt/geometry/selection_routines.pyx":109
7368  *         for j in range(mask.shape[1]):
7369  *             for k in range(mask.shape[2]):
7370  *                 if mask[i, j, k] == 1:             # <<<<<<<<<<<<<<
7371  *                     out[offset + count] = vals[i, j, k]
7372  *                     count += 1
7373  */
7374         __pyx_t_10 = __pyx_v_i;
7375         __pyx_t_11 = __pyx_v_j;
7376         __pyx_t_12 = __pyx_v_k;
7377         __pyx_t_13 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_mask.diminfo[1].strides, __pyx_t_12, __pyx_pybuffernd_mask.diminfo[2].strides)) == 1) != 0);
7378         if (__pyx_t_13) {
7379 
7380           /* "yt/geometry/selection_routines.pyx":110
7381  *             for k in range(mask.shape[2]):
7382  *                 if mask[i, j, k] == 1:
7383  *                     out[offset + count] = vals[i, j, k]             # <<<<<<<<<<<<<<
7384  *                     count += 1
7385  *     return count
7386  */
7387           __pyx_t_14 = __pyx_v_i;
7388           __pyx_t_15 = __pyx_v_j;
7389           __pyx_t_16 = __pyx_v_k;
7390           __pyx_t_17 = (__pyx_v_offset + __pyx_v_count);
7391           *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_out.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_out.diminfo[0].strides) = (*__Pyx_BufPtrStrided3d(double *, __pyx_pybuffernd_vals.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_vals.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_vals.diminfo[1].strides, __pyx_t_16, __pyx_pybuffernd_vals.diminfo[2].strides));
7392 
7393           /* "yt/geometry/selection_routines.pyx":111
7394  *                 if mask[i, j, k] == 1:
7395  *                     out[offset + count] = vals[i, j, k]
7396  *                     count += 1             # <<<<<<<<<<<<<<
7397  *     return count
7398  *
7399  */
7400           __pyx_v_count = (__pyx_v_count + 1);
7401 
7402           /* "yt/geometry/selection_routines.pyx":109
7403  *         for j in range(mask.shape[1]):
7404  *             for k in range(mask.shape[2]):
7405  *                 if mask[i, j, k] == 1:             # <<<<<<<<<<<<<<
7406  *                     out[offset + count] = vals[i, j, k]
7407  *                     count += 1
7408  */
7409         }
7410       }
7411     }
7412   }
7413 
7414   /* "yt/geometry/selection_routines.pyx":112
7415  *                     out[offset + count] = vals[i, j, k]
7416  *                     count += 1
7417  *     return count             # <<<<<<<<<<<<<<
7418  *
7419  * def mask_fill(np.ndarray[np.float64_t, ndim=1] out,
7420  */
7421   __Pyx_XDECREF(__pyx_r);
7422   __pyx_t_18 = __Pyx_PyInt_From_npy_int64(__pyx_v_count); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 112, __pyx_L1_error)
7423   __Pyx_GOTREF(__pyx_t_18);
7424   __pyx_r = __pyx_t_18;
7425   __pyx_t_18 = 0;
7426   goto __pyx_L0;
7427 
7428   /* "yt/geometry/selection_routines.pyx":100
7429  * @cython.wraparound(False)
7430  * @cython.cdivision(True)
7431  * cdef _mask_fill(np.ndarray[np.float64_t, ndim=1] out,             # <<<<<<<<<<<<<<
7432  *                 np.int64_t offset,
7433  *                 np.ndarray[np.uint8_t, ndim=3, cast=True] mask,
7434  */
7435 
7436   /* function exit code */
7437   __pyx_L1_error:;
7438   __Pyx_XDECREF(__pyx_t_18);
7439   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
7440     __Pyx_PyThreadState_declare
7441     __Pyx_PyThreadState_assign
7442     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
7443     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
7444     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out.rcbuffer->pybuffer);
7445     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vals.rcbuffer->pybuffer);
7446   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
7447   __Pyx_AddTraceback("yt.geometry.selection_routines._mask_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
7448   __pyx_r = 0;
7449   goto __pyx_L2;
7450   __pyx_L0:;
7451   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
7452   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out.rcbuffer->pybuffer);
7453   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_vals.rcbuffer->pybuffer);
7454   __pyx_L2:;
7455   __Pyx_XGIVEREF(__pyx_r);
7456   __Pyx_RefNannyFinishContext();
7457   return __pyx_r;
7458 }
7459 
7460 /* "yt/geometry/selection_routines.pyx":114
7461  *     return count
7462  *
7463  * def mask_fill(np.ndarray[np.float64_t, ndim=1] out,             # <<<<<<<<<<<<<<
7464  *               np.int64_t offset,
7465  *               np.ndarray[np.uint8_t, ndim=3, cast=True] mask,
7466  */
7467 
7468 /* Python wrapper */
7469 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_3mask_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
7470 static PyMethodDef __pyx_mdef_2yt_8geometry_18selection_routines_3mask_fill = {"mask_fill", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_3mask_fill, METH_VARARGS|METH_KEYWORDS, 0};
7471 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_3mask_fill(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
7472   PyArrayObject *__pyx_v_out = 0;
7473   __pyx_t_5numpy_int64_t __pyx_v_offset;
7474   PyArrayObject *__pyx_v_mask = 0;
7475   PyArrayObject *__pyx_v_vals = 0;
7476   PyObject *__pyx_r = 0;
7477   __Pyx_RefNannyDeclarations
7478   __Pyx_RefNannySetupContext("mask_fill (wrapper)", 0);
7479   {
7480     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_out,&__pyx_n_s_offset,&__pyx_n_s_mask,&__pyx_n_s_vals,0};
7481     PyObject* values[4] = {0,0,0,0};
7482     if (unlikely(__pyx_kwds)) {
7483       Py_ssize_t kw_args;
7484       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
7485       switch (pos_args) {
7486         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
7487         CYTHON_FALLTHROUGH;
7488         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
7489         CYTHON_FALLTHROUGH;
7490         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
7491         CYTHON_FALLTHROUGH;
7492         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
7493         CYTHON_FALLTHROUGH;
7494         case  0: break;
7495         default: goto __pyx_L5_argtuple_error;
7496       }
7497       kw_args = PyDict_Size(__pyx_kwds);
7498       switch (pos_args) {
7499         case  0:
7500         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_out)) != 0)) kw_args--;
7501         else goto __pyx_L5_argtuple_error;
7502         CYTHON_FALLTHROUGH;
7503         case  1:
7504         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
7505         else {
7506           __Pyx_RaiseArgtupleInvalid("mask_fill", 1, 4, 4, 1); __PYX_ERR(0, 114, __pyx_L3_error)
7507         }
7508         CYTHON_FALLTHROUGH;
7509         case  2:
7510         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mask)) != 0)) kw_args--;
7511         else {
7512           __Pyx_RaiseArgtupleInvalid("mask_fill", 1, 4, 4, 2); __PYX_ERR(0, 114, __pyx_L3_error)
7513         }
7514         CYTHON_FALLTHROUGH;
7515         case  3:
7516         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_vals)) != 0)) kw_args--;
7517         else {
7518           __Pyx_RaiseArgtupleInvalid("mask_fill", 1, 4, 4, 3); __PYX_ERR(0, 114, __pyx_L3_error)
7519         }
7520       }
7521       if (unlikely(kw_args > 0)) {
7522         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mask_fill") < 0)) __PYX_ERR(0, 114, __pyx_L3_error)
7523       }
7524     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
7525       goto __pyx_L5_argtuple_error;
7526     } else {
7527       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
7528       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
7529       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
7530       values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
7531     }
7532     __pyx_v_out = ((PyArrayObject *)values[0]);
7533     __pyx_v_offset = __Pyx_PyInt_As_npy_int64(values[1]); if (unlikely((__pyx_v_offset == ((npy_int64)-1)) && PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L3_error)
7534     __pyx_v_mask = ((PyArrayObject *)values[2]);
7535     __pyx_v_vals = ((PyArrayObject *)values[3]);
7536   }
7537   goto __pyx_L4_argument_unpacking_done;
7538   __pyx_L5_argtuple_error:;
7539   __Pyx_RaiseArgtupleInvalid("mask_fill", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 114, __pyx_L3_error)
7540   __pyx_L3_error:;
7541   __Pyx_AddTraceback("yt.geometry.selection_routines.mask_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
7542   __Pyx_RefNannyFinishContext();
7543   return NULL;
7544   __pyx_L4_argument_unpacking_done:;
7545   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_5numpy_ndarray, 1, "out", 0))) __PYX_ERR(0, 114, __pyx_L1_error)
7546   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mask), __pyx_ptype_5numpy_ndarray, 1, "mask", 0))) __PYX_ERR(0, 116, __pyx_L1_error)
7547   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vals), __pyx_ptype_5numpy_ndarray, 1, "vals", 0))) __PYX_ERR(0, 117, __pyx_L1_error)
7548   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_2mask_fill(__pyx_self, __pyx_v_out, __pyx_v_offset, __pyx_v_mask, __pyx_v_vals);
7549 
7550   /* function exit code */
7551   goto __pyx_L0;
7552   __pyx_L1_error:;
7553   __pyx_r = NULL;
7554   __pyx_L0:;
7555   __Pyx_RefNannyFinishContext();
7556   return __pyx_r;
7557 }
7558 
7559 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_2mask_fill(CYTHON_UNUSED PyObject *__pyx_self, PyArrayObject *__pyx_v_out, __pyx_t_5numpy_int64_t __pyx_v_offset, PyArrayObject *__pyx_v_mask, PyArrayObject *__pyx_v_vals) {
7560   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
7561   __Pyx_Buffer __pyx_pybuffer_mask;
7562   __Pyx_LocalBuf_ND __pyx_pybuffernd_out;
7563   __Pyx_Buffer __pyx_pybuffer_out;
7564   PyObject *__pyx_r = NULL;
7565   __Pyx_RefNannyDeclarations
7566   PyObject *__pyx_t_1 = NULL;
7567   PyObject *__pyx_t_2 = NULL;
7568   PyObject *__pyx_t_3 = NULL;
7569   int __pyx_t_4;
7570   __Pyx_RefNannySetupContext("mask_fill", 0);
7571   __pyx_pybuffer_out.pybuffer.buf = NULL;
7572   __pyx_pybuffer_out.refcount = 0;
7573   __pyx_pybuffernd_out.data = NULL;
7574   __pyx_pybuffernd_out.rcbuffer = &__pyx_pybuffer_out;
7575   __pyx_pybuffer_mask.pybuffer.buf = NULL;
7576   __pyx_pybuffer_mask.refcount = 0;
7577   __pyx_pybuffernd_mask.data = NULL;
7578   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
7579   {
7580     __Pyx_BufFmt_StackElem __pyx_stack[1];
7581     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_out.rcbuffer->pybuffer, (PyObject*)__pyx_v_out, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(0, 114, __pyx_L1_error)
7582   }
7583   __pyx_pybuffernd_out.diminfo[0].strides = __pyx_pybuffernd_out.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_out.diminfo[0].shape = __pyx_pybuffernd_out.rcbuffer->pybuffer.shape[0];
7584   {
7585     __Pyx_BufFmt_StackElem __pyx_stack[1];
7586     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack) == -1)) __PYX_ERR(0, 114, __pyx_L1_error)
7587   }
7588   __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_mask.diminfo[2].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_mask.diminfo[2].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[2];
7589 
7590   /* "yt/geometry/selection_routines.pyx":118
7591  *               np.ndarray[np.uint8_t, ndim=3, cast=True] mask,
7592  *               np.ndarray vals):
7593  *     if vals.dtype == np.float32:             # <<<<<<<<<<<<<<
7594  *         return _mask_fill[np.float32_t](out, offset, mask, vals)
7595  *     elif vals.dtype == np.float64:
7596  */
7597   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_vals), __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 118, __pyx_L1_error)
7598   __Pyx_GOTREF(__pyx_t_1);
7599   __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L1_error)
7600   __Pyx_GOTREF(__pyx_t_2);
7601   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float32); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 118, __pyx_L1_error)
7602   __Pyx_GOTREF(__pyx_t_3);
7603   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
7604   __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L1_error)
7605   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
7606   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
7607   __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 118, __pyx_L1_error)
7608   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
7609   if (__pyx_t_4) {
7610 
7611     /* "yt/geometry/selection_routines.pyx":119
7612  *               np.ndarray vals):
7613  *     if vals.dtype == np.float32:
7614  *         return _mask_fill[np.float32_t](out, offset, mask, vals)             # <<<<<<<<<<<<<<
7615  *     elif vals.dtype == np.float64:
7616  *         return _mask_fill[np.float64_t](out, offset, mask, vals)
7617  */
7618     __Pyx_XDECREF(__pyx_r);
7619     __pyx_t_2 = __pyx_fuse_0__pyx_f_2yt_8geometry_18selection_routines__mask_fill(((PyArrayObject *)__pyx_v_out), __pyx_v_offset, ((PyArrayObject *)__pyx_v_mask), ((PyArrayObject *)__pyx_v_vals)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 119, __pyx_L1_error)
7620     __Pyx_GOTREF(__pyx_t_2);
7621     __pyx_r = __pyx_t_2;
7622     __pyx_t_2 = 0;
7623     goto __pyx_L0;
7624 
7625     /* "yt/geometry/selection_routines.pyx":118
7626  *               np.ndarray[np.uint8_t, ndim=3, cast=True] mask,
7627  *               np.ndarray vals):
7628  *     if vals.dtype == np.float32:             # <<<<<<<<<<<<<<
7629  *         return _mask_fill[np.float32_t](out, offset, mask, vals)
7630  *     elif vals.dtype == np.float64:
7631  */
7632   }
7633 
7634   /* "yt/geometry/selection_routines.pyx":120
7635  *     if vals.dtype == np.float32:
7636  *         return _mask_fill[np.float32_t](out, offset, mask, vals)
7637  *     elif vals.dtype == np.float64:             # <<<<<<<<<<<<<<
7638  *         return _mask_fill[np.float64_t](out, offset, mask, vals)
7639  *     else:
7640  */
7641   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_vals), __pyx_n_s_dtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 120, __pyx_L1_error)
7642   __Pyx_GOTREF(__pyx_t_2);
7643   __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 120, __pyx_L1_error)
7644   __Pyx_GOTREF(__pyx_t_3);
7645   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 120, __pyx_L1_error)
7646   __Pyx_GOTREF(__pyx_t_1);
7647   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
7648   __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 120, __pyx_L1_error)
7649   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
7650   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
7651   __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 120, __pyx_L1_error)
7652   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
7653   if (likely(__pyx_t_4)) {
7654 
7655     /* "yt/geometry/selection_routines.pyx":121
7656  *         return _mask_fill[np.float32_t](out, offset, mask, vals)
7657  *     elif vals.dtype == np.float64:
7658  *         return _mask_fill[np.float64_t](out, offset, mask, vals)             # <<<<<<<<<<<<<<
7659  *     else:
7660  *         raise RuntimeError
7661  */
7662     __Pyx_XDECREF(__pyx_r);
7663     __pyx_t_3 = __pyx_fuse_1__pyx_f_2yt_8geometry_18selection_routines__mask_fill(((PyArrayObject *)__pyx_v_out), __pyx_v_offset, ((PyArrayObject *)__pyx_v_mask), ((PyArrayObject *)__pyx_v_vals)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 121, __pyx_L1_error)
7664     __Pyx_GOTREF(__pyx_t_3);
7665     __pyx_r = __pyx_t_3;
7666     __pyx_t_3 = 0;
7667     goto __pyx_L0;
7668 
7669     /* "yt/geometry/selection_routines.pyx":120
7670  *     if vals.dtype == np.float32:
7671  *         return _mask_fill[np.float32_t](out, offset, mask, vals)
7672  *     elif vals.dtype == np.float64:             # <<<<<<<<<<<<<<
7673  *         return _mask_fill[np.float64_t](out, offset, mask, vals)
7674  *     else:
7675  */
7676   }
7677 
7678   /* "yt/geometry/selection_routines.pyx":123
7679  *         return _mask_fill[np.float64_t](out, offset, mask, vals)
7680  *     else:
7681  *         raise RuntimeError             # <<<<<<<<<<<<<<
7682  *
7683  * @cython.cdivision(True)
7684  */
7685   /*else*/ {
7686     __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0);
7687     __PYX_ERR(0, 123, __pyx_L1_error)
7688   }
7689 
7690   /* "yt/geometry/selection_routines.pyx":114
7691  *     return count
7692  *
7693  * def mask_fill(np.ndarray[np.float64_t, ndim=1] out,             # <<<<<<<<<<<<<<
7694  *               np.int64_t offset,
7695  *               np.ndarray[np.uint8_t, ndim=3, cast=True] mask,
7696  */
7697 
7698   /* function exit code */
7699   __pyx_L1_error:;
7700   __Pyx_XDECREF(__pyx_t_1);
7701   __Pyx_XDECREF(__pyx_t_2);
7702   __Pyx_XDECREF(__pyx_t_3);
7703   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
7704     __Pyx_PyThreadState_declare
7705     __Pyx_PyThreadState_assign
7706     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
7707     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
7708     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out.rcbuffer->pybuffer);
7709   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
7710   __Pyx_AddTraceback("yt.geometry.selection_routines.mask_fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
7711   __pyx_r = NULL;
7712   goto __pyx_L2;
7713   __pyx_L0:;
7714   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
7715   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_out.rcbuffer->pybuffer);
7716   __pyx_L2:;
7717   __Pyx_XGIVEREF(__pyx_r);
7718   __Pyx_RefNannyFinishContext();
7719   return __pyx_r;
7720 }
7721 
7722 /* "yt/geometry/selection_routines.pyx":128
7723  * @cython.boundscheck(False)
7724  * @cython.wraparound(False)
7725  * def points_in_cells(             # <<<<<<<<<<<<<<
7726  *         np.float64_t[:] cx,
7727  *         np.float64_t[:] cy,
7728  */
7729 
7730 /* Python wrapper */
7731 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_5points_in_cells(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
7732 static PyMethodDef __pyx_mdef_2yt_8geometry_18selection_routines_5points_in_cells = {"points_in_cells", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_5points_in_cells, METH_VARARGS|METH_KEYWORDS, 0};
7733 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_5points_in_cells(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
7734   __Pyx_memviewslice __pyx_v_cx = { 0, 0, { 0 }, { 0 }, { 0 } };
7735   __Pyx_memviewslice __pyx_v_cy = { 0, 0, { 0 }, { 0 }, { 0 } };
7736   __Pyx_memviewslice __pyx_v_cz = { 0, 0, { 0 }, { 0 }, { 0 } };
7737   __Pyx_memviewslice __pyx_v_dx = { 0, 0, { 0 }, { 0 }, { 0 } };
7738   __Pyx_memviewslice __pyx_v_dy = { 0, 0, { 0 }, { 0 }, { 0 } };
7739   __Pyx_memviewslice __pyx_v_dz = { 0, 0, { 0 }, { 0 }, { 0 } };
7740   __Pyx_memviewslice __pyx_v_px = { 0, 0, { 0 }, { 0 }, { 0 } };
7741   __Pyx_memviewslice __pyx_v_py = { 0, 0, { 0 }, { 0 }, { 0 } };
7742   __Pyx_memviewslice __pyx_v_pz = { 0, 0, { 0 }, { 0 }, { 0 } };
7743   PyObject *__pyx_r = 0;
7744   __Pyx_RefNannyDeclarations
7745   __Pyx_RefNannySetupContext("points_in_cells (wrapper)", 0);
7746   {
7747     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cx,&__pyx_n_s_cy,&__pyx_n_s_cz,&__pyx_n_s_dx,&__pyx_n_s_dy,&__pyx_n_s_dz,&__pyx_n_s_px,&__pyx_n_s_py,&__pyx_n_s_pz,0};
7748     PyObject* values[9] = {0,0,0,0,0,0,0,0,0};
7749     if (unlikely(__pyx_kwds)) {
7750       Py_ssize_t kw_args;
7751       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
7752       switch (pos_args) {
7753         case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
7754         CYTHON_FALLTHROUGH;
7755         case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
7756         CYTHON_FALLTHROUGH;
7757         case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
7758         CYTHON_FALLTHROUGH;
7759         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
7760         CYTHON_FALLTHROUGH;
7761         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
7762         CYTHON_FALLTHROUGH;
7763         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
7764         CYTHON_FALLTHROUGH;
7765         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
7766         CYTHON_FALLTHROUGH;
7767         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
7768         CYTHON_FALLTHROUGH;
7769         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
7770         CYTHON_FALLTHROUGH;
7771         case  0: break;
7772         default: goto __pyx_L5_argtuple_error;
7773       }
7774       kw_args = PyDict_Size(__pyx_kwds);
7775       switch (pos_args) {
7776         case  0:
7777         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cx)) != 0)) kw_args--;
7778         else goto __pyx_L5_argtuple_error;
7779         CYTHON_FALLTHROUGH;
7780         case  1:
7781         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cy)) != 0)) kw_args--;
7782         else {
7783           __Pyx_RaiseArgtupleInvalid("points_in_cells", 1, 9, 9, 1); __PYX_ERR(0, 128, __pyx_L3_error)
7784         }
7785         CYTHON_FALLTHROUGH;
7786         case  2:
7787         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_cz)) != 0)) kw_args--;
7788         else {
7789           __Pyx_RaiseArgtupleInvalid("points_in_cells", 1, 9, 9, 2); __PYX_ERR(0, 128, __pyx_L3_error)
7790         }
7791         CYTHON_FALLTHROUGH;
7792         case  3:
7793         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dx)) != 0)) kw_args--;
7794         else {
7795           __Pyx_RaiseArgtupleInvalid("points_in_cells", 1, 9, 9, 3); __PYX_ERR(0, 128, __pyx_L3_error)
7796         }
7797         CYTHON_FALLTHROUGH;
7798         case  4:
7799         if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dy)) != 0)) kw_args--;
7800         else {
7801           __Pyx_RaiseArgtupleInvalid("points_in_cells", 1, 9, 9, 4); __PYX_ERR(0, 128, __pyx_L3_error)
7802         }
7803         CYTHON_FALLTHROUGH;
7804         case  5:
7805         if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dz)) != 0)) kw_args--;
7806         else {
7807           __Pyx_RaiseArgtupleInvalid("points_in_cells", 1, 9, 9, 5); __PYX_ERR(0, 128, __pyx_L3_error)
7808         }
7809         CYTHON_FALLTHROUGH;
7810         case  6:
7811         if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_px)) != 0)) kw_args--;
7812         else {
7813           __Pyx_RaiseArgtupleInvalid("points_in_cells", 1, 9, 9, 6); __PYX_ERR(0, 128, __pyx_L3_error)
7814         }
7815         CYTHON_FALLTHROUGH;
7816         case  7:
7817         if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_py)) != 0)) kw_args--;
7818         else {
7819           __Pyx_RaiseArgtupleInvalid("points_in_cells", 1, 9, 9, 7); __PYX_ERR(0, 128, __pyx_L3_error)
7820         }
7821         CYTHON_FALLTHROUGH;
7822         case  8:
7823         if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pz)) != 0)) kw_args--;
7824         else {
7825           __Pyx_RaiseArgtupleInvalid("points_in_cells", 1, 9, 9, 8); __PYX_ERR(0, 128, __pyx_L3_error)
7826         }
7827       }
7828       if (unlikely(kw_args > 0)) {
7829         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "points_in_cells") < 0)) __PYX_ERR(0, 128, __pyx_L3_error)
7830       }
7831     } else if (PyTuple_GET_SIZE(__pyx_args) != 9) {
7832       goto __pyx_L5_argtuple_error;
7833     } else {
7834       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
7835       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
7836       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
7837       values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
7838       values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
7839       values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
7840       values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
7841       values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
7842       values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
7843     }
7844     __pyx_v_cx = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_cx.memview)) __PYX_ERR(0, 129, __pyx_L3_error)
7845     __pyx_v_cy = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_cy.memview)) __PYX_ERR(0, 130, __pyx_L3_error)
7846     __pyx_v_cz = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_cz.memview)) __PYX_ERR(0, 131, __pyx_L3_error)
7847     __pyx_v_dx = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dx.memview)) __PYX_ERR(0, 132, __pyx_L3_error)
7848     __pyx_v_dy = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(values[4], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dy.memview)) __PYX_ERR(0, 133, __pyx_L3_error)
7849     __pyx_v_dz = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(values[5], PyBUF_WRITABLE); if (unlikely(!__pyx_v_dz.memview)) __PYX_ERR(0, 134, __pyx_L3_error)
7850     __pyx_v_px = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(values[6], PyBUF_WRITABLE); if (unlikely(!__pyx_v_px.memview)) __PYX_ERR(0, 135, __pyx_L3_error)
7851     __pyx_v_py = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(values[7], PyBUF_WRITABLE); if (unlikely(!__pyx_v_py.memview)) __PYX_ERR(0, 136, __pyx_L3_error)
7852     __pyx_v_pz = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(values[8], PyBUF_WRITABLE); if (unlikely(!__pyx_v_pz.memview)) __PYX_ERR(0, 137, __pyx_L3_error)
7853   }
7854   goto __pyx_L4_argument_unpacking_done;
7855   __pyx_L5_argtuple_error:;
7856   __Pyx_RaiseArgtupleInvalid("points_in_cells", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 128, __pyx_L3_error)
7857   __pyx_L3_error:;
7858   __Pyx_AddTraceback("yt.geometry.selection_routines.points_in_cells", __pyx_clineno, __pyx_lineno, __pyx_filename);
7859   __Pyx_RefNannyFinishContext();
7860   return NULL;
7861   __pyx_L4_argument_unpacking_done:;
7862   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_4points_in_cells(__pyx_self, __pyx_v_cx, __pyx_v_cy, __pyx_v_cz, __pyx_v_dx, __pyx_v_dy, __pyx_v_dz, __pyx_v_px, __pyx_v_py, __pyx_v_pz);
7863 
7864   /* function exit code */
7865   __Pyx_RefNannyFinishContext();
7866   return __pyx_r;
7867 }
7868 
7869 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_4points_in_cells(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_cx, __Pyx_memviewslice __pyx_v_cy, __Pyx_memviewslice __pyx_v_cz, __Pyx_memviewslice __pyx_v_dx, __Pyx_memviewslice __pyx_v_dy, __Pyx_memviewslice __pyx_v_dz, __Pyx_memviewslice __pyx_v_px, __Pyx_memviewslice __pyx_v_py, __Pyx_memviewslice __pyx_v_pz) {
7870   int __pyx_v_p;
7871   int __pyx_v_c;
7872   int __pyx_v_n_p;
7873   int __pyx_v_n_c;
7874   PyArrayObject *__pyx_v_mask = 0;
7875   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
7876   __Pyx_Buffer __pyx_pybuffer_mask;
7877   PyObject *__pyx_r = NULL;
7878   __Pyx_RefNannyDeclarations
7879   PyObject *__pyx_t_1 = NULL;
7880   PyObject *__pyx_t_2 = NULL;
7881   int __pyx_t_3;
7882   PyObject *__pyx_t_4 = NULL;
7883   PyObject *__pyx_t_5 = NULL;
7884   PyArrayObject *__pyx_t_6 = NULL;
7885   PyObject *__pyx_t_7 = NULL;
7886   PyObject *__pyx_t_8 = NULL;
7887   PyObject *__pyx_t_9 = NULL;
7888   int __pyx_t_10;
7889   int __pyx_t_11;
7890   int __pyx_t_12;
7891   int __pyx_t_13;
7892   int __pyx_t_14;
7893   int __pyx_t_15;
7894   Py_ssize_t __pyx_t_16;
7895   Py_ssize_t __pyx_t_17;
7896   Py_ssize_t __pyx_t_18;
7897   int __pyx_t_19;
7898   Py_ssize_t __pyx_t_20;
7899   Py_ssize_t __pyx_t_21;
7900   Py_ssize_t __pyx_t_22;
7901   Py_ssize_t __pyx_t_23;
7902   Py_ssize_t __pyx_t_24;
7903   Py_ssize_t __pyx_t_25;
7904   Py_ssize_t __pyx_t_26;
7905   __Pyx_RefNannySetupContext("points_in_cells", 0);
7906   __pyx_pybuffer_mask.pybuffer.buf = NULL;
7907   __pyx_pybuffer_mask.refcount = 0;
7908   __pyx_pybuffernd_mask.data = NULL;
7909   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
7910 
7911   /* "yt/geometry/selection_routines.pyx":146
7912  *     cdef np.ndarray[np.uint8_t, ndim=1, cast=True] mask
7913  *
7914  *     n_p = px.size             # <<<<<<<<<<<<<<
7915  *     n_c = cx.size
7916  *     mask = np.zeros(n_p, dtype="bool")
7917  */
7918   __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_px, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float64_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float64_t, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 146, __pyx_L1_error)
7919   __Pyx_GOTREF(__pyx_t_1);
7920   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 146, __pyx_L1_error)
7921   __Pyx_GOTREF(__pyx_t_2);
7922   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
7923   __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 146, __pyx_L1_error)
7924   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
7925   __pyx_v_n_p = __pyx_t_3;
7926 
7927   /* "yt/geometry/selection_routines.pyx":147
7928  *
7929  *     n_p = px.size
7930  *     n_c = cx.size             # <<<<<<<<<<<<<<
7931  *     mask = np.zeros(n_p, dtype="bool")
7932  *
7933  */
7934   __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_cx, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float64_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float64_t, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 147, __pyx_L1_error)
7935   __Pyx_GOTREF(__pyx_t_2);
7936   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error)
7937   __Pyx_GOTREF(__pyx_t_1);
7938   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
7939   __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 147, __pyx_L1_error)
7940   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
7941   __pyx_v_n_c = __pyx_t_3;
7942 
7943   /* "yt/geometry/selection_routines.pyx":148
7944  *     n_p = px.size
7945  *     n_c = cx.size
7946  *     mask = np.zeros(n_p, dtype="bool")             # <<<<<<<<<<<<<<
7947  *
7948  *     for p in range(n_p):
7949  */
7950   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error)
7951   __Pyx_GOTREF(__pyx_t_1);
7952   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 148, __pyx_L1_error)
7953   __Pyx_GOTREF(__pyx_t_2);
7954   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
7955   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_n_p); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error)
7956   __Pyx_GOTREF(__pyx_t_1);
7957   __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 148, __pyx_L1_error)
7958   __Pyx_GOTREF(__pyx_t_4);
7959   __Pyx_GIVEREF(__pyx_t_1);
7960   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
7961   __pyx_t_1 = 0;
7962   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error)
7963   __Pyx_GOTREF(__pyx_t_1);
7964   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_bool) < 0) __PYX_ERR(0, 148, __pyx_L1_error)
7965   __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 148, __pyx_L1_error)
7966   __Pyx_GOTREF(__pyx_t_5);
7967   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
7968   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
7969   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
7970   if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 148, __pyx_L1_error)
7971   __pyx_t_6 = ((PyArrayObject *)__pyx_t_5);
7972   {
7973     __Pyx_BufFmt_StackElem __pyx_stack[1];
7974     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
7975     __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 1, __pyx_stack);
7976     if (unlikely(__pyx_t_3 < 0)) {
7977       PyErr_Fetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
7978       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 1, __pyx_stack) == -1)) {
7979         Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9);
7980         __Pyx_RaiseBufferFallbackError();
7981       } else {
7982         PyErr_Restore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
7983       }
7984       __pyx_t_7 = __pyx_t_8 = __pyx_t_9 = 0;
7985     }
7986     __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0];
7987     if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 148, __pyx_L1_error)
7988   }
7989   __pyx_t_6 = 0;
7990   __pyx_v_mask = ((PyArrayObject *)__pyx_t_5);
7991   __pyx_t_5 = 0;
7992 
7993   /* "yt/geometry/selection_routines.pyx":150
7994  *     mask = np.zeros(n_p, dtype="bool")
7995  *
7996  *     for p in range(n_p):             # <<<<<<<<<<<<<<
7997  *         for c in range(n_c):
7998  *             if (fabs(px[p] - cx[c]) <= 0.5 * dx[c] and
7999  */
8000   __pyx_t_3 = __pyx_v_n_p;
8001   __pyx_t_10 = __pyx_t_3;
8002   for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
8003     __pyx_v_p = __pyx_t_11;
8004 
8005     /* "yt/geometry/selection_routines.pyx":151
8006  *
8007  *     for p in range(n_p):
8008  *         for c in range(n_c):             # <<<<<<<<<<<<<<
8009  *             if (fabs(px[p] - cx[c]) <= 0.5 * dx[c] and
8010  *                 fabs(py[p] - cy[c]) <= 0.5 * dy[c] and
8011  */
8012     __pyx_t_12 = __pyx_v_n_c;
8013     __pyx_t_13 = __pyx_t_12;
8014     for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
8015       __pyx_v_c = __pyx_t_14;
8016 
8017       /* "yt/geometry/selection_routines.pyx":152
8018  *     for p in range(n_p):
8019  *         for c in range(n_c):
8020  *             if (fabs(px[p] - cx[c]) <= 0.5 * dx[c] and             # <<<<<<<<<<<<<<
8021  *                 fabs(py[p] - cy[c]) <= 0.5 * dy[c] and
8022  *                 fabs(pz[p] - cz[c]) <= 0.5 * dz[c]):
8023  */
8024       __pyx_t_16 = __pyx_v_p;
8025       __pyx_t_17 = __pyx_v_c;
8026       __pyx_t_18 = __pyx_v_c;
8027       __pyx_t_19 = ((fabs(((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_px.data + __pyx_t_16 * __pyx_v_px.strides[0]) ))) - (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_cx.data + __pyx_t_17 * __pyx_v_cx.strides[0]) ))))) <= (0.5 * (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_dx.data + __pyx_t_18 * __pyx_v_dx.strides[0]) ))))) != 0);
8028       if (__pyx_t_19) {
8029       } else {
8030         __pyx_t_15 = __pyx_t_19;
8031         goto __pyx_L8_bool_binop_done;
8032       }
8033 
8034       /* "yt/geometry/selection_routines.pyx":153
8035  *         for c in range(n_c):
8036  *             if (fabs(px[p] - cx[c]) <= 0.5 * dx[c] and
8037  *                 fabs(py[p] - cy[c]) <= 0.5 * dy[c] and             # <<<<<<<<<<<<<<
8038  *                 fabs(pz[p] - cz[c]) <= 0.5 * dz[c]):
8039  *                 mask[p] = True
8040  */
8041       __pyx_t_20 = __pyx_v_p;
8042       __pyx_t_21 = __pyx_v_c;
8043       __pyx_t_22 = __pyx_v_c;
8044       __pyx_t_19 = ((fabs(((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_py.data + __pyx_t_20 * __pyx_v_py.strides[0]) ))) - (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_cy.data + __pyx_t_21 * __pyx_v_cy.strides[0]) ))))) <= (0.5 * (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_dy.data + __pyx_t_22 * __pyx_v_dy.strides[0]) ))))) != 0);
8045       if (__pyx_t_19) {
8046       } else {
8047         __pyx_t_15 = __pyx_t_19;
8048         goto __pyx_L8_bool_binop_done;
8049       }
8050 
8051       /* "yt/geometry/selection_routines.pyx":154
8052  *             if (fabs(px[p] - cx[c]) <= 0.5 * dx[c] and
8053  *                 fabs(py[p] - cy[c]) <= 0.5 * dy[c] and
8054  *                 fabs(pz[p] - cz[c]) <= 0.5 * dz[c]):             # <<<<<<<<<<<<<<
8055  *                 mask[p] = True
8056  *                 break
8057  */
8058       __pyx_t_23 = __pyx_v_p;
8059       __pyx_t_24 = __pyx_v_c;
8060       __pyx_t_25 = __pyx_v_c;
8061       __pyx_t_19 = ((fabs(((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_pz.data + __pyx_t_23 * __pyx_v_pz.strides[0]) ))) - (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_cz.data + __pyx_t_24 * __pyx_v_cz.strides[0]) ))))) <= (0.5 * (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_dz.data + __pyx_t_25 * __pyx_v_dz.strides[0]) ))))) != 0);
8062       __pyx_t_15 = __pyx_t_19;
8063       __pyx_L8_bool_binop_done:;
8064 
8065       /* "yt/geometry/selection_routines.pyx":152
8066  *     for p in range(n_p):
8067  *         for c in range(n_c):
8068  *             if (fabs(px[p] - cx[c]) <= 0.5 * dx[c] and             # <<<<<<<<<<<<<<
8069  *                 fabs(py[p] - cy[c]) <= 0.5 * dy[c] and
8070  *                 fabs(pz[p] - cz[c]) <= 0.5 * dz[c]):
8071  */
8072       if (__pyx_t_15) {
8073 
8074         /* "yt/geometry/selection_routines.pyx":155
8075  *                 fabs(py[p] - cy[c]) <= 0.5 * dy[c] and
8076  *                 fabs(pz[p] - cz[c]) <= 0.5 * dz[c]):
8077  *                 mask[p] = True             # <<<<<<<<<<<<<<
8078  *                 break
8079  *
8080  */
8081         __pyx_t_26 = __pyx_v_p;
8082         *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_mask.diminfo[0].strides) = 1;
8083 
8084         /* "yt/geometry/selection_routines.pyx":156
8085  *                 fabs(pz[p] - cz[c]) <= 0.5 * dz[c]):
8086  *                 mask[p] = True
8087  *                 break             # <<<<<<<<<<<<<<
8088  *
8089  *     return mask
8090  */
8091         goto __pyx_L6_break;
8092 
8093         /* "yt/geometry/selection_routines.pyx":152
8094  *     for p in range(n_p):
8095  *         for c in range(n_c):
8096  *             if (fabs(px[p] - cx[c]) <= 0.5 * dx[c] and             # <<<<<<<<<<<<<<
8097  *                 fabs(py[p] - cy[c]) <= 0.5 * dy[c] and
8098  *                 fabs(pz[p] - cz[c]) <= 0.5 * dz[c]):
8099  */
8100       }
8101     }
8102     __pyx_L6_break:;
8103   }
8104 
8105   /* "yt/geometry/selection_routines.pyx":158
8106  *                 break
8107  *
8108  *     return mask             # <<<<<<<<<<<<<<
8109  *
8110  * include "_selection_routines/selector_object.pxi"
8111  */
8112   __Pyx_XDECREF(__pyx_r);
8113   __Pyx_INCREF(((PyObject *)__pyx_v_mask));
8114   __pyx_r = ((PyObject *)__pyx_v_mask);
8115   goto __pyx_L0;
8116 
8117   /* "yt/geometry/selection_routines.pyx":128
8118  * @cython.boundscheck(False)
8119  * @cython.wraparound(False)
8120  * def points_in_cells(             # <<<<<<<<<<<<<<
8121  *         np.float64_t[:] cx,
8122  *         np.float64_t[:] cy,
8123  */
8124 
8125   /* function exit code */
8126   __pyx_L1_error:;
8127   __Pyx_XDECREF(__pyx_t_1);
8128   __Pyx_XDECREF(__pyx_t_2);
8129   __Pyx_XDECREF(__pyx_t_4);
8130   __Pyx_XDECREF(__pyx_t_5);
8131   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
8132     __Pyx_PyThreadState_declare
8133     __Pyx_PyThreadState_assign
8134     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
8135     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
8136   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
8137   __Pyx_AddTraceback("yt.geometry.selection_routines.points_in_cells", __pyx_clineno, __pyx_lineno, __pyx_filename);
8138   __pyx_r = NULL;
8139   goto __pyx_L2;
8140   __pyx_L0:;
8141   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
8142   __pyx_L2:;
8143   __Pyx_XDECREF((PyObject *)__pyx_v_mask);
8144   __PYX_XDEC_MEMVIEW(&__pyx_v_cx, 1);
8145   __PYX_XDEC_MEMVIEW(&__pyx_v_cy, 1);
8146   __PYX_XDEC_MEMVIEW(&__pyx_v_cz, 1);
8147   __PYX_XDEC_MEMVIEW(&__pyx_v_dx, 1);
8148   __PYX_XDEC_MEMVIEW(&__pyx_v_dy, 1);
8149   __PYX_XDEC_MEMVIEW(&__pyx_v_dz, 1);
8150   __PYX_XDEC_MEMVIEW(&__pyx_v_px, 1);
8151   __PYX_XDEC_MEMVIEW(&__pyx_v_py, 1);
8152   __PYX_XDEC_MEMVIEW(&__pyx_v_pz, 1);
8153   __Pyx_XGIVEREF(__pyx_r);
8154   __Pyx_RefNannyFinishContext();
8155   return __pyx_r;
8156 }
8157 
8158 /* "yt/geometry/_selection_routines/selector_object.pxi":3
8159  * cdef class SelectorObject:
8160  *
8161  *     def __cinit__(self, dobj, *args):             # <<<<<<<<<<<<<<
8162  *         self._hash_initialized = 0
8163  *         cdef np.float64_t [:] DLE
8164  */
8165 
8166 /* Python wrapper */
8167 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
8168 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
8169   PyObject *__pyx_v_dobj = 0;
8170   CYTHON_UNUSED PyObject *__pyx_v_args = 0;
8171   int __pyx_r;
8172   __Pyx_RefNannyDeclarations
8173   __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
8174   if (PyTuple_GET_SIZE(__pyx_args) > 1) {
8175     __pyx_v_args = PyTuple_GetSlice(__pyx_args, 1, PyTuple_GET_SIZE(__pyx_args));
8176     if (unlikely(!__pyx_v_args)) {
8177       __Pyx_RefNannyFinishContext();
8178       return -1;
8179     }
8180     __Pyx_GOTREF(__pyx_v_args);
8181   } else {
8182     __pyx_v_args = __pyx_empty_tuple; __Pyx_INCREF(__pyx_empty_tuple);
8183   }
8184   {
8185     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
8186     PyObject* values[1] = {0};
8187     if (unlikely(__pyx_kwds)) {
8188       Py_ssize_t kw_args;
8189       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
8190       switch (pos_args) {
8191         default:
8192         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
8193         CYTHON_FALLTHROUGH;
8194         case  0: break;
8195       }
8196       kw_args = PyDict_Size(__pyx_kwds);
8197       switch (pos_args) {
8198         case  0:
8199         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
8200         else goto __pyx_L5_argtuple_error;
8201       }
8202       if (unlikely(kw_args > 0)) {
8203         const Py_ssize_t used_pos_args = (pos_args < 1) ? pos_args : 1;
8204         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "__cinit__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
8205       }
8206     } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
8207       goto __pyx_L5_argtuple_error;
8208     } else {
8209       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
8210     }
8211     __pyx_v_dobj = values[0];
8212   }
8213   goto __pyx_L4_argument_unpacking_done;
8214   __pyx_L5_argtuple_error:;
8215   __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 3, __pyx_L3_error)
8216   __pyx_L3_error:;
8217   __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
8218   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
8219   __Pyx_RefNannyFinishContext();
8220   return -1;
8221   __pyx_L4_argument_unpacking_done:;
8222   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject___cinit__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_dobj, __pyx_v_args);
8223 
8224   /* function exit code */
8225   __Pyx_XDECREF(__pyx_v_args);
8226   __Pyx_RefNannyFinishContext();
8227   return __pyx_r;
8228 }
8229 
8230 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject___cinit__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_dobj, CYTHON_UNUSED PyObject *__pyx_v_args) {
8231   __Pyx_memviewslice __pyx_v_DLE = { 0, 0, { 0 }, { 0 }, { 0 } };
8232   __Pyx_memviewslice __pyx_v_DRE = { 0, 0, { 0 }, { 0 }, { 0 } };
8233   PyObject *__pyx_v_min_level = NULL;
8234   PyObject *__pyx_v_max_level = NULL;
8235   PyObject *__pyx_v_ds = NULL;
8236   long __pyx_v_i;
8237   int __pyx_r;
8238   __Pyx_RefNannyDeclarations
8239   PyObject *__pyx_t_1 = NULL;
8240   int __pyx_t_2;
8241   int __pyx_t_3;
8242   __pyx_t_5numpy_int32_t __pyx_t_4;
8243   long __pyx_t_5;
8244   PyObject *__pyx_t_6 = NULL;
8245   __Pyx_memviewslice __pyx_t_7 = { 0, 0, { 0 }, { 0 }, { 0 } };
8246   Py_ssize_t __pyx_t_8;
8247   int __pyx_t_9;
8248   Py_ssize_t __pyx_t_10;
8249   Py_ssize_t __pyx_t_11;
8250   __Pyx_RefNannySetupContext("__cinit__", 0);
8251 
8252   /* "yt/geometry/_selection_routines/selector_object.pxi":4
8253  *
8254  *     def __cinit__(self, dobj, *args):
8255  *         self._hash_initialized = 0             # <<<<<<<<<<<<<<
8256  *         cdef np.float64_t [:] DLE
8257  *         cdef np.float64_t [:] DRE
8258  */
8259   __pyx_v_self->_hash_initialized = 0;
8260 
8261   /* "yt/geometry/_selection_routines/selector_object.pxi":7
8262  *         cdef np.float64_t [:] DLE
8263  *         cdef np.float64_t [:] DRE
8264  *         min_level = getattr(dobj, "min_level", None)             # <<<<<<<<<<<<<<
8265  *         max_level = getattr(dobj, "max_level", None)
8266  *         if min_level is None:
8267  */
8268   __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_dobj, __pyx_n_s_min_level, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error)
8269   __Pyx_GOTREF(__pyx_t_1);
8270   __pyx_v_min_level = __pyx_t_1;
8271   __pyx_t_1 = 0;
8272 
8273   /* "yt/geometry/_selection_routines/selector_object.pxi":8
8274  *         cdef np.float64_t [:] DRE
8275  *         min_level = getattr(dobj, "min_level", None)
8276  *         max_level = getattr(dobj, "max_level", None)             # <<<<<<<<<<<<<<
8277  *         if min_level is None:
8278  *             min_level = 0
8279  */
8280   __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_dobj, __pyx_n_s_max_level, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error)
8281   __Pyx_GOTREF(__pyx_t_1);
8282   __pyx_v_max_level = __pyx_t_1;
8283   __pyx_t_1 = 0;
8284 
8285   /* "yt/geometry/_selection_routines/selector_object.pxi":9
8286  *         min_level = getattr(dobj, "min_level", None)
8287  *         max_level = getattr(dobj, "max_level", None)
8288  *         if min_level is None:             # <<<<<<<<<<<<<<
8289  *             min_level = 0
8290  *         if max_level is None:
8291  */
8292   __pyx_t_2 = (__pyx_v_min_level == Py_None);
8293   __pyx_t_3 = (__pyx_t_2 != 0);
8294   if (__pyx_t_3) {
8295 
8296     /* "yt/geometry/_selection_routines/selector_object.pxi":10
8297  *         max_level = getattr(dobj, "max_level", None)
8298  *         if min_level is None:
8299  *             min_level = 0             # <<<<<<<<<<<<<<
8300  *         if max_level is None:
8301  *             max_level = 99
8302  */
8303     __Pyx_INCREF(__pyx_int_0);
8304     __Pyx_DECREF_SET(__pyx_v_min_level, __pyx_int_0);
8305 
8306     /* "yt/geometry/_selection_routines/selector_object.pxi":9
8307  *         min_level = getattr(dobj, "min_level", None)
8308  *         max_level = getattr(dobj, "max_level", None)
8309  *         if min_level is None:             # <<<<<<<<<<<<<<
8310  *             min_level = 0
8311  *         if max_level is None:
8312  */
8313   }
8314 
8315   /* "yt/geometry/_selection_routines/selector_object.pxi":11
8316  *         if min_level is None:
8317  *             min_level = 0
8318  *         if max_level is None:             # <<<<<<<<<<<<<<
8319  *             max_level = 99
8320  *         self.min_level = min_level
8321  */
8322   __pyx_t_3 = (__pyx_v_max_level == Py_None);
8323   __pyx_t_2 = (__pyx_t_3 != 0);
8324   if (__pyx_t_2) {
8325 
8326     /* "yt/geometry/_selection_routines/selector_object.pxi":12
8327  *             min_level = 0
8328  *         if max_level is None:
8329  *             max_level = 99             # <<<<<<<<<<<<<<
8330  *         self.min_level = min_level
8331  *         self.max_level = max_level
8332  */
8333     __Pyx_INCREF(__pyx_int_99);
8334     __Pyx_DECREF_SET(__pyx_v_max_level, __pyx_int_99);
8335 
8336     /* "yt/geometry/_selection_routines/selector_object.pxi":11
8337  *         if min_level is None:
8338  *             min_level = 0
8339  *         if max_level is None:             # <<<<<<<<<<<<<<
8340  *             max_level = 99
8341  *         self.min_level = min_level
8342  */
8343   }
8344 
8345   /* "yt/geometry/_selection_routines/selector_object.pxi":13
8346  *         if max_level is None:
8347  *             max_level = 99
8348  *         self.min_level = min_level             # <<<<<<<<<<<<<<
8349  *         self.max_level = max_level
8350  *         self.overlap_cells = 0
8351  */
8352   __pyx_t_4 = __Pyx_PyInt_As_npy_int32(__pyx_v_min_level); if (unlikely((__pyx_t_4 == ((npy_int32)-1)) && PyErr_Occurred())) __PYX_ERR(1, 13, __pyx_L1_error)
8353   __pyx_v_self->min_level = __pyx_t_4;
8354 
8355   /* "yt/geometry/_selection_routines/selector_object.pxi":14
8356  *             max_level = 99
8357  *         self.min_level = min_level
8358  *         self.max_level = max_level             # <<<<<<<<<<<<<<
8359  *         self.overlap_cells = 0
8360  *
8361  */
8362   __pyx_t_4 = __Pyx_PyInt_As_npy_int32(__pyx_v_max_level); if (unlikely((__pyx_t_4 == ((npy_int32)-1)) && PyErr_Occurred())) __PYX_ERR(1, 14, __pyx_L1_error)
8363   __pyx_v_self->max_level = __pyx_t_4;
8364 
8365   /* "yt/geometry/_selection_routines/selector_object.pxi":15
8366  *         self.min_level = min_level
8367  *         self.max_level = max_level
8368  *         self.overlap_cells = 0             # <<<<<<<<<<<<<<
8369  *
8370  *         ds = getattr(dobj, 'ds', None)
8371  */
8372   __pyx_v_self->overlap_cells = 0;
8373 
8374   /* "yt/geometry/_selection_routines/selector_object.pxi":17
8375  *         self.overlap_cells = 0
8376  *
8377  *         ds = getattr(dobj, 'ds', None)             # <<<<<<<<<<<<<<
8378  *         if ds is None:
8379  *             for i in range(3):
8380  */
8381   __pyx_t_1 = __Pyx_GetAttr3(__pyx_v_dobj, __pyx_n_s_ds, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
8382   __Pyx_GOTREF(__pyx_t_1);
8383   __pyx_v_ds = __pyx_t_1;
8384   __pyx_t_1 = 0;
8385 
8386   /* "yt/geometry/_selection_routines/selector_object.pxi":18
8387  *
8388  *         ds = getattr(dobj, 'ds', None)
8389  *         if ds is None:             # <<<<<<<<<<<<<<
8390  *             for i in range(3):
8391  *                 # NOTE that this is not universal.
8392  */
8393   __pyx_t_2 = (__pyx_v_ds == Py_None);
8394   __pyx_t_3 = (__pyx_t_2 != 0);
8395   if (__pyx_t_3) {
8396 
8397     /* "yt/geometry/_selection_routines/selector_object.pxi":19
8398  *         ds = getattr(dobj, 'ds', None)
8399  *         if ds is None:
8400  *             for i in range(3):             # <<<<<<<<<<<<<<
8401  *                 # NOTE that this is not universal.
8402  *                 self.domain_width[i] = 1.0
8403  */
8404     for (__pyx_t_5 = 0; __pyx_t_5 < 3; __pyx_t_5+=1) {
8405       __pyx_v_i = __pyx_t_5;
8406 
8407       /* "yt/geometry/_selection_routines/selector_object.pxi":21
8408  *             for i in range(3):
8409  *                 # NOTE that this is not universal.
8410  *                 self.domain_width[i] = 1.0             # <<<<<<<<<<<<<<
8411  *                 self.periodicity[i] = False
8412  *         else:
8413  */
8414       (__pyx_v_self->domain_width[__pyx_v_i]) = 1.0;
8415 
8416       /* "yt/geometry/_selection_routines/selector_object.pxi":22
8417  *                 # NOTE that this is not universal.
8418  *                 self.domain_width[i] = 1.0
8419  *                 self.periodicity[i] = False             # <<<<<<<<<<<<<<
8420  *         else:
8421  *             DLE = _ensure_code(ds.domain_left_edge)
8422  */
8423       (__pyx_v_self->periodicity[__pyx_v_i]) = 0;
8424     }
8425 
8426     /* "yt/geometry/_selection_routines/selector_object.pxi":18
8427  *
8428  *         ds = getattr(dobj, 'ds', None)
8429  *         if ds is None:             # <<<<<<<<<<<<<<
8430  *             for i in range(3):
8431  *                 # NOTE that this is not universal.
8432  */
8433     goto __pyx_L5;
8434   }
8435 
8436   /* "yt/geometry/_selection_routines/selector_object.pxi":24
8437  *                 self.periodicity[i] = False
8438  *         else:
8439  *             DLE = _ensure_code(ds.domain_left_edge)             # <<<<<<<<<<<<<<
8440  *             DRE = _ensure_code(ds.domain_right_edge)
8441  *             for i in range(3):
8442  */
8443   /*else*/ {
8444     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_ds, __pyx_n_s_domain_left_edge); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 24, __pyx_L1_error)
8445     __Pyx_GOTREF(__pyx_t_1);
8446     __pyx_t_6 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 24, __pyx_L1_error)
8447     __Pyx_GOTREF(__pyx_t_6);
8448     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
8449     __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_6, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(1, 24, __pyx_L1_error)
8450     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
8451     __pyx_v_DLE = __pyx_t_7;
8452     __pyx_t_7.memview = NULL;
8453     __pyx_t_7.data = NULL;
8454 
8455     /* "yt/geometry/_selection_routines/selector_object.pxi":25
8456  *         else:
8457  *             DLE = _ensure_code(ds.domain_left_edge)
8458  *             DRE = _ensure_code(ds.domain_right_edge)             # <<<<<<<<<<<<<<
8459  *             for i in range(3):
8460  *                 self.domain_width[i] = DRE[i] - DLE[i]
8461  */
8462     __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_ds, __pyx_n_s_domain_right_edge); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 25, __pyx_L1_error)
8463     __Pyx_GOTREF(__pyx_t_6);
8464     __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 25, __pyx_L1_error)
8465     __Pyx_GOTREF(__pyx_t_1);
8466     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
8467     __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(1, 25, __pyx_L1_error)
8468     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
8469     __pyx_v_DRE = __pyx_t_7;
8470     __pyx_t_7.memview = NULL;
8471     __pyx_t_7.data = NULL;
8472 
8473     /* "yt/geometry/_selection_routines/selector_object.pxi":26
8474  *             DLE = _ensure_code(ds.domain_left_edge)
8475  *             DRE = _ensure_code(ds.domain_right_edge)
8476  *             for i in range(3):             # <<<<<<<<<<<<<<
8477  *                 self.domain_width[i] = DRE[i] - DLE[i]
8478  *                 self.domain_center[i] = DLE[i] + 0.5 * self.domain_width[i]
8479  */
8480     for (__pyx_t_5 = 0; __pyx_t_5 < 3; __pyx_t_5+=1) {
8481       __pyx_v_i = __pyx_t_5;
8482 
8483       /* "yt/geometry/_selection_routines/selector_object.pxi":27
8484  *             DRE = _ensure_code(ds.domain_right_edge)
8485  *             for i in range(3):
8486  *                 self.domain_width[i] = DRE[i] - DLE[i]             # <<<<<<<<<<<<<<
8487  *                 self.domain_center[i] = DLE[i] + 0.5 * self.domain_width[i]
8488  *                 self.periodicity[i] = ds.periodicity[i]
8489  */
8490       __pyx_t_8 = __pyx_v_i;
8491       __pyx_t_9 = -1;
8492       if (__pyx_t_8 < 0) {
8493         __pyx_t_8 += __pyx_v_DRE.shape[0];
8494         if (unlikely(__pyx_t_8 < 0)) __pyx_t_9 = 0;
8495       } else if (unlikely(__pyx_t_8 >= __pyx_v_DRE.shape[0])) __pyx_t_9 = 0;
8496       if (unlikely(__pyx_t_9 != -1)) {
8497         __Pyx_RaiseBufferIndexError(__pyx_t_9);
8498         __PYX_ERR(1, 27, __pyx_L1_error)
8499       }
8500       __pyx_t_10 = __pyx_v_i;
8501       __pyx_t_9 = -1;
8502       if (__pyx_t_10 < 0) {
8503         __pyx_t_10 += __pyx_v_DLE.shape[0];
8504         if (unlikely(__pyx_t_10 < 0)) __pyx_t_9 = 0;
8505       } else if (unlikely(__pyx_t_10 >= __pyx_v_DLE.shape[0])) __pyx_t_9 = 0;
8506       if (unlikely(__pyx_t_9 != -1)) {
8507         __Pyx_RaiseBufferIndexError(__pyx_t_9);
8508         __PYX_ERR(1, 27, __pyx_L1_error)
8509       }
8510       (__pyx_v_self->domain_width[__pyx_v_i]) = ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DRE.data + __pyx_t_8 * __pyx_v_DRE.strides[0]) ))) - (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DLE.data + __pyx_t_10 * __pyx_v_DLE.strides[0]) ))));
8511 
8512       /* "yt/geometry/_selection_routines/selector_object.pxi":28
8513  *             for i in range(3):
8514  *                 self.domain_width[i] = DRE[i] - DLE[i]
8515  *                 self.domain_center[i] = DLE[i] + 0.5 * self.domain_width[i]             # <<<<<<<<<<<<<<
8516  *                 self.periodicity[i] = ds.periodicity[i]
8517  *
8518  */
8519       __pyx_t_11 = __pyx_v_i;
8520       __pyx_t_9 = -1;
8521       if (__pyx_t_11 < 0) {
8522         __pyx_t_11 += __pyx_v_DLE.shape[0];
8523         if (unlikely(__pyx_t_11 < 0)) __pyx_t_9 = 0;
8524       } else if (unlikely(__pyx_t_11 >= __pyx_v_DLE.shape[0])) __pyx_t_9 = 0;
8525       if (unlikely(__pyx_t_9 != -1)) {
8526         __Pyx_RaiseBufferIndexError(__pyx_t_9);
8527         __PYX_ERR(1, 28, __pyx_L1_error)
8528       }
8529       (__pyx_v_self->domain_center[__pyx_v_i]) = ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DLE.data + __pyx_t_11 * __pyx_v_DLE.strides[0]) ))) + (0.5 * (__pyx_v_self->domain_width[__pyx_v_i])));
8530 
8531       /* "yt/geometry/_selection_routines/selector_object.pxi":29
8532  *                 self.domain_width[i] = DRE[i] - DLE[i]
8533  *                 self.domain_center[i] = DLE[i] + 0.5 * self.domain_width[i]
8534  *                 self.periodicity[i] = ds.periodicity[i]             # <<<<<<<<<<<<<<
8535  *
8536  *     def get_periodicity(self):
8537  */
8538       __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_ds, __pyx_n_s_periodicity); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 29, __pyx_L1_error)
8539       __Pyx_GOTREF(__pyx_t_1);
8540       __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 29, __pyx_L1_error)
8541       __Pyx_GOTREF(__pyx_t_6);
8542       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
8543       __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 29, __pyx_L1_error)
8544       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
8545       (__pyx_v_self->periodicity[__pyx_v_i]) = __pyx_t_3;
8546     }
8547   }
8548   __pyx_L5:;
8549 
8550   /* "yt/geometry/_selection_routines/selector_object.pxi":3
8551  * cdef class SelectorObject:
8552  *
8553  *     def __cinit__(self, dobj, *args):             # <<<<<<<<<<<<<<
8554  *         self._hash_initialized = 0
8555  *         cdef np.float64_t [:] DLE
8556  */
8557 
8558   /* function exit code */
8559   __pyx_r = 0;
8560   goto __pyx_L0;
8561   __pyx_L1_error:;
8562   __Pyx_XDECREF(__pyx_t_1);
8563   __Pyx_XDECREF(__pyx_t_6);
8564   __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
8565   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
8566   __pyx_r = -1;
8567   __pyx_L0:;
8568   __PYX_XDEC_MEMVIEW(&__pyx_v_DLE, 1);
8569   __PYX_XDEC_MEMVIEW(&__pyx_v_DRE, 1);
8570   __Pyx_XDECREF(__pyx_v_min_level);
8571   __Pyx_XDECREF(__pyx_v_max_level);
8572   __Pyx_XDECREF(__pyx_v_ds);
8573   __Pyx_RefNannyFinishContext();
8574   return __pyx_r;
8575 }
8576 
8577 /* "yt/geometry/_selection_routines/selector_object.pxi":31
8578  *                 self.periodicity[i] = ds.periodicity[i]
8579  *
8580  *     def get_periodicity(self):             # <<<<<<<<<<<<<<
8581  *         cdef int i
8582  *         cdef np.ndarray[np.uint8_t, ndim=1] periodicity
8583  */
8584 
8585 /* Python wrapper */
8586 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_3get_periodicity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
8587 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_3get_periodicity(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
8588   PyObject *__pyx_r = 0;
8589   __Pyx_RefNannyDeclarations
8590   __Pyx_RefNannySetupContext("get_periodicity (wrapper)", 0);
8591   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_2get_periodicity(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
8592 
8593   /* function exit code */
8594   __Pyx_RefNannyFinishContext();
8595   return __pyx_r;
8596 }
8597 
8598 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_2get_periodicity(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
8599   int __pyx_v_i;
8600   PyArrayObject *__pyx_v_periodicity = 0;
8601   __Pyx_LocalBuf_ND __pyx_pybuffernd_periodicity;
8602   __Pyx_Buffer __pyx_pybuffer_periodicity;
8603   PyObject *__pyx_r = NULL;
8604   __Pyx_RefNannyDeclarations
8605   PyObject *__pyx_t_1 = NULL;
8606   PyObject *__pyx_t_2 = NULL;
8607   PyObject *__pyx_t_3 = NULL;
8608   PyArrayObject *__pyx_t_4 = NULL;
8609   int __pyx_t_5;
8610   PyObject *__pyx_t_6 = NULL;
8611   PyObject *__pyx_t_7 = NULL;
8612   PyObject *__pyx_t_8 = NULL;
8613   Py_ssize_t __pyx_t_9;
8614   int __pyx_t_10;
8615   __Pyx_RefNannySetupContext("get_periodicity", 0);
8616   __pyx_pybuffer_periodicity.pybuffer.buf = NULL;
8617   __pyx_pybuffer_periodicity.refcount = 0;
8618   __pyx_pybuffernd_periodicity.data = NULL;
8619   __pyx_pybuffernd_periodicity.rcbuffer = &__pyx_pybuffer_periodicity;
8620 
8621   /* "yt/geometry/_selection_routines/selector_object.pxi":34
8622  *         cdef int i
8623  *         cdef np.ndarray[np.uint8_t, ndim=1] periodicity
8624  *         periodicity = np.zeros(3, dtype='uint8')             # <<<<<<<<<<<<<<
8625  *         for i in range(3):
8626  *             periodicity[i] = self.periodicity[i]
8627  */
8628   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 34, __pyx_L1_error)
8629   __Pyx_GOTREF(__pyx_t_1);
8630   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 34, __pyx_L1_error)
8631   __Pyx_GOTREF(__pyx_t_2);
8632   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
8633   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 34, __pyx_L1_error)
8634   __Pyx_GOTREF(__pyx_t_1);
8635   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(1, 34, __pyx_L1_error)
8636   __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple_, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 34, __pyx_L1_error)
8637   __Pyx_GOTREF(__pyx_t_3);
8638   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8639   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
8640   if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 34, __pyx_L1_error)
8641   __pyx_t_4 = ((PyArrayObject *)__pyx_t_3);
8642   {
8643     __Pyx_BufFmt_StackElem __pyx_stack[1];
8644     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_periodicity.rcbuffer->pybuffer);
8645     __pyx_t_5 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_periodicity.rcbuffer->pybuffer, (PyObject*)__pyx_t_4, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
8646     if (unlikely(__pyx_t_5 < 0)) {
8647       PyErr_Fetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
8648       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_periodicity.rcbuffer->pybuffer, (PyObject*)__pyx_v_periodicity, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
8649         Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8);
8650         __Pyx_RaiseBufferFallbackError();
8651       } else {
8652         PyErr_Restore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
8653       }
8654       __pyx_t_6 = __pyx_t_7 = __pyx_t_8 = 0;
8655     }
8656     __pyx_pybuffernd_periodicity.diminfo[0].strides = __pyx_pybuffernd_periodicity.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_periodicity.diminfo[0].shape = __pyx_pybuffernd_periodicity.rcbuffer->pybuffer.shape[0];
8657     if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(1, 34, __pyx_L1_error)
8658   }
8659   __pyx_t_4 = 0;
8660   __pyx_v_periodicity = ((PyArrayObject *)__pyx_t_3);
8661   __pyx_t_3 = 0;
8662 
8663   /* "yt/geometry/_selection_routines/selector_object.pxi":35
8664  *         cdef np.ndarray[np.uint8_t, ndim=1] periodicity
8665  *         periodicity = np.zeros(3, dtype='uint8')
8666  *         for i in range(3):             # <<<<<<<<<<<<<<
8667  *             periodicity[i] = self.periodicity[i]
8668  *         return periodicity
8669  */
8670   for (__pyx_t_5 = 0; __pyx_t_5 < 3; __pyx_t_5+=1) {
8671     __pyx_v_i = __pyx_t_5;
8672 
8673     /* "yt/geometry/_selection_routines/selector_object.pxi":36
8674  *         periodicity = np.zeros(3, dtype='uint8')
8675  *         for i in range(3):
8676  *             periodicity[i] = self.periodicity[i]             # <<<<<<<<<<<<<<
8677  *         return periodicity
8678  *
8679  */
8680     __pyx_t_9 = __pyx_v_i;
8681     __pyx_t_10 = -1;
8682     if (__pyx_t_9 < 0) {
8683       __pyx_t_9 += __pyx_pybuffernd_periodicity.diminfo[0].shape;
8684       if (unlikely(__pyx_t_9 < 0)) __pyx_t_10 = 0;
8685     } else if (unlikely(__pyx_t_9 >= __pyx_pybuffernd_periodicity.diminfo[0].shape)) __pyx_t_10 = 0;
8686     if (unlikely(__pyx_t_10 != -1)) {
8687       __Pyx_RaiseBufferIndexError(__pyx_t_10);
8688       __PYX_ERR(1, 36, __pyx_L1_error)
8689     }
8690     *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_periodicity.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_periodicity.diminfo[0].strides) = (__pyx_v_self->periodicity[__pyx_v_i]);
8691   }
8692 
8693   /* "yt/geometry/_selection_routines/selector_object.pxi":37
8694  *         for i in range(3):
8695  *             periodicity[i] = self.periodicity[i]
8696  *         return periodicity             # <<<<<<<<<<<<<<
8697  *
8698  *     @cython.boundscheck(False)
8699  */
8700   __Pyx_XDECREF(__pyx_r);
8701   __Pyx_INCREF(((PyObject *)__pyx_v_periodicity));
8702   __pyx_r = ((PyObject *)__pyx_v_periodicity);
8703   goto __pyx_L0;
8704 
8705   /* "yt/geometry/_selection_routines/selector_object.pxi":31
8706  *                 self.periodicity[i] = ds.periodicity[i]
8707  *
8708  *     def get_periodicity(self):             # <<<<<<<<<<<<<<
8709  *         cdef int i
8710  *         cdef np.ndarray[np.uint8_t, ndim=1] periodicity
8711  */
8712 
8713   /* function exit code */
8714   __pyx_L1_error:;
8715   __Pyx_XDECREF(__pyx_t_1);
8716   __Pyx_XDECREF(__pyx_t_2);
8717   __Pyx_XDECREF(__pyx_t_3);
8718   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
8719     __Pyx_PyThreadState_declare
8720     __Pyx_PyThreadState_assign
8721     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
8722     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_periodicity.rcbuffer->pybuffer);
8723   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
8724   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.get_periodicity", __pyx_clineno, __pyx_lineno, __pyx_filename);
8725   __pyx_r = NULL;
8726   goto __pyx_L2;
8727   __pyx_L0:;
8728   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_periodicity.rcbuffer->pybuffer);
8729   __pyx_L2:;
8730   __Pyx_XDECREF((PyObject *)__pyx_v_periodicity);
8731   __Pyx_XGIVEREF(__pyx_r);
8732   __Pyx_RefNannyFinishContext();
8733   return __pyx_r;
8734 }
8735 
8736 /* "yt/geometry/_selection_routines/selector_object.pxi":42
8737  *     @cython.wraparound(False)
8738  *     @cython.cdivision(True)
8739  *     def select_grids(self,             # <<<<<<<<<<<<<<
8740  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
8741  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
8742  */
8743 
8744 /* Python wrapper */
8745 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_5select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
8746 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_5select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
8747   PyArrayObject *__pyx_v_left_edges = 0;
8748   PyArrayObject *__pyx_v_right_edges = 0;
8749   PyArrayObject *__pyx_v_levels = 0;
8750   PyObject *__pyx_r = 0;
8751   __Pyx_RefNannyDeclarations
8752   __Pyx_RefNannySetupContext("select_grids (wrapper)", 0);
8753   {
8754     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_left_edges,&__pyx_n_s_right_edges,&__pyx_n_s_levels,0};
8755     PyObject* values[3] = {0,0,0};
8756     if (unlikely(__pyx_kwds)) {
8757       Py_ssize_t kw_args;
8758       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
8759       switch (pos_args) {
8760         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
8761         CYTHON_FALLTHROUGH;
8762         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
8763         CYTHON_FALLTHROUGH;
8764         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
8765         CYTHON_FALLTHROUGH;
8766         case  0: break;
8767         default: goto __pyx_L5_argtuple_error;
8768       }
8769       kw_args = PyDict_Size(__pyx_kwds);
8770       switch (pos_args) {
8771         case  0:
8772         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_left_edges)) != 0)) kw_args--;
8773         else goto __pyx_L5_argtuple_error;
8774         CYTHON_FALLTHROUGH;
8775         case  1:
8776         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_right_edges)) != 0)) kw_args--;
8777         else {
8778           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 1); __PYX_ERR(1, 42, __pyx_L3_error)
8779         }
8780         CYTHON_FALLTHROUGH;
8781         case  2:
8782         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_levels)) != 0)) kw_args--;
8783         else {
8784           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 2); __PYX_ERR(1, 42, __pyx_L3_error)
8785         }
8786       }
8787       if (unlikely(kw_args > 0)) {
8788         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_grids") < 0)) __PYX_ERR(1, 42, __pyx_L3_error)
8789       }
8790     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
8791       goto __pyx_L5_argtuple_error;
8792     } else {
8793       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
8794       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
8795       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
8796     }
8797     __pyx_v_left_edges = ((PyArrayObject *)values[0]);
8798     __pyx_v_right_edges = ((PyArrayObject *)values[1]);
8799     __pyx_v_levels = ((PyArrayObject *)values[2]);
8800   }
8801   goto __pyx_L4_argument_unpacking_done;
8802   __pyx_L5_argtuple_error:;
8803   __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 42, __pyx_L3_error)
8804   __pyx_L3_error:;
8805   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
8806   __Pyx_RefNannyFinishContext();
8807   return NULL;
8808   __pyx_L4_argument_unpacking_done:;
8809   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_left_edges), __pyx_ptype_5numpy_ndarray, 1, "left_edges", 0))) __PYX_ERR(1, 43, __pyx_L1_error)
8810   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_right_edges), __pyx_ptype_5numpy_ndarray, 1, "right_edges", 0))) __PYX_ERR(1, 44, __pyx_L1_error)
8811   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_levels), __pyx_ptype_5numpy_ndarray, 1, "levels", 0))) __PYX_ERR(1, 45, __pyx_L1_error)
8812   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_4select_grids(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_left_edges, __pyx_v_right_edges, __pyx_v_levels);
8813 
8814   /* function exit code */
8815   goto __pyx_L0;
8816   __pyx_L1_error:;
8817   __pyx_r = NULL;
8818   __pyx_L0:;
8819   __Pyx_RefNannyFinishContext();
8820   return __pyx_r;
8821 }
8822 
8823 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_4select_grids(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyArrayObject *__pyx_v_left_edges, PyArrayObject *__pyx_v_right_edges, PyArrayObject *__pyx_v_levels) {
8824   int __pyx_v_i;
8825   int __pyx_v_n;
8826   int __pyx_v_ng;
8827   PyArrayObject *__pyx_v_gridi = 0;
8828   __pyx_t_5numpy_float64_t __pyx_v_LE[3];
8829   __pyx_t_5numpy_float64_t __pyx_v_RE[3];
8830   __Pyx_LocalBuf_ND __pyx_pybuffernd_gridi;
8831   __Pyx_Buffer __pyx_pybuffer_gridi;
8832   __Pyx_LocalBuf_ND __pyx_pybuffernd_left_edges;
8833   __Pyx_Buffer __pyx_pybuffer_left_edges;
8834   __Pyx_LocalBuf_ND __pyx_pybuffernd_levels;
8835   __Pyx_Buffer __pyx_pybuffer_levels;
8836   __Pyx_LocalBuf_ND __pyx_pybuffernd_right_edges;
8837   __Pyx_Buffer __pyx_pybuffer_right_edges;
8838   PyObject *__pyx_r = NULL;
8839   __Pyx_RefNannyDeclarations
8840   PyObject *__pyx_t_1 = NULL;
8841   PyObject *__pyx_t_2 = NULL;
8842   PyObject *__pyx_t_3 = NULL;
8843   PyObject *__pyx_t_4 = NULL;
8844   PyArrayObject *__pyx_t_5 = NULL;
8845   int __pyx_t_6;
8846   int __pyx_t_7;
8847   int __pyx_t_8;
8848   int __pyx_t_9;
8849   Py_ssize_t __pyx_t_10;
8850   Py_ssize_t __pyx_t_11;
8851   Py_ssize_t __pyx_t_12;
8852   Py_ssize_t __pyx_t_13;
8853   Py_ssize_t __pyx_t_14;
8854   Py_ssize_t __pyx_t_15;
8855   Py_ssize_t __pyx_t_16;
8856   __Pyx_RefNannySetupContext("select_grids", 0);
8857   __pyx_pybuffer_gridi.pybuffer.buf = NULL;
8858   __pyx_pybuffer_gridi.refcount = 0;
8859   __pyx_pybuffernd_gridi.data = NULL;
8860   __pyx_pybuffernd_gridi.rcbuffer = &__pyx_pybuffer_gridi;
8861   __pyx_pybuffer_left_edges.pybuffer.buf = NULL;
8862   __pyx_pybuffer_left_edges.refcount = 0;
8863   __pyx_pybuffernd_left_edges.data = NULL;
8864   __pyx_pybuffernd_left_edges.rcbuffer = &__pyx_pybuffer_left_edges;
8865   __pyx_pybuffer_right_edges.pybuffer.buf = NULL;
8866   __pyx_pybuffer_right_edges.refcount = 0;
8867   __pyx_pybuffernd_right_edges.data = NULL;
8868   __pyx_pybuffernd_right_edges.rcbuffer = &__pyx_pybuffer_right_edges;
8869   __pyx_pybuffer_levels.pybuffer.buf = NULL;
8870   __pyx_pybuffer_levels.refcount = 0;
8871   __pyx_pybuffernd_levels.data = NULL;
8872   __pyx_pybuffernd_levels.rcbuffer = &__pyx_pybuffer_levels;
8873   {
8874     __Pyx_BufFmt_StackElem __pyx_stack[1];
8875     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_left_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(1, 42, __pyx_L1_error)
8876   }
8877   __pyx_pybuffernd_left_edges.diminfo[0].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_left_edges.diminfo[0].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_left_edges.diminfo[1].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_left_edges.diminfo[1].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[1];
8878   {
8879     __Pyx_BufFmt_StackElem __pyx_stack[1];
8880     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_right_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(1, 42, __pyx_L1_error)
8881   }
8882   __pyx_pybuffernd_right_edges.diminfo[0].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_right_edges.diminfo[0].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_right_edges.diminfo[1].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_right_edges.diminfo[1].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[1];
8883   {
8884     __Pyx_BufFmt_StackElem __pyx_stack[1];
8885     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_levels.rcbuffer->pybuffer, (PyObject*)__pyx_v_levels, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(1, 42, __pyx_L1_error)
8886   }
8887   __pyx_pybuffernd_levels.diminfo[0].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_levels.diminfo[0].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_levels.diminfo[1].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_levels.diminfo[1].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[1];
8888 
8889   /* "yt/geometry/_selection_routines/selector_object.pxi":47
8890  *                      np.ndarray[np.int32_t, ndim=2] levels):
8891  *         cdef int i, n
8892  *         cdef int ng = left_edges.shape[0]             # <<<<<<<<<<<<<<
8893  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.zeros(ng, dtype='uint8')
8894  *         cdef np.float64_t LE[3]
8895  */
8896   __pyx_v_ng = (__pyx_v_left_edges->dimensions[0]);
8897 
8898   /* "yt/geometry/_selection_routines/selector_object.pxi":48
8899  *         cdef int i, n
8900  *         cdef int ng = left_edges.shape[0]
8901  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.zeros(ng, dtype='uint8')             # <<<<<<<<<<<<<<
8902  *         cdef np.float64_t LE[3]
8903  *         cdef np.float64_t RE[3]
8904  */
8905   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 48, __pyx_L1_error)
8906   __Pyx_GOTREF(__pyx_t_1);
8907   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 48, __pyx_L1_error)
8908   __Pyx_GOTREF(__pyx_t_2);
8909   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
8910   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ng); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 48, __pyx_L1_error)
8911   __Pyx_GOTREF(__pyx_t_1);
8912   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 48, __pyx_L1_error)
8913   __Pyx_GOTREF(__pyx_t_3);
8914   __Pyx_GIVEREF(__pyx_t_1);
8915   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
8916   __pyx_t_1 = 0;
8917   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 48, __pyx_L1_error)
8918   __Pyx_GOTREF(__pyx_t_1);
8919   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(1, 48, __pyx_L1_error)
8920   __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 48, __pyx_L1_error)
8921   __Pyx_GOTREF(__pyx_t_4);
8922   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8923   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8924   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
8925   if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 48, __pyx_L1_error)
8926   __pyx_t_5 = ((PyArrayObject *)__pyx_t_4);
8927   {
8928     __Pyx_BufFmt_StackElem __pyx_stack[1];
8929     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_gridi.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
8930       __pyx_v_gridi = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_gridi.rcbuffer->pybuffer.buf = NULL;
8931       __PYX_ERR(1, 48, __pyx_L1_error)
8932     } else {__pyx_pybuffernd_gridi.diminfo[0].strides = __pyx_pybuffernd_gridi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_gridi.diminfo[0].shape = __pyx_pybuffernd_gridi.rcbuffer->pybuffer.shape[0];
8933     }
8934   }
8935   __pyx_t_5 = 0;
8936   __pyx_v_gridi = ((PyArrayObject *)__pyx_t_4);
8937   __pyx_t_4 = 0;
8938 
8939   /* "yt/geometry/_selection_routines/selector_object.pxi":51
8940  *         cdef np.float64_t LE[3]
8941  *         cdef np.float64_t RE[3]
8942  *         _ensure_code(left_edges)             # <<<<<<<<<<<<<<
8943  *         _ensure_code(right_edges)
8944  *         with nogil:
8945  */
8946   __pyx_t_4 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_left_edges)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 51, __pyx_L1_error)
8947   __Pyx_GOTREF(__pyx_t_4);
8948   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
8949 
8950   /* "yt/geometry/_selection_routines/selector_object.pxi":52
8951  *         cdef np.float64_t RE[3]
8952  *         _ensure_code(left_edges)
8953  *         _ensure_code(right_edges)             # <<<<<<<<<<<<<<
8954  *         with nogil:
8955  *             for n in range(ng):
8956  */
8957   __pyx_t_4 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_right_edges)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 52, __pyx_L1_error)
8958   __Pyx_GOTREF(__pyx_t_4);
8959   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
8960 
8961   /* "yt/geometry/_selection_routines/selector_object.pxi":53
8962  *         _ensure_code(left_edges)
8963  *         _ensure_code(right_edges)
8964  *         with nogil:             # <<<<<<<<<<<<<<
8965  *             for n in range(ng):
8966  *                 # Call our selector function
8967  */
8968   {
8969       #ifdef WITH_THREAD
8970       PyThreadState *_save;
8971       Py_UNBLOCK_THREADS
8972       __Pyx_FastGIL_Remember();
8973       #endif
8974       /*try:*/ {
8975 
8976         /* "yt/geometry/_selection_routines/selector_object.pxi":54
8977  *         _ensure_code(right_edges)
8978  *         with nogil:
8979  *             for n in range(ng):             # <<<<<<<<<<<<<<
8980  *                 # Call our selector function
8981  *                 # Check if the sphere is inside the grid
8982  */
8983         __pyx_t_6 = __pyx_v_ng;
8984         __pyx_t_7 = __pyx_t_6;
8985         for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
8986           __pyx_v_n = __pyx_t_8;
8987 
8988           /* "yt/geometry/_selection_routines/selector_object.pxi":57
8989  *                 # Call our selector function
8990  *                 # Check if the sphere is inside the grid
8991  *                 for i in range(3):             # <<<<<<<<<<<<<<
8992  *                     LE[i] = left_edges[n, i]
8993  *                     RE[i] = right_edges[n, i]
8994  */
8995           for (__pyx_t_9 = 0; __pyx_t_9 < 3; __pyx_t_9+=1) {
8996             __pyx_v_i = __pyx_t_9;
8997 
8998             /* "yt/geometry/_selection_routines/selector_object.pxi":58
8999  *                 # Check if the sphere is inside the grid
9000  *                 for i in range(3):
9001  *                     LE[i] = left_edges[n, i]             # <<<<<<<<<<<<<<
9002  *                     RE[i] = right_edges[n, i]
9003  *                 gridi[n] = self.select_grid(LE, RE, levels[n, 0])
9004  */
9005             __pyx_t_10 = __pyx_v_n;
9006             __pyx_t_11 = __pyx_v_i;
9007             (__pyx_v_LE[__pyx_v_i]) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_left_edges.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_left_edges.diminfo[1].strides));
9008 
9009             /* "yt/geometry/_selection_routines/selector_object.pxi":59
9010  *                 for i in range(3):
9011  *                     LE[i] = left_edges[n, i]
9012  *                     RE[i] = right_edges[n, i]             # <<<<<<<<<<<<<<
9013  *                 gridi[n] = self.select_grid(LE, RE, levels[n, 0])
9014  *         return gridi.astype("bool")
9015  */
9016             __pyx_t_12 = __pyx_v_n;
9017             __pyx_t_13 = __pyx_v_i;
9018             (__pyx_v_RE[__pyx_v_i]) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_right_edges.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_right_edges.diminfo[1].strides));
9019           }
9020 
9021           /* "yt/geometry/_selection_routines/selector_object.pxi":60
9022  *                     LE[i] = left_edges[n, i]
9023  *                     RE[i] = right_edges[n, i]
9024  *                 gridi[n] = self.select_grid(LE, RE, levels[n, 0])             # <<<<<<<<<<<<<<
9025  *         return gridi.astype("bool")
9026  *
9027  */
9028           __pyx_t_14 = __pyx_v_n;
9029           __pyx_t_15 = 0;
9030           __pyx_t_16 = __pyx_v_n;
9031           *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_gridi.rcbuffer->pybuffer.buf, __pyx_t_16, __pyx_pybuffernd_gridi.diminfo[0].strides) = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_grid(__pyx_v_self, __pyx_v_LE, __pyx_v_RE, (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_levels.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_levels.diminfo[0].strides, __pyx_t_15, __pyx_pybuffernd_levels.diminfo[1].strides)), NULL);
9032         }
9033       }
9034 
9035       /* "yt/geometry/_selection_routines/selector_object.pxi":53
9036  *         _ensure_code(left_edges)
9037  *         _ensure_code(right_edges)
9038  *         with nogil:             # <<<<<<<<<<<<<<
9039  *             for n in range(ng):
9040  *                 # Call our selector function
9041  */
9042       /*finally:*/ {
9043         /*normal exit:*/{
9044           #ifdef WITH_THREAD
9045           __Pyx_FastGIL_Forget();
9046           Py_BLOCK_THREADS
9047           #endif
9048           goto __pyx_L5;
9049         }
9050         __pyx_L5:;
9051       }
9052   }
9053 
9054   /* "yt/geometry/_selection_routines/selector_object.pxi":61
9055  *                     RE[i] = right_edges[n, i]
9056  *                 gridi[n] = self.select_grid(LE, RE, levels[n, 0])
9057  *         return gridi.astype("bool")             # <<<<<<<<<<<<<<
9058  *
9059  *     def count_octs(self, OctreeContainer octree, int domain_id = -1):
9060  */
9061   __Pyx_XDECREF(__pyx_r);
9062   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_gridi), __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 61, __pyx_L1_error)
9063   __Pyx_GOTREF(__pyx_t_1);
9064   __pyx_t_3 = NULL;
9065   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
9066     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
9067     if (likely(__pyx_t_3)) {
9068       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
9069       __Pyx_INCREF(__pyx_t_3);
9070       __Pyx_INCREF(function);
9071       __Pyx_DECREF_SET(__pyx_t_1, function);
9072     }
9073   }
9074   __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_n_s_bool);
9075   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
9076   if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 61, __pyx_L1_error)
9077   __Pyx_GOTREF(__pyx_t_4);
9078   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
9079   __pyx_r = __pyx_t_4;
9080   __pyx_t_4 = 0;
9081   goto __pyx_L0;
9082 
9083   /* "yt/geometry/_selection_routines/selector_object.pxi":42
9084  *     @cython.wraparound(False)
9085  *     @cython.cdivision(True)
9086  *     def select_grids(self,             # <<<<<<<<<<<<<<
9087  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
9088  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
9089  */
9090 
9091   /* function exit code */
9092   __pyx_L1_error:;
9093   __Pyx_XDECREF(__pyx_t_1);
9094   __Pyx_XDECREF(__pyx_t_2);
9095   __Pyx_XDECREF(__pyx_t_3);
9096   __Pyx_XDECREF(__pyx_t_4);
9097   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
9098     __Pyx_PyThreadState_declare
9099     __Pyx_PyThreadState_assign
9100     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
9101     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_gridi.rcbuffer->pybuffer);
9102     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
9103     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
9104     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
9105   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
9106   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
9107   __pyx_r = NULL;
9108   goto __pyx_L2;
9109   __pyx_L0:;
9110   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_gridi.rcbuffer->pybuffer);
9111   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
9112   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
9113   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
9114   __pyx_L2:;
9115   __Pyx_XDECREF((PyObject *)__pyx_v_gridi);
9116   __Pyx_XGIVEREF(__pyx_r);
9117   __Pyx_RefNannyFinishContext();
9118   return __pyx_r;
9119 }
9120 
9121 /* "yt/geometry/_selection_routines/selector_object.pxi":63
9122  *         return gridi.astype("bool")
9123  *
9124  *     def count_octs(self, OctreeContainer octree, int domain_id = -1):             # <<<<<<<<<<<<<<
9125  *         cdef oct_visitors.CountTotalOcts visitor
9126  *         visitor = oct_visitors.CountTotalOcts(octree, domain_id)
9127  */
9128 
9129 /* Python wrapper */
9130 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_7count_octs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
9131 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_7count_octs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
9132   struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *__pyx_v_octree = 0;
9133   int __pyx_v_domain_id;
9134   PyObject *__pyx_r = 0;
9135   __Pyx_RefNannyDeclarations
9136   __Pyx_RefNannySetupContext("count_octs (wrapper)", 0);
9137   {
9138     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_octree,&__pyx_n_s_domain_id,0};
9139     PyObject* values[2] = {0,0};
9140     if (unlikely(__pyx_kwds)) {
9141       Py_ssize_t kw_args;
9142       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
9143       switch (pos_args) {
9144         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
9145         CYTHON_FALLTHROUGH;
9146         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
9147         CYTHON_FALLTHROUGH;
9148         case  0: break;
9149         default: goto __pyx_L5_argtuple_error;
9150       }
9151       kw_args = PyDict_Size(__pyx_kwds);
9152       switch (pos_args) {
9153         case  0:
9154         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_octree)) != 0)) kw_args--;
9155         else goto __pyx_L5_argtuple_error;
9156         CYTHON_FALLTHROUGH;
9157         case  1:
9158         if (kw_args > 0) {
9159           PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_domain_id);
9160           if (value) { values[1] = value; kw_args--; }
9161         }
9162       }
9163       if (unlikely(kw_args > 0)) {
9164         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "count_octs") < 0)) __PYX_ERR(1, 63, __pyx_L3_error)
9165       }
9166     } else {
9167       switch (PyTuple_GET_SIZE(__pyx_args)) {
9168         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
9169         CYTHON_FALLTHROUGH;
9170         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
9171         break;
9172         default: goto __pyx_L5_argtuple_error;
9173       }
9174     }
9175     __pyx_v_octree = ((struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *)values[0]);
9176     if (values[1]) {
9177       __pyx_v_domain_id = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_domain_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 63, __pyx_L3_error)
9178     } else {
9179       __pyx_v_domain_id = ((int)-1);
9180     }
9181   }
9182   goto __pyx_L4_argument_unpacking_done;
9183   __pyx_L5_argtuple_error:;
9184   __Pyx_RaiseArgtupleInvalid("count_octs", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 63, __pyx_L3_error)
9185   __pyx_L3_error:;
9186   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.count_octs", __pyx_clineno, __pyx_lineno, __pyx_filename);
9187   __Pyx_RefNannyFinishContext();
9188   return NULL;
9189   __pyx_L4_argument_unpacking_done:;
9190   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_octree), __pyx_ptype_2yt_8geometry_13oct_container_OctreeContainer, 1, "octree", 0))) __PYX_ERR(1, 63, __pyx_L1_error)
9191   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_6count_octs(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_octree, __pyx_v_domain_id);
9192 
9193   /* function exit code */
9194   goto __pyx_L0;
9195   __pyx_L1_error:;
9196   __pyx_r = NULL;
9197   __pyx_L0:;
9198   __Pyx_RefNannyFinishContext();
9199   return __pyx_r;
9200 }
9201 
9202 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_6count_octs(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *__pyx_v_octree, int __pyx_v_domain_id) {
9203   struct __pyx_obj_2yt_8geometry_12oct_visitors_CountTotalOcts *__pyx_v_visitor = 0;
9204   PyObject *__pyx_r = NULL;
9205   __Pyx_RefNannyDeclarations
9206   PyObject *__pyx_t_1 = NULL;
9207   PyObject *__pyx_t_2 = NULL;
9208   __Pyx_RefNannySetupContext("count_octs", 0);
9209 
9210   /* "yt/geometry/_selection_routines/selector_object.pxi":65
9211  *     def count_octs(self, OctreeContainer octree, int domain_id = -1):
9212  *         cdef oct_visitors.CountTotalOcts visitor
9213  *         visitor = oct_visitors.CountTotalOcts(octree, domain_id)             # <<<<<<<<<<<<<<
9214  *         octree.visit_all_octs(self, visitor)
9215  *         return visitor.index
9216  */
9217   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_domain_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 65, __pyx_L1_error)
9218   __Pyx_GOTREF(__pyx_t_1);
9219   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 65, __pyx_L1_error)
9220   __Pyx_GOTREF(__pyx_t_2);
9221   __Pyx_INCREF(((PyObject *)__pyx_v_octree));
9222   __Pyx_GIVEREF(((PyObject *)__pyx_v_octree));
9223   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_octree));
9224   __Pyx_GIVEREF(__pyx_t_1);
9225   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
9226   __pyx_t_1 = 0;
9227   __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_2yt_8geometry_12oct_visitors_CountTotalOcts), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 65, __pyx_L1_error)
9228   __Pyx_GOTREF(__pyx_t_1);
9229   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
9230   __pyx_v_visitor = ((struct __pyx_obj_2yt_8geometry_12oct_visitors_CountTotalOcts *)__pyx_t_1);
9231   __pyx_t_1 = 0;
9232 
9233   /* "yt/geometry/_selection_routines/selector_object.pxi":66
9234  *         cdef oct_visitors.CountTotalOcts visitor
9235  *         visitor = oct_visitors.CountTotalOcts(octree, domain_id)
9236  *         octree.visit_all_octs(self, visitor)             # <<<<<<<<<<<<<<
9237  *         return visitor.index
9238  *
9239  */
9240   ((struct __pyx_vtabstruct_2yt_8geometry_13oct_container_OctreeContainer *)__pyx_v_octree->__pyx_vtab)->visit_all_octs(__pyx_v_octree, __pyx_v_self, ((struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *)__pyx_v_visitor), NULL);
9241 
9242   /* "yt/geometry/_selection_routines/selector_object.pxi":67
9243  *         visitor = oct_visitors.CountTotalOcts(octree, domain_id)
9244  *         octree.visit_all_octs(self, visitor)
9245  *         return visitor.index             # <<<<<<<<<<<<<<
9246  *
9247  *     def count_oct_cells(self, OctreeContainer octree, int domain_id = -1):
9248  */
9249   __Pyx_XDECREF(__pyx_r);
9250   __pyx_t_1 = __Pyx_PyInt_From_npy_uint64(__pyx_v_visitor->__pyx_base.index); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 67, __pyx_L1_error)
9251   __Pyx_GOTREF(__pyx_t_1);
9252   __pyx_r = __pyx_t_1;
9253   __pyx_t_1 = 0;
9254   goto __pyx_L0;
9255 
9256   /* "yt/geometry/_selection_routines/selector_object.pxi":63
9257  *         return gridi.astype("bool")
9258  *
9259  *     def count_octs(self, OctreeContainer octree, int domain_id = -1):             # <<<<<<<<<<<<<<
9260  *         cdef oct_visitors.CountTotalOcts visitor
9261  *         visitor = oct_visitors.CountTotalOcts(octree, domain_id)
9262  */
9263 
9264   /* function exit code */
9265   __pyx_L1_error:;
9266   __Pyx_XDECREF(__pyx_t_1);
9267   __Pyx_XDECREF(__pyx_t_2);
9268   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.count_octs", __pyx_clineno, __pyx_lineno, __pyx_filename);
9269   __pyx_r = NULL;
9270   __pyx_L0:;
9271   __Pyx_XDECREF((PyObject *)__pyx_v_visitor);
9272   __Pyx_XGIVEREF(__pyx_r);
9273   __Pyx_RefNannyFinishContext();
9274   return __pyx_r;
9275 }
9276 
9277 /* "yt/geometry/_selection_routines/selector_object.pxi":69
9278  *         return visitor.index
9279  *
9280  *     def count_oct_cells(self, OctreeContainer octree, int domain_id = -1):             # <<<<<<<<<<<<<<
9281  *         cdef oct_visitors.CountTotalCells visitor
9282  *         visitor = oct_visitors.CountTotalCells(octree, domain_id)
9283  */
9284 
9285 /* Python wrapper */
9286 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9count_oct_cells(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
9287 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9count_oct_cells(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
9288   struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *__pyx_v_octree = 0;
9289   int __pyx_v_domain_id;
9290   PyObject *__pyx_r = 0;
9291   __Pyx_RefNannyDeclarations
9292   __Pyx_RefNannySetupContext("count_oct_cells (wrapper)", 0);
9293   {
9294     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_octree,&__pyx_n_s_domain_id,0};
9295     PyObject* values[2] = {0,0};
9296     if (unlikely(__pyx_kwds)) {
9297       Py_ssize_t kw_args;
9298       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
9299       switch (pos_args) {
9300         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
9301         CYTHON_FALLTHROUGH;
9302         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
9303         CYTHON_FALLTHROUGH;
9304         case  0: break;
9305         default: goto __pyx_L5_argtuple_error;
9306       }
9307       kw_args = PyDict_Size(__pyx_kwds);
9308       switch (pos_args) {
9309         case  0:
9310         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_octree)) != 0)) kw_args--;
9311         else goto __pyx_L5_argtuple_error;
9312         CYTHON_FALLTHROUGH;
9313         case  1:
9314         if (kw_args > 0) {
9315           PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_domain_id);
9316           if (value) { values[1] = value; kw_args--; }
9317         }
9318       }
9319       if (unlikely(kw_args > 0)) {
9320         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "count_oct_cells") < 0)) __PYX_ERR(1, 69, __pyx_L3_error)
9321       }
9322     } else {
9323       switch (PyTuple_GET_SIZE(__pyx_args)) {
9324         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
9325         CYTHON_FALLTHROUGH;
9326         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
9327         break;
9328         default: goto __pyx_L5_argtuple_error;
9329       }
9330     }
9331     __pyx_v_octree = ((struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *)values[0]);
9332     if (values[1]) {
9333       __pyx_v_domain_id = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_domain_id == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 69, __pyx_L3_error)
9334     } else {
9335       __pyx_v_domain_id = ((int)-1);
9336     }
9337   }
9338   goto __pyx_L4_argument_unpacking_done;
9339   __pyx_L5_argtuple_error:;
9340   __Pyx_RaiseArgtupleInvalid("count_oct_cells", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 69, __pyx_L3_error)
9341   __pyx_L3_error:;
9342   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.count_oct_cells", __pyx_clineno, __pyx_lineno, __pyx_filename);
9343   __Pyx_RefNannyFinishContext();
9344   return NULL;
9345   __pyx_L4_argument_unpacking_done:;
9346   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_octree), __pyx_ptype_2yt_8geometry_13oct_container_OctreeContainer, 1, "octree", 0))) __PYX_ERR(1, 69, __pyx_L1_error)
9347   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_8count_oct_cells(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_octree, __pyx_v_domain_id);
9348 
9349   /* function exit code */
9350   goto __pyx_L0;
9351   __pyx_L1_error:;
9352   __pyx_r = NULL;
9353   __pyx_L0:;
9354   __Pyx_RefNannyFinishContext();
9355   return __pyx_r;
9356 }
9357 
9358 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_8count_oct_cells(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer *__pyx_v_octree, int __pyx_v_domain_id) {
9359   struct __pyx_obj_2yt_8geometry_12oct_visitors_CountTotalCells *__pyx_v_visitor = 0;
9360   PyObject *__pyx_r = NULL;
9361   __Pyx_RefNannyDeclarations
9362   PyObject *__pyx_t_1 = NULL;
9363   PyObject *__pyx_t_2 = NULL;
9364   __Pyx_RefNannySetupContext("count_oct_cells", 0);
9365 
9366   /* "yt/geometry/_selection_routines/selector_object.pxi":71
9367  *     def count_oct_cells(self, OctreeContainer octree, int domain_id = -1):
9368  *         cdef oct_visitors.CountTotalCells visitor
9369  *         visitor = oct_visitors.CountTotalCells(octree, domain_id)             # <<<<<<<<<<<<<<
9370  *         octree.visit_all_octs(self, visitor)
9371  *         return visitor.index
9372  */
9373   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_domain_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 71, __pyx_L1_error)
9374   __Pyx_GOTREF(__pyx_t_1);
9375   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 71, __pyx_L1_error)
9376   __Pyx_GOTREF(__pyx_t_2);
9377   __Pyx_INCREF(((PyObject *)__pyx_v_octree));
9378   __Pyx_GIVEREF(((PyObject *)__pyx_v_octree));
9379   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_octree));
9380   __Pyx_GIVEREF(__pyx_t_1);
9381   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
9382   __pyx_t_1 = 0;
9383   __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_2yt_8geometry_12oct_visitors_CountTotalCells), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 71, __pyx_L1_error)
9384   __Pyx_GOTREF(__pyx_t_1);
9385   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
9386   __pyx_v_visitor = ((struct __pyx_obj_2yt_8geometry_12oct_visitors_CountTotalCells *)__pyx_t_1);
9387   __pyx_t_1 = 0;
9388 
9389   /* "yt/geometry/_selection_routines/selector_object.pxi":72
9390  *         cdef oct_visitors.CountTotalCells visitor
9391  *         visitor = oct_visitors.CountTotalCells(octree, domain_id)
9392  *         octree.visit_all_octs(self, visitor)             # <<<<<<<<<<<<<<
9393  *         return visitor.index
9394  *
9395  */
9396   ((struct __pyx_vtabstruct_2yt_8geometry_13oct_container_OctreeContainer *)__pyx_v_octree->__pyx_vtab)->visit_all_octs(__pyx_v_octree, __pyx_v_self, ((struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *)__pyx_v_visitor), NULL);
9397 
9398   /* "yt/geometry/_selection_routines/selector_object.pxi":73
9399  *         visitor = oct_visitors.CountTotalCells(octree, domain_id)
9400  *         octree.visit_all_octs(self, visitor)
9401  *         return visitor.index             # <<<<<<<<<<<<<<
9402  *
9403  *     @cython.boundscheck(False)
9404  */
9405   __Pyx_XDECREF(__pyx_r);
9406   __pyx_t_1 = __Pyx_PyInt_From_npy_uint64(__pyx_v_visitor->__pyx_base.index); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 73, __pyx_L1_error)
9407   __Pyx_GOTREF(__pyx_t_1);
9408   __pyx_r = __pyx_t_1;
9409   __pyx_t_1 = 0;
9410   goto __pyx_L0;
9411 
9412   /* "yt/geometry/_selection_routines/selector_object.pxi":69
9413  *         return visitor.index
9414  *
9415  *     def count_oct_cells(self, OctreeContainer octree, int domain_id = -1):             # <<<<<<<<<<<<<<
9416  *         cdef oct_visitors.CountTotalCells visitor
9417  *         visitor = oct_visitors.CountTotalCells(octree, domain_id)
9418  */
9419 
9420   /* function exit code */
9421   __pyx_L1_error:;
9422   __Pyx_XDECREF(__pyx_t_1);
9423   __Pyx_XDECREF(__pyx_t_2);
9424   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.count_oct_cells", __pyx_clineno, __pyx_lineno, __pyx_filename);
9425   __pyx_r = NULL;
9426   __pyx_L0:;
9427   __Pyx_XDECREF((PyObject *)__pyx_v_visitor);
9428   __Pyx_XGIVEREF(__pyx_r);
9429   __Pyx_RefNannyFinishContext();
9430   return __pyx_r;
9431 }
9432 
9433 /* "yt/geometry/_selection_routines/selector_object.pxi":78
9434  *     @cython.wraparound(False)
9435  *     @cython.cdivision(True)
9436  *     cdef void recursively_visit_octs(self, Oct *root,             # <<<<<<<<<<<<<<
9437  *                         np.float64_t pos[3], np.float64_t dds[3],
9438  *                         int level,
9439  */
9440 
9441 static void __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_recursively_visit_octs(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_root, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds, int __pyx_v_level, struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *__pyx_v_visitor, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_recursively_visit_octs *__pyx_optional_args) {
9442   int __pyx_v_visit_covered = ((int)0);
9443   __pyx_t_5numpy_float64_t __pyx_v_LE[3];
9444   __pyx_t_5numpy_float64_t __pyx_v_RE[3];
9445   __pyx_t_5numpy_float64_t __pyx_v_sdds[3];
9446   __pyx_t_5numpy_float64_t __pyx_v_spos[3];
9447   int __pyx_v_i;
9448   int __pyx_v_j;
9449   int __pyx_v_k;
9450   int __pyx_v_res;
9451   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_ch;
9452   int __pyx_v_increment;
9453   int __pyx_v_next_level;
9454   int __pyx_v_this_level;
9455   int __pyx_v_iter;
9456   __Pyx_RefNannyDeclarations
9457   int __pyx_t_1;
9458   struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid __pyx_t_2;
9459   int __pyx_t_3;
9460   int __pyx_t_4;
9461   int __pyx_t_5;
9462   int __pyx_t_6;
9463   struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_recursively_visit_octs __pyx_t_7;
9464   long __pyx_t_8;
9465   __Pyx_RefNannySetupContext("recursively_visit_octs", 0);
9466   if (__pyx_optional_args) {
9467     if (__pyx_optional_args->__pyx_n > 0) {
9468       __pyx_v_visit_covered = __pyx_optional_args->visit_covered;
9469     }
9470   }
9471 
9472   /* "yt/geometry/_selection_routines/selector_object.pxi":95
9473  *         # Remember that pos is the *center* of the oct, and dds is the oct
9474  *         # width.  So to get to the edges, we add/subtract half of dds.
9475  *         for i in range(3):             # <<<<<<<<<<<<<<
9476  *             # sdds is the cell width
9477  *             sdds[i] = dds[i]/2.0
9478  */
9479   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
9480     __pyx_v_i = __pyx_t_1;
9481 
9482     /* "yt/geometry/_selection_routines/selector_object.pxi":97
9483  *         for i in range(3):
9484  *             # sdds is the cell width
9485  *             sdds[i] = dds[i]/2.0             # <<<<<<<<<<<<<<
9486  *             LE[i] = pos[i] - dds[i]/2.0
9487  *             RE[i] = pos[i] + dds[i]/2.0
9488  */
9489     (__pyx_v_sdds[__pyx_v_i]) = ((__pyx_v_dds[__pyx_v_i]) / 2.0);
9490 
9491     /* "yt/geometry/_selection_routines/selector_object.pxi":98
9492  *             # sdds is the cell width
9493  *             sdds[i] = dds[i]/2.0
9494  *             LE[i] = pos[i] - dds[i]/2.0             # <<<<<<<<<<<<<<
9495  *             RE[i] = pos[i] + dds[i]/2.0
9496  *         #print(LE[0], RE[0], LE[1], RE[1], LE[2], RE[2])
9497  */
9498     (__pyx_v_LE[__pyx_v_i]) = ((__pyx_v_pos[__pyx_v_i]) - ((__pyx_v_dds[__pyx_v_i]) / 2.0));
9499 
9500     /* "yt/geometry/_selection_routines/selector_object.pxi":99
9501  *             sdds[i] = dds[i]/2.0
9502  *             LE[i] = pos[i] - dds[i]/2.0
9503  *             RE[i] = pos[i] + dds[i]/2.0             # <<<<<<<<<<<<<<
9504  *         #print(LE[0], RE[0], LE[1], RE[1], LE[2], RE[2])
9505  *         res = self.select_grid(LE, RE, level, root)
9506  */
9507     (__pyx_v_RE[__pyx_v_i]) = ((__pyx_v_pos[__pyx_v_i]) + ((__pyx_v_dds[__pyx_v_i]) / 2.0));
9508   }
9509 
9510   /* "yt/geometry/_selection_routines/selector_object.pxi":101
9511  *             RE[i] = pos[i] + dds[i]/2.0
9512  *         #print(LE[0], RE[0], LE[1], RE[1], LE[2], RE[2])
9513  *         res = self.select_grid(LE, RE, level, root)             # <<<<<<<<<<<<<<
9514  *         if res == 1 and visitor.domain > 0 and root.domain != visitor.domain:
9515  *             res = -1
9516  */
9517   __pyx_t_2.__pyx_n = 1;
9518   __pyx_t_2.o = __pyx_v_root;
9519   __pyx_t_1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_grid(__pyx_v_self, __pyx_v_LE, __pyx_v_RE, __pyx_v_level, &__pyx_t_2);
9520   __pyx_v_res = __pyx_t_1;
9521 
9522   /* "yt/geometry/_selection_routines/selector_object.pxi":102
9523  *         #print(LE[0], RE[0], LE[1], RE[1], LE[2], RE[2])
9524  *         res = self.select_grid(LE, RE, level, root)
9525  *         if res == 1 and visitor.domain > 0 and root.domain != visitor.domain:             # <<<<<<<<<<<<<<
9526  *             res = -1
9527  *         cdef int increment = 1
9528  */
9529   __pyx_t_4 = ((__pyx_v_res == 1) != 0);
9530   if (__pyx_t_4) {
9531   } else {
9532     __pyx_t_3 = __pyx_t_4;
9533     goto __pyx_L6_bool_binop_done;
9534   }
9535   __pyx_t_4 = ((__pyx_v_visitor->domain > 0) != 0);
9536   if (__pyx_t_4) {
9537   } else {
9538     __pyx_t_3 = __pyx_t_4;
9539     goto __pyx_L6_bool_binop_done;
9540   }
9541   __pyx_t_4 = ((__pyx_v_root->domain != __pyx_v_visitor->domain) != 0);
9542   __pyx_t_3 = __pyx_t_4;
9543   __pyx_L6_bool_binop_done:;
9544   if (__pyx_t_3) {
9545 
9546     /* "yt/geometry/_selection_routines/selector_object.pxi":103
9547  *         res = self.select_grid(LE, RE, level, root)
9548  *         if res == 1 and visitor.domain > 0 and root.domain != visitor.domain:
9549  *             res = -1             # <<<<<<<<<<<<<<
9550  *         cdef int increment = 1
9551  *         cdef int next_level, this_level
9552  */
9553     __pyx_v_res = -1;
9554 
9555     /* "yt/geometry/_selection_routines/selector_object.pxi":102
9556  *         #print(LE[0], RE[0], LE[1], RE[1], LE[2], RE[2])
9557  *         res = self.select_grid(LE, RE, level, root)
9558  *         if res == 1 and visitor.domain > 0 and root.domain != visitor.domain:             # <<<<<<<<<<<<<<
9559  *             res = -1
9560  *         cdef int increment = 1
9561  */
9562   }
9563 
9564   /* "yt/geometry/_selection_routines/selector_object.pxi":104
9565  *         if res == 1 and visitor.domain > 0 and root.domain != visitor.domain:
9566  *             res = -1
9567  *         cdef int increment = 1             # <<<<<<<<<<<<<<
9568  *         cdef int next_level, this_level
9569  *         # next_level: an int that says whether or not we can progress to children
9570  */
9571   __pyx_v_increment = 1;
9572 
9573   /* "yt/geometry/_selection_routines/selector_object.pxi":109
9574  *         # this_level: an int that says whether or not we can select from this
9575  *         # level
9576  *         next_level = this_level = 1             # <<<<<<<<<<<<<<
9577  *         if res == -1:
9578  *             # This happens when we do domain selection but the oct has
9579  */
9580   __pyx_v_next_level = 1;
9581   __pyx_v_this_level = 1;
9582 
9583   /* "yt/geometry/_selection_routines/selector_object.pxi":110
9584  *         # level
9585  *         next_level = this_level = 1
9586  *         if res == -1:             # <<<<<<<<<<<<<<
9587  *             # This happens when we do domain selection but the oct has
9588  *             # children.  This would allow an oct to pass to its children but
9589  */
9590   __pyx_t_3 = ((__pyx_v_res == -1L) != 0);
9591   if (__pyx_t_3) {
9592 
9593     /* "yt/geometry/_selection_routines/selector_object.pxi":114
9594  *             # children.  This would allow an oct to pass to its children but
9595  *             # not get accessed itself.
9596  *             next_level = 1             # <<<<<<<<<<<<<<
9597  *             this_level = 0
9598  *         elif level == self.max_level:
9599  */
9600     __pyx_v_next_level = 1;
9601 
9602     /* "yt/geometry/_selection_routines/selector_object.pxi":115
9603  *             # not get accessed itself.
9604  *             next_level = 1
9605  *             this_level = 0             # <<<<<<<<<<<<<<
9606  *         elif level == self.max_level:
9607  *             next_level = 0
9608  */
9609     __pyx_v_this_level = 0;
9610 
9611     /* "yt/geometry/_selection_routines/selector_object.pxi":110
9612  *         # level
9613  *         next_level = this_level = 1
9614  *         if res == -1:             # <<<<<<<<<<<<<<
9615  *             # This happens when we do domain selection but the oct has
9616  *             # children.  This would allow an oct to pass to its children but
9617  */
9618     goto __pyx_L9;
9619   }
9620 
9621   /* "yt/geometry/_selection_routines/selector_object.pxi":116
9622  *             next_level = 1
9623  *             this_level = 0
9624  *         elif level == self.max_level:             # <<<<<<<<<<<<<<
9625  *             next_level = 0
9626  *         elif level < self.min_level or level > self.max_level:
9627  */
9628   __pyx_t_3 = ((__pyx_v_level == __pyx_v_self->max_level) != 0);
9629   if (__pyx_t_3) {
9630 
9631     /* "yt/geometry/_selection_routines/selector_object.pxi":117
9632  *             this_level = 0
9633  *         elif level == self.max_level:
9634  *             next_level = 0             # <<<<<<<<<<<<<<
9635  *         elif level < self.min_level or level > self.max_level:
9636  *             this_level = 0
9637  */
9638     __pyx_v_next_level = 0;
9639 
9640     /* "yt/geometry/_selection_routines/selector_object.pxi":116
9641  *             next_level = 1
9642  *             this_level = 0
9643  *         elif level == self.max_level:             # <<<<<<<<<<<<<<
9644  *             next_level = 0
9645  *         elif level < self.min_level or level > self.max_level:
9646  */
9647     goto __pyx_L9;
9648   }
9649 
9650   /* "yt/geometry/_selection_routines/selector_object.pxi":118
9651  *         elif level == self.max_level:
9652  *             next_level = 0
9653  *         elif level < self.min_level or level > self.max_level:             # <<<<<<<<<<<<<<
9654  *             this_level = 0
9655  *         if res == 0 and this_level == 1:
9656  */
9657   __pyx_t_4 = ((__pyx_v_level < __pyx_v_self->min_level) != 0);
9658   if (!__pyx_t_4) {
9659   } else {
9660     __pyx_t_3 = __pyx_t_4;
9661     goto __pyx_L10_bool_binop_done;
9662   }
9663   __pyx_t_4 = ((__pyx_v_level > __pyx_v_self->max_level) != 0);
9664   __pyx_t_3 = __pyx_t_4;
9665   __pyx_L10_bool_binop_done:;
9666   if (__pyx_t_3) {
9667 
9668     /* "yt/geometry/_selection_routines/selector_object.pxi":119
9669  *             next_level = 0
9670  *         elif level < self.min_level or level > self.max_level:
9671  *             this_level = 0             # <<<<<<<<<<<<<<
9672  *         if res == 0 and this_level == 1:
9673  *             return
9674  */
9675     __pyx_v_this_level = 0;
9676 
9677     /* "yt/geometry/_selection_routines/selector_object.pxi":118
9678  *         elif level == self.max_level:
9679  *             next_level = 0
9680  *         elif level < self.min_level or level > self.max_level:             # <<<<<<<<<<<<<<
9681  *             this_level = 0
9682  *         if res == 0 and this_level == 1:
9683  */
9684   }
9685   __pyx_L9:;
9686 
9687   /* "yt/geometry/_selection_routines/selector_object.pxi":120
9688  *         elif level < self.min_level or level > self.max_level:
9689  *             this_level = 0
9690  *         if res == 0 and this_level == 1:             # <<<<<<<<<<<<<<
9691  *             return
9692  *         # Now we visit all our children.  We subtract off sdds for the first
9693  */
9694   __pyx_t_4 = ((__pyx_v_res == 0) != 0);
9695   if (__pyx_t_4) {
9696   } else {
9697     __pyx_t_3 = __pyx_t_4;
9698     goto __pyx_L13_bool_binop_done;
9699   }
9700   __pyx_t_4 = ((__pyx_v_this_level == 1) != 0);
9701   __pyx_t_3 = __pyx_t_4;
9702   __pyx_L13_bool_binop_done:;
9703   if (__pyx_t_3) {
9704 
9705     /* "yt/geometry/_selection_routines/selector_object.pxi":121
9706  *             this_level = 0
9707  *         if res == 0 and this_level == 1:
9708  *             return             # <<<<<<<<<<<<<<
9709  *         # Now we visit all our children.  We subtract off sdds for the first
9710  *         # pass because we center it on the first cell.
9711  */
9712     goto __pyx_L0;
9713 
9714     /* "yt/geometry/_selection_routines/selector_object.pxi":120
9715  *         elif level < self.min_level or level > self.max_level:
9716  *             this_level = 0
9717  *         if res == 0 and this_level == 1:             # <<<<<<<<<<<<<<
9718  *             return
9719  *         # Now we visit all our children.  We subtract off sdds for the first
9720  */
9721   }
9722 
9723   /* "yt/geometry/_selection_routines/selector_object.pxi":124
9724  *         # Now we visit all our children.  We subtract off sdds for the first
9725  *         # pass because we center it on the first cell.
9726  *         cdef int iter = 1 - visit_covered # 2 if 1, 1 if 0.             # <<<<<<<<<<<<<<
9727  *         # So the order here goes like so.  If visit_covered is 1, which usually
9728  *         # comes from "partial_coverage", we visit the components of a zone even
9729  */
9730   __pyx_v_iter = (1 - __pyx_v_visit_covered);
9731 
9732   /* "yt/geometry/_selection_routines/selector_object.pxi":131
9733  *         # visit potentially covered cells.  The next time through, we visit
9734  *         # child cells.
9735  *         while iter < 2:             # <<<<<<<<<<<<<<
9736  *             spos[0] = pos[0] - sdds[0]/2.0
9737  *             for i in range(2):
9738  */
9739   while (1) {
9740     __pyx_t_3 = ((__pyx_v_iter < 2) != 0);
9741     if (!__pyx_t_3) break;
9742 
9743     /* "yt/geometry/_selection_routines/selector_object.pxi":132
9744  *         # child cells.
9745  *         while iter < 2:
9746  *             spos[0] = pos[0] - sdds[0]/2.0             # <<<<<<<<<<<<<<
9747  *             for i in range(2):
9748  *                 spos[1] = pos[1] - sdds[1]/2.0
9749  */
9750     (__pyx_v_spos[0]) = ((__pyx_v_pos[0]) - ((__pyx_v_sdds[0]) / 2.0));
9751 
9752     /* "yt/geometry/_selection_routines/selector_object.pxi":133
9753  *         while iter < 2:
9754  *             spos[0] = pos[0] - sdds[0]/2.0
9755  *             for i in range(2):             # <<<<<<<<<<<<<<
9756  *                 spos[1] = pos[1] - sdds[1]/2.0
9757  *                 for j in range(2):
9758  */
9759     for (__pyx_t_1 = 0; __pyx_t_1 < 2; __pyx_t_1+=1) {
9760       __pyx_v_i = __pyx_t_1;
9761 
9762       /* "yt/geometry/_selection_routines/selector_object.pxi":134
9763  *             spos[0] = pos[0] - sdds[0]/2.0
9764  *             for i in range(2):
9765  *                 spos[1] = pos[1] - sdds[1]/2.0             # <<<<<<<<<<<<<<
9766  *                 for j in range(2):
9767  *                     spos[2] = pos[2] - sdds[2]/2.0
9768  */
9769       (__pyx_v_spos[1]) = ((__pyx_v_pos[1]) - ((__pyx_v_sdds[1]) / 2.0));
9770 
9771       /* "yt/geometry/_selection_routines/selector_object.pxi":135
9772  *             for i in range(2):
9773  *                 spos[1] = pos[1] - sdds[1]/2.0
9774  *                 for j in range(2):             # <<<<<<<<<<<<<<
9775  *                     spos[2] = pos[2] - sdds[2]/2.0
9776  *                     for k in range(2):
9777  */
9778       for (__pyx_t_5 = 0; __pyx_t_5 < 2; __pyx_t_5+=1) {
9779         __pyx_v_j = __pyx_t_5;
9780 
9781         /* "yt/geometry/_selection_routines/selector_object.pxi":136
9782  *                 spos[1] = pos[1] - sdds[1]/2.0
9783  *                 for j in range(2):
9784  *                     spos[2] = pos[2] - sdds[2]/2.0             # <<<<<<<<<<<<<<
9785  *                     for k in range(2):
9786  *                         ch = NULL
9787  */
9788         (__pyx_v_spos[2]) = ((__pyx_v_pos[2]) - ((__pyx_v_sdds[2]) / 2.0));
9789 
9790         /* "yt/geometry/_selection_routines/selector_object.pxi":137
9791  *                 for j in range(2):
9792  *                     spos[2] = pos[2] - sdds[2]/2.0
9793  *                     for k in range(2):             # <<<<<<<<<<<<<<
9794  *                         ch = NULL
9795  *                         # We only supply a child if we are actually going to
9796  */
9797         for (__pyx_t_6 = 0; __pyx_t_6 < 2; __pyx_t_6+=1) {
9798           __pyx_v_k = __pyx_t_6;
9799 
9800           /* "yt/geometry/_selection_routines/selector_object.pxi":138
9801  *                     spos[2] = pos[2] - sdds[2]/2.0
9802  *                     for k in range(2):
9803  *                         ch = NULL             # <<<<<<<<<<<<<<
9804  *                         # We only supply a child if we are actually going to
9805  *                         # look at the next level.
9806  */
9807           __pyx_v_ch = NULL;
9808 
9809           /* "yt/geometry/_selection_routines/selector_object.pxi":141
9810  *                         # We only supply a child if we are actually going to
9811  *                         # look at the next level.
9812  *                         if root.children != NULL and next_level == 1:             # <<<<<<<<<<<<<<
9813  *                             ch = root.children[cind(i, j, k)]
9814  *                         if iter == 1 and next_level == 1 and ch != NULL:
9815  */
9816           __pyx_t_4 = ((__pyx_v_root->children != NULL) != 0);
9817           if (__pyx_t_4) {
9818           } else {
9819             __pyx_t_3 = __pyx_t_4;
9820             goto __pyx_L24_bool_binop_done;
9821           }
9822           __pyx_t_4 = ((__pyx_v_next_level == 1) != 0);
9823           __pyx_t_3 = __pyx_t_4;
9824           __pyx_L24_bool_binop_done:;
9825           if (__pyx_t_3) {
9826 
9827             /* "yt/geometry/_selection_routines/selector_object.pxi":142
9828  *                         # look at the next level.
9829  *                         if root.children != NULL and next_level == 1:
9830  *                             ch = root.children[cind(i, j, k)]             # <<<<<<<<<<<<<<
9831  *                         if iter == 1 and next_level == 1 and ch != NULL:
9832  *                             # Note that visitor.pos is always going to be the
9833  */
9834             __pyx_v_ch = (__pyx_v_root->children[__pyx_f_2yt_8geometry_12oct_visitors_cind(__pyx_v_i, __pyx_v_j, __pyx_v_k)]);
9835 
9836             /* "yt/geometry/_selection_routines/selector_object.pxi":141
9837  *                         # We only supply a child if we are actually going to
9838  *                         # look at the next level.
9839  *                         if root.children != NULL and next_level == 1:             # <<<<<<<<<<<<<<
9840  *                             ch = root.children[cind(i, j, k)]
9841  *                         if iter == 1 and next_level == 1 and ch != NULL:
9842  */
9843           }
9844 
9845           /* "yt/geometry/_selection_routines/selector_object.pxi":143
9846  *                         if root.children != NULL and next_level == 1:
9847  *                             ch = root.children[cind(i, j, k)]
9848  *                         if iter == 1 and next_level == 1 and ch != NULL:             # <<<<<<<<<<<<<<
9849  *                             # Note that visitor.pos is always going to be the
9850  *                             # position of the Oct -- it is *not* always going
9851  */
9852           __pyx_t_4 = ((__pyx_v_iter == 1) != 0);
9853           if (__pyx_t_4) {
9854           } else {
9855             __pyx_t_3 = __pyx_t_4;
9856             goto __pyx_L27_bool_binop_done;
9857           }
9858           __pyx_t_4 = ((__pyx_v_next_level == 1) != 0);
9859           if (__pyx_t_4) {
9860           } else {
9861             __pyx_t_3 = __pyx_t_4;
9862             goto __pyx_L27_bool_binop_done;
9863           }
9864           __pyx_t_4 = ((__pyx_v_ch != NULL) != 0);
9865           __pyx_t_3 = __pyx_t_4;
9866           __pyx_L27_bool_binop_done:;
9867           if (__pyx_t_3) {
9868 
9869             /* "yt/geometry/_selection_routines/selector_object.pxi":148
9870  *                             # to be the same as the position of the cell under
9871  *                             # investigation.
9872  *                             visitor.pos[0] = (visitor.pos[0] << 1) + i             # <<<<<<<<<<<<<<
9873  *                             visitor.pos[1] = (visitor.pos[1] << 1) + j
9874  *                             visitor.pos[2] = (visitor.pos[2] << 1) + k
9875  */
9876             (__pyx_v_visitor->pos[0]) = (((__pyx_v_visitor->pos[0]) << 1) + __pyx_v_i);
9877 
9878             /* "yt/geometry/_selection_routines/selector_object.pxi":149
9879  *                             # investigation.
9880  *                             visitor.pos[0] = (visitor.pos[0] << 1) + i
9881  *                             visitor.pos[1] = (visitor.pos[1] << 1) + j             # <<<<<<<<<<<<<<
9882  *                             visitor.pos[2] = (visitor.pos[2] << 1) + k
9883  *                             visitor.level += 1
9884  */
9885             (__pyx_v_visitor->pos[1]) = (((__pyx_v_visitor->pos[1]) << 1) + __pyx_v_j);
9886 
9887             /* "yt/geometry/_selection_routines/selector_object.pxi":150
9888  *                             visitor.pos[0] = (visitor.pos[0] << 1) + i
9889  *                             visitor.pos[1] = (visitor.pos[1] << 1) + j
9890  *                             visitor.pos[2] = (visitor.pos[2] << 1) + k             # <<<<<<<<<<<<<<
9891  *                             visitor.level += 1
9892  *                             self.recursively_visit_octs(
9893  */
9894             (__pyx_v_visitor->pos[2]) = (((__pyx_v_visitor->pos[2]) << 1) + __pyx_v_k);
9895 
9896             /* "yt/geometry/_selection_routines/selector_object.pxi":151
9897  *                             visitor.pos[1] = (visitor.pos[1] << 1) + j
9898  *                             visitor.pos[2] = (visitor.pos[2] << 1) + k
9899  *                             visitor.level += 1             # <<<<<<<<<<<<<<
9900  *                             self.recursively_visit_octs(
9901  *                                 ch, spos, sdds, level + 1, visitor,
9902  */
9903             __pyx_v_visitor->level = (__pyx_v_visitor->level + 1);
9904 
9905             /* "yt/geometry/_selection_routines/selector_object.pxi":152
9906  *                             visitor.pos[2] = (visitor.pos[2] << 1) + k
9907  *                             visitor.level += 1
9908  *                             self.recursively_visit_octs(             # <<<<<<<<<<<<<<
9909  *                                 ch, spos, sdds, level + 1, visitor,
9910  *                                 visit_covered)
9911  */
9912             __pyx_t_7.__pyx_n = 1;
9913             __pyx_t_7.visit_covered = __pyx_v_visit_covered;
9914             ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->recursively_visit_octs(__pyx_v_self, __pyx_v_ch, __pyx_v_spos, __pyx_v_sdds, (__pyx_v_level + 1), __pyx_v_visitor, &__pyx_t_7);
9915 
9916             /* "yt/geometry/_selection_routines/selector_object.pxi":155
9917  *                                 ch, spos, sdds, level + 1, visitor,
9918  *                                 visit_covered)
9919  *                             visitor.pos[0] = (visitor.pos[0] >> 1)             # <<<<<<<<<<<<<<
9920  *                             visitor.pos[1] = (visitor.pos[1] >> 1)
9921  *                             visitor.pos[2] = (visitor.pos[2] >> 1)
9922  */
9923             (__pyx_v_visitor->pos[0]) = ((__pyx_v_visitor->pos[0]) >> 1);
9924 
9925             /* "yt/geometry/_selection_routines/selector_object.pxi":156
9926  *                                 visit_covered)
9927  *                             visitor.pos[0] = (visitor.pos[0] >> 1)
9928  *                             visitor.pos[1] = (visitor.pos[1] >> 1)             # <<<<<<<<<<<<<<
9929  *                             visitor.pos[2] = (visitor.pos[2] >> 1)
9930  *                             visitor.level -= 1
9931  */
9932             (__pyx_v_visitor->pos[1]) = ((__pyx_v_visitor->pos[1]) >> 1);
9933 
9934             /* "yt/geometry/_selection_routines/selector_object.pxi":157
9935  *                             visitor.pos[0] = (visitor.pos[0] >> 1)
9936  *                             visitor.pos[1] = (visitor.pos[1] >> 1)
9937  *                             visitor.pos[2] = (visitor.pos[2] >> 1)             # <<<<<<<<<<<<<<
9938  *                             visitor.level -= 1
9939  *                         elif this_level == 1 and visitor.oref > 0:
9940  */
9941             (__pyx_v_visitor->pos[2]) = ((__pyx_v_visitor->pos[2]) >> 1);
9942 
9943             /* "yt/geometry/_selection_routines/selector_object.pxi":158
9944  *                             visitor.pos[1] = (visitor.pos[1] >> 1)
9945  *                             visitor.pos[2] = (visitor.pos[2] >> 1)
9946  *                             visitor.level -= 1             # <<<<<<<<<<<<<<
9947  *                         elif this_level == 1 and visitor.oref > 0:
9948  *                             visitor.global_index += increment
9949  */
9950             __pyx_v_visitor->level = (__pyx_v_visitor->level - 1);
9951 
9952             /* "yt/geometry/_selection_routines/selector_object.pxi":143
9953  *                         if root.children != NULL and next_level == 1:
9954  *                             ch = root.children[cind(i, j, k)]
9955  *                         if iter == 1 and next_level == 1 and ch != NULL:             # <<<<<<<<<<<<<<
9956  *                             # Note that visitor.pos is always going to be the
9957  *                             # position of the Oct -- it is *not* always going
9958  */
9959             goto __pyx_L26;
9960           }
9961 
9962           /* "yt/geometry/_selection_routines/selector_object.pxi":159
9963  *                             visitor.pos[2] = (visitor.pos[2] >> 1)
9964  *                             visitor.level -= 1
9965  *                         elif this_level == 1 and visitor.oref > 0:             # <<<<<<<<<<<<<<
9966  *                             visitor.global_index += increment
9967  *                             increment = 0
9968  */
9969           __pyx_t_4 = ((__pyx_v_this_level == 1) != 0);
9970           if (__pyx_t_4) {
9971           } else {
9972             __pyx_t_3 = __pyx_t_4;
9973             goto __pyx_L30_bool_binop_done;
9974           }
9975           __pyx_t_4 = ((__pyx_v_visitor->oref > 0) != 0);
9976           __pyx_t_3 = __pyx_t_4;
9977           __pyx_L30_bool_binop_done:;
9978           if (__pyx_t_3) {
9979 
9980             /* "yt/geometry/_selection_routines/selector_object.pxi":160
9981  *                             visitor.level -= 1
9982  *                         elif this_level == 1 and visitor.oref > 0:
9983  *                             visitor.global_index += increment             # <<<<<<<<<<<<<<
9984  *                             increment = 0
9985  *                             self.visit_oct_cells(root, ch, spos, sdds,
9986  */
9987             __pyx_v_visitor->global_index = (__pyx_v_visitor->global_index + __pyx_v_increment);
9988 
9989             /* "yt/geometry/_selection_routines/selector_object.pxi":161
9990  *                         elif this_level == 1 and visitor.oref > 0:
9991  *                             visitor.global_index += increment
9992  *                             increment = 0             # <<<<<<<<<<<<<<
9993  *                             self.visit_oct_cells(root, ch, spos, sdds,
9994  *                                                  visitor, i, j, k)
9995  */
9996             __pyx_v_increment = 0;
9997 
9998             /* "yt/geometry/_selection_routines/selector_object.pxi":162
9999  *                             visitor.global_index += increment
10000  *                             increment = 0
10001  *                             self.visit_oct_cells(root, ch, spos, sdds,             # <<<<<<<<<<<<<<
10002  *                                                  visitor, i, j, k)
10003  *                         elif this_level == 1 and increment == 1:
10004  */
10005             ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->visit_oct_cells(__pyx_v_self, __pyx_v_root, __pyx_v_ch, __pyx_v_spos, __pyx_v_sdds, __pyx_v_visitor, __pyx_v_i, __pyx_v_j, __pyx_v_k);
10006 
10007             /* "yt/geometry/_selection_routines/selector_object.pxi":159
10008  *                             visitor.pos[2] = (visitor.pos[2] >> 1)
10009  *                             visitor.level -= 1
10010  *                         elif this_level == 1 and visitor.oref > 0:             # <<<<<<<<<<<<<<
10011  *                             visitor.global_index += increment
10012  *                             increment = 0
10013  */
10014             goto __pyx_L26;
10015           }
10016 
10017           /* "yt/geometry/_selection_routines/selector_object.pxi":164
10018  *                             self.visit_oct_cells(root, ch, spos, sdds,
10019  *                                                  visitor, i, j, k)
10020  *                         elif this_level == 1 and increment == 1:             # <<<<<<<<<<<<<<
10021  *                             visitor.global_index += increment
10022  *                             increment = 0
10023  */
10024           __pyx_t_4 = ((__pyx_v_this_level == 1) != 0);
10025           if (__pyx_t_4) {
10026           } else {
10027             __pyx_t_3 = __pyx_t_4;
10028             goto __pyx_L32_bool_binop_done;
10029           }
10030           __pyx_t_4 = ((__pyx_v_increment == 1) != 0);
10031           __pyx_t_3 = __pyx_t_4;
10032           __pyx_L32_bool_binop_done:;
10033           if (__pyx_t_3) {
10034 
10035             /* "yt/geometry/_selection_routines/selector_object.pxi":165
10036  *                                                  visitor, i, j, k)
10037  *                         elif this_level == 1 and increment == 1:
10038  *                             visitor.global_index += increment             # <<<<<<<<<<<<<<
10039  *                             increment = 0
10040  *                             visitor.ind[0] = visitor.ind[1] = visitor.ind[2] = 0
10041  */
10042             __pyx_v_visitor->global_index = (__pyx_v_visitor->global_index + __pyx_v_increment);
10043 
10044             /* "yt/geometry/_selection_routines/selector_object.pxi":166
10045  *                         elif this_level == 1 and increment == 1:
10046  *                             visitor.global_index += increment
10047  *                             increment = 0             # <<<<<<<<<<<<<<
10048  *                             visitor.ind[0] = visitor.ind[1] = visitor.ind[2] = 0
10049  *                             visitor.visit(root, 1)
10050  */
10051             __pyx_v_increment = 0;
10052 
10053             /* "yt/geometry/_selection_routines/selector_object.pxi":167
10054  *                             visitor.global_index += increment
10055  *                             increment = 0
10056  *                             visitor.ind[0] = visitor.ind[1] = visitor.ind[2] = 0             # <<<<<<<<<<<<<<
10057  *                             visitor.visit(root, 1)
10058  *                         spos[2] += sdds[2]
10059  */
10060             (__pyx_v_visitor->ind[0]) = 0;
10061             (__pyx_v_visitor->ind[1]) = 0;
10062             (__pyx_v_visitor->ind[2]) = 0;
10063 
10064             /* "yt/geometry/_selection_routines/selector_object.pxi":168
10065  *                             increment = 0
10066  *                             visitor.ind[0] = visitor.ind[1] = visitor.ind[2] = 0
10067  *                             visitor.visit(root, 1)             # <<<<<<<<<<<<<<
10068  *                         spos[2] += sdds[2]
10069  *                     spos[1] += sdds[1]
10070  */
10071             ((struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor *)__pyx_v_visitor->__pyx_vtab)->visit(__pyx_v_visitor, __pyx_v_root, 1);
10072 
10073             /* "yt/geometry/_selection_routines/selector_object.pxi":164
10074  *                             self.visit_oct_cells(root, ch, spos, sdds,
10075  *                                                  visitor, i, j, k)
10076  *                         elif this_level == 1 and increment == 1:             # <<<<<<<<<<<<<<
10077  *                             visitor.global_index += increment
10078  *                             increment = 0
10079  */
10080           }
10081           __pyx_L26:;
10082 
10083           /* "yt/geometry/_selection_routines/selector_object.pxi":169
10084  *                             visitor.ind[0] = visitor.ind[1] = visitor.ind[2] = 0
10085  *                             visitor.visit(root, 1)
10086  *                         spos[2] += sdds[2]             # <<<<<<<<<<<<<<
10087  *                     spos[1] += sdds[1]
10088  *                 spos[0] += sdds[0]
10089  */
10090           __pyx_t_8 = 2;
10091           (__pyx_v_spos[__pyx_t_8]) = ((__pyx_v_spos[__pyx_t_8]) + (__pyx_v_sdds[2]));
10092         }
10093 
10094         /* "yt/geometry/_selection_routines/selector_object.pxi":170
10095  *                             visitor.visit(root, 1)
10096  *                         spos[2] += sdds[2]
10097  *                     spos[1] += sdds[1]             # <<<<<<<<<<<<<<
10098  *                 spos[0] += sdds[0]
10099  *             this_level = 0 # We turn this off for the second pass.
10100  */
10101         __pyx_t_8 = 1;
10102         (__pyx_v_spos[__pyx_t_8]) = ((__pyx_v_spos[__pyx_t_8]) + (__pyx_v_sdds[1]));
10103       }
10104 
10105       /* "yt/geometry/_selection_routines/selector_object.pxi":171
10106  *                         spos[2] += sdds[2]
10107  *                     spos[1] += sdds[1]
10108  *                 spos[0] += sdds[0]             # <<<<<<<<<<<<<<
10109  *             this_level = 0 # We turn this off for the second pass.
10110  *             iter += 1
10111  */
10112       __pyx_t_8 = 0;
10113       (__pyx_v_spos[__pyx_t_8]) = ((__pyx_v_spos[__pyx_t_8]) + (__pyx_v_sdds[0]));
10114     }
10115 
10116     /* "yt/geometry/_selection_routines/selector_object.pxi":172
10117  *                     spos[1] += sdds[1]
10118  *                 spos[0] += sdds[0]
10119  *             this_level = 0 # We turn this off for the second pass.             # <<<<<<<<<<<<<<
10120  *             iter += 1
10121  *
10122  */
10123     __pyx_v_this_level = 0;
10124 
10125     /* "yt/geometry/_selection_routines/selector_object.pxi":173
10126  *                 spos[0] += sdds[0]
10127  *             this_level = 0 # We turn this off for the second pass.
10128  *             iter += 1             # <<<<<<<<<<<<<<
10129  *
10130  *     cdef void visit_oct_cells(self, Oct *root, Oct *ch,
10131  */
10132     __pyx_v_iter = (__pyx_v_iter + 1);
10133   }
10134 
10135   /* "yt/geometry/_selection_routines/selector_object.pxi":78
10136  *     @cython.wraparound(False)
10137  *     @cython.cdivision(True)
10138  *     cdef void recursively_visit_octs(self, Oct *root,             # <<<<<<<<<<<<<<
10139  *                         np.float64_t pos[3], np.float64_t dds[3],
10140  *                         int level,
10141  */
10142 
10143   /* function exit code */
10144   __pyx_L0:;
10145   __Pyx_RefNannyFinishContext();
10146 }
10147 
10148 /* "yt/geometry/_selection_routines/selector_object.pxi":175
10149  *             iter += 1
10150  *
10151  *     cdef void visit_oct_cells(self, Oct *root, Oct *ch,             # <<<<<<<<<<<<<<
10152  *                               np.float64_t spos[3], np.float64_t sdds[3],
10153  *                               OctVisitor visitor, int i, int j, int k):
10154  */
10155 
10156 static void __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_visit_oct_cells(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_root, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_ch, __pyx_t_5numpy_float64_t *__pyx_v_spos, __pyx_t_5numpy_float64_t *__pyx_v_sdds, struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *__pyx_v_visitor, int __pyx_v_i, int __pyx_v_j, int __pyx_v_k) {
10157   int __pyx_v_selected;
10158   __pyx_t_5numpy_float64_t __pyx_v_dds[3];
10159   __pyx_t_5numpy_float64_t __pyx_v_pos[3];
10160   int __pyx_v_ci;
10161   int __pyx_v_cj;
10162   int __pyx_v_ck;
10163   int __pyx_v_nr;
10164   __Pyx_RefNannyDeclarations
10165   int __pyx_t_1;
10166   int __pyx_t_2;
10167   int __pyx_t_3;
10168   int __pyx_t_4;
10169   int __pyx_t_5;
10170   int __pyx_t_6;
10171   int __pyx_t_7;
10172   int __pyx_t_8;
10173   int __pyx_t_9;
10174   int __pyx_t_10;
10175   long __pyx_t_11;
10176   __Pyx_RefNannySetupContext("visit_oct_cells", 0);
10177 
10178   /* "yt/geometry/_selection_routines/selector_object.pxi":181
10179  *         # This saves us some funny-business.
10180  *         cdef int selected
10181  *         if visitor.oref == 1:             # <<<<<<<<<<<<<<
10182  *             selected = self.select_cell(spos, sdds)
10183  *             if ch != NULL:
10184  */
10185   __pyx_t_1 = ((__pyx_v_visitor->oref == 1) != 0);
10186   if (__pyx_t_1) {
10187 
10188     /* "yt/geometry/_selection_routines/selector_object.pxi":182
10189  *         cdef int selected
10190  *         if visitor.oref == 1:
10191  *             selected = self.select_cell(spos, sdds)             # <<<<<<<<<<<<<<
10192  *             if ch != NULL:
10193  *                 selected *= self.overlap_cells
10194  */
10195     __pyx_v_selected = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_cell(__pyx_v_self, __pyx_v_spos, __pyx_v_sdds);
10196 
10197     /* "yt/geometry/_selection_routines/selector_object.pxi":183
10198  *         if visitor.oref == 1:
10199  *             selected = self.select_cell(spos, sdds)
10200  *             if ch != NULL:             # <<<<<<<<<<<<<<
10201  *                 selected *= self.overlap_cells
10202  *             # visitor.ind refers to the cell, not to the oct.
10203  */
10204     __pyx_t_1 = ((__pyx_v_ch != NULL) != 0);
10205     if (__pyx_t_1) {
10206 
10207       /* "yt/geometry/_selection_routines/selector_object.pxi":184
10208  *             selected = self.select_cell(spos, sdds)
10209  *             if ch != NULL:
10210  *                 selected *= self.overlap_cells             # <<<<<<<<<<<<<<
10211  *             # visitor.ind refers to the cell, not to the oct.
10212  *             visitor.ind[0] = i
10213  */
10214       __pyx_v_selected = (__pyx_v_selected * __pyx_v_self->overlap_cells);
10215 
10216       /* "yt/geometry/_selection_routines/selector_object.pxi":183
10217  *         if visitor.oref == 1:
10218  *             selected = self.select_cell(spos, sdds)
10219  *             if ch != NULL:             # <<<<<<<<<<<<<<
10220  *                 selected *= self.overlap_cells
10221  *             # visitor.ind refers to the cell, not to the oct.
10222  */
10223     }
10224 
10225     /* "yt/geometry/_selection_routines/selector_object.pxi":186
10226  *                 selected *= self.overlap_cells
10227  *             # visitor.ind refers to the cell, not to the oct.
10228  *             visitor.ind[0] = i             # <<<<<<<<<<<<<<
10229  *             visitor.ind[1] = j
10230  *             visitor.ind[2] = k
10231  */
10232     (__pyx_v_visitor->ind[0]) = __pyx_v_i;
10233 
10234     /* "yt/geometry/_selection_routines/selector_object.pxi":187
10235  *             # visitor.ind refers to the cell, not to the oct.
10236  *             visitor.ind[0] = i
10237  *             visitor.ind[1] = j             # <<<<<<<<<<<<<<
10238  *             visitor.ind[2] = k
10239  *             visitor.visit(root, selected)
10240  */
10241     (__pyx_v_visitor->ind[1]) = __pyx_v_j;
10242 
10243     /* "yt/geometry/_selection_routines/selector_object.pxi":188
10244  *             visitor.ind[0] = i
10245  *             visitor.ind[1] = j
10246  *             visitor.ind[2] = k             # <<<<<<<<<<<<<<
10247  *             visitor.visit(root, selected)
10248  *             return
10249  */
10250     (__pyx_v_visitor->ind[2]) = __pyx_v_k;
10251 
10252     /* "yt/geometry/_selection_routines/selector_object.pxi":189
10253  *             visitor.ind[1] = j
10254  *             visitor.ind[2] = k
10255  *             visitor.visit(root, selected)             # <<<<<<<<<<<<<<
10256  *             return
10257  *         # Okay, now that we've got that out of the way, we have to do some
10258  */
10259     ((struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor *)__pyx_v_visitor->__pyx_vtab)->visit(__pyx_v_visitor, __pyx_v_root, __pyx_v_selected);
10260 
10261     /* "yt/geometry/_selection_routines/selector_object.pxi":190
10262  *             visitor.ind[2] = k
10263  *             visitor.visit(root, selected)
10264  *             return             # <<<<<<<<<<<<<<
10265  *         # Okay, now that we've got that out of the way, we have to do some
10266  *         # other checks here.  In this case, spos[] is the position of the
10267  */
10268     goto __pyx_L0;
10269 
10270     /* "yt/geometry/_selection_routines/selector_object.pxi":181
10271  *         # This saves us some funny-business.
10272  *         cdef int selected
10273  *         if visitor.oref == 1:             # <<<<<<<<<<<<<<
10274  *             selected = self.select_cell(spos, sdds)
10275  *             if ch != NULL:
10276  */
10277   }
10278 
10279   /* "yt/geometry/_selection_routines/selector_object.pxi":199
10280  *         cdef np.float64_t pos[3]
10281  *         cdef int ci, cj, ck
10282  *         cdef int nr = (1 << (visitor.oref - 1))             # <<<<<<<<<<<<<<
10283  *         for ci in range(3):
10284  *             dds[ci] = sdds[ci] / nr
10285  */
10286   __pyx_v_nr = (1 << (__pyx_v_visitor->oref - 1));
10287 
10288   /* "yt/geometry/_selection_routines/selector_object.pxi":200
10289  *         cdef int ci, cj, ck
10290  *         cdef int nr = (1 << (visitor.oref - 1))
10291  *         for ci in range(3):             # <<<<<<<<<<<<<<
10292  *             dds[ci] = sdds[ci] / nr
10293  *         # Boot strap at the first index.
10294  */
10295   for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
10296     __pyx_v_ci = __pyx_t_2;
10297 
10298     /* "yt/geometry/_selection_routines/selector_object.pxi":201
10299  *         cdef int nr = (1 << (visitor.oref - 1))
10300  *         for ci in range(3):
10301  *             dds[ci] = sdds[ci] / nr             # <<<<<<<<<<<<<<
10302  *         # Boot strap at the first index.
10303  *         pos[0] = (spos[0] - sdds[0]/2.0) + dds[0] * 0.5
10304  */
10305     if (unlikely(__pyx_v_nr == 0)) {
10306       PyErr_SetString(PyExc_ZeroDivisionError, "float division");
10307       __PYX_ERR(1, 201, __pyx_L1_error)
10308     }
10309     (__pyx_v_dds[__pyx_v_ci]) = ((__pyx_v_sdds[__pyx_v_ci]) / __pyx_v_nr);
10310   }
10311 
10312   /* "yt/geometry/_selection_routines/selector_object.pxi":203
10313  *             dds[ci] = sdds[ci] / nr
10314  *         # Boot strap at the first index.
10315  *         pos[0] = (spos[0] - sdds[0]/2.0) + dds[0] * 0.5             # <<<<<<<<<<<<<<
10316  *         for ci in range(nr):
10317  *             pos[1] = (spos[1] - sdds[1]/2.0) + dds[1] * 0.5
10318  */
10319   (__pyx_v_pos[0]) = (((__pyx_v_spos[0]) - ((__pyx_v_sdds[0]) / 2.0)) + ((__pyx_v_dds[0]) * 0.5));
10320 
10321   /* "yt/geometry/_selection_routines/selector_object.pxi":204
10322  *         # Boot strap at the first index.
10323  *         pos[0] = (spos[0] - sdds[0]/2.0) + dds[0] * 0.5
10324  *         for ci in range(nr):             # <<<<<<<<<<<<<<
10325  *             pos[1] = (spos[1] - sdds[1]/2.0) + dds[1] * 0.5
10326  *             for cj in range(nr):
10327  */
10328   __pyx_t_2 = __pyx_v_nr;
10329   __pyx_t_3 = __pyx_t_2;
10330   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
10331     __pyx_v_ci = __pyx_t_4;
10332 
10333     /* "yt/geometry/_selection_routines/selector_object.pxi":205
10334  *         pos[0] = (spos[0] - sdds[0]/2.0) + dds[0] * 0.5
10335  *         for ci in range(nr):
10336  *             pos[1] = (spos[1] - sdds[1]/2.0) + dds[1] * 0.5             # <<<<<<<<<<<<<<
10337  *             for cj in range(nr):
10338  *                 pos[2] = (spos[2] - sdds[2]/2.0) + dds[2] * 0.5
10339  */
10340     (__pyx_v_pos[1]) = (((__pyx_v_spos[1]) - ((__pyx_v_sdds[1]) / 2.0)) + ((__pyx_v_dds[1]) * 0.5));
10341 
10342     /* "yt/geometry/_selection_routines/selector_object.pxi":206
10343  *         for ci in range(nr):
10344  *             pos[1] = (spos[1] - sdds[1]/2.0) + dds[1] * 0.5
10345  *             for cj in range(nr):             # <<<<<<<<<<<<<<
10346  *                 pos[2] = (spos[2] - sdds[2]/2.0) + dds[2] * 0.5
10347  *                 for ck in range(nr):
10348  */
10349     __pyx_t_5 = __pyx_v_nr;
10350     __pyx_t_6 = __pyx_t_5;
10351     for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
10352       __pyx_v_cj = __pyx_t_7;
10353 
10354       /* "yt/geometry/_selection_routines/selector_object.pxi":207
10355  *             pos[1] = (spos[1] - sdds[1]/2.0) + dds[1] * 0.5
10356  *             for cj in range(nr):
10357  *                 pos[2] = (spos[2] - sdds[2]/2.0) + dds[2] * 0.5             # <<<<<<<<<<<<<<
10358  *                 for ck in range(nr):
10359  *                     selected = self.select_cell(pos, dds)
10360  */
10361       (__pyx_v_pos[2]) = (((__pyx_v_spos[2]) - ((__pyx_v_sdds[2]) / 2.0)) + ((__pyx_v_dds[2]) * 0.5));
10362 
10363       /* "yt/geometry/_selection_routines/selector_object.pxi":208
10364  *             for cj in range(nr):
10365  *                 pos[2] = (spos[2] - sdds[2]/2.0) + dds[2] * 0.5
10366  *                 for ck in range(nr):             # <<<<<<<<<<<<<<
10367  *                     selected = self.select_cell(pos, dds)
10368  *                     if ch != NULL:
10369  */
10370       __pyx_t_8 = __pyx_v_nr;
10371       __pyx_t_9 = __pyx_t_8;
10372       for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
10373         __pyx_v_ck = __pyx_t_10;
10374 
10375         /* "yt/geometry/_selection_routines/selector_object.pxi":209
10376  *                 pos[2] = (spos[2] - sdds[2]/2.0) + dds[2] * 0.5
10377  *                 for ck in range(nr):
10378  *                     selected = self.select_cell(pos, dds)             # <<<<<<<<<<<<<<
10379  *                     if ch != NULL:
10380  *                         selected *= self.overlap_cells
10381  */
10382         __pyx_v_selected = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_cell(__pyx_v_self, __pyx_v_pos, __pyx_v_dds);
10383 
10384         /* "yt/geometry/_selection_routines/selector_object.pxi":210
10385  *                 for ck in range(nr):
10386  *                     selected = self.select_cell(pos, dds)
10387  *                     if ch != NULL:             # <<<<<<<<<<<<<<
10388  *                         selected *= self.overlap_cells
10389  *                     visitor.ind[0] = ci + i * nr
10390  */
10391         __pyx_t_1 = ((__pyx_v_ch != NULL) != 0);
10392         if (__pyx_t_1) {
10393 
10394           /* "yt/geometry/_selection_routines/selector_object.pxi":211
10395  *                     selected = self.select_cell(pos, dds)
10396  *                     if ch != NULL:
10397  *                         selected *= self.overlap_cells             # <<<<<<<<<<<<<<
10398  *                     visitor.ind[0] = ci + i * nr
10399  *                     visitor.ind[1] = cj + j * nr
10400  */
10401           __pyx_v_selected = (__pyx_v_selected * __pyx_v_self->overlap_cells);
10402 
10403           /* "yt/geometry/_selection_routines/selector_object.pxi":210
10404  *                 for ck in range(nr):
10405  *                     selected = self.select_cell(pos, dds)
10406  *                     if ch != NULL:             # <<<<<<<<<<<<<<
10407  *                         selected *= self.overlap_cells
10408  *                     visitor.ind[0] = ci + i * nr
10409  */
10410         }
10411 
10412         /* "yt/geometry/_selection_routines/selector_object.pxi":212
10413  *                     if ch != NULL:
10414  *                         selected *= self.overlap_cells
10415  *                     visitor.ind[0] = ci + i * nr             # <<<<<<<<<<<<<<
10416  *                     visitor.ind[1] = cj + j * nr
10417  *                     visitor.ind[2] = ck + k * nr
10418  */
10419         (__pyx_v_visitor->ind[0]) = (__pyx_v_ci + (__pyx_v_i * __pyx_v_nr));
10420 
10421         /* "yt/geometry/_selection_routines/selector_object.pxi":213
10422  *                         selected *= self.overlap_cells
10423  *                     visitor.ind[0] = ci + i * nr
10424  *                     visitor.ind[1] = cj + j * nr             # <<<<<<<<<<<<<<
10425  *                     visitor.ind[2] = ck + k * nr
10426  *                     visitor.visit(root, selected)
10427  */
10428         (__pyx_v_visitor->ind[1]) = (__pyx_v_cj + (__pyx_v_j * __pyx_v_nr));
10429 
10430         /* "yt/geometry/_selection_routines/selector_object.pxi":214
10431  *                     visitor.ind[0] = ci + i * nr
10432  *                     visitor.ind[1] = cj + j * nr
10433  *                     visitor.ind[2] = ck + k * nr             # <<<<<<<<<<<<<<
10434  *                     visitor.visit(root, selected)
10435  *                     pos[2] += dds[2]
10436  */
10437         (__pyx_v_visitor->ind[2]) = (__pyx_v_ck + (__pyx_v_k * __pyx_v_nr));
10438 
10439         /* "yt/geometry/_selection_routines/selector_object.pxi":215
10440  *                     visitor.ind[1] = cj + j * nr
10441  *                     visitor.ind[2] = ck + k * nr
10442  *                     visitor.visit(root, selected)             # <<<<<<<<<<<<<<
10443  *                     pos[2] += dds[2]
10444  *                 pos[1] += dds[1]
10445  */
10446         ((struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor *)__pyx_v_visitor->__pyx_vtab)->visit(__pyx_v_visitor, __pyx_v_root, __pyx_v_selected);
10447 
10448         /* "yt/geometry/_selection_routines/selector_object.pxi":216
10449  *                     visitor.ind[2] = ck + k * nr
10450  *                     visitor.visit(root, selected)
10451  *                     pos[2] += dds[2]             # <<<<<<<<<<<<<<
10452  *                 pos[1] += dds[1]
10453  *             pos[0] += dds[0]
10454  */
10455         __pyx_t_11 = 2;
10456         (__pyx_v_pos[__pyx_t_11]) = ((__pyx_v_pos[__pyx_t_11]) + (__pyx_v_dds[2]));
10457       }
10458 
10459       /* "yt/geometry/_selection_routines/selector_object.pxi":217
10460  *                     visitor.visit(root, selected)
10461  *                     pos[2] += dds[2]
10462  *                 pos[1] += dds[1]             # <<<<<<<<<<<<<<
10463  *             pos[0] += dds[0]
10464  *
10465  */
10466       __pyx_t_11 = 1;
10467       (__pyx_v_pos[__pyx_t_11]) = ((__pyx_v_pos[__pyx_t_11]) + (__pyx_v_dds[1]));
10468     }
10469 
10470     /* "yt/geometry/_selection_routines/selector_object.pxi":218
10471  *                     pos[2] += dds[2]
10472  *                 pos[1] += dds[1]
10473  *             pos[0] += dds[0]             # <<<<<<<<<<<<<<
10474  *
10475  *     @cython.boundscheck(False)
10476  */
10477     __pyx_t_11 = 0;
10478     (__pyx_v_pos[__pyx_t_11]) = ((__pyx_v_pos[__pyx_t_11]) + (__pyx_v_dds[0]));
10479   }
10480 
10481   /* "yt/geometry/_selection_routines/selector_object.pxi":175
10482  *             iter += 1
10483  *
10484  *     cdef void visit_oct_cells(self, Oct *root, Oct *ch,             # <<<<<<<<<<<<<<
10485  *                               np.float64_t spos[3], np.float64_t sdds[3],
10486  *                               OctVisitor visitor, int i, int j, int k):
10487  */
10488 
10489   /* function exit code */
10490   goto __pyx_L0;
10491   __pyx_L1_error:;
10492   __Pyx_WriteUnraisable("yt.geometry.selection_routines.SelectorObject.visit_oct_cells", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
10493   __pyx_L0:;
10494   __Pyx_RefNannyFinishContext();
10495 }
10496 
10497 /* "yt/geometry/_selection_routines/selector_object.pxi":223
10498  *     @cython.wraparound(False)
10499  *     @cython.cdivision(True)
10500  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
10501  *                                np.float64_t right_edge[3],
10502  *                                np.int32_t level, Oct *o = NULL) nogil:
10503  */
10504 
10505 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args) {
10506   int __pyx_r;
10507   int __pyx_t_1;
10508   int __pyx_t_2;
10509   if (__pyx_optional_args) {
10510   }
10511 
10512   /* "yt/geometry/_selection_routines/selector_object.pxi":226
10513  *                                np.float64_t right_edge[3],
10514  *                                np.int32_t level, Oct *o = NULL) nogil:
10515  *         if level < self.min_level or level > self.max_level: return 0             # <<<<<<<<<<<<<<
10516  *         return self.select_bbox(left_edge, right_edge)
10517  *
10518  */
10519   __pyx_t_2 = ((__pyx_v_level < __pyx_v_self->min_level) != 0);
10520   if (!__pyx_t_2) {
10521   } else {
10522     __pyx_t_1 = __pyx_t_2;
10523     goto __pyx_L4_bool_binop_done;
10524   }
10525   __pyx_t_2 = ((__pyx_v_level > __pyx_v_self->max_level) != 0);
10526   __pyx_t_1 = __pyx_t_2;
10527   __pyx_L4_bool_binop_done:;
10528   if (__pyx_t_1) {
10529     __pyx_r = 0;
10530     goto __pyx_L0;
10531   }
10532 
10533   /* "yt/geometry/_selection_routines/selector_object.pxi":227
10534  *                                np.int32_t level, Oct *o = NULL) nogil:
10535  *         if level < self.min_level or level > self.max_level: return 0
10536  *         return self.select_bbox(left_edge, right_edge)             # <<<<<<<<<<<<<<
10537  *
10538  *     @cython.boundscheck(False)
10539  */
10540   __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_bbox(__pyx_v_self, __pyx_v_left_edge, __pyx_v_right_edge);
10541   goto __pyx_L0;
10542 
10543   /* "yt/geometry/_selection_routines/selector_object.pxi":223
10544  *     @cython.wraparound(False)
10545  *     @cython.cdivision(True)
10546  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
10547  *                                np.float64_t right_edge[3],
10548  *                                np.int32_t level, Oct *o = NULL) nogil:
10549  */
10550 
10551   /* function exit code */
10552   __pyx_L0:;
10553   return __pyx_r;
10554 }
10555 
10556 /* "yt/geometry/_selection_routines/selector_object.pxi":232
10557  *     @cython.wraparound(False)
10558  *     @cython.cdivision(True)
10559  *     cdef int select_grid_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
10560  *                                     np.float64_t right_edge[3],
10561  *                                     np.int32_t level, Oct *o = NULL) nogil:
10562  */
10563 
10564 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_grid_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid_edge *__pyx_optional_args) {
10565   int __pyx_r;
10566   int __pyx_t_1;
10567   int __pyx_t_2;
10568   if (__pyx_optional_args) {
10569   }
10570 
10571   /* "yt/geometry/_selection_routines/selector_object.pxi":235
10572  *                                     np.float64_t right_edge[3],
10573  *                                     np.int32_t level, Oct *o = NULL) nogil:
10574  *         if level < self.min_level or level > self.max_level: return 0             # <<<<<<<<<<<<<<
10575  *         return self.select_bbox_edge(left_edge, right_edge)
10576  *
10577  */
10578   __pyx_t_2 = ((__pyx_v_level < __pyx_v_self->min_level) != 0);
10579   if (!__pyx_t_2) {
10580   } else {
10581     __pyx_t_1 = __pyx_t_2;
10582     goto __pyx_L4_bool_binop_done;
10583   }
10584   __pyx_t_2 = ((__pyx_v_level > __pyx_v_self->max_level) != 0);
10585   __pyx_t_1 = __pyx_t_2;
10586   __pyx_L4_bool_binop_done:;
10587   if (__pyx_t_1) {
10588     __pyx_r = 0;
10589     goto __pyx_L0;
10590   }
10591 
10592   /* "yt/geometry/_selection_routines/selector_object.pxi":236
10593  *                                     np.int32_t level, Oct *o = NULL) nogil:
10594  *         if level < self.min_level or level > self.max_level: return 0
10595  *         return self.select_bbox_edge(left_edge, right_edge)             # <<<<<<<<<<<<<<
10596  *
10597  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
10598  */
10599   __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_bbox_edge(__pyx_v_self, __pyx_v_left_edge, __pyx_v_right_edge);
10600   goto __pyx_L0;
10601 
10602   /* "yt/geometry/_selection_routines/selector_object.pxi":232
10603  *     @cython.wraparound(False)
10604  *     @cython.cdivision(True)
10605  *     cdef int select_grid_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
10606  *                                     np.float64_t right_edge[3],
10607  *                                     np.int32_t level, Oct *o = NULL) nogil:
10608  */
10609 
10610   /* function exit code */
10611   __pyx_L0:;
10612   return __pyx_r;
10613 }
10614 
10615 /* "yt/geometry/_selection_routines/selector_object.pxi":238
10616  *         return self.select_bbox_edge(left_edge, right_edge)
10617  *
10618  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
10619  *         return 0
10620  *
10621  */
10622 
10623 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_cell(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds) {
10624   int __pyx_r;
10625 
10626   /* "yt/geometry/_selection_routines/selector_object.pxi":239
10627  *
10628  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
10629  *         return 0             # <<<<<<<<<<<<<<
10630  *
10631  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
10632  */
10633   __pyx_r = 0;
10634   goto __pyx_L0;
10635 
10636   /* "yt/geometry/_selection_routines/selector_object.pxi":238
10637  *         return self.select_bbox_edge(left_edge, right_edge)
10638  *
10639  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
10640  *         return 0
10641  *
10642  */
10643 
10644   /* function exit code */
10645   __pyx_L0:;
10646   return __pyx_r;
10647 }
10648 
10649 /* "yt/geometry/_selection_routines/selector_object.pxi":241
10650  *         return 0
10651  *
10652  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
10653  *         return 0
10654  *
10655  */
10656 
10657 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos) {
10658   int __pyx_r;
10659 
10660   /* "yt/geometry/_selection_routines/selector_object.pxi":242
10661  *
10662  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
10663  *         return 0             # <<<<<<<<<<<<<<
10664  *
10665  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
10666  */
10667   __pyx_r = 0;
10668   goto __pyx_L0;
10669 
10670   /* "yt/geometry/_selection_routines/selector_object.pxi":241
10671  *         return 0
10672  *
10673  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
10674  *         return 0
10675  *
10676  */
10677 
10678   /* function exit code */
10679   __pyx_L0:;
10680   return __pyx_r;
10681 }
10682 
10683 /* "yt/geometry/_selection_routines/selector_object.pxi":244
10684  *         return 0
10685  *
10686  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
10687  *         return 0
10688  *
10689  */
10690 
10691 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_sphere(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t __pyx_v_radius) {
10692   int __pyx_r;
10693 
10694   /* "yt/geometry/_selection_routines/selector_object.pxi":245
10695  *
10696  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
10697  *         return 0             # <<<<<<<<<<<<<<
10698  *
10699  *     cdef int select_bbox(self, np.float64_t left_edge[3],
10700  */
10701   __pyx_r = 0;
10702   goto __pyx_L0;
10703 
10704   /* "yt/geometry/_selection_routines/selector_object.pxi":244
10705  *         return 0
10706  *
10707  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
10708  *         return 0
10709  *
10710  */
10711 
10712   /* function exit code */
10713   __pyx_L0:;
10714   return __pyx_r;
10715 }
10716 
10717 /* "yt/geometry/_selection_routines/selector_object.pxi":247
10718  *         return 0
10719  *
10720  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
10721  *                                np.float64_t right_edge[3]) nogil:
10722  *         """
10723  */
10724 
10725 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_bbox(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
10726   int __pyx_r;
10727 
10728   /* "yt/geometry/_selection_routines/selector_object.pxi":254
10729  *           1: If the selector overlaps the bounding box anywhere.
10730  *         """
10731  *         return 0             # <<<<<<<<<<<<<<
10732  *
10733  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
10734  */
10735   __pyx_r = 0;
10736   goto __pyx_L0;
10737 
10738   /* "yt/geometry/_selection_routines/selector_object.pxi":247
10739  *         return 0
10740  *
10741  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
10742  *                                np.float64_t right_edge[3]) nogil:
10743  *         """
10744  */
10745 
10746   /* function exit code */
10747   __pyx_L0:;
10748   return __pyx_r;
10749 }
10750 
10751 /* "yt/geometry/_selection_routines/selector_object.pxi":256
10752  *         return 0
10753  *
10754  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
10755  *                                np.float64_t right_edge[3]) nogil:
10756  *         """
10757  */
10758 
10759 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_bbox_edge(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
10760   int __pyx_r;
10761 
10762   /* "yt/geometry/_selection_routines/selector_object.pxi":264
10763  *           2: If the selector contains part of the bounding box.
10764  *         """
10765  *         return 0             # <<<<<<<<<<<<<<
10766  *
10767  *     @cython.boundscheck(False)
10768  */
10769   __pyx_r = 0;
10770   goto __pyx_L0;
10771 
10772   /* "yt/geometry/_selection_routines/selector_object.pxi":256
10773  *         return 0
10774  *
10775  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
10776  *                                np.float64_t right_edge[3]) nogil:
10777  *         """
10778  */
10779 
10780   /* function exit code */
10781   __pyx_L0:;
10782   return __pyx_r;
10783 }
10784 
10785 /* "yt/geometry/_selection_routines/selector_object.pxi":269
10786  *     @cython.wraparound(False)
10787  *     @cython.cdivision(True)
10788  *     cdef np.float64_t periodic_difference(self, np.float64_t x1, np.float64_t x2, int d) nogil:             # <<<<<<<<<<<<<<
10789  *         # domain_width is already in code units, and we assume what is fed in
10790  *         # is too.
10791  */
10792 
10793 static __pyx_t_5numpy_float64_t __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_periodic_difference(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, __pyx_t_5numpy_float64_t __pyx_v_x1, __pyx_t_5numpy_float64_t __pyx_v_x2, int __pyx_v_d) {
10794   __pyx_t_5numpy_float64_t __pyx_v_rel;
10795   __pyx_t_5numpy_float64_t __pyx_r;
10796   int __pyx_t_1;
10797 
10798   /* "yt/geometry/_selection_routines/selector_object.pxi":272
10799  *         # domain_width is already in code units, and we assume what is fed in
10800  *         # is too.
10801  *         cdef np.float64_t rel = x1 - x2             # <<<<<<<<<<<<<<
10802  *         if self.periodicity[d]:
10803  *             if rel > self.domain_width[d] * 0.5:
10804  */
10805   __pyx_v_rel = (__pyx_v_x1 - __pyx_v_x2);
10806 
10807   /* "yt/geometry/_selection_routines/selector_object.pxi":273
10808  *         # is too.
10809  *         cdef np.float64_t rel = x1 - x2
10810  *         if self.periodicity[d]:             # <<<<<<<<<<<<<<
10811  *             if rel > self.domain_width[d] * 0.5:
10812  *                 rel -= self.domain_width[d]
10813  */
10814   __pyx_t_1 = ((__pyx_v_self->periodicity[__pyx_v_d]) != 0);
10815   if (__pyx_t_1) {
10816 
10817     /* "yt/geometry/_selection_routines/selector_object.pxi":274
10818  *         cdef np.float64_t rel = x1 - x2
10819  *         if self.periodicity[d]:
10820  *             if rel > self.domain_width[d] * 0.5:             # <<<<<<<<<<<<<<
10821  *                 rel -= self.domain_width[d]
10822  *             elif rel < -self.domain_width[d] * 0.5:
10823  */
10824     __pyx_t_1 = ((__pyx_v_rel > ((__pyx_v_self->domain_width[__pyx_v_d]) * 0.5)) != 0);
10825     if (__pyx_t_1) {
10826 
10827       /* "yt/geometry/_selection_routines/selector_object.pxi":275
10828  *         if self.periodicity[d]:
10829  *             if rel > self.domain_width[d] * 0.5:
10830  *                 rel -= self.domain_width[d]             # <<<<<<<<<<<<<<
10831  *             elif rel < -self.domain_width[d] * 0.5:
10832  *                 rel += self.domain_width[d]
10833  */
10834       __pyx_v_rel = (__pyx_v_rel - (__pyx_v_self->domain_width[__pyx_v_d]));
10835 
10836       /* "yt/geometry/_selection_routines/selector_object.pxi":274
10837  *         cdef np.float64_t rel = x1 - x2
10838  *         if self.periodicity[d]:
10839  *             if rel > self.domain_width[d] * 0.5:             # <<<<<<<<<<<<<<
10840  *                 rel -= self.domain_width[d]
10841  *             elif rel < -self.domain_width[d] * 0.5:
10842  */
10843       goto __pyx_L4;
10844     }
10845 
10846     /* "yt/geometry/_selection_routines/selector_object.pxi":276
10847  *             if rel > self.domain_width[d] * 0.5:
10848  *                 rel -= self.domain_width[d]
10849  *             elif rel < -self.domain_width[d] * 0.5:             # <<<<<<<<<<<<<<
10850  *                 rel += self.domain_width[d]
10851  *         return rel
10852  */
10853     __pyx_t_1 = ((__pyx_v_rel < ((-(__pyx_v_self->domain_width[__pyx_v_d])) * 0.5)) != 0);
10854     if (__pyx_t_1) {
10855 
10856       /* "yt/geometry/_selection_routines/selector_object.pxi":277
10857  *                 rel -= self.domain_width[d]
10858  *             elif rel < -self.domain_width[d] * 0.5:
10859  *                 rel += self.domain_width[d]             # <<<<<<<<<<<<<<
10860  *         return rel
10861  *
10862  */
10863       __pyx_v_rel = (__pyx_v_rel + (__pyx_v_self->domain_width[__pyx_v_d]));
10864 
10865       /* "yt/geometry/_selection_routines/selector_object.pxi":276
10866  *             if rel > self.domain_width[d] * 0.5:
10867  *                 rel -= self.domain_width[d]
10868  *             elif rel < -self.domain_width[d] * 0.5:             # <<<<<<<<<<<<<<
10869  *                 rel += self.domain_width[d]
10870  *         return rel
10871  */
10872     }
10873     __pyx_L4:;
10874 
10875     /* "yt/geometry/_selection_routines/selector_object.pxi":273
10876  *         # is too.
10877  *         cdef np.float64_t rel = x1 - x2
10878  *         if self.periodicity[d]:             # <<<<<<<<<<<<<<
10879  *             if rel > self.domain_width[d] * 0.5:
10880  *                 rel -= self.domain_width[d]
10881  */
10882   }
10883 
10884   /* "yt/geometry/_selection_routines/selector_object.pxi":278
10885  *             elif rel < -self.domain_width[d] * 0.5:
10886  *                 rel += self.domain_width[d]
10887  *         return rel             # <<<<<<<<<<<<<<
10888  *
10889  *     @cython.boundscheck(False)
10890  */
10891   __pyx_r = __pyx_v_rel;
10892   goto __pyx_L0;
10893 
10894   /* "yt/geometry/_selection_routines/selector_object.pxi":269
10895  *     @cython.wraparound(False)
10896  *     @cython.cdivision(True)
10897  *     cdef np.float64_t periodic_difference(self, np.float64_t x1, np.float64_t x2, int d) nogil:             # <<<<<<<<<<<<<<
10898  *         # domain_width is already in code units, and we assume what is fed in
10899  *         # is too.
10900  */
10901 
10902   /* function exit code */
10903   __pyx_L0:;
10904   return __pyx_r;
10905 }
10906 
10907 /* "yt/geometry/_selection_routines/selector_object.pxi":283
10908  *     @cython.wraparound(False)
10909  *     @cython.cdivision(True)
10910  *     def fill_mesh_mask(self, mesh):             # <<<<<<<<<<<<<<
10911  *         cdef np.float64_t pos[3]
10912  *         cdef np.ndarray[np.int64_t, ndim=2] indices
10913  */
10914 
10915 /* Python wrapper */
10916 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_11fill_mesh_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_mesh); /*proto*/
10917 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_11fill_mesh_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_mesh) {
10918   PyObject *__pyx_r = 0;
10919   __Pyx_RefNannyDeclarations
10920   __Pyx_RefNannySetupContext("fill_mesh_mask (wrapper)", 0);
10921   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_10fill_mesh_mask(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), ((PyObject *)__pyx_v_mesh));
10922 
10923   /* function exit code */
10924   __Pyx_RefNannyFinishContext();
10925   return __pyx_r;
10926 }
10927 
10928 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_10fill_mesh_mask(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_mesh) {
10929   __pyx_t_5numpy_float64_t __pyx_v_pos[3];
10930   PyArrayObject *__pyx_v_indices = 0;
10931   PyArrayObject *__pyx_v_coords = 0;
10932   PyArrayObject *__pyx_v_mask = 0;
10933   int __pyx_v_i;
10934   int __pyx_v_j;
10935   int __pyx_v_k;
10936   int __pyx_v_selected;
10937   int __pyx_v_npoints;
10938   int __pyx_v_nv;
10939   int __pyx_v_total;
10940   int __pyx_v_offset;
10941   __Pyx_LocalBuf_ND __pyx_pybuffernd_coords;
10942   __Pyx_Buffer __pyx_pybuffer_coords;
10943   __Pyx_LocalBuf_ND __pyx_pybuffernd_indices;
10944   __Pyx_Buffer __pyx_pybuffer_indices;
10945   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
10946   __Pyx_Buffer __pyx_pybuffer_mask;
10947   PyObject *__pyx_r = NULL;
10948   __Pyx_RefNannyDeclarations
10949   PyObject *__pyx_t_1 = NULL;
10950   int __pyx_t_2;
10951   PyObject *__pyx_t_3 = NULL;
10952   PyArrayObject *__pyx_t_4 = NULL;
10953   PyObject *__pyx_t_5 = NULL;
10954   PyObject *__pyx_t_6 = NULL;
10955   PyObject *__pyx_t_7 = NULL;
10956   PyArrayObject *__pyx_t_8 = NULL;
10957   PyObject *__pyx_t_9 = NULL;
10958   PyObject *__pyx_t_10 = NULL;
10959   PyArrayObject *__pyx_t_11 = NULL;
10960   int __pyx_t_12;
10961   int __pyx_t_13;
10962   int __pyx_t_14;
10963   int __pyx_t_15;
10964   int __pyx_t_16;
10965   int __pyx_t_17;
10966   Py_ssize_t __pyx_t_18;
10967   Py_ssize_t __pyx_t_19;
10968   __pyx_t_5numpy_int64_t __pyx_t_20;
10969   Py_ssize_t __pyx_t_21;
10970   int __pyx_t_22;
10971   Py_ssize_t __pyx_t_23;
10972   __Pyx_RefNannySetupContext("fill_mesh_mask", 0);
10973   __pyx_pybuffer_indices.pybuffer.buf = NULL;
10974   __pyx_pybuffer_indices.refcount = 0;
10975   __pyx_pybuffernd_indices.data = NULL;
10976   __pyx_pybuffernd_indices.rcbuffer = &__pyx_pybuffer_indices;
10977   __pyx_pybuffer_coords.pybuffer.buf = NULL;
10978   __pyx_pybuffer_coords.refcount = 0;
10979   __pyx_pybuffernd_coords.data = NULL;
10980   __pyx_pybuffernd_coords.rcbuffer = &__pyx_pybuffer_coords;
10981   __pyx_pybuffer_mask.pybuffer.buf = NULL;
10982   __pyx_pybuffer_mask.refcount = 0;
10983   __pyx_pybuffernd_mask.data = NULL;
10984   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
10985 
10986   /* "yt/geometry/_selection_routines/selector_object.pxi":289
10987  *         cdef np.ndarray[np.uint8_t, ndim=1] mask
10988  *         cdef int i, j, k, selected
10989  *         cdef int npoints, nv = mesh._connectivity_length             # <<<<<<<<<<<<<<
10990  *         cdef int total = 0
10991  *         cdef int offset = mesh._index_offset
10992  */
10993   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_connectivity_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 289, __pyx_L1_error)
10994   __Pyx_GOTREF(__pyx_t_1);
10995   __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 289, __pyx_L1_error)
10996   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
10997   __pyx_v_nv = __pyx_t_2;
10998 
10999   /* "yt/geometry/_selection_routines/selector_object.pxi":290
11000  *         cdef int i, j, k, selected
11001  *         cdef int npoints, nv = mesh._connectivity_length
11002  *         cdef int total = 0             # <<<<<<<<<<<<<<
11003  *         cdef int offset = mesh._index_offset
11004  *         coords = _ensure_code(mesh.connectivity_coords)
11005  */
11006   __pyx_v_total = 0;
11007 
11008   /* "yt/geometry/_selection_routines/selector_object.pxi":291
11009  *         cdef int npoints, nv = mesh._connectivity_length
11010  *         cdef int total = 0
11011  *         cdef int offset = mesh._index_offset             # <<<<<<<<<<<<<<
11012  *         coords = _ensure_code(mesh.connectivity_coords)
11013  *         indices = mesh.connectivity_indices
11014  */
11015   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_index_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 291, __pyx_L1_error)
11016   __Pyx_GOTREF(__pyx_t_1);
11017   __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 291, __pyx_L1_error)
11018   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11019   __pyx_v_offset = __pyx_t_2;
11020 
11021   /* "yt/geometry/_selection_routines/selector_object.pxi":292
11022  *         cdef int total = 0
11023  *         cdef int offset = mesh._index_offset
11024  *         coords = _ensure_code(mesh.connectivity_coords)             # <<<<<<<<<<<<<<
11025  *         indices = mesh.connectivity_indices
11026  *         npoints = indices.shape[0]
11027  */
11028   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_connectivity_coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 292, __pyx_L1_error)
11029   __Pyx_GOTREF(__pyx_t_1);
11030   __pyx_t_3 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 292, __pyx_L1_error)
11031   __Pyx_GOTREF(__pyx_t_3);
11032   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11033   if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 292, __pyx_L1_error)
11034   __pyx_t_4 = ((PyArrayObject *)__pyx_t_3);
11035   {
11036     __Pyx_BufFmt_StackElem __pyx_stack[1];
11037     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_coords.rcbuffer->pybuffer);
11038     __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_coords.rcbuffer->pybuffer, (PyObject*)__pyx_t_4, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
11039     if (unlikely(__pyx_t_2 < 0)) {
11040       PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
11041       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_coords.rcbuffer->pybuffer, (PyObject*)__pyx_v_coords, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
11042         Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7);
11043         __Pyx_RaiseBufferFallbackError();
11044       } else {
11045         PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
11046       }
11047       __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0;
11048     }
11049     __pyx_pybuffernd_coords.diminfo[0].strides = __pyx_pybuffernd_coords.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_coords.diminfo[0].shape = __pyx_pybuffernd_coords.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_coords.diminfo[1].strides = __pyx_pybuffernd_coords.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_coords.diminfo[1].shape = __pyx_pybuffernd_coords.rcbuffer->pybuffer.shape[1];
11050     if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 292, __pyx_L1_error)
11051   }
11052   __pyx_t_4 = 0;
11053   __pyx_v_coords = ((PyArrayObject *)__pyx_t_3);
11054   __pyx_t_3 = 0;
11055 
11056   /* "yt/geometry/_selection_routines/selector_object.pxi":293
11057  *         cdef int offset = mesh._index_offset
11058  *         coords = _ensure_code(mesh.connectivity_coords)
11059  *         indices = mesh.connectivity_indices             # <<<<<<<<<<<<<<
11060  *         npoints = indices.shape[0]
11061  *         mask = np.zeros(npoints, dtype='uint8')
11062  */
11063   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_connectivity_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 293, __pyx_L1_error)
11064   __Pyx_GOTREF(__pyx_t_3);
11065   if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 293, __pyx_L1_error)
11066   __pyx_t_8 = ((PyArrayObject *)__pyx_t_3);
11067   {
11068     __Pyx_BufFmt_StackElem __pyx_stack[1];
11069     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indices.rcbuffer->pybuffer);
11070     __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indices.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
11071     if (unlikely(__pyx_t_2 < 0)) {
11072       PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5);
11073       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indices.rcbuffer->pybuffer, (PyObject*)__pyx_v_indices, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
11074         Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5);
11075         __Pyx_RaiseBufferFallbackError();
11076       } else {
11077         PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5);
11078       }
11079       __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0;
11080     }
11081     __pyx_pybuffernd_indices.diminfo[0].strides = __pyx_pybuffernd_indices.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indices.diminfo[0].shape = __pyx_pybuffernd_indices.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_indices.diminfo[1].strides = __pyx_pybuffernd_indices.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_indices.diminfo[1].shape = __pyx_pybuffernd_indices.rcbuffer->pybuffer.shape[1];
11082     if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 293, __pyx_L1_error)
11083   }
11084   __pyx_t_8 = 0;
11085   __pyx_v_indices = ((PyArrayObject *)__pyx_t_3);
11086   __pyx_t_3 = 0;
11087 
11088   /* "yt/geometry/_selection_routines/selector_object.pxi":294
11089  *         coords = _ensure_code(mesh.connectivity_coords)
11090  *         indices = mesh.connectivity_indices
11091  *         npoints = indices.shape[0]             # <<<<<<<<<<<<<<
11092  *         mask = np.zeros(npoints, dtype='uint8')
11093  *         for i in range(npoints):
11094  */
11095   __pyx_v_npoints = (__pyx_v_indices->dimensions[0]);
11096 
11097   /* "yt/geometry/_selection_routines/selector_object.pxi":295
11098  *         indices = mesh.connectivity_indices
11099  *         npoints = indices.shape[0]
11100  *         mask = np.zeros(npoints, dtype='uint8')             # <<<<<<<<<<<<<<
11101  *         for i in range(npoints):
11102  *             selected = 0
11103  */
11104   __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 295, __pyx_L1_error)
11105   __Pyx_GOTREF(__pyx_t_3);
11106   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 295, __pyx_L1_error)
11107   __Pyx_GOTREF(__pyx_t_1);
11108   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
11109   __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_npoints); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 295, __pyx_L1_error)
11110   __Pyx_GOTREF(__pyx_t_3);
11111   __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 295, __pyx_L1_error)
11112   __Pyx_GOTREF(__pyx_t_9);
11113   __Pyx_GIVEREF(__pyx_t_3);
11114   PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3);
11115   __pyx_t_3 = 0;
11116   __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 295, __pyx_L1_error)
11117   __Pyx_GOTREF(__pyx_t_3);
11118   if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(1, 295, __pyx_L1_error)
11119   __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 295, __pyx_L1_error)
11120   __Pyx_GOTREF(__pyx_t_10);
11121   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11122   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
11123   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
11124   if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 295, __pyx_L1_error)
11125   __pyx_t_11 = ((PyArrayObject *)__pyx_t_10);
11126   {
11127     __Pyx_BufFmt_StackElem __pyx_stack[1];
11128     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
11129     __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
11130     if (unlikely(__pyx_t_2 < 0)) {
11131       PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
11132       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
11133         Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7);
11134         __Pyx_RaiseBufferFallbackError();
11135       } else {
11136         PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
11137       }
11138       __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0;
11139     }
11140     __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0];
11141     if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 295, __pyx_L1_error)
11142   }
11143   __pyx_t_11 = 0;
11144   __pyx_v_mask = ((PyArrayObject *)__pyx_t_10);
11145   __pyx_t_10 = 0;
11146 
11147   /* "yt/geometry/_selection_routines/selector_object.pxi":296
11148  *         npoints = indices.shape[0]
11149  *         mask = np.zeros(npoints, dtype='uint8')
11150  *         for i in range(npoints):             # <<<<<<<<<<<<<<
11151  *             selected = 0
11152  *             for j in range(nv):
11153  */
11154   __pyx_t_2 = __pyx_v_npoints;
11155   __pyx_t_12 = __pyx_t_2;
11156   for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
11157     __pyx_v_i = __pyx_t_13;
11158 
11159     /* "yt/geometry/_selection_routines/selector_object.pxi":297
11160  *         mask = np.zeros(npoints, dtype='uint8')
11161  *         for i in range(npoints):
11162  *             selected = 0             # <<<<<<<<<<<<<<
11163  *             for j in range(nv):
11164  *                 for k in range(3):
11165  */
11166     __pyx_v_selected = 0;
11167 
11168     /* "yt/geometry/_selection_routines/selector_object.pxi":298
11169  *         for i in range(npoints):
11170  *             selected = 0
11171  *             for j in range(nv):             # <<<<<<<<<<<<<<
11172  *                 for k in range(3):
11173  *                     pos[k] = coords[indices[i, j] - offset, k]
11174  */
11175     __pyx_t_14 = __pyx_v_nv;
11176     __pyx_t_15 = __pyx_t_14;
11177     for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
11178       __pyx_v_j = __pyx_t_16;
11179 
11180       /* "yt/geometry/_selection_routines/selector_object.pxi":299
11181  *             selected = 0
11182  *             for j in range(nv):
11183  *                 for k in range(3):             # <<<<<<<<<<<<<<
11184  *                     pos[k] = coords[indices[i, j] - offset, k]
11185  *                 selected = self.select_point(pos)
11186  */
11187       for (__pyx_t_17 = 0; __pyx_t_17 < 3; __pyx_t_17+=1) {
11188         __pyx_v_k = __pyx_t_17;
11189 
11190         /* "yt/geometry/_selection_routines/selector_object.pxi":300
11191  *             for j in range(nv):
11192  *                 for k in range(3):
11193  *                     pos[k] = coords[indices[i, j] - offset, k]             # <<<<<<<<<<<<<<
11194  *                 selected = self.select_point(pos)
11195  *                 if selected == 1: break
11196  */
11197         __pyx_t_18 = __pyx_v_i;
11198         __pyx_t_19 = __pyx_v_j;
11199         __pyx_t_20 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_indices.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_indices.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_indices.diminfo[1].strides)) - __pyx_v_offset);
11200         __pyx_t_21 = __pyx_v_k;
11201         (__pyx_v_pos[__pyx_v_k]) = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_coords.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_coords.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_coords.diminfo[1].strides));
11202       }
11203 
11204       /* "yt/geometry/_selection_routines/selector_object.pxi":301
11205  *                 for k in range(3):
11206  *                     pos[k] = coords[indices[i, j] - offset, k]
11207  *                 selected = self.select_point(pos)             # <<<<<<<<<<<<<<
11208  *                 if selected == 1: break
11209  *             total += selected
11210  */
11211       __pyx_v_selected = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_point(__pyx_v_self, __pyx_v_pos);
11212 
11213       /* "yt/geometry/_selection_routines/selector_object.pxi":302
11214  *                     pos[k] = coords[indices[i, j] - offset, k]
11215  *                 selected = self.select_point(pos)
11216  *                 if selected == 1: break             # <<<<<<<<<<<<<<
11217  *             total += selected
11218  *             mask[i] = selected
11219  */
11220       __pyx_t_22 = ((__pyx_v_selected == 1) != 0);
11221       if (__pyx_t_22) {
11222         goto __pyx_L6_break;
11223       }
11224     }
11225     __pyx_L6_break:;
11226 
11227     /* "yt/geometry/_selection_routines/selector_object.pxi":303
11228  *                 selected = self.select_point(pos)
11229  *                 if selected == 1: break
11230  *             total += selected             # <<<<<<<<<<<<<<
11231  *             mask[i] = selected
11232  *         if total == 0: return None
11233  */
11234     __pyx_v_total = (__pyx_v_total + __pyx_v_selected);
11235 
11236     /* "yt/geometry/_selection_routines/selector_object.pxi":304
11237  *                 if selected == 1: break
11238  *             total += selected
11239  *             mask[i] = selected             # <<<<<<<<<<<<<<
11240  *         if total == 0: return None
11241  *         return mask.astype("bool")
11242  */
11243     __pyx_t_23 = __pyx_v_i;
11244     *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_mask.diminfo[0].strides) = __pyx_v_selected;
11245   }
11246 
11247   /* "yt/geometry/_selection_routines/selector_object.pxi":305
11248  *             total += selected
11249  *             mask[i] = selected
11250  *         if total == 0: return None             # <<<<<<<<<<<<<<
11251  *         return mask.astype("bool")
11252  *
11253  */
11254   __pyx_t_22 = ((__pyx_v_total == 0) != 0);
11255   if (__pyx_t_22) {
11256     __Pyx_XDECREF(__pyx_r);
11257     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
11258     goto __pyx_L0;
11259   }
11260 
11261   /* "yt/geometry/_selection_routines/selector_object.pxi":306
11262  *             mask[i] = selected
11263  *         if total == 0: return None
11264  *         return mask.astype("bool")             # <<<<<<<<<<<<<<
11265  *
11266  *     @cython.boundscheck(False)
11267  */
11268   __Pyx_XDECREF(__pyx_r);
11269   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_mask), __pyx_n_s_astype); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 306, __pyx_L1_error)
11270   __Pyx_GOTREF(__pyx_t_3);
11271   __pyx_t_9 = NULL;
11272   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
11273     __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
11274     if (likely(__pyx_t_9)) {
11275       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
11276       __Pyx_INCREF(__pyx_t_9);
11277       __Pyx_INCREF(function);
11278       __Pyx_DECREF_SET(__pyx_t_3, function);
11279     }
11280   }
11281   __pyx_t_10 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_9, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_s_bool);
11282   __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
11283   if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 306, __pyx_L1_error)
11284   __Pyx_GOTREF(__pyx_t_10);
11285   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
11286   __pyx_r = __pyx_t_10;
11287   __pyx_t_10 = 0;
11288   goto __pyx_L0;
11289 
11290   /* "yt/geometry/_selection_routines/selector_object.pxi":283
11291  *     @cython.wraparound(False)
11292  *     @cython.cdivision(True)
11293  *     def fill_mesh_mask(self, mesh):             # <<<<<<<<<<<<<<
11294  *         cdef np.float64_t pos[3]
11295  *         cdef np.ndarray[np.int64_t, ndim=2] indices
11296  */
11297 
11298   /* function exit code */
11299   __pyx_L1_error:;
11300   __Pyx_XDECREF(__pyx_t_1);
11301   __Pyx_XDECREF(__pyx_t_3);
11302   __Pyx_XDECREF(__pyx_t_9);
11303   __Pyx_XDECREF(__pyx_t_10);
11304   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
11305     __Pyx_PyThreadState_declare
11306     __Pyx_PyThreadState_assign
11307     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
11308     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_coords.rcbuffer->pybuffer);
11309     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indices.rcbuffer->pybuffer);
11310     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
11311   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
11312   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.fill_mesh_mask", __pyx_clineno, __pyx_lineno, __pyx_filename);
11313   __pyx_r = NULL;
11314   goto __pyx_L2;
11315   __pyx_L0:;
11316   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_coords.rcbuffer->pybuffer);
11317   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indices.rcbuffer->pybuffer);
11318   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
11319   __pyx_L2:;
11320   __Pyx_XDECREF((PyObject *)__pyx_v_indices);
11321   __Pyx_XDECREF((PyObject *)__pyx_v_coords);
11322   __Pyx_XDECREF((PyObject *)__pyx_v_mask);
11323   __Pyx_XGIVEREF(__pyx_r);
11324   __Pyx_RefNannyFinishContext();
11325   return __pyx_r;
11326 }
11327 
11328 /* "yt/geometry/_selection_routines/selector_object.pxi":311
11329  *     @cython.wraparound(False)
11330  *     @cython.cdivision(True)
11331  *     def fill_mesh_cell_mask(self, mesh):             # <<<<<<<<<<<<<<
11332  *         cdef np.float64_t pos
11333  *         cdef np.float64_t le[3]
11334  */
11335 
11336 /* Python wrapper */
11337 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13fill_mesh_cell_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_mesh); /*proto*/
11338 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13fill_mesh_cell_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_mesh) {
11339   PyObject *__pyx_r = 0;
11340   __Pyx_RefNannyDeclarations
11341   __Pyx_RefNannySetupContext("fill_mesh_cell_mask (wrapper)", 0);
11342   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_12fill_mesh_cell_mask(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), ((PyObject *)__pyx_v_mesh));
11343 
11344   /* function exit code */
11345   __Pyx_RefNannyFinishContext();
11346   return __pyx_r;
11347 }
11348 
11349 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_12fill_mesh_cell_mask(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_mesh) {
11350   __pyx_t_5numpy_float64_t __pyx_v_pos;
11351   __pyx_t_5numpy_float64_t __pyx_v_le[3];
11352   __pyx_t_5numpy_float64_t __pyx_v_re[3];
11353   PyArrayObject *__pyx_v_indices = 0;
11354   PyArrayObject *__pyx_v_coords = 0;
11355   PyArrayObject *__pyx_v_mask = 0;
11356   int __pyx_v_i;
11357   int __pyx_v_j;
11358   int __pyx_v_k;
11359   int __pyx_v_selected;
11360   int __pyx_v_npoints;
11361   int __pyx_v_nv;
11362   int __pyx_v_ndim;
11363   int __pyx_v_total;
11364   int __pyx_v_offset;
11365   __Pyx_LocalBuf_ND __pyx_pybuffernd_coords;
11366   __Pyx_Buffer __pyx_pybuffer_coords;
11367   __Pyx_LocalBuf_ND __pyx_pybuffernd_indices;
11368   __Pyx_Buffer __pyx_pybuffer_indices;
11369   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
11370   __Pyx_Buffer __pyx_pybuffer_mask;
11371   PyObject *__pyx_r = NULL;
11372   __Pyx_RefNannyDeclarations
11373   PyObject *__pyx_t_1 = NULL;
11374   int __pyx_t_2;
11375   PyObject *__pyx_t_3 = NULL;
11376   PyArrayObject *__pyx_t_4 = NULL;
11377   PyObject *__pyx_t_5 = NULL;
11378   PyObject *__pyx_t_6 = NULL;
11379   PyObject *__pyx_t_7 = NULL;
11380   PyArrayObject *__pyx_t_8 = NULL;
11381   PyObject *__pyx_t_9 = NULL;
11382   PyObject *__pyx_t_10 = NULL;
11383   PyArrayObject *__pyx_t_11 = NULL;
11384   int __pyx_t_12;
11385   int __pyx_t_13;
11386   int __pyx_t_14;
11387   int __pyx_t_15;
11388   int __pyx_t_16;
11389   int __pyx_t_17;
11390   int __pyx_t_18;
11391   int __pyx_t_19;
11392   Py_ssize_t __pyx_t_20;
11393   Py_ssize_t __pyx_t_21;
11394   __pyx_t_5numpy_int64_t __pyx_t_22;
11395   Py_ssize_t __pyx_t_23;
11396   long __pyx_t_24;
11397   long __pyx_t_25;
11398   Py_ssize_t __pyx_t_26;
11399   int __pyx_t_27;
11400   __Pyx_RefNannySetupContext("fill_mesh_cell_mask", 0);
11401   __pyx_pybuffer_indices.pybuffer.buf = NULL;
11402   __pyx_pybuffer_indices.refcount = 0;
11403   __pyx_pybuffernd_indices.data = NULL;
11404   __pyx_pybuffernd_indices.rcbuffer = &__pyx_pybuffer_indices;
11405   __pyx_pybuffer_coords.pybuffer.buf = NULL;
11406   __pyx_pybuffer_coords.refcount = 0;
11407   __pyx_pybuffernd_coords.data = NULL;
11408   __pyx_pybuffernd_coords.rcbuffer = &__pyx_pybuffer_coords;
11409   __pyx_pybuffer_mask.pybuffer.buf = NULL;
11410   __pyx_pybuffer_mask.refcount = 0;
11411   __pyx_pybuffernd_mask.data = NULL;
11412   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
11413 
11414   /* "yt/geometry/_selection_routines/selector_object.pxi":319
11415  *         cdef np.ndarray[np.uint8_t, ndim=1] mask
11416  *         cdef int i, j, k, selected
11417  *         cdef int npoints, nv = mesh._connectivity_length             # <<<<<<<<<<<<<<
11418  *         cdef int ndim = mesh.connectivity_coords.shape[1]
11419  *         cdef int total = 0
11420  */
11421   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_connectivity_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 319, __pyx_L1_error)
11422   __Pyx_GOTREF(__pyx_t_1);
11423   __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 319, __pyx_L1_error)
11424   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11425   __pyx_v_nv = __pyx_t_2;
11426 
11427   /* "yt/geometry/_selection_routines/selector_object.pxi":320
11428  *         cdef int i, j, k, selected
11429  *         cdef int npoints, nv = mesh._connectivity_length
11430  *         cdef int ndim = mesh.connectivity_coords.shape[1]             # <<<<<<<<<<<<<<
11431  *         cdef int total = 0
11432  *         cdef int offset = mesh._index_offset
11433  */
11434   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_connectivity_coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 320, __pyx_L1_error)
11435   __Pyx_GOTREF(__pyx_t_1);
11436   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_shape); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 320, __pyx_L1_error)
11437   __Pyx_GOTREF(__pyx_t_3);
11438   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11439   __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_3, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 320, __pyx_L1_error)
11440   __Pyx_GOTREF(__pyx_t_1);
11441   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
11442   __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 320, __pyx_L1_error)
11443   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11444   __pyx_v_ndim = __pyx_t_2;
11445 
11446   /* "yt/geometry/_selection_routines/selector_object.pxi":321
11447  *         cdef int npoints, nv = mesh._connectivity_length
11448  *         cdef int ndim = mesh.connectivity_coords.shape[1]
11449  *         cdef int total = 0             # <<<<<<<<<<<<<<
11450  *         cdef int offset = mesh._index_offset
11451  *         coords = _ensure_code(mesh.connectivity_coords)
11452  */
11453   __pyx_v_total = 0;
11454 
11455   /* "yt/geometry/_selection_routines/selector_object.pxi":322
11456  *         cdef int ndim = mesh.connectivity_coords.shape[1]
11457  *         cdef int total = 0
11458  *         cdef int offset = mesh._index_offset             # <<<<<<<<<<<<<<
11459  *         coords = _ensure_code(mesh.connectivity_coords)
11460  *         indices = mesh.connectivity_indices
11461  */
11462   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_index_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 322, __pyx_L1_error)
11463   __Pyx_GOTREF(__pyx_t_1);
11464   __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 322, __pyx_L1_error)
11465   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11466   __pyx_v_offset = __pyx_t_2;
11467 
11468   /* "yt/geometry/_selection_routines/selector_object.pxi":323
11469  *         cdef int total = 0
11470  *         cdef int offset = mesh._index_offset
11471  *         coords = _ensure_code(mesh.connectivity_coords)             # <<<<<<<<<<<<<<
11472  *         indices = mesh.connectivity_indices
11473  *         npoints = indices.shape[0]
11474  */
11475   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_connectivity_coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 323, __pyx_L1_error)
11476   __Pyx_GOTREF(__pyx_t_1);
11477   __pyx_t_3 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 323, __pyx_L1_error)
11478   __Pyx_GOTREF(__pyx_t_3);
11479   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11480   if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 323, __pyx_L1_error)
11481   __pyx_t_4 = ((PyArrayObject *)__pyx_t_3);
11482   {
11483     __Pyx_BufFmt_StackElem __pyx_stack[1];
11484     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_coords.rcbuffer->pybuffer);
11485     __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_coords.rcbuffer->pybuffer, (PyObject*)__pyx_t_4, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
11486     if (unlikely(__pyx_t_2 < 0)) {
11487       PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
11488       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_coords.rcbuffer->pybuffer, (PyObject*)__pyx_v_coords, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
11489         Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7);
11490         __Pyx_RaiseBufferFallbackError();
11491       } else {
11492         PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
11493       }
11494       __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0;
11495     }
11496     __pyx_pybuffernd_coords.diminfo[0].strides = __pyx_pybuffernd_coords.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_coords.diminfo[0].shape = __pyx_pybuffernd_coords.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_coords.diminfo[1].strides = __pyx_pybuffernd_coords.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_coords.diminfo[1].shape = __pyx_pybuffernd_coords.rcbuffer->pybuffer.shape[1];
11497     if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 323, __pyx_L1_error)
11498   }
11499   __pyx_t_4 = 0;
11500   __pyx_v_coords = ((PyArrayObject *)__pyx_t_3);
11501   __pyx_t_3 = 0;
11502 
11503   /* "yt/geometry/_selection_routines/selector_object.pxi":324
11504  *         cdef int offset = mesh._index_offset
11505  *         coords = _ensure_code(mesh.connectivity_coords)
11506  *         indices = mesh.connectivity_indices             # <<<<<<<<<<<<<<
11507  *         npoints = indices.shape[0]
11508  *         mask = np.zeros(npoints, dtype='uint8')
11509  */
11510   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_connectivity_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 324, __pyx_L1_error)
11511   __Pyx_GOTREF(__pyx_t_3);
11512   if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 324, __pyx_L1_error)
11513   __pyx_t_8 = ((PyArrayObject *)__pyx_t_3);
11514   {
11515     __Pyx_BufFmt_StackElem __pyx_stack[1];
11516     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indices.rcbuffer->pybuffer);
11517     __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indices.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
11518     if (unlikely(__pyx_t_2 < 0)) {
11519       PyErr_Fetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5);
11520       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indices.rcbuffer->pybuffer, (PyObject*)__pyx_v_indices, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
11521         Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5);
11522         __Pyx_RaiseBufferFallbackError();
11523       } else {
11524         PyErr_Restore(__pyx_t_7, __pyx_t_6, __pyx_t_5);
11525       }
11526       __pyx_t_7 = __pyx_t_6 = __pyx_t_5 = 0;
11527     }
11528     __pyx_pybuffernd_indices.diminfo[0].strides = __pyx_pybuffernd_indices.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indices.diminfo[0].shape = __pyx_pybuffernd_indices.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_indices.diminfo[1].strides = __pyx_pybuffernd_indices.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_indices.diminfo[1].shape = __pyx_pybuffernd_indices.rcbuffer->pybuffer.shape[1];
11529     if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 324, __pyx_L1_error)
11530   }
11531   __pyx_t_8 = 0;
11532   __pyx_v_indices = ((PyArrayObject *)__pyx_t_3);
11533   __pyx_t_3 = 0;
11534 
11535   /* "yt/geometry/_selection_routines/selector_object.pxi":325
11536  *         coords = _ensure_code(mesh.connectivity_coords)
11537  *         indices = mesh.connectivity_indices
11538  *         npoints = indices.shape[0]             # <<<<<<<<<<<<<<
11539  *         mask = np.zeros(npoints, dtype='uint8')
11540  *         for i in range(npoints):
11541  */
11542   __pyx_v_npoints = (__pyx_v_indices->dimensions[0]);
11543 
11544   /* "yt/geometry/_selection_routines/selector_object.pxi":326
11545  *         indices = mesh.connectivity_indices
11546  *         npoints = indices.shape[0]
11547  *         mask = np.zeros(npoints, dtype='uint8')             # <<<<<<<<<<<<<<
11548  *         for i in range(npoints):
11549  *             selected = 0
11550  */
11551   __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 326, __pyx_L1_error)
11552   __Pyx_GOTREF(__pyx_t_3);
11553   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 326, __pyx_L1_error)
11554   __Pyx_GOTREF(__pyx_t_1);
11555   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
11556   __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_npoints); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 326, __pyx_L1_error)
11557   __Pyx_GOTREF(__pyx_t_3);
11558   __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 326, __pyx_L1_error)
11559   __Pyx_GOTREF(__pyx_t_9);
11560   __Pyx_GIVEREF(__pyx_t_3);
11561   PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_3);
11562   __pyx_t_3 = 0;
11563   __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 326, __pyx_L1_error)
11564   __Pyx_GOTREF(__pyx_t_3);
11565   if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(1, 326, __pyx_L1_error)
11566   __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 326, __pyx_L1_error)
11567   __Pyx_GOTREF(__pyx_t_10);
11568   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11569   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
11570   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
11571   if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 326, __pyx_L1_error)
11572   __pyx_t_11 = ((PyArrayObject *)__pyx_t_10);
11573   {
11574     __Pyx_BufFmt_StackElem __pyx_stack[1];
11575     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
11576     __pyx_t_2 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
11577     if (unlikely(__pyx_t_2 < 0)) {
11578       PyErr_Fetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
11579       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
11580         Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_7);
11581         __Pyx_RaiseBufferFallbackError();
11582       } else {
11583         PyErr_Restore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
11584       }
11585       __pyx_t_5 = __pyx_t_6 = __pyx_t_7 = 0;
11586     }
11587     __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0];
11588     if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 326, __pyx_L1_error)
11589   }
11590   __pyx_t_11 = 0;
11591   __pyx_v_mask = ((PyArrayObject *)__pyx_t_10);
11592   __pyx_t_10 = 0;
11593 
11594   /* "yt/geometry/_selection_routines/selector_object.pxi":327
11595  *         npoints = indices.shape[0]
11596  *         mask = np.zeros(npoints, dtype='uint8')
11597  *         for i in range(npoints):             # <<<<<<<<<<<<<<
11598  *             selected = 0
11599  *             for k in range(3):
11600  */
11601   __pyx_t_2 = __pyx_v_npoints;
11602   __pyx_t_12 = __pyx_t_2;
11603   for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
11604     __pyx_v_i = __pyx_t_13;
11605 
11606     /* "yt/geometry/_selection_routines/selector_object.pxi":328
11607  *         mask = np.zeros(npoints, dtype='uint8')
11608  *         for i in range(npoints):
11609  *             selected = 0             # <<<<<<<<<<<<<<
11610  *             for k in range(3):
11611  *                 le[k] = 1e60
11612  */
11613     __pyx_v_selected = 0;
11614 
11615     /* "yt/geometry/_selection_routines/selector_object.pxi":329
11616  *         for i in range(npoints):
11617  *             selected = 0
11618  *             for k in range(3):             # <<<<<<<<<<<<<<
11619  *                 le[k] = 1e60
11620  *                 re[k] = -1e60
11621  */
11622     for (__pyx_t_14 = 0; __pyx_t_14 < 3; __pyx_t_14+=1) {
11623       __pyx_v_k = __pyx_t_14;
11624 
11625       /* "yt/geometry/_selection_routines/selector_object.pxi":330
11626  *             selected = 0
11627  *             for k in range(3):
11628  *                 le[k] = 1e60             # <<<<<<<<<<<<<<
11629  *                 re[k] = -1e60
11630  *             for j in range(nv):
11631  */
11632       (__pyx_v_le[__pyx_v_k]) = 1e60;
11633 
11634       /* "yt/geometry/_selection_routines/selector_object.pxi":331
11635  *             for k in range(3):
11636  *                 le[k] = 1e60
11637  *                 re[k] = -1e60             # <<<<<<<<<<<<<<
11638  *             for j in range(nv):
11639  *                 for k in range(ndim):
11640  */
11641       (__pyx_v_re[__pyx_v_k]) = -1e60;
11642     }
11643 
11644     /* "yt/geometry/_selection_routines/selector_object.pxi":332
11645  *                 le[k] = 1e60
11646  *                 re[k] = -1e60
11647  *             for j in range(nv):             # <<<<<<<<<<<<<<
11648  *                 for k in range(ndim):
11649  *                     pos = coords[indices[i, j] - offset, k]
11650  */
11651     __pyx_t_14 = __pyx_v_nv;
11652     __pyx_t_15 = __pyx_t_14;
11653     for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
11654       __pyx_v_j = __pyx_t_16;
11655 
11656       /* "yt/geometry/_selection_routines/selector_object.pxi":333
11657  *                 re[k] = -1e60
11658  *             for j in range(nv):
11659  *                 for k in range(ndim):             # <<<<<<<<<<<<<<
11660  *                     pos = coords[indices[i, j] - offset, k]
11661  *                     le[k] = fmin(pos, le[k])
11662  */
11663       __pyx_t_17 = __pyx_v_ndim;
11664       __pyx_t_18 = __pyx_t_17;
11665       for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
11666         __pyx_v_k = __pyx_t_19;
11667 
11668         /* "yt/geometry/_selection_routines/selector_object.pxi":334
11669  *             for j in range(nv):
11670  *                 for k in range(ndim):
11671  *                     pos = coords[indices[i, j] - offset, k]             # <<<<<<<<<<<<<<
11672  *                     le[k] = fmin(pos, le[k])
11673  *                     re[k] = fmax(pos, re[k])
11674  */
11675         __pyx_t_20 = __pyx_v_i;
11676         __pyx_t_21 = __pyx_v_j;
11677         __pyx_t_22 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_indices.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_indices.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_indices.diminfo[1].strides)) - __pyx_v_offset);
11678         __pyx_t_23 = __pyx_v_k;
11679         __pyx_v_pos = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_coords.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_coords.diminfo[0].strides, __pyx_t_23, __pyx_pybuffernd_coords.diminfo[1].strides));
11680 
11681         /* "yt/geometry/_selection_routines/selector_object.pxi":335
11682  *                 for k in range(ndim):
11683  *                     pos = coords[indices[i, j] - offset, k]
11684  *                     le[k] = fmin(pos, le[k])             # <<<<<<<<<<<<<<
11685  *                     re[k] = fmax(pos, re[k])
11686  *                 for k in range(2, ndim - 1, -1):
11687  */
11688         (__pyx_v_le[__pyx_v_k]) = __pyx_f_2yt_9utilities_3lib_8fp_utils_fmin(__pyx_v_pos, (__pyx_v_le[__pyx_v_k]));
11689 
11690         /* "yt/geometry/_selection_routines/selector_object.pxi":336
11691  *                     pos = coords[indices[i, j] - offset, k]
11692  *                     le[k] = fmin(pos, le[k])
11693  *                     re[k] = fmax(pos, re[k])             # <<<<<<<<<<<<<<
11694  *                 for k in range(2, ndim - 1, -1):
11695  *                     le[k] = self.domain_center[k]
11696  */
11697         (__pyx_v_re[__pyx_v_k]) = __pyx_f_2yt_9utilities_3lib_8fp_utils_fmax(__pyx_v_pos, (__pyx_v_re[__pyx_v_k]));
11698       }
11699 
11700       /* "yt/geometry/_selection_routines/selector_object.pxi":337
11701  *                     le[k] = fmin(pos, le[k])
11702  *                     re[k] = fmax(pos, re[k])
11703  *                 for k in range(2, ndim - 1, -1):             # <<<<<<<<<<<<<<
11704  *                     le[k] = self.domain_center[k]
11705  *                     re[k] = self.domain_center[k]
11706  */
11707       __pyx_t_24 = (__pyx_v_ndim - 1);
11708       __pyx_t_25 = __pyx_t_24;
11709       for (__pyx_t_17 = 2; __pyx_t_17 > __pyx_t_25; __pyx_t_17-=1) {
11710         __pyx_v_k = __pyx_t_17;
11711 
11712         /* "yt/geometry/_selection_routines/selector_object.pxi":338
11713  *                     re[k] = fmax(pos, re[k])
11714  *                 for k in range(2, ndim - 1, -1):
11715  *                     le[k] = self.domain_center[k]             # <<<<<<<<<<<<<<
11716  *                     re[k] = self.domain_center[k]
11717  *             selected = self.select_bbox(le, re)
11718  */
11719         (__pyx_v_le[__pyx_v_k]) = (__pyx_v_self->domain_center[__pyx_v_k]);
11720 
11721         /* "yt/geometry/_selection_routines/selector_object.pxi":339
11722  *                 for k in range(2, ndim - 1, -1):
11723  *                     le[k] = self.domain_center[k]
11724  *                     re[k] = self.domain_center[k]             # <<<<<<<<<<<<<<
11725  *             selected = self.select_bbox(le, re)
11726  *             total += selected
11727  */
11728         (__pyx_v_re[__pyx_v_k]) = (__pyx_v_self->domain_center[__pyx_v_k]);
11729       }
11730     }
11731 
11732     /* "yt/geometry/_selection_routines/selector_object.pxi":340
11733  *                     le[k] = self.domain_center[k]
11734  *                     re[k] = self.domain_center[k]
11735  *             selected = self.select_bbox(le, re)             # <<<<<<<<<<<<<<
11736  *             total += selected
11737  *             mask[i] = selected
11738  */
11739     __pyx_v_selected = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_bbox(__pyx_v_self, __pyx_v_le, __pyx_v_re);
11740 
11741     /* "yt/geometry/_selection_routines/selector_object.pxi":341
11742  *                     re[k] = self.domain_center[k]
11743  *             selected = self.select_bbox(le, re)
11744  *             total += selected             # <<<<<<<<<<<<<<
11745  *             mask[i] = selected
11746  *         if total == 0: return None
11747  */
11748     __pyx_v_total = (__pyx_v_total + __pyx_v_selected);
11749 
11750     /* "yt/geometry/_selection_routines/selector_object.pxi":342
11751  *             selected = self.select_bbox(le, re)
11752  *             total += selected
11753  *             mask[i] = selected             # <<<<<<<<<<<<<<
11754  *         if total == 0: return None
11755  *         return mask.astype("bool")
11756  */
11757     __pyx_t_26 = __pyx_v_i;
11758     *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_mask.diminfo[0].strides) = __pyx_v_selected;
11759   }
11760 
11761   /* "yt/geometry/_selection_routines/selector_object.pxi":343
11762  *             total += selected
11763  *             mask[i] = selected
11764  *         if total == 0: return None             # <<<<<<<<<<<<<<
11765  *         return mask.astype("bool")
11766  *
11767  */
11768   __pyx_t_27 = ((__pyx_v_total == 0) != 0);
11769   if (__pyx_t_27) {
11770     __Pyx_XDECREF(__pyx_r);
11771     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
11772     goto __pyx_L0;
11773   }
11774 
11775   /* "yt/geometry/_selection_routines/selector_object.pxi":344
11776  *             mask[i] = selected
11777  *         if total == 0: return None
11778  *         return mask.astype("bool")             # <<<<<<<<<<<<<<
11779  *
11780  *     @cython.boundscheck(False)
11781  */
11782   __Pyx_XDECREF(__pyx_r);
11783   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_mask), __pyx_n_s_astype); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 344, __pyx_L1_error)
11784   __Pyx_GOTREF(__pyx_t_3);
11785   __pyx_t_9 = NULL;
11786   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
11787     __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_3);
11788     if (likely(__pyx_t_9)) {
11789       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
11790       __Pyx_INCREF(__pyx_t_9);
11791       __Pyx_INCREF(function);
11792       __Pyx_DECREF_SET(__pyx_t_3, function);
11793     }
11794   }
11795   __pyx_t_10 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_9, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_s_bool);
11796   __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
11797   if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 344, __pyx_L1_error)
11798   __Pyx_GOTREF(__pyx_t_10);
11799   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
11800   __pyx_r = __pyx_t_10;
11801   __pyx_t_10 = 0;
11802   goto __pyx_L0;
11803 
11804   /* "yt/geometry/_selection_routines/selector_object.pxi":311
11805  *     @cython.wraparound(False)
11806  *     @cython.cdivision(True)
11807  *     def fill_mesh_cell_mask(self, mesh):             # <<<<<<<<<<<<<<
11808  *         cdef np.float64_t pos
11809  *         cdef np.float64_t le[3]
11810  */
11811 
11812   /* function exit code */
11813   __pyx_L1_error:;
11814   __Pyx_XDECREF(__pyx_t_1);
11815   __Pyx_XDECREF(__pyx_t_3);
11816   __Pyx_XDECREF(__pyx_t_9);
11817   __Pyx_XDECREF(__pyx_t_10);
11818   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
11819     __Pyx_PyThreadState_declare
11820     __Pyx_PyThreadState_assign
11821     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
11822     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_coords.rcbuffer->pybuffer);
11823     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indices.rcbuffer->pybuffer);
11824     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
11825   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
11826   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.fill_mesh_cell_mask", __pyx_clineno, __pyx_lineno, __pyx_filename);
11827   __pyx_r = NULL;
11828   goto __pyx_L2;
11829   __pyx_L0:;
11830   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_coords.rcbuffer->pybuffer);
11831   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indices.rcbuffer->pybuffer);
11832   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
11833   __pyx_L2:;
11834   __Pyx_XDECREF((PyObject *)__pyx_v_indices);
11835   __Pyx_XDECREF((PyObject *)__pyx_v_coords);
11836   __Pyx_XDECREF((PyObject *)__pyx_v_mask);
11837   __Pyx_XGIVEREF(__pyx_r);
11838   __Pyx_RefNannyFinishContext();
11839   return __pyx_r;
11840 }
11841 
11842 /* "yt/geometry/_selection_routines/selector_object.pxi":349
11843  *     @cython.wraparound(False)
11844  *     @cython.cdivision(True)
11845  *     def fill_mask(self, gobj):             # <<<<<<<<<<<<<<
11846  *         cdef np.ndarray[np.uint8_t, ndim=3, cast=True] child_mask
11847  *         child_mask = gobj.child_mask
11848  */
11849 
11850 /* Python wrapper */
11851 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_15fill_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj); /*proto*/
11852 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_15fill_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj) {
11853   PyObject *__pyx_r = 0;
11854   __Pyx_RefNannyDeclarations
11855   __Pyx_RefNannySetupContext("fill_mask (wrapper)", 0);
11856   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_14fill_mask(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), ((PyObject *)__pyx_v_gobj));
11857 
11858   /* function exit code */
11859   __Pyx_RefNannyFinishContext();
11860   return __pyx_r;
11861 }
11862 
11863 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_14fill_mask(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_gobj) {
11864   PyArrayObject *__pyx_v_child_mask = 0;
11865   PyArrayObject *__pyx_v_mask = 0;
11866   int __pyx_v_dim[3];
11867   PyArrayObject *__pyx_v_odds = 0;
11868   PyArrayObject *__pyx_v_oleft_edge = 0;
11869   PyArrayObject *__pyx_v_oright_edge = 0;
11870   int __pyx_v_i;
11871   __pyx_t_5numpy_float64_t __pyx_v_dds[3];
11872   __pyx_t_5numpy_float64_t __pyx_v_left_edge[3];
11873   __pyx_t_5numpy_float64_t __pyx_v_right_edge[3];
11874   __pyx_t_5numpy_int32_t __pyx_v_level;
11875   int __pyx_v_total;
11876   __Pyx_LocalBuf_ND __pyx_pybuffernd_child_mask;
11877   __Pyx_Buffer __pyx_pybuffer_child_mask;
11878   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
11879   __Pyx_Buffer __pyx_pybuffer_mask;
11880   __Pyx_LocalBuf_ND __pyx_pybuffernd_odds;
11881   __Pyx_Buffer __pyx_pybuffer_odds;
11882   __Pyx_LocalBuf_ND __pyx_pybuffernd_oleft_edge;
11883   __Pyx_Buffer __pyx_pybuffer_oleft_edge;
11884   __Pyx_LocalBuf_ND __pyx_pybuffernd_oright_edge;
11885   __Pyx_Buffer __pyx_pybuffer_oright_edge;
11886   PyObject *__pyx_r = NULL;
11887   __Pyx_RefNannyDeclarations
11888   PyObject *__pyx_t_1 = NULL;
11889   PyArrayObject *__pyx_t_2 = NULL;
11890   int __pyx_t_3;
11891   PyObject *__pyx_t_4 = NULL;
11892   PyObject *__pyx_t_5 = NULL;
11893   PyObject *__pyx_t_6 = NULL;
11894   PyObject *__pyx_t_7 = NULL;
11895   PyArrayObject *__pyx_t_8 = NULL;
11896   PyArrayObject *__pyx_t_9 = NULL;
11897   PyArrayObject *__pyx_t_10 = NULL;
11898   Py_ssize_t __pyx_t_11;
11899   int __pyx_t_12;
11900   Py_ssize_t __pyx_t_13;
11901   Py_ssize_t __pyx_t_14;
11902   PyObject *__pyx_t_15 = NULL;
11903   PyObject *__pyx_t_16 = NULL;
11904   PyArrayObject *__pyx_t_17 = NULL;
11905   __pyx_t_5numpy_int32_t __pyx_t_18;
11906   int __pyx_t_19;
11907   __Pyx_RefNannySetupContext("fill_mask", 0);
11908   __pyx_pybuffer_child_mask.pybuffer.buf = NULL;
11909   __pyx_pybuffer_child_mask.refcount = 0;
11910   __pyx_pybuffernd_child_mask.data = NULL;
11911   __pyx_pybuffernd_child_mask.rcbuffer = &__pyx_pybuffer_child_mask;
11912   __pyx_pybuffer_mask.pybuffer.buf = NULL;
11913   __pyx_pybuffer_mask.refcount = 0;
11914   __pyx_pybuffernd_mask.data = NULL;
11915   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
11916   __pyx_pybuffer_odds.pybuffer.buf = NULL;
11917   __pyx_pybuffer_odds.refcount = 0;
11918   __pyx_pybuffernd_odds.data = NULL;
11919   __pyx_pybuffernd_odds.rcbuffer = &__pyx_pybuffer_odds;
11920   __pyx_pybuffer_oleft_edge.pybuffer.buf = NULL;
11921   __pyx_pybuffer_oleft_edge.refcount = 0;
11922   __pyx_pybuffernd_oleft_edge.data = NULL;
11923   __pyx_pybuffernd_oleft_edge.rcbuffer = &__pyx_pybuffer_oleft_edge;
11924   __pyx_pybuffer_oright_edge.pybuffer.buf = NULL;
11925   __pyx_pybuffer_oright_edge.refcount = 0;
11926   __pyx_pybuffernd_oright_edge.data = NULL;
11927   __pyx_pybuffernd_oright_edge.rcbuffer = &__pyx_pybuffer_oright_edge;
11928 
11929   /* "yt/geometry/_selection_routines/selector_object.pxi":351
11930  *     def fill_mask(self, gobj):
11931  *         cdef np.ndarray[np.uint8_t, ndim=3, cast=True] child_mask
11932  *         child_mask = gobj.child_mask             # <<<<<<<<<<<<<<
11933  *         cdef np.ndarray[np.uint8_t, ndim=3] mask
11934  *         cdef int dim[3]
11935  */
11936   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_child_mask); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 351, __pyx_L1_error)
11937   __Pyx_GOTREF(__pyx_t_1);
11938   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 351, __pyx_L1_error)
11939   __pyx_t_2 = ((PyArrayObject *)__pyx_t_1);
11940   {
11941     __Pyx_BufFmt_StackElem __pyx_stack[1];
11942     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
11943     __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack);
11944     if (unlikely(__pyx_t_3 < 0)) {
11945       PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
11946       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_child_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack) == -1)) {
11947         Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6);
11948         __Pyx_RaiseBufferFallbackError();
11949       } else {
11950         PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6);
11951       }
11952       __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0;
11953     }
11954     __pyx_pybuffernd_child_mask.diminfo[0].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_child_mask.diminfo[0].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_child_mask.diminfo[1].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_child_mask.diminfo[1].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_child_mask.diminfo[2].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_child_mask.diminfo[2].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[2];
11955     if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(1, 351, __pyx_L1_error)
11956   }
11957   __pyx_t_2 = 0;
11958   __pyx_v_child_mask = ((PyArrayObject *)__pyx_t_1);
11959   __pyx_t_1 = 0;
11960 
11961   /* "yt/geometry/_selection_routines/selector_object.pxi":354
11962  *         cdef np.ndarray[np.uint8_t, ndim=3] mask
11963  *         cdef int dim[3]
11964  *         _ensure_code(gobj.dds)             # <<<<<<<<<<<<<<
11965  *         _ensure_code(gobj.LeftEdge)
11966  *         _ensure_code(gobj.RightEdge)
11967  */
11968   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 354, __pyx_L1_error)
11969   __Pyx_GOTREF(__pyx_t_1);
11970   __pyx_t_7 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 354, __pyx_L1_error)
11971   __Pyx_GOTREF(__pyx_t_7);
11972   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11973   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
11974 
11975   /* "yt/geometry/_selection_routines/selector_object.pxi":355
11976  *         cdef int dim[3]
11977  *         _ensure_code(gobj.dds)
11978  *         _ensure_code(gobj.LeftEdge)             # <<<<<<<<<<<<<<
11979  *         _ensure_code(gobj.RightEdge)
11980  *         cdef np.ndarray[np.float64_t, ndim=1] odds = gobj.dds.d
11981  */
11982   __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_LeftEdge); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 355, __pyx_L1_error)
11983   __Pyx_GOTREF(__pyx_t_7);
11984   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 355, __pyx_L1_error)
11985   __Pyx_GOTREF(__pyx_t_1);
11986   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
11987   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
11988 
11989   /* "yt/geometry/_selection_routines/selector_object.pxi":356
11990  *         _ensure_code(gobj.dds)
11991  *         _ensure_code(gobj.LeftEdge)
11992  *         _ensure_code(gobj.RightEdge)             # <<<<<<<<<<<<<<
11993  *         cdef np.ndarray[np.float64_t, ndim=1] odds = gobj.dds.d
11994  *         cdef np.ndarray[np.float64_t, ndim=1] oleft_edge = gobj.LeftEdge.d
11995  */
11996   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_RightEdge); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 356, __pyx_L1_error)
11997   __Pyx_GOTREF(__pyx_t_1);
11998   __pyx_t_7 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 356, __pyx_L1_error)
11999   __Pyx_GOTREF(__pyx_t_7);
12000   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
12001   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
12002 
12003   /* "yt/geometry/_selection_routines/selector_object.pxi":357
12004  *         _ensure_code(gobj.LeftEdge)
12005  *         _ensure_code(gobj.RightEdge)
12006  *         cdef np.ndarray[np.float64_t, ndim=1] odds = gobj.dds.d             # <<<<<<<<<<<<<<
12007  *         cdef np.ndarray[np.float64_t, ndim=1] oleft_edge = gobj.LeftEdge.d
12008  *         cdef np.ndarray[np.float64_t, ndim=1] oright_edge = gobj.RightEdge.d
12009  */
12010   __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 357, __pyx_L1_error)
12011   __Pyx_GOTREF(__pyx_t_7);
12012   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 357, __pyx_L1_error)
12013   __Pyx_GOTREF(__pyx_t_1);
12014   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
12015   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 357, __pyx_L1_error)
12016   __pyx_t_8 = ((PyArrayObject *)__pyx_t_1);
12017   {
12018     __Pyx_BufFmt_StackElem __pyx_stack[1];
12019     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_odds.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
12020       __pyx_v_odds = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_odds.rcbuffer->pybuffer.buf = NULL;
12021       __PYX_ERR(1, 357, __pyx_L1_error)
12022     } else {__pyx_pybuffernd_odds.diminfo[0].strides = __pyx_pybuffernd_odds.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_odds.diminfo[0].shape = __pyx_pybuffernd_odds.rcbuffer->pybuffer.shape[0];
12023     }
12024   }
12025   __pyx_t_8 = 0;
12026   __pyx_v_odds = ((PyArrayObject *)__pyx_t_1);
12027   __pyx_t_1 = 0;
12028 
12029   /* "yt/geometry/_selection_routines/selector_object.pxi":358
12030  *         _ensure_code(gobj.RightEdge)
12031  *         cdef np.ndarray[np.float64_t, ndim=1] odds = gobj.dds.d
12032  *         cdef np.ndarray[np.float64_t, ndim=1] oleft_edge = gobj.LeftEdge.d             # <<<<<<<<<<<<<<
12033  *         cdef np.ndarray[np.float64_t, ndim=1] oright_edge = gobj.RightEdge.d
12034  *         cdef int i
12035  */
12036   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_LeftEdge); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 358, __pyx_L1_error)
12037   __Pyx_GOTREF(__pyx_t_1);
12038   __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_d); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 358, __pyx_L1_error)
12039   __Pyx_GOTREF(__pyx_t_7);
12040   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
12041   if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 358, __pyx_L1_error)
12042   __pyx_t_9 = ((PyArrayObject *)__pyx_t_7);
12043   {
12044     __Pyx_BufFmt_StackElem __pyx_stack[1];
12045     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_oleft_edge.rcbuffer->pybuffer, (PyObject*)__pyx_t_9, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
12046       __pyx_v_oleft_edge = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_oleft_edge.rcbuffer->pybuffer.buf = NULL;
12047       __PYX_ERR(1, 358, __pyx_L1_error)
12048     } else {__pyx_pybuffernd_oleft_edge.diminfo[0].strides = __pyx_pybuffernd_oleft_edge.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_oleft_edge.diminfo[0].shape = __pyx_pybuffernd_oleft_edge.rcbuffer->pybuffer.shape[0];
12049     }
12050   }
12051   __pyx_t_9 = 0;
12052   __pyx_v_oleft_edge = ((PyArrayObject *)__pyx_t_7);
12053   __pyx_t_7 = 0;
12054 
12055   /* "yt/geometry/_selection_routines/selector_object.pxi":359
12056  *         cdef np.ndarray[np.float64_t, ndim=1] odds = gobj.dds.d
12057  *         cdef np.ndarray[np.float64_t, ndim=1] oleft_edge = gobj.LeftEdge.d
12058  *         cdef np.ndarray[np.float64_t, ndim=1] oright_edge = gobj.RightEdge.d             # <<<<<<<<<<<<<<
12059  *         cdef int i
12060  *         cdef np.float64_t dds[3]
12061  */
12062   __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_RightEdge); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 359, __pyx_L1_error)
12063   __Pyx_GOTREF(__pyx_t_7);
12064   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 359, __pyx_L1_error)
12065   __Pyx_GOTREF(__pyx_t_1);
12066   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
12067   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 359, __pyx_L1_error)
12068   __pyx_t_10 = ((PyArrayObject *)__pyx_t_1);
12069   {
12070     __Pyx_BufFmt_StackElem __pyx_stack[1];
12071     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_oright_edge.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
12072       __pyx_v_oright_edge = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_oright_edge.rcbuffer->pybuffer.buf = NULL;
12073       __PYX_ERR(1, 359, __pyx_L1_error)
12074     } else {__pyx_pybuffernd_oright_edge.diminfo[0].strides = __pyx_pybuffernd_oright_edge.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_oright_edge.diminfo[0].shape = __pyx_pybuffernd_oright_edge.rcbuffer->pybuffer.shape[0];
12075     }
12076   }
12077   __pyx_t_10 = 0;
12078   __pyx_v_oright_edge = ((PyArrayObject *)__pyx_t_1);
12079   __pyx_t_1 = 0;
12080 
12081   /* "yt/geometry/_selection_routines/selector_object.pxi":364
12082  *         cdef np.float64_t left_edge[3]
12083  *         cdef np.float64_t right_edge[3]
12084  *         for i in range(3):             # <<<<<<<<<<<<<<
12085  *             dds[i] = odds[i]
12086  *             dim[i] = gobj.ActiveDimensions[i]
12087  */
12088   for (__pyx_t_3 = 0; __pyx_t_3 < 3; __pyx_t_3+=1) {
12089     __pyx_v_i = __pyx_t_3;
12090 
12091     /* "yt/geometry/_selection_routines/selector_object.pxi":365
12092  *         cdef np.float64_t right_edge[3]
12093  *         for i in range(3):
12094  *             dds[i] = odds[i]             # <<<<<<<<<<<<<<
12095  *             dim[i] = gobj.ActiveDimensions[i]
12096  *             left_edge[i] = oleft_edge[i]
12097  */
12098     __pyx_t_11 = __pyx_v_i;
12099     (__pyx_v_dds[__pyx_v_i]) = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_odds.rcbuffer->pybuffer.buf, __pyx_t_11, __pyx_pybuffernd_odds.diminfo[0].strides));
12100 
12101     /* "yt/geometry/_selection_routines/selector_object.pxi":366
12102  *         for i in range(3):
12103  *             dds[i] = odds[i]
12104  *             dim[i] = gobj.ActiveDimensions[i]             # <<<<<<<<<<<<<<
12105  *             left_edge[i] = oleft_edge[i]
12106  *             right_edge[i] = oright_edge[i]
12107  */
12108     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 366, __pyx_L1_error)
12109     __Pyx_GOTREF(__pyx_t_1);
12110     __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 366, __pyx_L1_error)
12111     __Pyx_GOTREF(__pyx_t_7);
12112     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
12113     __pyx_t_12 = __Pyx_PyInt_As_int(__pyx_t_7); if (unlikely((__pyx_t_12 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 366, __pyx_L1_error)
12114     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
12115     (__pyx_v_dim[__pyx_v_i]) = __pyx_t_12;
12116 
12117     /* "yt/geometry/_selection_routines/selector_object.pxi":367
12118  *             dds[i] = odds[i]
12119  *             dim[i] = gobj.ActiveDimensions[i]
12120  *             left_edge[i] = oleft_edge[i]             # <<<<<<<<<<<<<<
12121  *             right_edge[i] = oright_edge[i]
12122  *         mask = np.zeros(gobj.ActiveDimensions, dtype='uint8')
12123  */
12124     __pyx_t_13 = __pyx_v_i;
12125     (__pyx_v_left_edge[__pyx_v_i]) = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_oleft_edge.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_oleft_edge.diminfo[0].strides));
12126 
12127     /* "yt/geometry/_selection_routines/selector_object.pxi":368
12128  *             dim[i] = gobj.ActiveDimensions[i]
12129  *             left_edge[i] = oleft_edge[i]
12130  *             right_edge[i] = oright_edge[i]             # <<<<<<<<<<<<<<
12131  *         mask = np.zeros(gobj.ActiveDimensions, dtype='uint8')
12132  *         # Check for the level bounds
12133  */
12134     __pyx_t_14 = __pyx_v_i;
12135     (__pyx_v_right_edge[__pyx_v_i]) = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_oright_edge.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_oright_edge.diminfo[0].strides));
12136   }
12137 
12138   /* "yt/geometry/_selection_routines/selector_object.pxi":369
12139  *             left_edge[i] = oleft_edge[i]
12140  *             right_edge[i] = oright_edge[i]
12141  *         mask = np.zeros(gobj.ActiveDimensions, dtype='uint8')             # <<<<<<<<<<<<<<
12142  *         # Check for the level bounds
12143  *         cdef np.int32_t level = gobj.Level
12144  */
12145   __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 369, __pyx_L1_error)
12146   __Pyx_GOTREF(__pyx_t_7);
12147   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 369, __pyx_L1_error)
12148   __Pyx_GOTREF(__pyx_t_1);
12149   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
12150   __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 369, __pyx_L1_error)
12151   __Pyx_GOTREF(__pyx_t_7);
12152   __pyx_t_15 = PyTuple_New(1); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 369, __pyx_L1_error)
12153   __Pyx_GOTREF(__pyx_t_15);
12154   __Pyx_GIVEREF(__pyx_t_7);
12155   PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_7);
12156   __pyx_t_7 = 0;
12157   __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 369, __pyx_L1_error)
12158   __Pyx_GOTREF(__pyx_t_7);
12159   if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(1, 369, __pyx_L1_error)
12160   __pyx_t_16 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, __pyx_t_7); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 369, __pyx_L1_error)
12161   __Pyx_GOTREF(__pyx_t_16);
12162   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
12163   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
12164   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
12165   if (!(likely(((__pyx_t_16) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_16, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 369, __pyx_L1_error)
12166   __pyx_t_17 = ((PyArrayObject *)__pyx_t_16);
12167   {
12168     __Pyx_BufFmt_StackElem __pyx_stack[1];
12169     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
12170     __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_17, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack);
12171     if (unlikely(__pyx_t_3 < 0)) {
12172       PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4);
12173       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {
12174         Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4);
12175         __Pyx_RaiseBufferFallbackError();
12176       } else {
12177         PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4);
12178       }
12179       __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0;
12180     }
12181     __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_mask.diminfo[2].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_mask.diminfo[2].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[2];
12182     if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(1, 369, __pyx_L1_error)
12183   }
12184   __pyx_t_17 = 0;
12185   __pyx_v_mask = ((PyArrayObject *)__pyx_t_16);
12186   __pyx_t_16 = 0;
12187 
12188   /* "yt/geometry/_selection_routines/selector_object.pxi":371
12189  *         mask = np.zeros(gobj.ActiveDimensions, dtype='uint8')
12190  *         # Check for the level bounds
12191  *         cdef np.int32_t level = gobj.Level             # <<<<<<<<<<<<<<
12192  *         # We set this to 1 if we ignore child_mask
12193  *         cdef int total
12194  */
12195   __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_Level); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 371, __pyx_L1_error)
12196   __Pyx_GOTREF(__pyx_t_16);
12197   __pyx_t_18 = __Pyx_PyInt_As_npy_int32(__pyx_t_16); if (unlikely((__pyx_t_18 == ((npy_int32)-1)) && PyErr_Occurred())) __PYX_ERR(1, 371, __pyx_L1_error)
12198   __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
12199   __pyx_v_level = __pyx_t_18;
12200 
12201   /* "yt/geometry/_selection_routines/selector_object.pxi":374
12202  *         # We set this to 1 if we ignore child_mask
12203  *         cdef int total
12204  *         total = self.fill_mask_selector(left_edge, right_edge, dds, dim,             # <<<<<<<<<<<<<<
12205  *                                         child_mask, mask, level)
12206  *         if total == 0: return None
12207  */
12208   __pyx_v_total = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->fill_mask_selector(__pyx_v_self, __pyx_v_left_edge, __pyx_v_right_edge, __pyx_v_dds, __pyx_v_dim, ((PyArrayObject *)__pyx_v_child_mask), ((PyArrayObject *)__pyx_v_mask), __pyx_v_level);
12209 
12210   /* "yt/geometry/_selection_routines/selector_object.pxi":376
12211  *         total = self.fill_mask_selector(left_edge, right_edge, dds, dim,
12212  *                                         child_mask, mask, level)
12213  *         if total == 0: return None             # <<<<<<<<<<<<<<
12214  *         return mask.astype("bool")
12215  *
12216  */
12217   __pyx_t_19 = ((__pyx_v_total == 0) != 0);
12218   if (__pyx_t_19) {
12219     __Pyx_XDECREF(__pyx_r);
12220     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
12221     goto __pyx_L0;
12222   }
12223 
12224   /* "yt/geometry/_selection_routines/selector_object.pxi":377
12225  *                                         child_mask, mask, level)
12226  *         if total == 0: return None
12227  *         return mask.astype("bool")             # <<<<<<<<<<<<<<
12228  *
12229  *     @cython.boundscheck(False)
12230  */
12231   __Pyx_XDECREF(__pyx_r);
12232   __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_mask), __pyx_n_s_astype); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 377, __pyx_L1_error)
12233   __Pyx_GOTREF(__pyx_t_7);
12234   __pyx_t_15 = NULL;
12235   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
12236     __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_7);
12237     if (likely(__pyx_t_15)) {
12238       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
12239       __Pyx_INCREF(__pyx_t_15);
12240       __Pyx_INCREF(function);
12241       __Pyx_DECREF_SET(__pyx_t_7, function);
12242     }
12243   }
12244   __pyx_t_16 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_15, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_n_s_bool);
12245   __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
12246   if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 377, __pyx_L1_error)
12247   __Pyx_GOTREF(__pyx_t_16);
12248   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
12249   __pyx_r = __pyx_t_16;
12250   __pyx_t_16 = 0;
12251   goto __pyx_L0;
12252 
12253   /* "yt/geometry/_selection_routines/selector_object.pxi":349
12254  *     @cython.wraparound(False)
12255  *     @cython.cdivision(True)
12256  *     def fill_mask(self, gobj):             # <<<<<<<<<<<<<<
12257  *         cdef np.ndarray[np.uint8_t, ndim=3, cast=True] child_mask
12258  *         child_mask = gobj.child_mask
12259  */
12260 
12261   /* function exit code */
12262   __pyx_L1_error:;
12263   __Pyx_XDECREF(__pyx_t_1);
12264   __Pyx_XDECREF(__pyx_t_7);
12265   __Pyx_XDECREF(__pyx_t_15);
12266   __Pyx_XDECREF(__pyx_t_16);
12267   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
12268     __Pyx_PyThreadState_declare
12269     __Pyx_PyThreadState_assign
12270     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
12271     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
12272     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
12273     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_odds.rcbuffer->pybuffer);
12274     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_oleft_edge.rcbuffer->pybuffer);
12275     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_oright_edge.rcbuffer->pybuffer);
12276   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
12277   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.fill_mask", __pyx_clineno, __pyx_lineno, __pyx_filename);
12278   __pyx_r = NULL;
12279   goto __pyx_L2;
12280   __pyx_L0:;
12281   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
12282   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
12283   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_odds.rcbuffer->pybuffer);
12284   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_oleft_edge.rcbuffer->pybuffer);
12285   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_oright_edge.rcbuffer->pybuffer);
12286   __pyx_L2:;
12287   __Pyx_XDECREF((PyObject *)__pyx_v_child_mask);
12288   __Pyx_XDECREF((PyObject *)__pyx_v_mask);
12289   __Pyx_XDECREF((PyObject *)__pyx_v_odds);
12290   __Pyx_XDECREF((PyObject *)__pyx_v_oleft_edge);
12291   __Pyx_XDECREF((PyObject *)__pyx_v_oright_edge);
12292   __Pyx_XGIVEREF(__pyx_r);
12293   __Pyx_RefNannyFinishContext();
12294   return __pyx_r;
12295 }
12296 
12297 /* "yt/geometry/_selection_routines/selector_object.pxi":382
12298  *     @cython.wraparound(False)
12299  *     @cython.cdivision(True)
12300  *     cdef int fill_mask_selector(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
12301  *                                 np.float64_t right_edge[3],
12302  *                                 np.float64_t dds[3], int dim[3],
12303  */
12304 
12305 static int __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_fill_mask_selector(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_float64_t *__pyx_v_dds, int *__pyx_v_dim, PyArrayObject *__pyx_v_child_mask, PyArrayObject *__pyx_v_mask, int __pyx_v_level) {
12306   int __pyx_v_i;
12307   int __pyx_v_j;
12308   int __pyx_v_k;
12309   int __pyx_v_total;
12310   int __pyx_v_this_level;
12311   __pyx_t_5numpy_float64_t __pyx_v_pos[3];
12312   __Pyx_LocalBuf_ND __pyx_pybuffernd_child_mask;
12313   __Pyx_Buffer __pyx_pybuffer_child_mask;
12314   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
12315   __Pyx_Buffer __pyx_pybuffer_mask;
12316   int __pyx_r;
12317   __Pyx_RefNannyDeclarations
12318   int __pyx_t_1;
12319   int __pyx_t_2;
12320   int __pyx_t_3;
12321   int __pyx_t_4;
12322   int __pyx_t_5;
12323   int __pyx_t_6;
12324   int __pyx_t_7;
12325   int __pyx_t_8;
12326   int __pyx_t_9;
12327   int __pyx_t_10;
12328   int __pyx_t_11;
12329   Py_ssize_t __pyx_t_12;
12330   Py_ssize_t __pyx_t_13;
12331   Py_ssize_t __pyx_t_14;
12332   Py_ssize_t __pyx_t_15;
12333   Py_ssize_t __pyx_t_16;
12334   Py_ssize_t __pyx_t_17;
12335   Py_ssize_t __pyx_t_18;
12336   Py_ssize_t __pyx_t_19;
12337   Py_ssize_t __pyx_t_20;
12338   __Pyx_RefNannySetupContext("fill_mask_selector", 0);
12339   __pyx_pybuffer_child_mask.pybuffer.buf = NULL;
12340   __pyx_pybuffer_child_mask.refcount = 0;
12341   __pyx_pybuffernd_child_mask.data = NULL;
12342   __pyx_pybuffernd_child_mask.rcbuffer = &__pyx_pybuffer_child_mask;
12343   __pyx_pybuffer_mask.pybuffer.buf = NULL;
12344   __pyx_pybuffer_mask.refcount = 0;
12345   __pyx_pybuffernd_mask.data = NULL;
12346   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
12347   {
12348     __Pyx_BufFmt_StackElem __pyx_stack[1];
12349     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_child_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack) == -1)) __PYX_ERR(1, 382, __pyx_L1_error)
12350   }
12351   __pyx_pybuffernd_child_mask.diminfo[0].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_child_mask.diminfo[0].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_child_mask.diminfo[1].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_child_mask.diminfo[1].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_child_mask.diminfo[2].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_child_mask.diminfo[2].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[2];
12352   {
12353     __Pyx_BufFmt_StackElem __pyx_stack[1];
12354     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(1, 382, __pyx_L1_error)
12355   }
12356   __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_mask.diminfo[2].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_mask.diminfo[2].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[2];
12357 
12358   /* "yt/geometry/_selection_routines/selector_object.pxi":389
12359  *                                 int level):
12360  *         cdef int i, j, k
12361  *         cdef int total = 0, this_level = 0             # <<<<<<<<<<<<<<
12362  *         cdef np.float64_t pos[3]
12363  *         if level < self.min_level or level > self.max_level:
12364  */
12365   __pyx_v_total = 0;
12366   __pyx_v_this_level = 0;
12367 
12368   /* "yt/geometry/_selection_routines/selector_object.pxi":391
12369  *         cdef int total = 0, this_level = 0
12370  *         cdef np.float64_t pos[3]
12371  *         if level < self.min_level or level > self.max_level:             # <<<<<<<<<<<<<<
12372  *             return 0
12373  *         if level == self.max_level:
12374  */
12375   __pyx_t_2 = ((__pyx_v_level < __pyx_v_self->min_level) != 0);
12376   if (!__pyx_t_2) {
12377   } else {
12378     __pyx_t_1 = __pyx_t_2;
12379     goto __pyx_L4_bool_binop_done;
12380   }
12381   __pyx_t_2 = ((__pyx_v_level > __pyx_v_self->max_level) != 0);
12382   __pyx_t_1 = __pyx_t_2;
12383   __pyx_L4_bool_binop_done:;
12384   if (__pyx_t_1) {
12385 
12386     /* "yt/geometry/_selection_routines/selector_object.pxi":392
12387  *         cdef np.float64_t pos[3]
12388  *         if level < self.min_level or level > self.max_level:
12389  *             return 0             # <<<<<<<<<<<<<<
12390  *         if level == self.max_level:
12391  *             this_level = 1
12392  */
12393     __pyx_r = 0;
12394     goto __pyx_L0;
12395 
12396     /* "yt/geometry/_selection_routines/selector_object.pxi":391
12397  *         cdef int total = 0, this_level = 0
12398  *         cdef np.float64_t pos[3]
12399  *         if level < self.min_level or level > self.max_level:             # <<<<<<<<<<<<<<
12400  *             return 0
12401  *         if level == self.max_level:
12402  */
12403   }
12404 
12405   /* "yt/geometry/_selection_routines/selector_object.pxi":393
12406  *         if level < self.min_level or level > self.max_level:
12407  *             return 0
12408  *         if level == self.max_level:             # <<<<<<<<<<<<<<
12409  *             this_level = 1
12410  *         with nogil:
12411  */
12412   __pyx_t_1 = ((__pyx_v_level == __pyx_v_self->max_level) != 0);
12413   if (__pyx_t_1) {
12414 
12415     /* "yt/geometry/_selection_routines/selector_object.pxi":394
12416  *             return 0
12417  *         if level == self.max_level:
12418  *             this_level = 1             # <<<<<<<<<<<<<<
12419  *         with nogil:
12420  *             for i in range(dim[0]):
12421  */
12422     __pyx_v_this_level = 1;
12423 
12424     /* "yt/geometry/_selection_routines/selector_object.pxi":393
12425  *         if level < self.min_level or level > self.max_level:
12426  *             return 0
12427  *         if level == self.max_level:             # <<<<<<<<<<<<<<
12428  *             this_level = 1
12429  *         with nogil:
12430  */
12431   }
12432 
12433   /* "yt/geometry/_selection_routines/selector_object.pxi":395
12434  *         if level == self.max_level:
12435  *             this_level = 1
12436  *         with nogil:             # <<<<<<<<<<<<<<
12437  *             for i in range(dim[0]):
12438  *                 pos[0] = left_edge[0] + (i + 0.5) * dds[0]
12439  */
12440   {
12441       #ifdef WITH_THREAD
12442       PyThreadState *_save;
12443       Py_UNBLOCK_THREADS
12444       __Pyx_FastGIL_Remember();
12445       #endif
12446       /*try:*/ {
12447 
12448         /* "yt/geometry/_selection_routines/selector_object.pxi":396
12449  *             this_level = 1
12450  *         with nogil:
12451  *             for i in range(dim[0]):             # <<<<<<<<<<<<<<
12452  *                 pos[0] = left_edge[0] + (i + 0.5) * dds[0]
12453  *                 for j in range(dim[1]):
12454  */
12455         __pyx_t_3 = (__pyx_v_dim[0]);
12456         __pyx_t_4 = __pyx_t_3;
12457         for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
12458           __pyx_v_i = __pyx_t_5;
12459 
12460           /* "yt/geometry/_selection_routines/selector_object.pxi":397
12461  *         with nogil:
12462  *             for i in range(dim[0]):
12463  *                 pos[0] = left_edge[0] + (i + 0.5) * dds[0]             # <<<<<<<<<<<<<<
12464  *                 for j in range(dim[1]):
12465  *                     pos[1] = left_edge[1] + (j + 0.5) * dds[1]
12466  */
12467           (__pyx_v_pos[0]) = ((__pyx_v_left_edge[0]) + ((__pyx_v_i + 0.5) * (__pyx_v_dds[0])));
12468 
12469           /* "yt/geometry/_selection_routines/selector_object.pxi":398
12470  *             for i in range(dim[0]):
12471  *                 pos[0] = left_edge[0] + (i + 0.5) * dds[0]
12472  *                 for j in range(dim[1]):             # <<<<<<<<<<<<<<
12473  *                     pos[1] = left_edge[1] + (j + 0.5) * dds[1]
12474  *                     for k in range(dim[2]):
12475  */
12476           __pyx_t_6 = (__pyx_v_dim[1]);
12477           __pyx_t_7 = __pyx_t_6;
12478           for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
12479             __pyx_v_j = __pyx_t_8;
12480 
12481             /* "yt/geometry/_selection_routines/selector_object.pxi":399
12482  *                 pos[0] = left_edge[0] + (i + 0.5) * dds[0]
12483  *                 for j in range(dim[1]):
12484  *                     pos[1] = left_edge[1] + (j + 0.5) * dds[1]             # <<<<<<<<<<<<<<
12485  *                     for k in range(dim[2]):
12486  *                         pos[2] = left_edge[2] + (k + 0.5) * dds[2]
12487  */
12488             (__pyx_v_pos[1]) = ((__pyx_v_left_edge[1]) + ((__pyx_v_j + 0.5) * (__pyx_v_dds[1])));
12489 
12490             /* "yt/geometry/_selection_routines/selector_object.pxi":400
12491  *                 for j in range(dim[1]):
12492  *                     pos[1] = left_edge[1] + (j + 0.5) * dds[1]
12493  *                     for k in range(dim[2]):             # <<<<<<<<<<<<<<
12494  *                         pos[2] = left_edge[2] + (k + 0.5) * dds[2]
12495  *                         if child_mask[i, j, k] == 1 or this_level == 1:
12496  */
12497             __pyx_t_9 = (__pyx_v_dim[2]);
12498             __pyx_t_10 = __pyx_t_9;
12499             for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
12500               __pyx_v_k = __pyx_t_11;
12501 
12502               /* "yt/geometry/_selection_routines/selector_object.pxi":401
12503  *                     pos[1] = left_edge[1] + (j + 0.5) * dds[1]
12504  *                     for k in range(dim[2]):
12505  *                         pos[2] = left_edge[2] + (k + 0.5) * dds[2]             # <<<<<<<<<<<<<<
12506  *                         if child_mask[i, j, k] == 1 or this_level == 1:
12507  *                             mask[i, j, k] = self.select_cell(pos, dds)
12508  */
12509               (__pyx_v_pos[2]) = ((__pyx_v_left_edge[2]) + ((__pyx_v_k + 0.5) * (__pyx_v_dds[2])));
12510 
12511               /* "yt/geometry/_selection_routines/selector_object.pxi":402
12512  *                     for k in range(dim[2]):
12513  *                         pos[2] = left_edge[2] + (k + 0.5) * dds[2]
12514  *                         if child_mask[i, j, k] == 1 or this_level == 1:             # <<<<<<<<<<<<<<
12515  *                             mask[i, j, k] = self.select_cell(pos, dds)
12516  *                             total += mask[i, j, k]
12517  */
12518               __pyx_t_12 = __pyx_v_i;
12519               __pyx_t_13 = __pyx_v_j;
12520               __pyx_t_14 = __pyx_v_k;
12521               __pyx_t_2 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_child_mask.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_child_mask.diminfo[1].strides, __pyx_t_14, __pyx_pybuffernd_child_mask.diminfo[2].strides)) == 1) != 0);
12522               if (!__pyx_t_2) {
12523               } else {
12524                 __pyx_t_1 = __pyx_t_2;
12525                 goto __pyx_L17_bool_binop_done;
12526               }
12527               __pyx_t_2 = ((__pyx_v_this_level == 1) != 0);
12528               __pyx_t_1 = __pyx_t_2;
12529               __pyx_L17_bool_binop_done:;
12530               if (__pyx_t_1) {
12531 
12532                 /* "yt/geometry/_selection_routines/selector_object.pxi":403
12533  *                         pos[2] = left_edge[2] + (k + 0.5) * dds[2]
12534  *                         if child_mask[i, j, k] == 1 or this_level == 1:
12535  *                             mask[i, j, k] = self.select_cell(pos, dds)             # <<<<<<<<<<<<<<
12536  *                             total += mask[i, j, k]
12537  *         return total
12538  */
12539                 __pyx_t_15 = __pyx_v_i;
12540                 __pyx_t_16 = __pyx_v_j;
12541                 __pyx_t_17 = __pyx_v_k;
12542                 *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_mask.diminfo[1].strides, __pyx_t_17, __pyx_pybuffernd_mask.diminfo[2].strides) = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_cell(__pyx_v_self, __pyx_v_pos, __pyx_v_dds);
12543 
12544                 /* "yt/geometry/_selection_routines/selector_object.pxi":404
12545  *                         if child_mask[i, j, k] == 1 or this_level == 1:
12546  *                             mask[i, j, k] = self.select_cell(pos, dds)
12547  *                             total += mask[i, j, k]             # <<<<<<<<<<<<<<
12548  *         return total
12549  *
12550  */
12551                 __pyx_t_18 = __pyx_v_i;
12552                 __pyx_t_19 = __pyx_v_j;
12553                 __pyx_t_20 = __pyx_v_k;
12554                 __pyx_v_total = (__pyx_v_total + (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_mask.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_mask.diminfo[2].strides)));
12555 
12556                 /* "yt/geometry/_selection_routines/selector_object.pxi":402
12557  *                     for k in range(dim[2]):
12558  *                         pos[2] = left_edge[2] + (k + 0.5) * dds[2]
12559  *                         if child_mask[i, j, k] == 1 or this_level == 1:             # <<<<<<<<<<<<<<
12560  *                             mask[i, j, k] = self.select_cell(pos, dds)
12561  *                             total += mask[i, j, k]
12562  */
12563               }
12564             }
12565           }
12566         }
12567       }
12568 
12569       /* "yt/geometry/_selection_routines/selector_object.pxi":395
12570  *         if level == self.max_level:
12571  *             this_level = 1
12572  *         with nogil:             # <<<<<<<<<<<<<<
12573  *             for i in range(dim[0]):
12574  *                 pos[0] = left_edge[0] + (i + 0.5) * dds[0]
12575  */
12576       /*finally:*/ {
12577         /*normal exit:*/{
12578           #ifdef WITH_THREAD
12579           __Pyx_FastGIL_Forget();
12580           Py_BLOCK_THREADS
12581           #endif
12582           goto __pyx_L9;
12583         }
12584         __pyx_L9:;
12585       }
12586   }
12587 
12588   /* "yt/geometry/_selection_routines/selector_object.pxi":405
12589  *                             mask[i, j, k] = self.select_cell(pos, dds)
12590  *                             total += mask[i, j, k]
12591  *         return total             # <<<<<<<<<<<<<<
12592  *
12593  *     @cython.boundscheck(False)
12594  */
12595   __pyx_r = __pyx_v_total;
12596   goto __pyx_L0;
12597 
12598   /* "yt/geometry/_selection_routines/selector_object.pxi":382
12599  *     @cython.wraparound(False)
12600  *     @cython.cdivision(True)
12601  *     cdef int fill_mask_selector(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
12602  *                                 np.float64_t right_edge[3],
12603  *                                 np.float64_t dds[3], int dim[3],
12604  */
12605 
12606   /* function exit code */
12607   __pyx_L1_error:;
12608   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
12609     __Pyx_PyThreadState_declare
12610     __Pyx_PyThreadState_assign
12611     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
12612     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
12613     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
12614   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
12615   __Pyx_WriteUnraisable("yt.geometry.selection_routines.SelectorObject.fill_mask_selector", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
12616   __pyx_r = 0;
12617   goto __pyx_L2;
12618   __pyx_L0:;
12619   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
12620   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
12621   __pyx_L2:;
12622   __Pyx_RefNannyFinishContext();
12623   return __pyx_r;
12624 }
12625 
12626 /* "yt/geometry/_selection_routines/selector_object.pxi":410
12627  *     @cython.wraparound(False)
12628  *     @cython.cdivision(True)
12629  *     cdef void visit_grid_cells(self, GridVisitorData *data,             # <<<<<<<<<<<<<<
12630  *                               grid_visitor_function *func,
12631  *                               np.uint8_t *cached_mask = NULL):
12632  */
12633 
12634 static void __pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_visit_grid_cells(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, struct __pyx_t_2yt_8geometry_13grid_visitors_GridVisitorData *__pyx_v_data, __pyx_t_2yt_8geometry_13grid_visitors_grid_visitor_function *__pyx_v_func, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_visit_grid_cells *__pyx_optional_args) {
12635 
12636   /* "yt/geometry/_selection_routines/selector_object.pxi":412
12637  *     cdef void visit_grid_cells(self, GridVisitorData *data,
12638  *                               grid_visitor_function *func,
12639  *                               np.uint8_t *cached_mask = NULL):             # <<<<<<<<<<<<<<
12640  *         # This function accepts a grid visitor function, the data that
12641  *         # corresponds to the current grid being examined (the most important
12642  */
12643   __pyx_t_5numpy_uint8_t *__pyx_v_cached_mask = ((__pyx_t_5numpy_uint8_t *)NULL);
12644   __pyx_t_5numpy_float64_t __pyx_v_left_edge[3];
12645   __pyx_t_5numpy_float64_t __pyx_v_right_edge[3];
12646   __pyx_t_5numpy_float64_t __pyx_v_dds[3];
12647   int __pyx_v_dim[3];
12648   int __pyx_v_this_level;
12649   int __pyx_v_level;
12650   int __pyx_v_i;
12651   __pyx_t_5numpy_float64_t __pyx_v_pos[3];
12652   __pyx_t_5numpy_uint8_t __pyx_v_child_masked;
12653   __pyx_t_5numpy_uint8_t __pyx_v_selected;
12654   CYTHON_UNUSED int __pyx_v_j;
12655   CYTHON_UNUSED int __pyx_v_k;
12656   __Pyx_RefNannyDeclarations
12657   __pyx_t_5numpy_int32_t __pyx_t_1;
12658   int __pyx_t_2;
12659   int __pyx_t_3;
12660   int __pyx_t_4;
12661   int __pyx_t_5;
12662   int __pyx_t_6;
12663   int __pyx_t_7;
12664   int __pyx_t_8;
12665   int __pyx_t_9;
12666   int __pyx_t_10;
12667   int __pyx_t_11;
12668   int __pyx_t_12;
12669   long __pyx_t_13;
12670   __Pyx_RefNannySetupContext("visit_grid_cells", 0);
12671   if (__pyx_optional_args) {
12672     if (__pyx_optional_args->__pyx_n > 0) {
12673       __pyx_v_cached_mask = __pyx_optional_args->cached_mask;
12674     }
12675   }
12676 
12677   /* "yt/geometry/_selection_routines/selector_object.pxi":422
12678  *         cdef np.float64_t dds[3]
12679  *         cdef int dim[3]
12680  *         cdef int this_level = 0, level, i             # <<<<<<<<<<<<<<
12681  *         cdef np.float64_t pos[3]
12682  *         level = data.grid.level
12683  */
12684   __pyx_v_this_level = 0;
12685 
12686   /* "yt/geometry/_selection_routines/selector_object.pxi":424
12687  *         cdef int this_level = 0, level, i
12688  *         cdef np.float64_t pos[3]
12689  *         level = data.grid.level             # <<<<<<<<<<<<<<
12690  *         if level < self.min_level or level > self.max_level:
12691  *             return
12692  */
12693   __pyx_t_1 = __pyx_v_data->grid->level;
12694   __pyx_v_level = __pyx_t_1;
12695 
12696   /* "yt/geometry/_selection_routines/selector_object.pxi":425
12697  *         cdef np.float64_t pos[3]
12698  *         level = data.grid.level
12699  *         if level < self.min_level or level > self.max_level:             # <<<<<<<<<<<<<<
12700  *             return
12701  *         if level == self.max_level:
12702  */
12703   __pyx_t_3 = ((__pyx_v_level < __pyx_v_self->min_level) != 0);
12704   if (!__pyx_t_3) {
12705   } else {
12706     __pyx_t_2 = __pyx_t_3;
12707     goto __pyx_L4_bool_binop_done;
12708   }
12709   __pyx_t_3 = ((__pyx_v_level > __pyx_v_self->max_level) != 0);
12710   __pyx_t_2 = __pyx_t_3;
12711   __pyx_L4_bool_binop_done:;
12712   if (__pyx_t_2) {
12713 
12714     /* "yt/geometry/_selection_routines/selector_object.pxi":426
12715  *         level = data.grid.level
12716  *         if level < self.min_level or level > self.max_level:
12717  *             return             # <<<<<<<<<<<<<<
12718  *         if level == self.max_level:
12719  *             this_level = 1
12720  */
12721     goto __pyx_L0;
12722 
12723     /* "yt/geometry/_selection_routines/selector_object.pxi":425
12724  *         cdef np.float64_t pos[3]
12725  *         level = data.grid.level
12726  *         if level < self.min_level or level > self.max_level:             # <<<<<<<<<<<<<<
12727  *             return
12728  *         if level == self.max_level:
12729  */
12730   }
12731 
12732   /* "yt/geometry/_selection_routines/selector_object.pxi":427
12733  *         if level < self.min_level or level > self.max_level:
12734  *             return
12735  *         if level == self.max_level:             # <<<<<<<<<<<<<<
12736  *             this_level = 1
12737  *         cdef np.uint8_t child_masked, selected
12738  */
12739   __pyx_t_2 = ((__pyx_v_level == __pyx_v_self->max_level) != 0);
12740   if (__pyx_t_2) {
12741 
12742     /* "yt/geometry/_selection_routines/selector_object.pxi":428
12743  *             return
12744  *         if level == self.max_level:
12745  *             this_level = 1             # <<<<<<<<<<<<<<
12746  *         cdef np.uint8_t child_masked, selected
12747  *         for i in range(3):
12748  */
12749     __pyx_v_this_level = 1;
12750 
12751     /* "yt/geometry/_selection_routines/selector_object.pxi":427
12752  *         if level < self.min_level or level > self.max_level:
12753  *             return
12754  *         if level == self.max_level:             # <<<<<<<<<<<<<<
12755  *             this_level = 1
12756  *         cdef np.uint8_t child_masked, selected
12757  */
12758   }
12759 
12760   /* "yt/geometry/_selection_routines/selector_object.pxi":430
12761  *             this_level = 1
12762  *         cdef np.uint8_t child_masked, selected
12763  *         for i in range(3):             # <<<<<<<<<<<<<<
12764  *             left_edge[i] = data.grid.left_edge[i]
12765  *             right_edge[i] = data.grid.right_edge[i]
12766  */
12767   for (__pyx_t_4 = 0; __pyx_t_4 < 3; __pyx_t_4+=1) {
12768     __pyx_v_i = __pyx_t_4;
12769 
12770     /* "yt/geometry/_selection_routines/selector_object.pxi":431
12771  *         cdef np.uint8_t child_masked, selected
12772  *         for i in range(3):
12773  *             left_edge[i] = data.grid.left_edge[i]             # <<<<<<<<<<<<<<
12774  *             right_edge[i] = data.grid.right_edge[i]
12775  *             dds[i] = (right_edge[i] - left_edge[i])/data.grid.dims[i]
12776  */
12777     (__pyx_v_left_edge[__pyx_v_i]) = (__pyx_v_data->grid->left_edge[__pyx_v_i]);
12778 
12779     /* "yt/geometry/_selection_routines/selector_object.pxi":432
12780  *         for i in range(3):
12781  *             left_edge[i] = data.grid.left_edge[i]
12782  *             right_edge[i] = data.grid.right_edge[i]             # <<<<<<<<<<<<<<
12783  *             dds[i] = (right_edge[i] - left_edge[i])/data.grid.dims[i]
12784  *             dim[i] = data.grid.dims[i]
12785  */
12786     (__pyx_v_right_edge[__pyx_v_i]) = (__pyx_v_data->grid->right_edge[__pyx_v_i]);
12787 
12788     /* "yt/geometry/_selection_routines/selector_object.pxi":433
12789  *             left_edge[i] = data.grid.left_edge[i]
12790  *             right_edge[i] = data.grid.right_edge[i]
12791  *             dds[i] = (right_edge[i] - left_edge[i])/data.grid.dims[i]             # <<<<<<<<<<<<<<
12792  *             dim[i] = data.grid.dims[i]
12793  *         with nogil:
12794  */
12795     (__pyx_v_dds[__pyx_v_i]) = (((__pyx_v_right_edge[__pyx_v_i]) - (__pyx_v_left_edge[__pyx_v_i])) / (__pyx_v_data->grid->dims[__pyx_v_i]));
12796 
12797     /* "yt/geometry/_selection_routines/selector_object.pxi":434
12798  *             right_edge[i] = data.grid.right_edge[i]
12799  *             dds[i] = (right_edge[i] - left_edge[i])/data.grid.dims[i]
12800  *             dim[i] = data.grid.dims[i]             # <<<<<<<<<<<<<<
12801  *         with nogil:
12802  *             pos[0] = left_edge[0] + dds[0] * 0.5
12803  */
12804     (__pyx_v_dim[__pyx_v_i]) = (__pyx_v_data->grid->dims[__pyx_v_i]);
12805   }
12806 
12807   /* "yt/geometry/_selection_routines/selector_object.pxi":435
12808  *             dds[i] = (right_edge[i] - left_edge[i])/data.grid.dims[i]
12809  *             dim[i] = data.grid.dims[i]
12810  *         with nogil:             # <<<<<<<<<<<<<<
12811  *             pos[0] = left_edge[0] + dds[0] * 0.5
12812  *             data.pos[0] = 0
12813  */
12814   {
12815       #ifdef WITH_THREAD
12816       PyThreadState *_save;
12817       Py_UNBLOCK_THREADS
12818       __Pyx_FastGIL_Remember();
12819       #endif
12820       /*try:*/ {
12821 
12822         /* "yt/geometry/_selection_routines/selector_object.pxi":436
12823  *             dim[i] = data.grid.dims[i]
12824  *         with nogil:
12825  *             pos[0] = left_edge[0] + dds[0] * 0.5             # <<<<<<<<<<<<<<
12826  *             data.pos[0] = 0
12827  *             for i in range(dim[0]):
12828  */
12829         (__pyx_v_pos[0]) = ((__pyx_v_left_edge[0]) + ((__pyx_v_dds[0]) * 0.5));
12830 
12831         /* "yt/geometry/_selection_routines/selector_object.pxi":437
12832  *         with nogil:
12833  *             pos[0] = left_edge[0] + dds[0] * 0.5
12834  *             data.pos[0] = 0             # <<<<<<<<<<<<<<
12835  *             for i in range(dim[0]):
12836  *                 pos[1] = left_edge[1] + dds[1] * 0.5
12837  */
12838         (__pyx_v_data->pos[0]) = 0;
12839 
12840         /* "yt/geometry/_selection_routines/selector_object.pxi":438
12841  *             pos[0] = left_edge[0] + dds[0] * 0.5
12842  *             data.pos[0] = 0
12843  *             for i in range(dim[0]):             # <<<<<<<<<<<<<<
12844  *                 pos[1] = left_edge[1] + dds[1] * 0.5
12845  *                 data.pos[1] = 0
12846  */
12847         __pyx_t_4 = (__pyx_v_dim[0]);
12848         __pyx_t_5 = __pyx_t_4;
12849         for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
12850           __pyx_v_i = __pyx_t_6;
12851 
12852           /* "yt/geometry/_selection_routines/selector_object.pxi":439
12853  *             data.pos[0] = 0
12854  *             for i in range(dim[0]):
12855  *                 pos[1] = left_edge[1] + dds[1] * 0.5             # <<<<<<<<<<<<<<
12856  *                 data.pos[1] = 0
12857  *                 for j in range(dim[1]):
12858  */
12859           (__pyx_v_pos[1]) = ((__pyx_v_left_edge[1]) + ((__pyx_v_dds[1]) * 0.5));
12860 
12861           /* "yt/geometry/_selection_routines/selector_object.pxi":440
12862  *             for i in range(dim[0]):
12863  *                 pos[1] = left_edge[1] + dds[1] * 0.5
12864  *                 data.pos[1] = 0             # <<<<<<<<<<<<<<
12865  *                 for j in range(dim[1]):
12866  *                     pos[2] = left_edge[2] + dds[2] * 0.5
12867  */
12868           (__pyx_v_data->pos[1]) = 0;
12869 
12870           /* "yt/geometry/_selection_routines/selector_object.pxi":441
12871  *                 pos[1] = left_edge[1] + dds[1] * 0.5
12872  *                 data.pos[1] = 0
12873  *                 for j in range(dim[1]):             # <<<<<<<<<<<<<<
12874  *                     pos[2] = left_edge[2] + dds[2] * 0.5
12875  *                     data.pos[2] = 0
12876  */
12877           __pyx_t_7 = (__pyx_v_dim[1]);
12878           __pyx_t_8 = __pyx_t_7;
12879           for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
12880             __pyx_v_j = __pyx_t_9;
12881 
12882             /* "yt/geometry/_selection_routines/selector_object.pxi":442
12883  *                 data.pos[1] = 0
12884  *                 for j in range(dim[1]):
12885  *                     pos[2] = left_edge[2] + dds[2] * 0.5             # <<<<<<<<<<<<<<
12886  *                     data.pos[2] = 0
12887  *                     for k in range(dim[2]):
12888  */
12889             (__pyx_v_pos[2]) = ((__pyx_v_left_edge[2]) + ((__pyx_v_dds[2]) * 0.5));
12890 
12891             /* "yt/geometry/_selection_routines/selector_object.pxi":443
12892  *                 for j in range(dim[1]):
12893  *                     pos[2] = left_edge[2] + dds[2] * 0.5
12894  *                     data.pos[2] = 0             # <<<<<<<<<<<<<<
12895  *                     for k in range(dim[2]):
12896  *                         # We short-circuit if we have a cache; if we don't, we
12897  */
12898             (__pyx_v_data->pos[2]) = 0;
12899 
12900             /* "yt/geometry/_selection_routines/selector_object.pxi":444
12901  *                     pos[2] = left_edge[2] + dds[2] * 0.5
12902  *                     data.pos[2] = 0
12903  *                     for k in range(dim[2]):             # <<<<<<<<<<<<<<
12904  *                         # We short-circuit if we have a cache; if we don't, we
12905  *                         # only set selected to true if it's *not* masked by a
12906  */
12907             __pyx_t_10 = (__pyx_v_dim[2]);
12908             __pyx_t_11 = __pyx_t_10;
12909             for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
12910               __pyx_v_k = __pyx_t_12;
12911 
12912               /* "yt/geometry/_selection_routines/selector_object.pxi":448
12913  *                         # only set selected to true if it's *not* masked by a
12914  *                         # child and it *is* selected.
12915  *                         if cached_mask != NULL:             # <<<<<<<<<<<<<<
12916  *                             selected = ba_get_value(cached_mask,
12917  *                                                     data.global_index)
12918  */
12919               __pyx_t_2 = ((__pyx_v_cached_mask != NULL) != 0);
12920               if (__pyx_t_2) {
12921 
12922                 /* "yt/geometry/_selection_routines/selector_object.pxi":449
12923  *                         # child and it *is* selected.
12924  *                         if cached_mask != NULL:
12925  *                             selected = ba_get_value(cached_mask,             # <<<<<<<<<<<<<<
12926  *                                                     data.global_index)
12927  *                         else:
12928  */
12929                 __pyx_v_selected = __pyx_f_2yt_9utilities_3lib_8bitarray_ba_get_value(__pyx_v_cached_mask, __pyx_v_data->global_index);
12930 
12931                 /* "yt/geometry/_selection_routines/selector_object.pxi":448
12932  *                         # only set selected to true if it's *not* masked by a
12933  *                         # child and it *is* selected.
12934  *                         if cached_mask != NULL:             # <<<<<<<<<<<<<<
12935  *                             selected = ba_get_value(cached_mask,
12936  *                                                     data.global_index)
12937  */
12938                 goto __pyx_L18;
12939               }
12940 
12941               /* "yt/geometry/_selection_routines/selector_object.pxi":452
12942  *                                                     data.global_index)
12943  *                         else:
12944  *                             if this_level == 1:             # <<<<<<<<<<<<<<
12945  *                                 child_masked = 0
12946  *                             else:
12947  */
12948               /*else*/ {
12949                 __pyx_t_2 = ((__pyx_v_this_level == 1) != 0);
12950                 if (__pyx_t_2) {
12951 
12952                   /* "yt/geometry/_selection_routines/selector_object.pxi":453
12953  *                         else:
12954  *                             if this_level == 1:
12955  *                                 child_masked = 0             # <<<<<<<<<<<<<<
12956  *                             else:
12957  *                                 child_masked = check_child_masked(data)
12958  */
12959                   __pyx_v_child_masked = 0;
12960 
12961                   /* "yt/geometry/_selection_routines/selector_object.pxi":452
12962  *                                                     data.global_index)
12963  *                         else:
12964  *                             if this_level == 1:             # <<<<<<<<<<<<<<
12965  *                                 child_masked = 0
12966  *                             else:
12967  */
12968                   goto __pyx_L19;
12969                 }
12970 
12971                 /* "yt/geometry/_selection_routines/selector_object.pxi":455
12972  *                                 child_masked = 0
12973  *                             else:
12974  *                                 child_masked = check_child_masked(data)             # <<<<<<<<<<<<<<
12975  *                             if child_masked == 0:
12976  *                                 selected = self.select_cell(pos, dds)
12977  */
12978                 /*else*/ {
12979                   __pyx_v_child_masked = __pyx_f_2yt_8geometry_13grid_visitors_check_child_masked(__pyx_v_data);
12980                 }
12981                 __pyx_L19:;
12982 
12983                 /* "yt/geometry/_selection_routines/selector_object.pxi":456
12984  *                             else:
12985  *                                 child_masked = check_child_masked(data)
12986  *                             if child_masked == 0:             # <<<<<<<<<<<<<<
12987  *                                 selected = self.select_cell(pos, dds)
12988  *                             else:
12989  */
12990                 __pyx_t_2 = ((__pyx_v_child_masked == 0) != 0);
12991                 if (__pyx_t_2) {
12992 
12993                   /* "yt/geometry/_selection_routines/selector_object.pxi":457
12994  *                                 child_masked = check_child_masked(data)
12995  *                             if child_masked == 0:
12996  *                                 selected = self.select_cell(pos, dds)             # <<<<<<<<<<<<<<
12997  *                             else:
12998  *                                 selected = 0
12999  */
13000                   __pyx_v_selected = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_cell(__pyx_v_self, __pyx_v_pos, __pyx_v_dds);
13001 
13002                   /* "yt/geometry/_selection_routines/selector_object.pxi":456
13003  *                             else:
13004  *                                 child_masked = check_child_masked(data)
13005  *                             if child_masked == 0:             # <<<<<<<<<<<<<<
13006  *                                 selected = self.select_cell(pos, dds)
13007  *                             else:
13008  */
13009                   goto __pyx_L20;
13010                 }
13011 
13012                 /* "yt/geometry/_selection_routines/selector_object.pxi":459
13013  *                                 selected = self.select_cell(pos, dds)
13014  *                             else:
13015  *                                 selected = 0             # <<<<<<<<<<<<<<
13016  *                         func(data, selected)
13017  *                         data.global_index += 1
13018  */
13019                 /*else*/ {
13020                   __pyx_v_selected = 0;
13021                 }
13022                 __pyx_L20:;
13023               }
13024               __pyx_L18:;
13025 
13026               /* "yt/geometry/_selection_routines/selector_object.pxi":460
13027  *                             else:
13028  *                                 selected = 0
13029  *                         func(data, selected)             # <<<<<<<<<<<<<<
13030  *                         data.global_index += 1
13031  *                         pos[2] += dds[2]
13032  */
13033               __pyx_v_func(__pyx_v_data, __pyx_v_selected);
13034 
13035               /* "yt/geometry/_selection_routines/selector_object.pxi":461
13036  *                                 selected = 0
13037  *                         func(data, selected)
13038  *                         data.global_index += 1             # <<<<<<<<<<<<<<
13039  *                         pos[2] += dds[2]
13040  *                         data.pos[2] += 1
13041  */
13042               __pyx_v_data->global_index = (__pyx_v_data->global_index + 1);
13043 
13044               /* "yt/geometry/_selection_routines/selector_object.pxi":462
13045  *                         func(data, selected)
13046  *                         data.global_index += 1
13047  *                         pos[2] += dds[2]             # <<<<<<<<<<<<<<
13048  *                         data.pos[2] += 1
13049  *                     pos[1] += dds[1]
13050  */
13051               __pyx_t_13 = 2;
13052               (__pyx_v_pos[__pyx_t_13]) = ((__pyx_v_pos[__pyx_t_13]) + (__pyx_v_dds[2]));
13053 
13054               /* "yt/geometry/_selection_routines/selector_object.pxi":463
13055  *                         data.global_index += 1
13056  *                         pos[2] += dds[2]
13057  *                         data.pos[2] += 1             # <<<<<<<<<<<<<<
13058  *                     pos[1] += dds[1]
13059  *                     data.pos[1] += 1
13060  */
13061               __pyx_t_13 = 2;
13062               (__pyx_v_data->pos[__pyx_t_13]) = ((__pyx_v_data->pos[__pyx_t_13]) + 1);
13063             }
13064 
13065             /* "yt/geometry/_selection_routines/selector_object.pxi":464
13066  *                         pos[2] += dds[2]
13067  *                         data.pos[2] += 1
13068  *                     pos[1] += dds[1]             # <<<<<<<<<<<<<<
13069  *                     data.pos[1] += 1
13070  *                 pos[0] += dds[0]
13071  */
13072             __pyx_t_13 = 1;
13073             (__pyx_v_pos[__pyx_t_13]) = ((__pyx_v_pos[__pyx_t_13]) + (__pyx_v_dds[1]));
13074 
13075             /* "yt/geometry/_selection_routines/selector_object.pxi":465
13076  *                         data.pos[2] += 1
13077  *                     pos[1] += dds[1]
13078  *                     data.pos[1] += 1             # <<<<<<<<<<<<<<
13079  *                 pos[0] += dds[0]
13080  *                 data.pos[0] += 1
13081  */
13082             __pyx_t_13 = 1;
13083             (__pyx_v_data->pos[__pyx_t_13]) = ((__pyx_v_data->pos[__pyx_t_13]) + 1);
13084           }
13085 
13086           /* "yt/geometry/_selection_routines/selector_object.pxi":466
13087  *                     pos[1] += dds[1]
13088  *                     data.pos[1] += 1
13089  *                 pos[0] += dds[0]             # <<<<<<<<<<<<<<
13090  *                 data.pos[0] += 1
13091  *
13092  */
13093           __pyx_t_13 = 0;
13094           (__pyx_v_pos[__pyx_t_13]) = ((__pyx_v_pos[__pyx_t_13]) + (__pyx_v_dds[0]));
13095 
13096           /* "yt/geometry/_selection_routines/selector_object.pxi":467
13097  *                     data.pos[1] += 1
13098  *                 pos[0] += dds[0]
13099  *                 data.pos[0] += 1             # <<<<<<<<<<<<<<
13100  *
13101  *     @cython.boundscheck(False)
13102  */
13103           __pyx_t_13 = 0;
13104           (__pyx_v_data->pos[__pyx_t_13]) = ((__pyx_v_data->pos[__pyx_t_13]) + 1);
13105         }
13106       }
13107 
13108       /* "yt/geometry/_selection_routines/selector_object.pxi":435
13109  *             dds[i] = (right_edge[i] - left_edge[i])/data.grid.dims[i]
13110  *             dim[i] = data.grid.dims[i]
13111  *         with nogil:             # <<<<<<<<<<<<<<
13112  *             pos[0] = left_edge[0] + dds[0] * 0.5
13113  *             data.pos[0] = 0
13114  */
13115       /*finally:*/ {
13116         /*normal exit:*/{
13117           #ifdef WITH_THREAD
13118           __Pyx_FastGIL_Forget();
13119           Py_BLOCK_THREADS
13120           #endif
13121           goto __pyx_L11;
13122         }
13123         __pyx_L11:;
13124       }
13125   }
13126 
13127   /* "yt/geometry/_selection_routines/selector_object.pxi":410
13128  *     @cython.wraparound(False)
13129  *     @cython.cdivision(True)
13130  *     cdef void visit_grid_cells(self, GridVisitorData *data,             # <<<<<<<<<<<<<<
13131  *                               grid_visitor_function *func,
13132  *                               np.uint8_t *cached_mask = NULL):
13133  */
13134 
13135   /* function exit code */
13136   __pyx_L0:;
13137   __Pyx_RefNannyFinishContext();
13138 }
13139 
13140 /* "yt/geometry/_selection_routines/selector_object.pxi":472
13141  *     @cython.wraparound(False)
13142  *     @cython.cdivision(True)
13143  *     def count_points(self, np.ndarray[floating, ndim=1] x,             # <<<<<<<<<<<<<<
13144  *                            np.ndarray[floating, ndim=1] y,
13145  *                            np.ndarray[floating, ndim=1] z,
13146  */
13147 
13148 /* Python wrapper */
13149 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_17count_points(PyObject *__pyx_v_signatures, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
13150 static PyMethodDef __pyx_mdef_2yt_8geometry_18selection_routines_14SelectorObject_17count_points = {"count_points", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_17count_points, METH_VARARGS|METH_KEYWORDS, 0};
13151 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_17count_points(PyObject *__pyx_v_signatures, PyObject *__pyx_args, PyObject *__pyx_kwds) {
13152   PyObject *__pyx_v_args = 0;
13153   PyObject *__pyx_v_kwargs = 0;
13154   CYTHON_UNUSED PyObject *__pyx_v_defaults = 0;
13155   PyObject *__pyx_r = 0;
13156   __Pyx_RefNannyDeclarations
13157   __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
13158   {
13159     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
13160     PyObject* values[3] = {0,0,0};
13161     if (unlikely(__pyx_kwds)) {
13162       Py_ssize_t kw_args;
13163       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
13164       switch (pos_args) {
13165         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
13166         CYTHON_FALLTHROUGH;
13167         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
13168         CYTHON_FALLTHROUGH;
13169         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
13170         CYTHON_FALLTHROUGH;
13171         case  0: break;
13172         default: goto __pyx_L5_argtuple_error;
13173       }
13174       kw_args = PyDict_Size(__pyx_kwds);
13175       switch (pos_args) {
13176         case  0:
13177         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
13178         else goto __pyx_L5_argtuple_error;
13179         CYTHON_FALLTHROUGH;
13180         case  1:
13181         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
13182         else {
13183           __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 3, 3, 1); __PYX_ERR(1, 472, __pyx_L3_error)
13184         }
13185         CYTHON_FALLTHROUGH;
13186         case  2:
13187         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
13188         else {
13189           __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 3, 3, 2); __PYX_ERR(1, 472, __pyx_L3_error)
13190         }
13191       }
13192       if (unlikely(kw_args > 0)) {
13193         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(1, 472, __pyx_L3_error)
13194       }
13195     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
13196       goto __pyx_L5_argtuple_error;
13197     } else {
13198       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
13199       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
13200       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
13201     }
13202     __pyx_v_args = values[0];
13203     __pyx_v_kwargs = values[1];
13204     __pyx_v_defaults = values[2];
13205   }
13206   goto __pyx_L4_argument_unpacking_done;
13207   __pyx_L5_argtuple_error:;
13208   __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 472, __pyx_L3_error)
13209   __pyx_L3_error:;
13210   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
13211   __Pyx_RefNannyFinishContext();
13212   return NULL;
13213   __pyx_L4_argument_unpacking_done:;
13214   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_16count_points(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_signatures), __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
13215 
13216   /* function exit code */
13217   __Pyx_RefNannyFinishContext();
13218   return __pyx_r;
13219 }
13220 
13221 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_16count_points(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
13222   PyObject *__pyx_v_dest_sig = NULL;
13223   Py_ssize_t __pyx_v_i;
13224   PyTypeObject *__pyx_v_ndarray = 0;
13225   __Pyx_memviewslice __pyx_v_memslice;
13226   Py_ssize_t __pyx_v_itemsize;
13227   CYTHON_UNUSED int __pyx_v_dtype_signed;
13228   char __pyx_v_kind;
13229   PyObject *__pyx_v_arg = NULL;
13230   PyObject *__pyx_v_dtype = NULL;
13231   PyObject *__pyx_v_arg_base = NULL;
13232   PyObject *__pyx_v_candidates = NULL;
13233   PyObject *__pyx_v_sig = NULL;
13234   int __pyx_v_match_found;
13235   PyObject *__pyx_v_src_sig = NULL;
13236   PyObject *__pyx_v_dst_type = NULL;
13237   PyObject *__pyx_r = NULL;
13238   __Pyx_RefNannyDeclarations
13239   PyObject *__pyx_t_1 = NULL;
13240   int __pyx_t_2;
13241   int __pyx_t_3;
13242   int __pyx_t_4;
13243   Py_ssize_t __pyx_t_5;
13244   PyObject *__pyx_t_6 = NULL;
13245   long __pyx_t_7;
13246   __Pyx_memviewslice __pyx_t_8;
13247   Py_ssize_t __pyx_t_9;
13248   int __pyx_t_10;
13249   int __pyx_t_11;
13250   PyObject *__pyx_t_12 = NULL;
13251   PyObject *__pyx_t_13 = NULL;
13252   PyObject *__pyx_t_14 = NULL;
13253   Py_ssize_t __pyx_t_15;
13254   Py_ssize_t __pyx_t_16;
13255   Py_ssize_t __pyx_t_17;
13256   int __pyx_t_18;
13257   __Pyx_RefNannySetupContext("count_points", 0);
13258   __Pyx_INCREF(__pyx_v_kwargs);
13259   __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 472, __pyx_L1_error)
13260   __Pyx_GOTREF(__pyx_t_1);
13261   __Pyx_INCREF(Py_None);
13262   __Pyx_GIVEREF(Py_None);
13263   PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
13264   __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
13265   __pyx_t_1 = 0;
13266   __pyx_t_3 = (__pyx_v_kwargs != Py_None);
13267   __pyx_t_4 = (__pyx_t_3 != 0);
13268   if (__pyx_t_4) {
13269   } else {
13270     __pyx_t_2 = __pyx_t_4;
13271     goto __pyx_L4_bool_binop_done;
13272   }
13273   __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 472, __pyx_L1_error)
13274   __pyx_t_3 = ((!__pyx_t_4) != 0);
13275   __pyx_t_2 = __pyx_t_3;
13276   __pyx_L4_bool_binop_done:;
13277   if (__pyx_t_2) {
13278     __Pyx_INCREF(Py_None);
13279     __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
13280   }
13281   __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 472, __pyx_L1_error)
13282   __Pyx_GOTREF(__pyx_t_1);
13283   __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
13284   __pyx_t_1 = 0;
13285   __pyx_v_itemsize = -1L;
13286   if (unlikely(__pyx_v_args == Py_None)) {
13287     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
13288     __PYX_ERR(1, 472, __pyx_L1_error)
13289   }
13290   __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 472, __pyx_L1_error)
13291   __pyx_t_2 = ((1 < __pyx_t_5) != 0);
13292   if (__pyx_t_2) {
13293     if (unlikely(__pyx_v_args == Py_None)) {
13294       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
13295       __PYX_ERR(1, 472, __pyx_L1_error)
13296     }
13297     __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 1);
13298     __Pyx_INCREF(__pyx_t_1);
13299     __pyx_v_arg = __pyx_t_1;
13300     __pyx_t_1 = 0;
13301     goto __pyx_L6;
13302   }
13303   __pyx_t_3 = (__pyx_v_kwargs != Py_None);
13304   __pyx_t_4 = (__pyx_t_3 != 0);
13305   if (__pyx_t_4) {
13306   } else {
13307     __pyx_t_2 = __pyx_t_4;
13308     goto __pyx_L7_bool_binop_done;
13309   }
13310   if (unlikely(__pyx_v_kwargs == Py_None)) {
13311     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
13312     __PYX_ERR(1, 472, __pyx_L1_error)
13313   }
13314   __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_x, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 472, __pyx_L1_error)
13315   __pyx_t_3 = (__pyx_t_4 != 0);
13316   __pyx_t_2 = __pyx_t_3;
13317   __pyx_L7_bool_binop_done:;
13318   if (__pyx_t_2) {
13319     if (unlikely(__pyx_v_kwargs == Py_None)) {
13320       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
13321       __PYX_ERR(1, 472, __pyx_L1_error)
13322     }
13323     __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 472, __pyx_L1_error)
13324     __Pyx_GOTREF(__pyx_t_1);
13325     __pyx_v_arg = __pyx_t_1;
13326     __pyx_t_1 = 0;
13327     goto __pyx_L6;
13328   }
13329   /*else*/ {
13330     if (unlikely(__pyx_v_args == Py_None)) {
13331       PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
13332       __PYX_ERR(1, 472, __pyx_L1_error)
13333     }
13334     __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 472, __pyx_L1_error)
13335     __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 472, __pyx_L1_error)
13336     __Pyx_GOTREF(__pyx_t_1);
13337     __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13338     __Pyx_GOTREF(__pyx_t_6);
13339     __Pyx_INCREF(__pyx_int_5);
13340     __Pyx_GIVEREF(__pyx_int_5);
13341     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_5);
13342     __Pyx_INCREF(__pyx_n_s_s);
13343     __Pyx_GIVEREF(__pyx_n_s_s);
13344     PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
13345     __Pyx_GIVEREF(__pyx_t_1);
13346     PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
13347     __pyx_t_1 = 0;
13348     __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 472, __pyx_L1_error)
13349     __Pyx_GOTREF(__pyx_t_1);
13350     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
13351     __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13352     __Pyx_GOTREF(__pyx_t_6);
13353     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
13354     __Pyx_Raise(__pyx_t_6, 0, 0, 0);
13355     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
13356     __PYX_ERR(1, 472, __pyx_L1_error)
13357   }
13358   __pyx_L6:;
13359   while (1) {
13360     __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
13361     __pyx_t_3 = (__pyx_t_2 != 0);
13362     if (__pyx_t_3) {
13363       __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray);
13364       __pyx_t_2 = (__pyx_t_3 != 0);
13365       if (__pyx_t_2) {
13366         __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13367         __Pyx_GOTREF(__pyx_t_6);
13368         __pyx_v_dtype = __pyx_t_6;
13369         __pyx_t_6 = 0;
13370         goto __pyx_L12;
13371       }
13372       __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg);
13373       __pyx_t_3 = (__pyx_t_2 != 0);
13374       if (__pyx_t_3) {
13375         __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13376         __Pyx_GOTREF(__pyx_t_6);
13377         __pyx_v_arg_base = __pyx_t_6;
13378         __pyx_t_6 = 0;
13379         __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray);
13380         __pyx_t_2 = (__pyx_t_3 != 0);
13381         if (__pyx_t_2) {
13382           __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13383           __Pyx_GOTREF(__pyx_t_6);
13384           __pyx_v_dtype = __pyx_t_6;
13385           __pyx_t_6 = 0;
13386           goto __pyx_L13;
13387         }
13388         /*else*/ {
13389           __Pyx_INCREF(Py_None);
13390           __pyx_v_dtype = Py_None;
13391         }
13392         __pyx_L13:;
13393         goto __pyx_L12;
13394       }
13395       /*else*/ {
13396         __Pyx_INCREF(Py_None);
13397         __pyx_v_dtype = Py_None;
13398       }
13399       __pyx_L12:;
13400       __pyx_v_itemsize = -1L;
13401       __pyx_t_2 = (__pyx_v_dtype != Py_None);
13402       __pyx_t_3 = (__pyx_t_2 != 0);
13403       if (__pyx_t_3) {
13404         __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13405         __Pyx_GOTREF(__pyx_t_6);
13406         __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 472, __pyx_L1_error)
13407         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
13408         __pyx_v_itemsize = __pyx_t_5;
13409         __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13410         __Pyx_GOTREF(__pyx_t_6);
13411         __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(1, 472, __pyx_L1_error)
13412         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
13413         __pyx_v_kind = __pyx_t_7;
13414         __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
13415         switch (__pyx_v_kind) {
13416           case 'i':
13417           case 'u':
13418           break;
13419           case 'f':
13420           __pyx_t_2 = (((sizeof(float)) == __pyx_v_itemsize) != 0);
13421           if (__pyx_t_2) {
13422           } else {
13423             __pyx_t_3 = __pyx_t_2;
13424             goto __pyx_L16_bool_binop_done;
13425           }
13426           __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13427           __Pyx_GOTREF(__pyx_t_6);
13428           __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 472, __pyx_L1_error)
13429           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
13430           __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0);
13431           __pyx_t_3 = __pyx_t_2;
13432           __pyx_L16_bool_binop_done:;
13433           if (__pyx_t_3) {
13434             if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(1, 472, __pyx_L1_error)
13435             goto __pyx_L10_break;
13436           }
13437           __pyx_t_2 = (((sizeof(double)) == __pyx_v_itemsize) != 0);
13438           if (__pyx_t_2) {
13439           } else {
13440             __pyx_t_3 = __pyx_t_2;
13441             goto __pyx_L19_bool_binop_done;
13442           }
13443           __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13444           __Pyx_GOTREF(__pyx_t_6);
13445           __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 472, __pyx_L1_error)
13446           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
13447           __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0);
13448           __pyx_t_3 = __pyx_t_2;
13449           __pyx_L19_bool_binop_done:;
13450           if (__pyx_t_3) {
13451             if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(1, 472, __pyx_L1_error)
13452             goto __pyx_L10_break;
13453           }
13454           break;
13455           case 'c':
13456           break;
13457           case 'O':
13458           break;
13459           default: break;
13460         }
13461       }
13462     }
13463     __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
13464     if (!__pyx_t_2) {
13465     } else {
13466       __pyx_t_3 = __pyx_t_2;
13467       goto __pyx_L22_bool_binop_done;
13468     }
13469     __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(float))) != 0);
13470     __pyx_t_3 = __pyx_t_2;
13471     __pyx_L22_bool_binop_done:;
13472     if (__pyx_t_3) {
13473       __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_v_arg, 0);
13474       __pyx_v_memslice = __pyx_t_8;
13475       __pyx_t_3 = (__pyx_v_memslice.memview != 0);
13476       if (__pyx_t_3) {
13477         __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1);
13478         if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(1, 472, __pyx_L1_error)
13479         goto __pyx_L10_break;
13480       }
13481       /*else*/ {
13482         PyErr_Clear();
13483       }
13484     }
13485     __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
13486     if (!__pyx_t_2) {
13487     } else {
13488       __pyx_t_3 = __pyx_t_2;
13489       goto __pyx_L26_bool_binop_done;
13490     }
13491     __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(double))) != 0);
13492     __pyx_t_3 = __pyx_t_2;
13493     __pyx_L26_bool_binop_done:;
13494     if (__pyx_t_3) {
13495       __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_arg, 0);
13496       __pyx_v_memslice = __pyx_t_8;
13497       __pyx_t_3 = (__pyx_v_memslice.memview != 0);
13498       if (__pyx_t_3) {
13499         __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1);
13500         if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(1, 472, __pyx_L1_error)
13501         goto __pyx_L10_break;
13502       }
13503       /*else*/ {
13504         PyErr_Clear();
13505       }
13506     }
13507     if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(1, 472, __pyx_L1_error)
13508     goto __pyx_L10_break;
13509   }
13510   __pyx_L10_break:;
13511   __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13512   __Pyx_GOTREF(__pyx_t_6);
13513   __pyx_v_candidates = ((PyObject*)__pyx_t_6);
13514   __pyx_t_6 = 0;
13515   __pyx_t_5 = 0;
13516   if (unlikely(((PyObject *)__pyx_v_signatures) == Py_None)) {
13517     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
13518     __PYX_ERR(1, 472, __pyx_L1_error)
13519   }
13520   __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 472, __pyx_L1_error)
13521   __Pyx_GOTREF(__pyx_t_1);
13522   __Pyx_XDECREF(__pyx_t_6);
13523   __pyx_t_6 = __pyx_t_1;
13524   __pyx_t_1 = 0;
13525   while (1) {
13526     __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
13527     if (unlikely(__pyx_t_11 == 0)) break;
13528     if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(1, 472, __pyx_L1_error)
13529     __Pyx_GOTREF(__pyx_t_1);
13530     __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
13531     __pyx_t_1 = 0;
13532     __pyx_v_match_found = 0;
13533     __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 472, __pyx_L1_error)
13534     __Pyx_GOTREF(__pyx_t_13);
13535     __pyx_t_14 = NULL;
13536     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
13537       __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
13538       if (likely(__pyx_t_14)) {
13539         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
13540         __Pyx_INCREF(__pyx_t_14);
13541         __Pyx_INCREF(function);
13542         __Pyx_DECREF_SET(__pyx_t_13, function);
13543       }
13544     }
13545     __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
13546     __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
13547     if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 472, __pyx_L1_error)
13548     __Pyx_GOTREF(__pyx_t_12);
13549     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
13550     __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 472, __pyx_L1_error)
13551     __Pyx_GOTREF(__pyx_t_13);
13552     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
13553     __pyx_t_12 = NULL;
13554     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
13555       __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
13556       if (likely(__pyx_t_12)) {
13557         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
13558         __Pyx_INCREF(__pyx_t_12);
13559         __Pyx_INCREF(function);
13560         __Pyx_DECREF_SET(__pyx_t_13, function);
13561       }
13562     }
13563     __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__3) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__3);
13564     __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
13565     if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 472, __pyx_L1_error)
13566     __Pyx_GOTREF(__pyx_t_1);
13567     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
13568     __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
13569     __pyx_t_1 = 0;
13570     __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(1, 472, __pyx_L1_error)
13571     __pyx_t_16 = __pyx_t_15;
13572     for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
13573       __pyx_v_i = __pyx_t_17;
13574       __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
13575       __Pyx_INCREF(__pyx_t_1);
13576       __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
13577       __pyx_t_1 = 0;
13578       __pyx_t_3 = (__pyx_v_dst_type != Py_None);
13579       __pyx_t_2 = (__pyx_t_3 != 0);
13580       if (__pyx_t_2) {
13581         __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 472, __pyx_L1_error)
13582         __Pyx_GOTREF(__pyx_t_1);
13583         __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 472, __pyx_L1_error)
13584         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
13585         __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 472, __pyx_L1_error)
13586         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
13587         if (__pyx_t_2) {
13588           __pyx_v_match_found = 1;
13589           goto __pyx_L34;
13590         }
13591         /*else*/ {
13592           __pyx_v_match_found = 0;
13593           goto __pyx_L32_break;
13594         }
13595         __pyx_L34:;
13596       }
13597     }
13598     __pyx_L32_break:;
13599     __pyx_t_2 = (__pyx_v_match_found != 0);
13600     if (__pyx_t_2) {
13601       __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(1, 472, __pyx_L1_error)
13602     }
13603   }
13604   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
13605   __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
13606   __pyx_t_3 = ((!__pyx_t_2) != 0);
13607   if (__pyx_t_3) {
13608     __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13609     __Pyx_GOTREF(__pyx_t_6);
13610     __Pyx_Raise(__pyx_t_6, 0, 0, 0);
13611     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
13612     __PYX_ERR(1, 472, __pyx_L1_error)
13613   }
13614   __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(1, 472, __pyx_L1_error)
13615   __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
13616   if (__pyx_t_3) {
13617     __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13618     __Pyx_GOTREF(__pyx_t_6);
13619     __Pyx_Raise(__pyx_t_6, 0, 0, 0);
13620     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
13621     __PYX_ERR(1, 472, __pyx_L1_error)
13622   }
13623   /*else*/ {
13624     __Pyx_XDECREF(__pyx_r);
13625     if (unlikely(((PyObject *)__pyx_v_signatures) == Py_None)) {
13626       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
13627       __PYX_ERR(1, 472, __pyx_L1_error)
13628     }
13629     __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 472, __pyx_L1_error)
13630     __Pyx_GOTREF(__pyx_t_6);
13631     __pyx_r = __pyx_t_6;
13632     __pyx_t_6 = 0;
13633     goto __pyx_L0;
13634   }
13635 
13636   /* function exit code */
13637   __pyx_L1_error:;
13638   __Pyx_XDECREF(__pyx_t_1);
13639   __Pyx_XDECREF(__pyx_t_6);
13640   __Pyx_XDECREF(__pyx_t_12);
13641   __Pyx_XDECREF(__pyx_t_13);
13642   __Pyx_XDECREF(__pyx_t_14);
13643   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
13644   __pyx_r = NULL;
13645   __pyx_L0:;
13646   __Pyx_XDECREF(__pyx_v_dest_sig);
13647   __Pyx_XDECREF(__pyx_v_ndarray);
13648   __Pyx_XDECREF(__pyx_v_arg);
13649   __Pyx_XDECREF(__pyx_v_dtype);
13650   __Pyx_XDECREF(__pyx_v_arg_base);
13651   __Pyx_XDECREF(__pyx_v_candidates);
13652   __Pyx_XDECREF(__pyx_v_sig);
13653   __Pyx_XDECREF(__pyx_v_src_sig);
13654   __Pyx_XDECREF(__pyx_v_dst_type);
13655   __Pyx_XDECREF(__pyx_v_kwargs);
13656   __Pyx_XGIVEREF(__pyx_r);
13657   __Pyx_RefNannyFinishContext();
13658   return __pyx_r;
13659 }
13660 
13661 /* Python wrapper */
13662 static PyObject *__pyx_fuse_0__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_35count_points(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
13663 static PyMethodDef __pyx_fuse_0__pyx_mdef_2yt_8geometry_18selection_routines_14SelectorObject_35count_points = {"__pyx_fuse_0count_points", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_35count_points, METH_VARARGS|METH_KEYWORDS, 0};
13664 static PyObject *__pyx_fuse_0__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_35count_points(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
13665   PyArrayObject *__pyx_v_x = 0;
13666   PyArrayObject *__pyx_v_y = 0;
13667   PyArrayObject *__pyx_v_z = 0;
13668   PyObject *__pyx_v_radii = 0;
13669   PyObject *__pyx_r = 0;
13670   __Pyx_RefNannyDeclarations
13671   __Pyx_RefNannySetupContext("count_points (wrapper)", 0);
13672   {
13673     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,&__pyx_n_s_z,&__pyx_n_s_radii,0};
13674     PyObject* values[4] = {0,0,0,0};
13675     if (unlikely(__pyx_kwds)) {
13676       Py_ssize_t kw_args;
13677       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
13678       switch (pos_args) {
13679         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
13680         CYTHON_FALLTHROUGH;
13681         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
13682         CYTHON_FALLTHROUGH;
13683         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
13684         CYTHON_FALLTHROUGH;
13685         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
13686         CYTHON_FALLTHROUGH;
13687         case  0: break;
13688         default: goto __pyx_L5_argtuple_error;
13689       }
13690       kw_args = PyDict_Size(__pyx_kwds);
13691       switch (pos_args) {
13692         case  0:
13693         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
13694         else goto __pyx_L5_argtuple_error;
13695         CYTHON_FALLTHROUGH;
13696         case  1:
13697         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
13698         else {
13699           __Pyx_RaiseArgtupleInvalid("count_points", 1, 4, 4, 1); __PYX_ERR(1, 472, __pyx_L3_error)
13700         }
13701         CYTHON_FALLTHROUGH;
13702         case  2:
13703         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_z)) != 0)) kw_args--;
13704         else {
13705           __Pyx_RaiseArgtupleInvalid("count_points", 1, 4, 4, 2); __PYX_ERR(1, 472, __pyx_L3_error)
13706         }
13707         CYTHON_FALLTHROUGH;
13708         case  3:
13709         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_radii)) != 0)) kw_args--;
13710         else {
13711           __Pyx_RaiseArgtupleInvalid("count_points", 1, 4, 4, 3); __PYX_ERR(1, 472, __pyx_L3_error)
13712         }
13713       }
13714       if (unlikely(kw_args > 0)) {
13715         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "count_points") < 0)) __PYX_ERR(1, 472, __pyx_L3_error)
13716       }
13717     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
13718       goto __pyx_L5_argtuple_error;
13719     } else {
13720       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
13721       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
13722       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
13723       values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
13724     }
13725     __pyx_v_x = ((PyArrayObject *)values[0]);
13726     __pyx_v_y = ((PyArrayObject *)values[1]);
13727     __pyx_v_z = ((PyArrayObject *)values[2]);
13728     __pyx_v_radii = values[3];
13729   }
13730   goto __pyx_L4_argument_unpacking_done;
13731   __pyx_L5_argtuple_error:;
13732   __Pyx_RaiseArgtupleInvalid("count_points", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 472, __pyx_L3_error)
13733   __pyx_L3_error:;
13734   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.count_points", __pyx_clineno, __pyx_lineno, __pyx_filename);
13735   __Pyx_RefNannyFinishContext();
13736   return NULL;
13737   __pyx_L4_argument_unpacking_done:;
13738   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(1, 472, __pyx_L1_error)
13739   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(1, 473, __pyx_L1_error)
13740   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_z), __pyx_ptype_5numpy_ndarray, 1, "z", 0))) __PYX_ERR(1, 474, __pyx_L1_error)
13741   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_34count_points(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y, __pyx_v_z, __pyx_v_radii);
13742 
13743   /* function exit code */
13744   goto __pyx_L0;
13745   __pyx_L1_error:;
13746   __pyx_r = NULL;
13747   __pyx_L0:;
13748   __Pyx_RefNannyFinishContext();
13749   return __pyx_r;
13750 }
13751 
13752 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_34count_points(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyArrayObject *__pyx_v_x, PyArrayObject *__pyx_v_y, PyArrayObject *__pyx_v_z, PyObject *__pyx_v_radii) {
13753   int __pyx_v_count;
13754   int __pyx_v_i;
13755   __pyx_t_5numpy_float64_t __pyx_v_pos[3];
13756   __pyx_t_5numpy_float64_t __pyx_v_radius;
13757   __Pyx_memviewslice __pyx_v__radii = { 0, 0, { 0 }, { 0 }, { 0 } };
13758   __Pyx_LocalBuf_ND __pyx_pybuffernd_x;
13759   __Pyx_Buffer __pyx_pybuffer_x;
13760   __Pyx_LocalBuf_ND __pyx_pybuffernd_y;
13761   __Pyx_Buffer __pyx_pybuffer_y;
13762   __Pyx_LocalBuf_ND __pyx_pybuffernd_z;
13763   __Pyx_Buffer __pyx_pybuffer_z;
13764   PyObject *__pyx_r = NULL;
13765   __Pyx_RefNannyDeclarations
13766   int __pyx_t_1;
13767   int __pyx_t_2;
13768   PyObject *__pyx_t_3 = NULL;
13769   PyObject *__pyx_t_4 = NULL;
13770   PyObject *__pyx_t_5 = NULL;
13771   PyObject *__pyx_t_6 = NULL;
13772   PyObject *__pyx_t_7 = NULL;
13773   PyObject *__pyx_t_8 = NULL;
13774   __Pyx_memviewslice __pyx_t_9 = { 0, 0, { 0 }, { 0 }, { 0 } };
13775   npy_intp __pyx_t_10;
13776   npy_intp __pyx_t_11;
13777   int __pyx_t_12;
13778   Py_ssize_t __pyx_t_13;
13779   Py_ssize_t __pyx_t_14;
13780   Py_ssize_t __pyx_t_15;
13781   Py_ssize_t __pyx_t_16;
13782   Py_ssize_t __pyx_t_17;
13783   __Pyx_RefNannySetupContext("__pyx_fuse_0count_points", 0);
13784   __pyx_pybuffer_x.pybuffer.buf = NULL;
13785   __pyx_pybuffer_x.refcount = 0;
13786   __pyx_pybuffernd_x.data = NULL;
13787   __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x;
13788   __pyx_pybuffer_y.pybuffer.buf = NULL;
13789   __pyx_pybuffer_y.refcount = 0;
13790   __pyx_pybuffernd_y.data = NULL;
13791   __pyx_pybuffernd_y.rcbuffer = &__pyx_pybuffer_y;
13792   __pyx_pybuffer_z.pybuffer.buf = NULL;
13793   __pyx_pybuffer_z.refcount = 0;
13794   __pyx_pybuffernd_z.data = NULL;
13795   __pyx_pybuffernd_z.rcbuffer = &__pyx_pybuffer_z;
13796   {
13797     __Pyx_BufFmt_StackElem __pyx_stack[1];
13798     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(1, 472, __pyx_L1_error)
13799   }
13800   __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0];
13801   {
13802     __Pyx_BufFmt_StackElem __pyx_stack[1];
13803     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(1, 472, __pyx_L1_error)
13804   }
13805   __pyx_pybuffernd_y.diminfo[0].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y.diminfo[0].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[0];
13806   {
13807     __Pyx_BufFmt_StackElem __pyx_stack[1];
13808     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_z.rcbuffer->pybuffer, (PyObject*)__pyx_v_z, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(1, 472, __pyx_L1_error)
13809   }
13810   __pyx_pybuffernd_z.diminfo[0].strides = __pyx_pybuffernd_z.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_z.diminfo[0].shape = __pyx_pybuffernd_z.rcbuffer->pybuffer.shape[0];
13811 
13812   /* "yt/geometry/_selection_routines/selector_object.pxi":476
13813  *                            np.ndarray[floating, ndim=1] z,
13814  *                            radii):
13815  *         cdef int count = 0             # <<<<<<<<<<<<<<
13816  *         cdef int i
13817  *         cdef np.float64_t pos[3]
13818  */
13819   __pyx_v_count = 0;
13820 
13821   /* "yt/geometry/_selection_routines/selector_object.pxi":481
13822  *         cdef np.float64_t radius
13823  *         cdef np.float64_t[:] _radii
13824  *         if radii is not None:             # <<<<<<<<<<<<<<
13825  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))
13826  *         else:
13827  */
13828   __pyx_t_1 = (__pyx_v_radii != Py_None);
13829   __pyx_t_2 = (__pyx_t_1 != 0);
13830   if (__pyx_t_2) {
13831 
13832     /* "yt/geometry/_selection_routines/selector_object.pxi":482
13833  *         cdef np.float64_t[:] _radii
13834  *         if radii is not None:
13835  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))             # <<<<<<<<<<<<<<
13836  *         else:
13837  *             _radii = np.array([0.0], dtype='float64')
13838  */
13839     __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 482, __pyx_L1_error)
13840     __Pyx_GOTREF(__pyx_t_4);
13841     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_atleast_1d); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 482, __pyx_L1_error)
13842     __Pyx_GOTREF(__pyx_t_5);
13843     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
13844     __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 482, __pyx_L1_error)
13845     __Pyx_GOTREF(__pyx_t_4);
13846     __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 482, __pyx_L1_error)
13847     __Pyx_GOTREF(__pyx_t_6);
13848     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
13849     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 482, __pyx_L1_error)
13850     __Pyx_GOTREF(__pyx_t_4);
13851     __Pyx_INCREF(__pyx_v_radii);
13852     __Pyx_GIVEREF(__pyx_v_radii);
13853     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_radii);
13854     __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 482, __pyx_L1_error)
13855     __Pyx_GOTREF(__pyx_t_7);
13856     if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(1, 482, __pyx_L1_error)
13857     __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 482, __pyx_L1_error)
13858     __Pyx_GOTREF(__pyx_t_8);
13859     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
13860     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
13861     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
13862     __pyx_t_7 = NULL;
13863     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
13864       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
13865       if (likely(__pyx_t_7)) {
13866         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
13867         __Pyx_INCREF(__pyx_t_7);
13868         __Pyx_INCREF(function);
13869         __Pyx_DECREF_SET(__pyx_t_5, function);
13870       }
13871     }
13872     __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8);
13873     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
13874     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
13875     if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 482, __pyx_L1_error)
13876     __Pyx_GOTREF(__pyx_t_3);
13877     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
13878     __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 482, __pyx_L1_error)
13879     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
13880     __pyx_v__radii = __pyx_t_9;
13881     __pyx_t_9.memview = NULL;
13882     __pyx_t_9.data = NULL;
13883 
13884     /* "yt/geometry/_selection_routines/selector_object.pxi":481
13885  *         cdef np.float64_t radius
13886  *         cdef np.float64_t[:] _radii
13887  *         if radii is not None:             # <<<<<<<<<<<<<<
13888  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))
13889  *         else:
13890  */
13891     goto __pyx_L3;
13892   }
13893 
13894   /* "yt/geometry/_selection_routines/selector_object.pxi":484
13895  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))
13896  *         else:
13897  *             _radii = np.array([0.0], dtype='float64')             # <<<<<<<<<<<<<<
13898  *         _ensure_code(x)
13899  *         _ensure_code(y)
13900  */
13901   /*else*/ {
13902     __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 484, __pyx_L1_error)
13903     __Pyx_GOTREF(__pyx_t_3);
13904     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 484, __pyx_L1_error)
13905     __Pyx_GOTREF(__pyx_t_5);
13906     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
13907     __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 484, __pyx_L1_error)
13908     __Pyx_GOTREF(__pyx_t_3);
13909     __Pyx_INCREF(__pyx_float_0_0);
13910     __Pyx_GIVEREF(__pyx_float_0_0);
13911     PyList_SET_ITEM(__pyx_t_3, 0, __pyx_float_0_0);
13912     __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 484, __pyx_L1_error)
13913     __Pyx_GOTREF(__pyx_t_8);
13914     __Pyx_GIVEREF(__pyx_t_3);
13915     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3);
13916     __pyx_t_3 = 0;
13917     __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 484, __pyx_L1_error)
13918     __Pyx_GOTREF(__pyx_t_3);
13919     if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(1, 484, __pyx_L1_error)
13920     __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 484, __pyx_L1_error)
13921     __Pyx_GOTREF(__pyx_t_7);
13922     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
13923     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
13924     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
13925     __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 484, __pyx_L1_error)
13926     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
13927     __pyx_v__radii = __pyx_t_9;
13928     __pyx_t_9.memview = NULL;
13929     __pyx_t_9.data = NULL;
13930   }
13931   __pyx_L3:;
13932 
13933   /* "yt/geometry/_selection_routines/selector_object.pxi":485
13934  *         else:
13935  *             _radii = np.array([0.0], dtype='float64')
13936  *         _ensure_code(x)             # <<<<<<<<<<<<<<
13937  *         _ensure_code(y)
13938  *         _ensure_code(z)
13939  */
13940   __pyx_t_7 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_x)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 485, __pyx_L1_error)
13941   __Pyx_GOTREF(__pyx_t_7);
13942   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
13943 
13944   /* "yt/geometry/_selection_routines/selector_object.pxi":486
13945  *             _radii = np.array([0.0], dtype='float64')
13946  *         _ensure_code(x)
13947  *         _ensure_code(y)             # <<<<<<<<<<<<<<
13948  *         _ensure_code(z)
13949  *         with nogil:
13950  */
13951   __pyx_t_7 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_y)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 486, __pyx_L1_error)
13952   __Pyx_GOTREF(__pyx_t_7);
13953   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
13954 
13955   /* "yt/geometry/_selection_routines/selector_object.pxi":487
13956  *         _ensure_code(x)
13957  *         _ensure_code(y)
13958  *         _ensure_code(z)             # <<<<<<<<<<<<<<
13959  *         with nogil:
13960  *             for i in range(x.shape[0]):
13961  */
13962   __pyx_t_7 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_z)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 487, __pyx_L1_error)
13963   __Pyx_GOTREF(__pyx_t_7);
13964   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
13965 
13966   /* "yt/geometry/_selection_routines/selector_object.pxi":488
13967  *         _ensure_code(y)
13968  *         _ensure_code(z)
13969  *         with nogil:             # <<<<<<<<<<<<<<
13970  *             for i in range(x.shape[0]):
13971  *                 pos[0] = x[i]
13972  */
13973   {
13974       #ifdef WITH_THREAD
13975       PyThreadState *_save;
13976       Py_UNBLOCK_THREADS
13977       __Pyx_FastGIL_Remember();
13978       #endif
13979       /*try:*/ {
13980 
13981         /* "yt/geometry/_selection_routines/selector_object.pxi":489
13982  *         _ensure_code(z)
13983  *         with nogil:
13984  *             for i in range(x.shape[0]):             # <<<<<<<<<<<<<<
13985  *                 pos[0] = x[i]
13986  *                 pos[1] = y[i]
13987  */
13988         __pyx_t_10 = (__pyx_v_x->dimensions[0]);
13989         __pyx_t_11 = __pyx_t_10;
13990         for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
13991           __pyx_v_i = __pyx_t_12;
13992 
13993           /* "yt/geometry/_selection_routines/selector_object.pxi":490
13994  *         with nogil:
13995  *             for i in range(x.shape[0]):
13996  *                 pos[0] = x[i]             # <<<<<<<<<<<<<<
13997  *                 pos[1] = y[i]
13998  *                 pos[2] = z[i]
13999  */
14000           __pyx_t_13 = __pyx_v_i;
14001           (__pyx_v_pos[0]) = (*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides));
14002 
14003           /* "yt/geometry/_selection_routines/selector_object.pxi":491
14004  *             for i in range(x.shape[0]):
14005  *                 pos[0] = x[i]
14006  *                 pos[1] = y[i]             # <<<<<<<<<<<<<<
14007  *                 pos[2] = z[i]
14008  *                 if _radii.shape[0] == 1:
14009  */
14010           __pyx_t_14 = __pyx_v_i;
14011           (__pyx_v_pos[1]) = (*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_y.diminfo[0].strides));
14012 
14013           /* "yt/geometry/_selection_routines/selector_object.pxi":492
14014  *                 pos[0] = x[i]
14015  *                 pos[1] = y[i]
14016  *                 pos[2] = z[i]             # <<<<<<<<<<<<<<
14017  *                 if _radii.shape[0] == 1:
14018  *                     radius = _radii[0]
14019  */
14020           __pyx_t_15 = __pyx_v_i;
14021           (__pyx_v_pos[2]) = (*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_z.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_z.diminfo[0].strides));
14022 
14023           /* "yt/geometry/_selection_routines/selector_object.pxi":493
14024  *                 pos[1] = y[i]
14025  *                 pos[2] = z[i]
14026  *                 if _radii.shape[0] == 1:             # <<<<<<<<<<<<<<
14027  *                     radius = _radii[0]
14028  *                 else:
14029  */
14030           __pyx_t_2 = (((__pyx_v__radii.shape[0]) == 1) != 0);
14031           if (__pyx_t_2) {
14032 
14033             /* "yt/geometry/_selection_routines/selector_object.pxi":494
14034  *                 pos[2] = z[i]
14035  *                 if _radii.shape[0] == 1:
14036  *                     radius = _radii[0]             # <<<<<<<<<<<<<<
14037  *                 else:
14038  *                     radius = _radii[i]
14039  */
14040             __pyx_t_16 = 0;
14041             __pyx_v_radius = (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v__radii.data + __pyx_t_16 * __pyx_v__radii.strides[0]) )));
14042 
14043             /* "yt/geometry/_selection_routines/selector_object.pxi":493
14044  *                 pos[1] = y[i]
14045  *                 pos[2] = z[i]
14046  *                 if _radii.shape[0] == 1:             # <<<<<<<<<<<<<<
14047  *                     radius = _radii[0]
14048  *                 else:
14049  */
14050             goto __pyx_L9;
14051           }
14052 
14053           /* "yt/geometry/_selection_routines/selector_object.pxi":496
14054  *                     radius = _radii[0]
14055  *                 else:
14056  *                     radius = _radii[i]             # <<<<<<<<<<<<<<
14057  *                 if radius == 0:
14058  *                     count += self.select_point(pos)
14059  */
14060           /*else*/ {
14061             __pyx_t_17 = __pyx_v_i;
14062             __pyx_v_radius = (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v__radii.data + __pyx_t_17 * __pyx_v__radii.strides[0]) )));
14063           }
14064           __pyx_L9:;
14065 
14066           /* "yt/geometry/_selection_routines/selector_object.pxi":497
14067  *                 else:
14068  *                     radius = _radii[i]
14069  *                 if radius == 0:             # <<<<<<<<<<<<<<
14070  *                     count += self.select_point(pos)
14071  *                 else:
14072  */
14073           __pyx_t_2 = ((__pyx_v_radius == 0.0) != 0);
14074           if (__pyx_t_2) {
14075 
14076             /* "yt/geometry/_selection_routines/selector_object.pxi":498
14077  *                     radius = _radii[i]
14078  *                 if radius == 0:
14079  *                     count += self.select_point(pos)             # <<<<<<<<<<<<<<
14080  *                 else:
14081  *                     count += self.select_sphere(pos, radius)
14082  */
14083             __pyx_v_count = (__pyx_v_count + ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_point(__pyx_v_self, __pyx_v_pos));
14084 
14085             /* "yt/geometry/_selection_routines/selector_object.pxi":497
14086  *                 else:
14087  *                     radius = _radii[i]
14088  *                 if radius == 0:             # <<<<<<<<<<<<<<
14089  *                     count += self.select_point(pos)
14090  *                 else:
14091  */
14092             goto __pyx_L10;
14093           }
14094 
14095           /* "yt/geometry/_selection_routines/selector_object.pxi":500
14096  *                     count += self.select_point(pos)
14097  *                 else:
14098  *                     count += self.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
14099  *         return count
14100  *
14101  */
14102           /*else*/ {
14103             __pyx_v_count = (__pyx_v_count + ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_sphere(__pyx_v_self, __pyx_v_pos, __pyx_v_radius));
14104           }
14105           __pyx_L10:;
14106         }
14107       }
14108 
14109       /* "yt/geometry/_selection_routines/selector_object.pxi":488
14110  *         _ensure_code(y)
14111  *         _ensure_code(z)
14112  *         with nogil:             # <<<<<<<<<<<<<<
14113  *             for i in range(x.shape[0]):
14114  *                 pos[0] = x[i]
14115  */
14116       /*finally:*/ {
14117         /*normal exit:*/{
14118           #ifdef WITH_THREAD
14119           __Pyx_FastGIL_Forget();
14120           Py_BLOCK_THREADS
14121           #endif
14122           goto __pyx_L6;
14123         }
14124         __pyx_L6:;
14125       }
14126   }
14127 
14128   /* "yt/geometry/_selection_routines/selector_object.pxi":501
14129  *                 else:
14130  *                     count += self.select_sphere(pos, radius)
14131  *         return count             # <<<<<<<<<<<<<<
14132  *
14133  *     @cython.boundscheck(False)
14134  */
14135   __Pyx_XDECREF(__pyx_r);
14136   __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_count); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 501, __pyx_L1_error)
14137   __Pyx_GOTREF(__pyx_t_7);
14138   __pyx_r = __pyx_t_7;
14139   __pyx_t_7 = 0;
14140   goto __pyx_L0;
14141 
14142   /* "yt/geometry/_selection_routines/selector_object.pxi":472
14143  *     @cython.wraparound(False)
14144  *     @cython.cdivision(True)
14145  *     def count_points(self, np.ndarray[floating, ndim=1] x,             # <<<<<<<<<<<<<<
14146  *                            np.ndarray[floating, ndim=1] y,
14147  *                            np.ndarray[floating, ndim=1] z,
14148  */
14149 
14150   /* function exit code */
14151   __pyx_L1_error:;
14152   __Pyx_XDECREF(__pyx_t_3);
14153   __Pyx_XDECREF(__pyx_t_4);
14154   __Pyx_XDECREF(__pyx_t_5);
14155   __Pyx_XDECREF(__pyx_t_6);
14156   __Pyx_XDECREF(__pyx_t_7);
14157   __Pyx_XDECREF(__pyx_t_8);
14158   __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
14159   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
14160     __Pyx_PyThreadState_declare
14161     __Pyx_PyThreadState_assign
14162     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
14163     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x.rcbuffer->pybuffer);
14164     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y.rcbuffer->pybuffer);
14165     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_z.rcbuffer->pybuffer);
14166   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
14167   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.count_points", __pyx_clineno, __pyx_lineno, __pyx_filename);
14168   __pyx_r = NULL;
14169   goto __pyx_L2;
14170   __pyx_L0:;
14171   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x.rcbuffer->pybuffer);
14172   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y.rcbuffer->pybuffer);
14173   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_z.rcbuffer->pybuffer);
14174   __pyx_L2:;
14175   __PYX_XDEC_MEMVIEW(&__pyx_v__radii, 1);
14176   __Pyx_XGIVEREF(__pyx_r);
14177   __Pyx_RefNannyFinishContext();
14178   return __pyx_r;
14179 }
14180 
14181 /* Python wrapper */
14182 static PyObject *__pyx_fuse_1__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_37count_points(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
14183 static PyMethodDef __pyx_fuse_1__pyx_mdef_2yt_8geometry_18selection_routines_14SelectorObject_37count_points = {"__pyx_fuse_1count_points", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_37count_points, METH_VARARGS|METH_KEYWORDS, 0};
14184 static PyObject *__pyx_fuse_1__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_37count_points(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
14185   PyArrayObject *__pyx_v_x = 0;
14186   PyArrayObject *__pyx_v_y = 0;
14187   PyArrayObject *__pyx_v_z = 0;
14188   PyObject *__pyx_v_radii = 0;
14189   PyObject *__pyx_r = 0;
14190   __Pyx_RefNannyDeclarations
14191   __Pyx_RefNannySetupContext("count_points (wrapper)", 0);
14192   {
14193     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,&__pyx_n_s_z,&__pyx_n_s_radii,0};
14194     PyObject* values[4] = {0,0,0,0};
14195     if (unlikely(__pyx_kwds)) {
14196       Py_ssize_t kw_args;
14197       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
14198       switch (pos_args) {
14199         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
14200         CYTHON_FALLTHROUGH;
14201         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
14202         CYTHON_FALLTHROUGH;
14203         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
14204         CYTHON_FALLTHROUGH;
14205         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
14206         CYTHON_FALLTHROUGH;
14207         case  0: break;
14208         default: goto __pyx_L5_argtuple_error;
14209       }
14210       kw_args = PyDict_Size(__pyx_kwds);
14211       switch (pos_args) {
14212         case  0:
14213         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
14214         else goto __pyx_L5_argtuple_error;
14215         CYTHON_FALLTHROUGH;
14216         case  1:
14217         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
14218         else {
14219           __Pyx_RaiseArgtupleInvalid("count_points", 1, 4, 4, 1); __PYX_ERR(1, 472, __pyx_L3_error)
14220         }
14221         CYTHON_FALLTHROUGH;
14222         case  2:
14223         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_z)) != 0)) kw_args--;
14224         else {
14225           __Pyx_RaiseArgtupleInvalid("count_points", 1, 4, 4, 2); __PYX_ERR(1, 472, __pyx_L3_error)
14226         }
14227         CYTHON_FALLTHROUGH;
14228         case  3:
14229         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_radii)) != 0)) kw_args--;
14230         else {
14231           __Pyx_RaiseArgtupleInvalid("count_points", 1, 4, 4, 3); __PYX_ERR(1, 472, __pyx_L3_error)
14232         }
14233       }
14234       if (unlikely(kw_args > 0)) {
14235         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "count_points") < 0)) __PYX_ERR(1, 472, __pyx_L3_error)
14236       }
14237     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
14238       goto __pyx_L5_argtuple_error;
14239     } else {
14240       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
14241       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
14242       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
14243       values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
14244     }
14245     __pyx_v_x = ((PyArrayObject *)values[0]);
14246     __pyx_v_y = ((PyArrayObject *)values[1]);
14247     __pyx_v_z = ((PyArrayObject *)values[2]);
14248     __pyx_v_radii = values[3];
14249   }
14250   goto __pyx_L4_argument_unpacking_done;
14251   __pyx_L5_argtuple_error:;
14252   __Pyx_RaiseArgtupleInvalid("count_points", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 472, __pyx_L3_error)
14253   __pyx_L3_error:;
14254   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.count_points", __pyx_clineno, __pyx_lineno, __pyx_filename);
14255   __Pyx_RefNannyFinishContext();
14256   return NULL;
14257   __pyx_L4_argument_unpacking_done:;
14258   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(1, 472, __pyx_L1_error)
14259   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(1, 473, __pyx_L1_error)
14260   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_z), __pyx_ptype_5numpy_ndarray, 1, "z", 0))) __PYX_ERR(1, 474, __pyx_L1_error)
14261   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_36count_points(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y, __pyx_v_z, __pyx_v_radii);
14262 
14263   /* function exit code */
14264   goto __pyx_L0;
14265   __pyx_L1_error:;
14266   __pyx_r = NULL;
14267   __pyx_L0:;
14268   __Pyx_RefNannyFinishContext();
14269   return __pyx_r;
14270 }
14271 
14272 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_36count_points(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyArrayObject *__pyx_v_x, PyArrayObject *__pyx_v_y, PyArrayObject *__pyx_v_z, PyObject *__pyx_v_radii) {
14273   int __pyx_v_count;
14274   int __pyx_v_i;
14275   __pyx_t_5numpy_float64_t __pyx_v_pos[3];
14276   __pyx_t_5numpy_float64_t __pyx_v_radius;
14277   __Pyx_memviewslice __pyx_v__radii = { 0, 0, { 0 }, { 0 }, { 0 } };
14278   __Pyx_LocalBuf_ND __pyx_pybuffernd_x;
14279   __Pyx_Buffer __pyx_pybuffer_x;
14280   __Pyx_LocalBuf_ND __pyx_pybuffernd_y;
14281   __Pyx_Buffer __pyx_pybuffer_y;
14282   __Pyx_LocalBuf_ND __pyx_pybuffernd_z;
14283   __Pyx_Buffer __pyx_pybuffer_z;
14284   PyObject *__pyx_r = NULL;
14285   __Pyx_RefNannyDeclarations
14286   int __pyx_t_1;
14287   int __pyx_t_2;
14288   PyObject *__pyx_t_3 = NULL;
14289   PyObject *__pyx_t_4 = NULL;
14290   PyObject *__pyx_t_5 = NULL;
14291   PyObject *__pyx_t_6 = NULL;
14292   PyObject *__pyx_t_7 = NULL;
14293   PyObject *__pyx_t_8 = NULL;
14294   __Pyx_memviewslice __pyx_t_9 = { 0, 0, { 0 }, { 0 }, { 0 } };
14295   npy_intp __pyx_t_10;
14296   npy_intp __pyx_t_11;
14297   int __pyx_t_12;
14298   Py_ssize_t __pyx_t_13;
14299   Py_ssize_t __pyx_t_14;
14300   Py_ssize_t __pyx_t_15;
14301   Py_ssize_t __pyx_t_16;
14302   Py_ssize_t __pyx_t_17;
14303   __Pyx_RefNannySetupContext("__pyx_fuse_1count_points", 0);
14304   __pyx_pybuffer_x.pybuffer.buf = NULL;
14305   __pyx_pybuffer_x.refcount = 0;
14306   __pyx_pybuffernd_x.data = NULL;
14307   __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x;
14308   __pyx_pybuffer_y.pybuffer.buf = NULL;
14309   __pyx_pybuffer_y.refcount = 0;
14310   __pyx_pybuffernd_y.data = NULL;
14311   __pyx_pybuffernd_y.rcbuffer = &__pyx_pybuffer_y;
14312   __pyx_pybuffer_z.pybuffer.buf = NULL;
14313   __pyx_pybuffer_z.refcount = 0;
14314   __pyx_pybuffernd_z.data = NULL;
14315   __pyx_pybuffernd_z.rcbuffer = &__pyx_pybuffer_z;
14316   {
14317     __Pyx_BufFmt_StackElem __pyx_stack[1];
14318     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(1, 472, __pyx_L1_error)
14319   }
14320   __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0];
14321   {
14322     __Pyx_BufFmt_StackElem __pyx_stack[1];
14323     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(1, 472, __pyx_L1_error)
14324   }
14325   __pyx_pybuffernd_y.diminfo[0].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y.diminfo[0].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[0];
14326   {
14327     __Pyx_BufFmt_StackElem __pyx_stack[1];
14328     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_z.rcbuffer->pybuffer, (PyObject*)__pyx_v_z, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(1, 472, __pyx_L1_error)
14329   }
14330   __pyx_pybuffernd_z.diminfo[0].strides = __pyx_pybuffernd_z.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_z.diminfo[0].shape = __pyx_pybuffernd_z.rcbuffer->pybuffer.shape[0];
14331 
14332   /* "yt/geometry/_selection_routines/selector_object.pxi":476
14333  *                            np.ndarray[floating, ndim=1] z,
14334  *                            radii):
14335  *         cdef int count = 0             # <<<<<<<<<<<<<<
14336  *         cdef int i
14337  *         cdef np.float64_t pos[3]
14338  */
14339   __pyx_v_count = 0;
14340 
14341   /* "yt/geometry/_selection_routines/selector_object.pxi":481
14342  *         cdef np.float64_t radius
14343  *         cdef np.float64_t[:] _radii
14344  *         if radii is not None:             # <<<<<<<<<<<<<<
14345  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))
14346  *         else:
14347  */
14348   __pyx_t_1 = (__pyx_v_radii != Py_None);
14349   __pyx_t_2 = (__pyx_t_1 != 0);
14350   if (__pyx_t_2) {
14351 
14352     /* "yt/geometry/_selection_routines/selector_object.pxi":482
14353  *         cdef np.float64_t[:] _radii
14354  *         if radii is not None:
14355  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))             # <<<<<<<<<<<<<<
14356  *         else:
14357  *             _radii = np.array([0.0], dtype='float64')
14358  */
14359     __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 482, __pyx_L1_error)
14360     __Pyx_GOTREF(__pyx_t_4);
14361     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_atleast_1d); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 482, __pyx_L1_error)
14362     __Pyx_GOTREF(__pyx_t_5);
14363     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
14364     __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 482, __pyx_L1_error)
14365     __Pyx_GOTREF(__pyx_t_4);
14366     __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 482, __pyx_L1_error)
14367     __Pyx_GOTREF(__pyx_t_6);
14368     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
14369     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 482, __pyx_L1_error)
14370     __Pyx_GOTREF(__pyx_t_4);
14371     __Pyx_INCREF(__pyx_v_radii);
14372     __Pyx_GIVEREF(__pyx_v_radii);
14373     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_radii);
14374     __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 482, __pyx_L1_error)
14375     __Pyx_GOTREF(__pyx_t_7);
14376     if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(1, 482, __pyx_L1_error)
14377     __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 482, __pyx_L1_error)
14378     __Pyx_GOTREF(__pyx_t_8);
14379     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
14380     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
14381     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
14382     __pyx_t_7 = NULL;
14383     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
14384       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
14385       if (likely(__pyx_t_7)) {
14386         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
14387         __Pyx_INCREF(__pyx_t_7);
14388         __Pyx_INCREF(function);
14389         __Pyx_DECREF_SET(__pyx_t_5, function);
14390       }
14391     }
14392     __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8);
14393     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
14394     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
14395     if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 482, __pyx_L1_error)
14396     __Pyx_GOTREF(__pyx_t_3);
14397     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
14398     __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 482, __pyx_L1_error)
14399     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
14400     __pyx_v__radii = __pyx_t_9;
14401     __pyx_t_9.memview = NULL;
14402     __pyx_t_9.data = NULL;
14403 
14404     /* "yt/geometry/_selection_routines/selector_object.pxi":481
14405  *         cdef np.float64_t radius
14406  *         cdef np.float64_t[:] _radii
14407  *         if radii is not None:             # <<<<<<<<<<<<<<
14408  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))
14409  *         else:
14410  */
14411     goto __pyx_L3;
14412   }
14413 
14414   /* "yt/geometry/_selection_routines/selector_object.pxi":484
14415  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))
14416  *         else:
14417  *             _radii = np.array([0.0], dtype='float64')             # <<<<<<<<<<<<<<
14418  *         _ensure_code(x)
14419  *         _ensure_code(y)
14420  */
14421   /*else*/ {
14422     __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 484, __pyx_L1_error)
14423     __Pyx_GOTREF(__pyx_t_3);
14424     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 484, __pyx_L1_error)
14425     __Pyx_GOTREF(__pyx_t_5);
14426     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
14427     __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 484, __pyx_L1_error)
14428     __Pyx_GOTREF(__pyx_t_3);
14429     __Pyx_INCREF(__pyx_float_0_0);
14430     __Pyx_GIVEREF(__pyx_float_0_0);
14431     PyList_SET_ITEM(__pyx_t_3, 0, __pyx_float_0_0);
14432     __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 484, __pyx_L1_error)
14433     __Pyx_GOTREF(__pyx_t_8);
14434     __Pyx_GIVEREF(__pyx_t_3);
14435     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3);
14436     __pyx_t_3 = 0;
14437     __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 484, __pyx_L1_error)
14438     __Pyx_GOTREF(__pyx_t_3);
14439     if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(1, 484, __pyx_L1_error)
14440     __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 484, __pyx_L1_error)
14441     __Pyx_GOTREF(__pyx_t_7);
14442     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
14443     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
14444     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
14445     __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 484, __pyx_L1_error)
14446     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
14447     __pyx_v__radii = __pyx_t_9;
14448     __pyx_t_9.memview = NULL;
14449     __pyx_t_9.data = NULL;
14450   }
14451   __pyx_L3:;
14452 
14453   /* "yt/geometry/_selection_routines/selector_object.pxi":485
14454  *         else:
14455  *             _radii = np.array([0.0], dtype='float64')
14456  *         _ensure_code(x)             # <<<<<<<<<<<<<<
14457  *         _ensure_code(y)
14458  *         _ensure_code(z)
14459  */
14460   __pyx_t_7 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_x)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 485, __pyx_L1_error)
14461   __Pyx_GOTREF(__pyx_t_7);
14462   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
14463 
14464   /* "yt/geometry/_selection_routines/selector_object.pxi":486
14465  *             _radii = np.array([0.0], dtype='float64')
14466  *         _ensure_code(x)
14467  *         _ensure_code(y)             # <<<<<<<<<<<<<<
14468  *         _ensure_code(z)
14469  *         with nogil:
14470  */
14471   __pyx_t_7 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_y)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 486, __pyx_L1_error)
14472   __Pyx_GOTREF(__pyx_t_7);
14473   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
14474 
14475   /* "yt/geometry/_selection_routines/selector_object.pxi":487
14476  *         _ensure_code(x)
14477  *         _ensure_code(y)
14478  *         _ensure_code(z)             # <<<<<<<<<<<<<<
14479  *         with nogil:
14480  *             for i in range(x.shape[0]):
14481  */
14482   __pyx_t_7 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_z)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 487, __pyx_L1_error)
14483   __Pyx_GOTREF(__pyx_t_7);
14484   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
14485 
14486   /* "yt/geometry/_selection_routines/selector_object.pxi":488
14487  *         _ensure_code(y)
14488  *         _ensure_code(z)
14489  *         with nogil:             # <<<<<<<<<<<<<<
14490  *             for i in range(x.shape[0]):
14491  *                 pos[0] = x[i]
14492  */
14493   {
14494       #ifdef WITH_THREAD
14495       PyThreadState *_save;
14496       Py_UNBLOCK_THREADS
14497       __Pyx_FastGIL_Remember();
14498       #endif
14499       /*try:*/ {
14500 
14501         /* "yt/geometry/_selection_routines/selector_object.pxi":489
14502  *         _ensure_code(z)
14503  *         with nogil:
14504  *             for i in range(x.shape[0]):             # <<<<<<<<<<<<<<
14505  *                 pos[0] = x[i]
14506  *                 pos[1] = y[i]
14507  */
14508         __pyx_t_10 = (__pyx_v_x->dimensions[0]);
14509         __pyx_t_11 = __pyx_t_10;
14510         for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
14511           __pyx_v_i = __pyx_t_12;
14512 
14513           /* "yt/geometry/_selection_routines/selector_object.pxi":490
14514  *         with nogil:
14515  *             for i in range(x.shape[0]):
14516  *                 pos[0] = x[i]             # <<<<<<<<<<<<<<
14517  *                 pos[1] = y[i]
14518  *                 pos[2] = z[i]
14519  */
14520           __pyx_t_13 = __pyx_v_i;
14521           (__pyx_v_pos[0]) = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_13, __pyx_pybuffernd_x.diminfo[0].strides));
14522 
14523           /* "yt/geometry/_selection_routines/selector_object.pxi":491
14524  *             for i in range(x.shape[0]):
14525  *                 pos[0] = x[i]
14526  *                 pos[1] = y[i]             # <<<<<<<<<<<<<<
14527  *                 pos[2] = z[i]
14528  *                 if _radii.shape[0] == 1:
14529  */
14530           __pyx_t_14 = __pyx_v_i;
14531           (__pyx_v_pos[1]) = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_14, __pyx_pybuffernd_y.diminfo[0].strides));
14532 
14533           /* "yt/geometry/_selection_routines/selector_object.pxi":492
14534  *                 pos[0] = x[i]
14535  *                 pos[1] = y[i]
14536  *                 pos[2] = z[i]             # <<<<<<<<<<<<<<
14537  *                 if _radii.shape[0] == 1:
14538  *                     radius = _radii[0]
14539  */
14540           __pyx_t_15 = __pyx_v_i;
14541           (__pyx_v_pos[2]) = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_z.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_z.diminfo[0].strides));
14542 
14543           /* "yt/geometry/_selection_routines/selector_object.pxi":493
14544  *                 pos[1] = y[i]
14545  *                 pos[2] = z[i]
14546  *                 if _radii.shape[0] == 1:             # <<<<<<<<<<<<<<
14547  *                     radius = _radii[0]
14548  *                 else:
14549  */
14550           __pyx_t_2 = (((__pyx_v__radii.shape[0]) == 1) != 0);
14551           if (__pyx_t_2) {
14552 
14553             /* "yt/geometry/_selection_routines/selector_object.pxi":494
14554  *                 pos[2] = z[i]
14555  *                 if _radii.shape[0] == 1:
14556  *                     radius = _radii[0]             # <<<<<<<<<<<<<<
14557  *                 else:
14558  *                     radius = _radii[i]
14559  */
14560             __pyx_t_16 = 0;
14561             __pyx_v_radius = (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v__radii.data + __pyx_t_16 * __pyx_v__radii.strides[0]) )));
14562 
14563             /* "yt/geometry/_selection_routines/selector_object.pxi":493
14564  *                 pos[1] = y[i]
14565  *                 pos[2] = z[i]
14566  *                 if _radii.shape[0] == 1:             # <<<<<<<<<<<<<<
14567  *                     radius = _radii[0]
14568  *                 else:
14569  */
14570             goto __pyx_L9;
14571           }
14572 
14573           /* "yt/geometry/_selection_routines/selector_object.pxi":496
14574  *                     radius = _radii[0]
14575  *                 else:
14576  *                     radius = _radii[i]             # <<<<<<<<<<<<<<
14577  *                 if radius == 0:
14578  *                     count += self.select_point(pos)
14579  */
14580           /*else*/ {
14581             __pyx_t_17 = __pyx_v_i;
14582             __pyx_v_radius = (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v__radii.data + __pyx_t_17 * __pyx_v__radii.strides[0]) )));
14583           }
14584           __pyx_L9:;
14585 
14586           /* "yt/geometry/_selection_routines/selector_object.pxi":497
14587  *                 else:
14588  *                     radius = _radii[i]
14589  *                 if radius == 0:             # <<<<<<<<<<<<<<
14590  *                     count += self.select_point(pos)
14591  *                 else:
14592  */
14593           __pyx_t_2 = ((__pyx_v_radius == 0.0) != 0);
14594           if (__pyx_t_2) {
14595 
14596             /* "yt/geometry/_selection_routines/selector_object.pxi":498
14597  *                     radius = _radii[i]
14598  *                 if radius == 0:
14599  *                     count += self.select_point(pos)             # <<<<<<<<<<<<<<
14600  *                 else:
14601  *                     count += self.select_sphere(pos, radius)
14602  */
14603             __pyx_v_count = (__pyx_v_count + ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_point(__pyx_v_self, __pyx_v_pos));
14604 
14605             /* "yt/geometry/_selection_routines/selector_object.pxi":497
14606  *                 else:
14607  *                     radius = _radii[i]
14608  *                 if radius == 0:             # <<<<<<<<<<<<<<
14609  *                     count += self.select_point(pos)
14610  *                 else:
14611  */
14612             goto __pyx_L10;
14613           }
14614 
14615           /* "yt/geometry/_selection_routines/selector_object.pxi":500
14616  *                     count += self.select_point(pos)
14617  *                 else:
14618  *                     count += self.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
14619  *         return count
14620  *
14621  */
14622           /*else*/ {
14623             __pyx_v_count = (__pyx_v_count + ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_sphere(__pyx_v_self, __pyx_v_pos, __pyx_v_radius));
14624           }
14625           __pyx_L10:;
14626         }
14627       }
14628 
14629       /* "yt/geometry/_selection_routines/selector_object.pxi":488
14630  *         _ensure_code(y)
14631  *         _ensure_code(z)
14632  *         with nogil:             # <<<<<<<<<<<<<<
14633  *             for i in range(x.shape[0]):
14634  *                 pos[0] = x[i]
14635  */
14636       /*finally:*/ {
14637         /*normal exit:*/{
14638           #ifdef WITH_THREAD
14639           __Pyx_FastGIL_Forget();
14640           Py_BLOCK_THREADS
14641           #endif
14642           goto __pyx_L6;
14643         }
14644         __pyx_L6:;
14645       }
14646   }
14647 
14648   /* "yt/geometry/_selection_routines/selector_object.pxi":501
14649  *                 else:
14650  *                     count += self.select_sphere(pos, radius)
14651  *         return count             # <<<<<<<<<<<<<<
14652  *
14653  *     @cython.boundscheck(False)
14654  */
14655   __Pyx_XDECREF(__pyx_r);
14656   __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_count); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 501, __pyx_L1_error)
14657   __Pyx_GOTREF(__pyx_t_7);
14658   __pyx_r = __pyx_t_7;
14659   __pyx_t_7 = 0;
14660   goto __pyx_L0;
14661 
14662   /* "yt/geometry/_selection_routines/selector_object.pxi":472
14663  *     @cython.wraparound(False)
14664  *     @cython.cdivision(True)
14665  *     def count_points(self, np.ndarray[floating, ndim=1] x,             # <<<<<<<<<<<<<<
14666  *                            np.ndarray[floating, ndim=1] y,
14667  *                            np.ndarray[floating, ndim=1] z,
14668  */
14669 
14670   /* function exit code */
14671   __pyx_L1_error:;
14672   __Pyx_XDECREF(__pyx_t_3);
14673   __Pyx_XDECREF(__pyx_t_4);
14674   __Pyx_XDECREF(__pyx_t_5);
14675   __Pyx_XDECREF(__pyx_t_6);
14676   __Pyx_XDECREF(__pyx_t_7);
14677   __Pyx_XDECREF(__pyx_t_8);
14678   __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
14679   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
14680     __Pyx_PyThreadState_declare
14681     __Pyx_PyThreadState_assign
14682     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
14683     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x.rcbuffer->pybuffer);
14684     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y.rcbuffer->pybuffer);
14685     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_z.rcbuffer->pybuffer);
14686   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
14687   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.count_points", __pyx_clineno, __pyx_lineno, __pyx_filename);
14688   __pyx_r = NULL;
14689   goto __pyx_L2;
14690   __pyx_L0:;
14691   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x.rcbuffer->pybuffer);
14692   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y.rcbuffer->pybuffer);
14693   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_z.rcbuffer->pybuffer);
14694   __pyx_L2:;
14695   __PYX_XDEC_MEMVIEW(&__pyx_v__radii, 1);
14696   __Pyx_XGIVEREF(__pyx_r);
14697   __Pyx_RefNannyFinishContext();
14698   return __pyx_r;
14699 }
14700 
14701 /* "yt/geometry/_selection_routines/selector_object.pxi":506
14702  *     @cython.wraparound(False)
14703  *     @cython.cdivision(True)
14704  *     def select_points(self,             # <<<<<<<<<<<<<<
14705  *                       np.ndarray[floating, ndim=1] x,
14706  *                       np.ndarray[floating, ndim=1] y,
14707  */
14708 
14709 /* Python wrapper */
14710 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_19select_points(PyObject *__pyx_v_signatures, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
14711 static PyMethodDef __pyx_mdef_2yt_8geometry_18selection_routines_14SelectorObject_19select_points = {"select_points", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_19select_points, METH_VARARGS|METH_KEYWORDS, 0};
14712 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_19select_points(PyObject *__pyx_v_signatures, PyObject *__pyx_args, PyObject *__pyx_kwds) {
14713   PyObject *__pyx_v_args = 0;
14714   PyObject *__pyx_v_kwargs = 0;
14715   CYTHON_UNUSED PyObject *__pyx_v_defaults = 0;
14716   PyObject *__pyx_r = 0;
14717   __Pyx_RefNannyDeclarations
14718   __Pyx_RefNannySetupContext("__pyx_fused_cpdef (wrapper)", 0);
14719   {
14720     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_args,&__pyx_n_s_kwargs,&__pyx_n_s_defaults,0};
14721     PyObject* values[3] = {0,0,0};
14722     if (unlikely(__pyx_kwds)) {
14723       Py_ssize_t kw_args;
14724       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
14725       switch (pos_args) {
14726         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
14727         CYTHON_FALLTHROUGH;
14728         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
14729         CYTHON_FALLTHROUGH;
14730         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
14731         CYTHON_FALLTHROUGH;
14732         case  0: break;
14733         default: goto __pyx_L5_argtuple_error;
14734       }
14735       kw_args = PyDict_Size(__pyx_kwds);
14736       switch (pos_args) {
14737         case  0:
14738         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_args)) != 0)) kw_args--;
14739         else goto __pyx_L5_argtuple_error;
14740         CYTHON_FALLTHROUGH;
14741         case  1:
14742         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_kwargs)) != 0)) kw_args--;
14743         else {
14744           __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 3, 3, 1); __PYX_ERR(1, 506, __pyx_L3_error)
14745         }
14746         CYTHON_FALLTHROUGH;
14747         case  2:
14748         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_defaults)) != 0)) kw_args--;
14749         else {
14750           __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 3, 3, 2); __PYX_ERR(1, 506, __pyx_L3_error)
14751         }
14752       }
14753       if (unlikely(kw_args > 0)) {
14754         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_fused_cpdef") < 0)) __PYX_ERR(1, 506, __pyx_L3_error)
14755       }
14756     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
14757       goto __pyx_L5_argtuple_error;
14758     } else {
14759       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
14760       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
14761       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
14762     }
14763     __pyx_v_args = values[0];
14764     __pyx_v_kwargs = values[1];
14765     __pyx_v_defaults = values[2];
14766   }
14767   goto __pyx_L4_argument_unpacking_done;
14768   __pyx_L5_argtuple_error:;
14769   __Pyx_RaiseArgtupleInvalid("__pyx_fused_cpdef", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 506, __pyx_L3_error)
14770   __pyx_L3_error:;
14771   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
14772   __Pyx_RefNannyFinishContext();
14773   return NULL;
14774   __pyx_L4_argument_unpacking_done:;
14775   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_18select_points(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_signatures), __pyx_v_args, __pyx_v_kwargs, __pyx_v_defaults);
14776 
14777   /* function exit code */
14778   __Pyx_RefNannyFinishContext();
14779   return __pyx_r;
14780 }
14781 
14782 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_18select_points(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_signatures, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs, CYTHON_UNUSED PyObject *__pyx_v_defaults) {
14783   PyObject *__pyx_v_dest_sig = NULL;
14784   Py_ssize_t __pyx_v_i;
14785   PyTypeObject *__pyx_v_ndarray = 0;
14786   __Pyx_memviewslice __pyx_v_memslice;
14787   Py_ssize_t __pyx_v_itemsize;
14788   CYTHON_UNUSED int __pyx_v_dtype_signed;
14789   char __pyx_v_kind;
14790   PyObject *__pyx_v_arg = NULL;
14791   PyObject *__pyx_v_dtype = NULL;
14792   PyObject *__pyx_v_arg_base = NULL;
14793   PyObject *__pyx_v_candidates = NULL;
14794   PyObject *__pyx_v_sig = NULL;
14795   int __pyx_v_match_found;
14796   PyObject *__pyx_v_src_sig = NULL;
14797   PyObject *__pyx_v_dst_type = NULL;
14798   PyObject *__pyx_r = NULL;
14799   __Pyx_RefNannyDeclarations
14800   PyObject *__pyx_t_1 = NULL;
14801   int __pyx_t_2;
14802   int __pyx_t_3;
14803   int __pyx_t_4;
14804   Py_ssize_t __pyx_t_5;
14805   PyObject *__pyx_t_6 = NULL;
14806   long __pyx_t_7;
14807   __Pyx_memviewslice __pyx_t_8;
14808   Py_ssize_t __pyx_t_9;
14809   int __pyx_t_10;
14810   int __pyx_t_11;
14811   PyObject *__pyx_t_12 = NULL;
14812   PyObject *__pyx_t_13 = NULL;
14813   PyObject *__pyx_t_14 = NULL;
14814   Py_ssize_t __pyx_t_15;
14815   Py_ssize_t __pyx_t_16;
14816   Py_ssize_t __pyx_t_17;
14817   int __pyx_t_18;
14818   __Pyx_RefNannySetupContext("select_points", 0);
14819   __Pyx_INCREF(__pyx_v_kwargs);
14820   __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 506, __pyx_L1_error)
14821   __Pyx_GOTREF(__pyx_t_1);
14822   __Pyx_INCREF(Py_None);
14823   __Pyx_GIVEREF(Py_None);
14824   PyList_SET_ITEM(__pyx_t_1, 0, Py_None);
14825   __pyx_v_dest_sig = ((PyObject*)__pyx_t_1);
14826   __pyx_t_1 = 0;
14827   __pyx_t_3 = (__pyx_v_kwargs != Py_None);
14828   __pyx_t_4 = (__pyx_t_3 != 0);
14829   if (__pyx_t_4) {
14830   } else {
14831     __pyx_t_2 = __pyx_t_4;
14832     goto __pyx_L4_bool_binop_done;
14833   }
14834   __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kwargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 506, __pyx_L1_error)
14835   __pyx_t_3 = ((!__pyx_t_4) != 0);
14836   __pyx_t_2 = __pyx_t_3;
14837   __pyx_L4_bool_binop_done:;
14838   if (__pyx_t_2) {
14839     __Pyx_INCREF(Py_None);
14840     __Pyx_DECREF_SET(__pyx_v_kwargs, Py_None);
14841   }
14842   __pyx_t_1 = ((PyObject *)__Pyx_ImportNumPyArrayTypeIfAvailable()); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 506, __pyx_L1_error)
14843   __Pyx_GOTREF(__pyx_t_1);
14844   __pyx_v_ndarray = ((PyTypeObject*)__pyx_t_1);
14845   __pyx_t_1 = 0;
14846   __pyx_v_itemsize = -1L;
14847   if (unlikely(__pyx_v_args == Py_None)) {
14848     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
14849     __PYX_ERR(1, 506, __pyx_L1_error)
14850   }
14851   __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 506, __pyx_L1_error)
14852   __pyx_t_2 = ((1 < __pyx_t_5) != 0);
14853   if (__pyx_t_2) {
14854     if (unlikely(__pyx_v_args == Py_None)) {
14855       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
14856       __PYX_ERR(1, 506, __pyx_L1_error)
14857     }
14858     __pyx_t_1 = PyTuple_GET_ITEM(((PyObject*)__pyx_v_args), 1);
14859     __Pyx_INCREF(__pyx_t_1);
14860     __pyx_v_arg = __pyx_t_1;
14861     __pyx_t_1 = 0;
14862     goto __pyx_L6;
14863   }
14864   __pyx_t_3 = (__pyx_v_kwargs != Py_None);
14865   __pyx_t_4 = (__pyx_t_3 != 0);
14866   if (__pyx_t_4) {
14867   } else {
14868     __pyx_t_2 = __pyx_t_4;
14869     goto __pyx_L7_bool_binop_done;
14870   }
14871   if (unlikely(__pyx_v_kwargs == Py_None)) {
14872     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
14873     __PYX_ERR(1, 506, __pyx_L1_error)
14874   }
14875   __pyx_t_4 = (__Pyx_PyDict_ContainsTF(__pyx_n_s_x, ((PyObject*)__pyx_v_kwargs), Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 506, __pyx_L1_error)
14876   __pyx_t_3 = (__pyx_t_4 != 0);
14877   __pyx_t_2 = __pyx_t_3;
14878   __pyx_L7_bool_binop_done:;
14879   if (__pyx_t_2) {
14880     if (unlikely(__pyx_v_kwargs == Py_None)) {
14881       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
14882       __PYX_ERR(1, 506, __pyx_L1_error)
14883     }
14884     __pyx_t_1 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_kwargs), __pyx_n_s_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 506, __pyx_L1_error)
14885     __Pyx_GOTREF(__pyx_t_1);
14886     __pyx_v_arg = __pyx_t_1;
14887     __pyx_t_1 = 0;
14888     goto __pyx_L6;
14889   }
14890   /*else*/ {
14891     if (unlikely(__pyx_v_args == Py_None)) {
14892       PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
14893       __PYX_ERR(1, 506, __pyx_L1_error)
14894     }
14895     __pyx_t_5 = PyTuple_GET_SIZE(((PyObject*)__pyx_v_args)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 506, __pyx_L1_error)
14896     __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 506, __pyx_L1_error)
14897     __Pyx_GOTREF(__pyx_t_1);
14898     __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
14899     __Pyx_GOTREF(__pyx_t_6);
14900     __Pyx_INCREF(__pyx_int_5);
14901     __Pyx_GIVEREF(__pyx_int_5);
14902     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_int_5);
14903     __Pyx_INCREF(__pyx_n_s_s);
14904     __Pyx_GIVEREF(__pyx_n_s_s);
14905     PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_n_s_s);
14906     __Pyx_GIVEREF(__pyx_t_1);
14907     PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
14908     __pyx_t_1 = 0;
14909     __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 506, __pyx_L1_error)
14910     __Pyx_GOTREF(__pyx_t_1);
14911     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
14912     __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
14913     __Pyx_GOTREF(__pyx_t_6);
14914     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
14915     __Pyx_Raise(__pyx_t_6, 0, 0, 0);
14916     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
14917     __PYX_ERR(1, 506, __pyx_L1_error)
14918   }
14919   __pyx_L6:;
14920   while (1) {
14921     __pyx_t_2 = (__pyx_v_ndarray != ((PyTypeObject*)Py_None));
14922     __pyx_t_3 = (__pyx_t_2 != 0);
14923     if (__pyx_t_3) {
14924       __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg, __pyx_v_ndarray);
14925       __pyx_t_2 = (__pyx_t_3 != 0);
14926       if (__pyx_t_2) {
14927         __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
14928         __Pyx_GOTREF(__pyx_t_6);
14929         __pyx_v_dtype = __pyx_t_6;
14930         __pyx_t_6 = 0;
14931         goto __pyx_L12;
14932       }
14933       __pyx_t_2 = __pyx_memoryview_check(__pyx_v_arg);
14934       __pyx_t_3 = (__pyx_t_2 != 0);
14935       if (__pyx_t_3) {
14936         __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_base); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
14937         __Pyx_GOTREF(__pyx_t_6);
14938         __pyx_v_arg_base = __pyx_t_6;
14939         __pyx_t_6 = 0;
14940         __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_arg_base, __pyx_v_ndarray);
14941         __pyx_t_2 = (__pyx_t_3 != 0);
14942         if (__pyx_t_2) {
14943           __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg_base, __pyx_n_s_dtype); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
14944           __Pyx_GOTREF(__pyx_t_6);
14945           __pyx_v_dtype = __pyx_t_6;
14946           __pyx_t_6 = 0;
14947           goto __pyx_L13;
14948         }
14949         /*else*/ {
14950           __Pyx_INCREF(Py_None);
14951           __pyx_v_dtype = Py_None;
14952         }
14953         __pyx_L13:;
14954         goto __pyx_L12;
14955       }
14956       /*else*/ {
14957         __Pyx_INCREF(Py_None);
14958         __pyx_v_dtype = Py_None;
14959       }
14960       __pyx_L12:;
14961       __pyx_v_itemsize = -1L;
14962       __pyx_t_2 = (__pyx_v_dtype != Py_None);
14963       __pyx_t_3 = (__pyx_t_2 != 0);
14964       if (__pyx_t_3) {
14965         __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
14966         __Pyx_GOTREF(__pyx_t_6);
14967         __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 506, __pyx_L1_error)
14968         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
14969         __pyx_v_itemsize = __pyx_t_5;
14970         __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dtype, __pyx_n_s_kind); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
14971         __Pyx_GOTREF(__pyx_t_6);
14972         __pyx_t_7 = __Pyx_PyObject_Ord(__pyx_t_6); if (unlikely(__pyx_t_7 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(1, 506, __pyx_L1_error)
14973         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
14974         __pyx_v_kind = __pyx_t_7;
14975         __pyx_v_dtype_signed = (__pyx_v_kind == 'i');
14976         switch (__pyx_v_kind) {
14977           case 'i':
14978           case 'u':
14979           break;
14980           case 'f':
14981           __pyx_t_2 = (((sizeof(float)) == __pyx_v_itemsize) != 0);
14982           if (__pyx_t_2) {
14983           } else {
14984             __pyx_t_3 = __pyx_t_2;
14985             goto __pyx_L16_bool_binop_done;
14986           }
14987           __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
14988           __Pyx_GOTREF(__pyx_t_6);
14989           __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 506, __pyx_L1_error)
14990           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
14991           __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0);
14992           __pyx_t_3 = __pyx_t_2;
14993           __pyx_L16_bool_binop_done:;
14994           if (__pyx_t_3) {
14995             if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(1, 506, __pyx_L1_error)
14996             goto __pyx_L10_break;
14997           }
14998           __pyx_t_2 = (((sizeof(double)) == __pyx_v_itemsize) != 0);
14999           if (__pyx_t_2) {
15000           } else {
15001             __pyx_t_3 = __pyx_t_2;
15002             goto __pyx_L19_bool_binop_done;
15003           }
15004           __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_arg, __pyx_n_s_ndim); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
15005           __Pyx_GOTREF(__pyx_t_6);
15006           __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_6); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 506, __pyx_L1_error)
15007           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
15008           __pyx_t_2 = ((((Py_ssize_t)__pyx_t_5) == 1) != 0);
15009           __pyx_t_3 = __pyx_t_2;
15010           __pyx_L19_bool_binop_done:;
15011           if (__pyx_t_3) {
15012             if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(1, 506, __pyx_L1_error)
15013             goto __pyx_L10_break;
15014           }
15015           break;
15016           case 'c':
15017           break;
15018           case 'O':
15019           break;
15020           default: break;
15021         }
15022       }
15023     }
15024     __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
15025     if (!__pyx_t_2) {
15026     } else {
15027       __pyx_t_3 = __pyx_t_2;
15028       goto __pyx_L22_bool_binop_done;
15029     }
15030     __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(float))) != 0);
15031     __pyx_t_3 = __pyx_t_2;
15032     __pyx_L22_bool_binop_done:;
15033     if (__pyx_t_3) {
15034       __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_float(__pyx_v_arg, 0);
15035       __pyx_v_memslice = __pyx_t_8;
15036       __pyx_t_3 = (__pyx_v_memslice.memview != 0);
15037       if (__pyx_t_3) {
15038         __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1);
15039         if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_float, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(1, 506, __pyx_L1_error)
15040         goto __pyx_L10_break;
15041       }
15042       /*else*/ {
15043         PyErr_Clear();
15044       }
15045     }
15046     __pyx_t_2 = ((__pyx_v_itemsize == -1L) != 0);
15047     if (!__pyx_t_2) {
15048     } else {
15049       __pyx_t_3 = __pyx_t_2;
15050       goto __pyx_L26_bool_binop_done;
15051     }
15052     __pyx_t_2 = ((__pyx_v_itemsize == (sizeof(double))) != 0);
15053     __pyx_t_3 = __pyx_t_2;
15054     __pyx_L26_bool_binop_done:;
15055     if (__pyx_t_3) {
15056       __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_v_arg, 0);
15057       __pyx_v_memslice = __pyx_t_8;
15058       __pyx_t_3 = (__pyx_v_memslice.memview != 0);
15059       if (__pyx_t_3) {
15060         __PYX_XDEC_MEMVIEW((&__pyx_v_memslice), 1);
15061         if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, __pyx_n_s_double, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(1, 506, __pyx_L1_error)
15062         goto __pyx_L10_break;
15063       }
15064       /*else*/ {
15065         PyErr_Clear();
15066       }
15067     }
15068     if (unlikely(__Pyx_SetItemInt(__pyx_v_dest_sig, 0, Py_None, long, 1, __Pyx_PyInt_From_long, 1, 0, 0) < 0)) __PYX_ERR(1, 506, __pyx_L1_error)
15069     goto __pyx_L10_break;
15070   }
15071   __pyx_L10_break:;
15072   __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
15073   __Pyx_GOTREF(__pyx_t_6);
15074   __pyx_v_candidates = ((PyObject*)__pyx_t_6);
15075   __pyx_t_6 = 0;
15076   __pyx_t_5 = 0;
15077   if (unlikely(((PyObject *)__pyx_v_signatures) == Py_None)) {
15078     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
15079     __PYX_ERR(1, 506, __pyx_L1_error)
15080   }
15081   __pyx_t_1 = __Pyx_dict_iterator(((PyObject*)__pyx_v_signatures), 1, ((PyObject *)NULL), (&__pyx_t_9), (&__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 506, __pyx_L1_error)
15082   __Pyx_GOTREF(__pyx_t_1);
15083   __Pyx_XDECREF(__pyx_t_6);
15084   __pyx_t_6 = __pyx_t_1;
15085   __pyx_t_1 = 0;
15086   while (1) {
15087     __pyx_t_11 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_9, &__pyx_t_5, &__pyx_t_1, NULL, NULL, __pyx_t_10);
15088     if (unlikely(__pyx_t_11 == 0)) break;
15089     if (unlikely(__pyx_t_11 == -1)) __PYX_ERR(1, 506, __pyx_L1_error)
15090     __Pyx_GOTREF(__pyx_t_1);
15091     __Pyx_XDECREF_SET(__pyx_v_sig, __pyx_t_1);
15092     __pyx_t_1 = 0;
15093     __pyx_v_match_found = 0;
15094     __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_sig, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 506, __pyx_L1_error)
15095     __Pyx_GOTREF(__pyx_t_13);
15096     __pyx_t_14 = NULL;
15097     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
15098       __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_13);
15099       if (likely(__pyx_t_14)) {
15100         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
15101         __Pyx_INCREF(__pyx_t_14);
15102         __Pyx_INCREF(function);
15103         __Pyx_DECREF_SET(__pyx_t_13, function);
15104       }
15105     }
15106     __pyx_t_12 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_14, __pyx_kp_s__2) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__2);
15107     __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
15108     if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 506, __pyx_L1_error)
15109     __Pyx_GOTREF(__pyx_t_12);
15110     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
15111     __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_split); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 506, __pyx_L1_error)
15112     __Pyx_GOTREF(__pyx_t_13);
15113     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
15114     __pyx_t_12 = NULL;
15115     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_13))) {
15116       __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_13);
15117       if (likely(__pyx_t_12)) {
15118         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13);
15119         __Pyx_INCREF(__pyx_t_12);
15120         __Pyx_INCREF(function);
15121         __Pyx_DECREF_SET(__pyx_t_13, function);
15122       }
15123     }
15124     __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_13, __pyx_t_12, __pyx_kp_s__3) : __Pyx_PyObject_CallOneArg(__pyx_t_13, __pyx_kp_s__3);
15125     __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
15126     if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 506, __pyx_L1_error)
15127     __Pyx_GOTREF(__pyx_t_1);
15128     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
15129     __Pyx_XDECREF_SET(__pyx_v_src_sig, __pyx_t_1);
15130     __pyx_t_1 = 0;
15131     __pyx_t_15 = PyList_GET_SIZE(__pyx_v_dest_sig); if (unlikely(__pyx_t_15 == ((Py_ssize_t)-1))) __PYX_ERR(1, 506, __pyx_L1_error)
15132     __pyx_t_16 = __pyx_t_15;
15133     for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
15134       __pyx_v_i = __pyx_t_17;
15135       __pyx_t_1 = PyList_GET_ITEM(__pyx_v_dest_sig, __pyx_v_i);
15136       __Pyx_INCREF(__pyx_t_1);
15137       __Pyx_XDECREF_SET(__pyx_v_dst_type, __pyx_t_1);
15138       __pyx_t_1 = 0;
15139       __pyx_t_3 = (__pyx_v_dst_type != Py_None);
15140       __pyx_t_2 = (__pyx_t_3 != 0);
15141       if (__pyx_t_2) {
15142         __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_src_sig, __pyx_v_i, Py_ssize_t, 1, PyInt_FromSsize_t, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 506, __pyx_L1_error)
15143         __Pyx_GOTREF(__pyx_t_1);
15144         __pyx_t_13 = PyObject_RichCompare(__pyx_t_1, __pyx_v_dst_type, Py_EQ); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 506, __pyx_L1_error)
15145         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
15146         __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 506, __pyx_L1_error)
15147         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
15148         if (__pyx_t_2) {
15149           __pyx_v_match_found = 1;
15150           goto __pyx_L34;
15151         }
15152         /*else*/ {
15153           __pyx_v_match_found = 0;
15154           goto __pyx_L32_break;
15155         }
15156         __pyx_L34:;
15157       }
15158     }
15159     __pyx_L32_break:;
15160     __pyx_t_2 = (__pyx_v_match_found != 0);
15161     if (__pyx_t_2) {
15162       __pyx_t_18 = __Pyx_PyList_Append(__pyx_v_candidates, __pyx_v_sig); if (unlikely(__pyx_t_18 == ((int)-1))) __PYX_ERR(1, 506, __pyx_L1_error)
15163     }
15164   }
15165   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
15166   __pyx_t_2 = (PyList_GET_SIZE(__pyx_v_candidates) != 0);
15167   __pyx_t_3 = ((!__pyx_t_2) != 0);
15168   if (__pyx_t_3) {
15169     __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
15170     __Pyx_GOTREF(__pyx_t_6);
15171     __Pyx_Raise(__pyx_t_6, 0, 0, 0);
15172     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
15173     __PYX_ERR(1, 506, __pyx_L1_error)
15174   }
15175   __pyx_t_9 = PyList_GET_SIZE(__pyx_v_candidates); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(1, 506, __pyx_L1_error)
15176   __pyx_t_3 = ((__pyx_t_9 > 1) != 0);
15177   if (__pyx_t_3) {
15178     __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
15179     __Pyx_GOTREF(__pyx_t_6);
15180     __Pyx_Raise(__pyx_t_6, 0, 0, 0);
15181     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
15182     __PYX_ERR(1, 506, __pyx_L1_error)
15183   }
15184   /*else*/ {
15185     __Pyx_XDECREF(__pyx_r);
15186     if (unlikely(((PyObject *)__pyx_v_signatures) == Py_None)) {
15187       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
15188       __PYX_ERR(1, 506, __pyx_L1_error)
15189     }
15190     __pyx_t_6 = __Pyx_PyDict_GetItem(((PyObject*)__pyx_v_signatures), PyList_GET_ITEM(__pyx_v_candidates, 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 506, __pyx_L1_error)
15191     __Pyx_GOTREF(__pyx_t_6);
15192     __pyx_r = __pyx_t_6;
15193     __pyx_t_6 = 0;
15194     goto __pyx_L0;
15195   }
15196 
15197   /* function exit code */
15198   __pyx_L1_error:;
15199   __Pyx_XDECREF(__pyx_t_1);
15200   __Pyx_XDECREF(__pyx_t_6);
15201   __Pyx_XDECREF(__pyx_t_12);
15202   __Pyx_XDECREF(__pyx_t_13);
15203   __Pyx_XDECREF(__pyx_t_14);
15204   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.__pyx_fused_cpdef", __pyx_clineno, __pyx_lineno, __pyx_filename);
15205   __pyx_r = NULL;
15206   __pyx_L0:;
15207   __Pyx_XDECREF(__pyx_v_dest_sig);
15208   __Pyx_XDECREF(__pyx_v_ndarray);
15209   __Pyx_XDECREF(__pyx_v_arg);
15210   __Pyx_XDECREF(__pyx_v_dtype);
15211   __Pyx_XDECREF(__pyx_v_arg_base);
15212   __Pyx_XDECREF(__pyx_v_candidates);
15213   __Pyx_XDECREF(__pyx_v_sig);
15214   __Pyx_XDECREF(__pyx_v_src_sig);
15215   __Pyx_XDECREF(__pyx_v_dst_type);
15216   __Pyx_XDECREF(__pyx_v_kwargs);
15217   __Pyx_XGIVEREF(__pyx_r);
15218   __Pyx_RefNannyFinishContext();
15219   return __pyx_r;
15220 }
15221 
15222 /* Python wrapper */
15223 static PyObject *__pyx_fuse_0__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_41select_points(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
15224 static PyMethodDef __pyx_fuse_0__pyx_mdef_2yt_8geometry_18selection_routines_14SelectorObject_41select_points = {"__pyx_fuse_0select_points", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_41select_points, METH_VARARGS|METH_KEYWORDS, 0};
15225 static PyObject *__pyx_fuse_0__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_41select_points(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
15226   PyArrayObject *__pyx_v_x = 0;
15227   PyArrayObject *__pyx_v_y = 0;
15228   PyArrayObject *__pyx_v_z = 0;
15229   PyObject *__pyx_v_radii = 0;
15230   PyObject *__pyx_r = 0;
15231   __Pyx_RefNannyDeclarations
15232   __Pyx_RefNannySetupContext("select_points (wrapper)", 0);
15233   {
15234     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,&__pyx_n_s_z,&__pyx_n_s_radii,0};
15235     PyObject* values[4] = {0,0,0,0};
15236     if (unlikely(__pyx_kwds)) {
15237       Py_ssize_t kw_args;
15238       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
15239       switch (pos_args) {
15240         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
15241         CYTHON_FALLTHROUGH;
15242         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
15243         CYTHON_FALLTHROUGH;
15244         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
15245         CYTHON_FALLTHROUGH;
15246         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
15247         CYTHON_FALLTHROUGH;
15248         case  0: break;
15249         default: goto __pyx_L5_argtuple_error;
15250       }
15251       kw_args = PyDict_Size(__pyx_kwds);
15252       switch (pos_args) {
15253         case  0:
15254         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
15255         else goto __pyx_L5_argtuple_error;
15256         CYTHON_FALLTHROUGH;
15257         case  1:
15258         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
15259         else {
15260           __Pyx_RaiseArgtupleInvalid("select_points", 1, 4, 4, 1); __PYX_ERR(1, 506, __pyx_L3_error)
15261         }
15262         CYTHON_FALLTHROUGH;
15263         case  2:
15264         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_z)) != 0)) kw_args--;
15265         else {
15266           __Pyx_RaiseArgtupleInvalid("select_points", 1, 4, 4, 2); __PYX_ERR(1, 506, __pyx_L3_error)
15267         }
15268         CYTHON_FALLTHROUGH;
15269         case  3:
15270         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_radii)) != 0)) kw_args--;
15271         else {
15272           __Pyx_RaiseArgtupleInvalid("select_points", 1, 4, 4, 3); __PYX_ERR(1, 506, __pyx_L3_error)
15273         }
15274       }
15275       if (unlikely(kw_args > 0)) {
15276         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_points") < 0)) __PYX_ERR(1, 506, __pyx_L3_error)
15277       }
15278     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
15279       goto __pyx_L5_argtuple_error;
15280     } else {
15281       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
15282       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
15283       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
15284       values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
15285     }
15286     __pyx_v_x = ((PyArrayObject *)values[0]);
15287     __pyx_v_y = ((PyArrayObject *)values[1]);
15288     __pyx_v_z = ((PyArrayObject *)values[2]);
15289     __pyx_v_radii = values[3];
15290   }
15291   goto __pyx_L4_argument_unpacking_done;
15292   __pyx_L5_argtuple_error:;
15293   __Pyx_RaiseArgtupleInvalid("select_points", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 506, __pyx_L3_error)
15294   __pyx_L3_error:;
15295   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.select_points", __pyx_clineno, __pyx_lineno, __pyx_filename);
15296   __Pyx_RefNannyFinishContext();
15297   return NULL;
15298   __pyx_L4_argument_unpacking_done:;
15299   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(1, 507, __pyx_L1_error)
15300   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(1, 508, __pyx_L1_error)
15301   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_z), __pyx_ptype_5numpy_ndarray, 1, "z", 0))) __PYX_ERR(1, 509, __pyx_L1_error)
15302   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_40select_points(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y, __pyx_v_z, __pyx_v_radii);
15303 
15304   /* function exit code */
15305   goto __pyx_L0;
15306   __pyx_L1_error:;
15307   __pyx_r = NULL;
15308   __pyx_L0:;
15309   __Pyx_RefNannyFinishContext();
15310   return __pyx_r;
15311 }
15312 
15313 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_40select_points(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyArrayObject *__pyx_v_x, PyArrayObject *__pyx_v_y, PyArrayObject *__pyx_v_z, PyObject *__pyx_v_radii) {
15314   int __pyx_v_count;
15315   int __pyx_v_i;
15316   __pyx_t_5numpy_float64_t __pyx_v_pos[3];
15317   __pyx_t_5numpy_float64_t __pyx_v_radius;
15318   PyArrayObject *__pyx_v_mask = 0;
15319   __Pyx_memviewslice __pyx_v__radii = { 0, 0, { 0 }, { 0 }, { 0 } };
15320   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
15321   __Pyx_Buffer __pyx_pybuffer_mask;
15322   __Pyx_LocalBuf_ND __pyx_pybuffernd_x;
15323   __Pyx_Buffer __pyx_pybuffer_x;
15324   __Pyx_LocalBuf_ND __pyx_pybuffernd_y;
15325   __Pyx_Buffer __pyx_pybuffer_y;
15326   __Pyx_LocalBuf_ND __pyx_pybuffernd_z;
15327   __Pyx_Buffer __pyx_pybuffer_z;
15328   PyObject *__pyx_r = NULL;
15329   __Pyx_RefNannyDeclarations
15330   int __pyx_t_1;
15331   int __pyx_t_2;
15332   PyObject *__pyx_t_3 = NULL;
15333   PyObject *__pyx_t_4 = NULL;
15334   PyObject *__pyx_t_5 = NULL;
15335   PyObject *__pyx_t_6 = NULL;
15336   PyObject *__pyx_t_7 = NULL;
15337   PyObject *__pyx_t_8 = NULL;
15338   __Pyx_memviewslice __pyx_t_9 = { 0, 0, { 0 }, { 0 }, { 0 } };
15339   PyArrayObject *__pyx_t_10 = NULL;
15340   int __pyx_t_11;
15341   PyObject *__pyx_t_12 = NULL;
15342   PyObject *__pyx_t_13 = NULL;
15343   PyObject *__pyx_t_14 = NULL;
15344   npy_intp __pyx_t_15;
15345   npy_intp __pyx_t_16;
15346   Py_ssize_t __pyx_t_17;
15347   Py_ssize_t __pyx_t_18;
15348   Py_ssize_t __pyx_t_19;
15349   Py_ssize_t __pyx_t_20;
15350   Py_ssize_t __pyx_t_21;
15351   Py_ssize_t __pyx_t_22;
15352   Py_ssize_t __pyx_t_23;
15353   __Pyx_RefNannySetupContext("__pyx_fuse_0select_points", 0);
15354   __pyx_pybuffer_mask.pybuffer.buf = NULL;
15355   __pyx_pybuffer_mask.refcount = 0;
15356   __pyx_pybuffernd_mask.data = NULL;
15357   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
15358   __pyx_pybuffer_x.pybuffer.buf = NULL;
15359   __pyx_pybuffer_x.refcount = 0;
15360   __pyx_pybuffernd_x.data = NULL;
15361   __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x;
15362   __pyx_pybuffer_y.pybuffer.buf = NULL;
15363   __pyx_pybuffer_y.refcount = 0;
15364   __pyx_pybuffernd_y.data = NULL;
15365   __pyx_pybuffernd_y.rcbuffer = &__pyx_pybuffer_y;
15366   __pyx_pybuffer_z.pybuffer.buf = NULL;
15367   __pyx_pybuffer_z.refcount = 0;
15368   __pyx_pybuffernd_z.data = NULL;
15369   __pyx_pybuffernd_z.rcbuffer = &__pyx_pybuffer_z;
15370   {
15371     __Pyx_BufFmt_StackElem __pyx_stack[1];
15372     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(1, 506, __pyx_L1_error)
15373   }
15374   __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0];
15375   {
15376     __Pyx_BufFmt_StackElem __pyx_stack[1];
15377     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(1, 506, __pyx_L1_error)
15378   }
15379   __pyx_pybuffernd_y.diminfo[0].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y.diminfo[0].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[0];
15380   {
15381     __Pyx_BufFmt_StackElem __pyx_stack[1];
15382     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_z.rcbuffer->pybuffer, (PyObject*)__pyx_v_z, &__Pyx_TypeInfo_float, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(1, 506, __pyx_L1_error)
15383   }
15384   __pyx_pybuffernd_z.diminfo[0].strides = __pyx_pybuffernd_z.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_z.diminfo[0].shape = __pyx_pybuffernd_z.rcbuffer->pybuffer.shape[0];
15385 
15386   /* "yt/geometry/_selection_routines/selector_object.pxi":511
15387  *                       np.ndarray[floating, ndim=1] z,
15388  *                       radii):
15389  *         cdef int count = 0             # <<<<<<<<<<<<<<
15390  *         cdef int i
15391  *         cdef np.float64_t pos[3]
15392  */
15393   __pyx_v_count = 0;
15394 
15395   /* "yt/geometry/_selection_routines/selector_object.pxi":517
15396  *         cdef np.ndarray[np.uint8_t, ndim=1] mask
15397  *         cdef np.float64_t[:] _radii
15398  *         if radii is not None:             # <<<<<<<<<<<<<<
15399  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))
15400  *         else:
15401  */
15402   __pyx_t_1 = (__pyx_v_radii != Py_None);
15403   __pyx_t_2 = (__pyx_t_1 != 0);
15404   if (__pyx_t_2) {
15405 
15406     /* "yt/geometry/_selection_routines/selector_object.pxi":518
15407  *         cdef np.float64_t[:] _radii
15408  *         if radii is not None:
15409  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))             # <<<<<<<<<<<<<<
15410  *         else:
15411  *             _radii = np.array([0.0], dtype='float64')
15412  */
15413     __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 518, __pyx_L1_error)
15414     __Pyx_GOTREF(__pyx_t_4);
15415     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_atleast_1d); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 518, __pyx_L1_error)
15416     __Pyx_GOTREF(__pyx_t_5);
15417     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
15418     __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 518, __pyx_L1_error)
15419     __Pyx_GOTREF(__pyx_t_4);
15420     __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 518, __pyx_L1_error)
15421     __Pyx_GOTREF(__pyx_t_6);
15422     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
15423     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 518, __pyx_L1_error)
15424     __Pyx_GOTREF(__pyx_t_4);
15425     __Pyx_INCREF(__pyx_v_radii);
15426     __Pyx_GIVEREF(__pyx_v_radii);
15427     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_radii);
15428     __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 518, __pyx_L1_error)
15429     __Pyx_GOTREF(__pyx_t_7);
15430     if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(1, 518, __pyx_L1_error)
15431     __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 518, __pyx_L1_error)
15432     __Pyx_GOTREF(__pyx_t_8);
15433     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
15434     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
15435     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
15436     __pyx_t_7 = NULL;
15437     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
15438       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
15439       if (likely(__pyx_t_7)) {
15440         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
15441         __Pyx_INCREF(__pyx_t_7);
15442         __Pyx_INCREF(function);
15443         __Pyx_DECREF_SET(__pyx_t_5, function);
15444       }
15445     }
15446     __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8);
15447     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
15448     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
15449     if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 518, __pyx_L1_error)
15450     __Pyx_GOTREF(__pyx_t_3);
15451     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
15452     __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 518, __pyx_L1_error)
15453     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
15454     __pyx_v__radii = __pyx_t_9;
15455     __pyx_t_9.memview = NULL;
15456     __pyx_t_9.data = NULL;
15457 
15458     /* "yt/geometry/_selection_routines/selector_object.pxi":517
15459  *         cdef np.ndarray[np.uint8_t, ndim=1] mask
15460  *         cdef np.float64_t[:] _radii
15461  *         if radii is not None:             # <<<<<<<<<<<<<<
15462  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))
15463  *         else:
15464  */
15465     goto __pyx_L3;
15466   }
15467 
15468   /* "yt/geometry/_selection_routines/selector_object.pxi":520
15469  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))
15470  *         else:
15471  *             _radii = np.array([0.0], dtype='float64')             # <<<<<<<<<<<<<<
15472  *         mask = np.empty(x.shape[0], dtype='uint8')
15473  *         _ensure_code(x)
15474  */
15475   /*else*/ {
15476     __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 520, __pyx_L1_error)
15477     __Pyx_GOTREF(__pyx_t_3);
15478     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 520, __pyx_L1_error)
15479     __Pyx_GOTREF(__pyx_t_5);
15480     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
15481     __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 520, __pyx_L1_error)
15482     __Pyx_GOTREF(__pyx_t_3);
15483     __Pyx_INCREF(__pyx_float_0_0);
15484     __Pyx_GIVEREF(__pyx_float_0_0);
15485     PyList_SET_ITEM(__pyx_t_3, 0, __pyx_float_0_0);
15486     __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 520, __pyx_L1_error)
15487     __Pyx_GOTREF(__pyx_t_8);
15488     __Pyx_GIVEREF(__pyx_t_3);
15489     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3);
15490     __pyx_t_3 = 0;
15491     __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 520, __pyx_L1_error)
15492     __Pyx_GOTREF(__pyx_t_3);
15493     if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(1, 520, __pyx_L1_error)
15494     __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 520, __pyx_L1_error)
15495     __Pyx_GOTREF(__pyx_t_7);
15496     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
15497     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
15498     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
15499     __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 520, __pyx_L1_error)
15500     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
15501     __pyx_v__radii = __pyx_t_9;
15502     __pyx_t_9.memview = NULL;
15503     __pyx_t_9.data = NULL;
15504   }
15505   __pyx_L3:;
15506 
15507   /* "yt/geometry/_selection_routines/selector_object.pxi":521
15508  *         else:
15509  *             _radii = np.array([0.0], dtype='float64')
15510  *         mask = np.empty(x.shape[0], dtype='uint8')             # <<<<<<<<<<<<<<
15511  *         _ensure_code(x)
15512  *         _ensure_code(y)
15513  */
15514   __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 521, __pyx_L1_error)
15515   __Pyx_GOTREF(__pyx_t_7);
15516   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 521, __pyx_L1_error)
15517   __Pyx_GOTREF(__pyx_t_3);
15518   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
15519   __pyx_t_7 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_x->dimensions[0])); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 521, __pyx_L1_error)
15520   __Pyx_GOTREF(__pyx_t_7);
15521   __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 521, __pyx_L1_error)
15522   __Pyx_GOTREF(__pyx_t_8);
15523   __Pyx_GIVEREF(__pyx_t_7);
15524   PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
15525   __pyx_t_7 = 0;
15526   __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 521, __pyx_L1_error)
15527   __Pyx_GOTREF(__pyx_t_7);
15528   if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(1, 521, __pyx_L1_error)
15529   __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 521, __pyx_L1_error)
15530   __Pyx_GOTREF(__pyx_t_5);
15531   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
15532   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
15533   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
15534   if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 521, __pyx_L1_error)
15535   __pyx_t_10 = ((PyArrayObject *)__pyx_t_5);
15536   {
15537     __Pyx_BufFmt_StackElem __pyx_stack[1];
15538     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
15539     __pyx_t_11 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
15540     if (unlikely(__pyx_t_11 < 0)) {
15541       PyErr_Fetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
15542       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
15543         Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14);
15544         __Pyx_RaiseBufferFallbackError();
15545       } else {
15546         PyErr_Restore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
15547       }
15548       __pyx_t_12 = __pyx_t_13 = __pyx_t_14 = 0;
15549     }
15550     __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0];
15551     if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(1, 521, __pyx_L1_error)
15552   }
15553   __pyx_t_10 = 0;
15554   __pyx_v_mask = ((PyArrayObject *)__pyx_t_5);
15555   __pyx_t_5 = 0;
15556 
15557   /* "yt/geometry/_selection_routines/selector_object.pxi":522
15558  *             _radii = np.array([0.0], dtype='float64')
15559  *         mask = np.empty(x.shape[0], dtype='uint8')
15560  *         _ensure_code(x)             # <<<<<<<<<<<<<<
15561  *         _ensure_code(y)
15562  *         _ensure_code(z)
15563  */
15564   __pyx_t_5 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_x)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 522, __pyx_L1_error)
15565   __Pyx_GOTREF(__pyx_t_5);
15566   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
15567 
15568   /* "yt/geometry/_selection_routines/selector_object.pxi":523
15569  *         mask = np.empty(x.shape[0], dtype='uint8')
15570  *         _ensure_code(x)
15571  *         _ensure_code(y)             # <<<<<<<<<<<<<<
15572  *         _ensure_code(z)
15573  *
15574  */
15575   __pyx_t_5 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_y)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 523, __pyx_L1_error)
15576   __Pyx_GOTREF(__pyx_t_5);
15577   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
15578 
15579   /* "yt/geometry/_selection_routines/selector_object.pxi":524
15580  *         _ensure_code(x)
15581  *         _ensure_code(y)
15582  *         _ensure_code(z)             # <<<<<<<<<<<<<<
15583  *
15584  *
15585  */
15586   __pyx_t_5 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_z)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 524, __pyx_L1_error)
15587   __Pyx_GOTREF(__pyx_t_5);
15588   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
15589 
15590   /* "yt/geometry/_selection_routines/selector_object.pxi":532
15591  *         # between a ray and a point is null, while ray and a
15592  *         # sphere is allowed)
15593  *         with nogil:             # <<<<<<<<<<<<<<
15594  *             for i in range(x.shape[0]) :
15595  *                 pos[0] = x[i]
15596  */
15597   {
15598       #ifdef WITH_THREAD
15599       PyThreadState *_save;
15600       Py_UNBLOCK_THREADS
15601       __Pyx_FastGIL_Remember();
15602       #endif
15603       /*try:*/ {
15604 
15605         /* "yt/geometry/_selection_routines/selector_object.pxi":533
15606  *         # sphere is allowed)
15607  *         with nogil:
15608  *             for i in range(x.shape[0]) :             # <<<<<<<<<<<<<<
15609  *                 pos[0] = x[i]
15610  *                 pos[1] = y[i]
15611  */
15612         __pyx_t_15 = (__pyx_v_x->dimensions[0]);
15613         __pyx_t_16 = __pyx_t_15;
15614         for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_16; __pyx_t_11+=1) {
15615           __pyx_v_i = __pyx_t_11;
15616 
15617           /* "yt/geometry/_selection_routines/selector_object.pxi":534
15618  *         with nogil:
15619  *             for i in range(x.shape[0]) :
15620  *                 pos[0] = x[i]             # <<<<<<<<<<<<<<
15621  *                 pos[1] = y[i]
15622  *                 pos[2] = z[i]
15623  */
15624           __pyx_t_17 = __pyx_v_i;
15625           (__pyx_v_pos[0]) = (*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides));
15626 
15627           /* "yt/geometry/_selection_routines/selector_object.pxi":535
15628  *             for i in range(x.shape[0]) :
15629  *                 pos[0] = x[i]
15630  *                 pos[1] = y[i]             # <<<<<<<<<<<<<<
15631  *                 pos[2] = z[i]
15632  *                 if _radii.shape[0] == 1:
15633  */
15634           __pyx_t_18 = __pyx_v_i;
15635           (__pyx_v_pos[1]) = (*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_y.diminfo[0].strides));
15636 
15637           /* "yt/geometry/_selection_routines/selector_object.pxi":536
15638  *                 pos[0] = x[i]
15639  *                 pos[1] = y[i]
15640  *                 pos[2] = z[i]             # <<<<<<<<<<<<<<
15641  *                 if _radii.shape[0] == 1:
15642  *                     radius = 0
15643  */
15644           __pyx_t_19 = __pyx_v_i;
15645           (__pyx_v_pos[2]) = (*__Pyx_BufPtrStrided1d(float *, __pyx_pybuffernd_z.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_z.diminfo[0].strides));
15646 
15647           /* "yt/geometry/_selection_routines/selector_object.pxi":537
15648  *                 pos[1] = y[i]
15649  *                 pos[2] = z[i]
15650  *                 if _radii.shape[0] == 1:             # <<<<<<<<<<<<<<
15651  *                     radius = 0
15652  *                 else:
15653  */
15654           __pyx_t_2 = (((__pyx_v__radii.shape[0]) == 1) != 0);
15655           if (__pyx_t_2) {
15656 
15657             /* "yt/geometry/_selection_routines/selector_object.pxi":538
15658  *                 pos[2] = z[i]
15659  *                 if _radii.shape[0] == 1:
15660  *                     radius = 0             # <<<<<<<<<<<<<<
15661  *                 else:
15662  *                     radius = _radii[i]
15663  */
15664             __pyx_v_radius = 0.0;
15665 
15666             /* "yt/geometry/_selection_routines/selector_object.pxi":537
15667  *                 pos[1] = y[i]
15668  *                 pos[2] = z[i]
15669  *                 if _radii.shape[0] == 1:             # <<<<<<<<<<<<<<
15670  *                     radius = 0
15671  *                 else:
15672  */
15673             goto __pyx_L9;
15674           }
15675 
15676           /* "yt/geometry/_selection_routines/selector_object.pxi":540
15677  *                     radius = 0
15678  *                 else:
15679  *                     radius = _radii[i]             # <<<<<<<<<<<<<<
15680  *                 if radius == 0:
15681  *                     mask[i] = self.select_point(pos)
15682  */
15683           /*else*/ {
15684             __pyx_t_20 = __pyx_v_i;
15685             __pyx_v_radius = (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v__radii.data + __pyx_t_20 * __pyx_v__radii.strides[0]) )));
15686           }
15687           __pyx_L9:;
15688 
15689           /* "yt/geometry/_selection_routines/selector_object.pxi":541
15690  *                 else:
15691  *                     radius = _radii[i]
15692  *                 if radius == 0:             # <<<<<<<<<<<<<<
15693  *                     mask[i] = self.select_point(pos)
15694  *                 else:
15695  */
15696           __pyx_t_2 = ((__pyx_v_radius == 0.0) != 0);
15697           if (__pyx_t_2) {
15698 
15699             /* "yt/geometry/_selection_routines/selector_object.pxi":542
15700  *                     radius = _radii[i]
15701  *                 if radius == 0:
15702  *                     mask[i] = self.select_point(pos)             # <<<<<<<<<<<<<<
15703  *                 else:
15704  *                     mask[i] = self.select_sphere(pos, radius)
15705  */
15706             __pyx_t_21 = __pyx_v_i;
15707             *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_mask.diminfo[0].strides) = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_point(__pyx_v_self, __pyx_v_pos);
15708 
15709             /* "yt/geometry/_selection_routines/selector_object.pxi":541
15710  *                 else:
15711  *                     radius = _radii[i]
15712  *                 if radius == 0:             # <<<<<<<<<<<<<<
15713  *                     mask[i] = self.select_point(pos)
15714  *                 else:
15715  */
15716             goto __pyx_L10;
15717           }
15718 
15719           /* "yt/geometry/_selection_routines/selector_object.pxi":544
15720  *                     mask[i] = self.select_point(pos)
15721  *                 else:
15722  *                     mask[i] = self.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
15723  *                 count += mask[i]
15724  *         if count == 0: return None
15725  */
15726           /*else*/ {
15727             __pyx_t_22 = __pyx_v_i;
15728             *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_mask.diminfo[0].strides) = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_sphere(__pyx_v_self, __pyx_v_pos, __pyx_v_radius);
15729           }
15730           __pyx_L10:;
15731 
15732           /* "yt/geometry/_selection_routines/selector_object.pxi":545
15733  *                 else:
15734  *                     mask[i] = self.select_sphere(pos, radius)
15735  *                 count += mask[i]             # <<<<<<<<<<<<<<
15736  *         if count == 0: return None
15737  *         return mask.view("bool")
15738  */
15739           __pyx_t_23 = __pyx_v_i;
15740           __pyx_v_count = (__pyx_v_count + (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_mask.diminfo[0].strides)));
15741         }
15742       }
15743 
15744       /* "yt/geometry/_selection_routines/selector_object.pxi":532
15745  *         # between a ray and a point is null, while ray and a
15746  *         # sphere is allowed)
15747  *         with nogil:             # <<<<<<<<<<<<<<
15748  *             for i in range(x.shape[0]) :
15749  *                 pos[0] = x[i]
15750  */
15751       /*finally:*/ {
15752         /*normal exit:*/{
15753           #ifdef WITH_THREAD
15754           __Pyx_FastGIL_Forget();
15755           Py_BLOCK_THREADS
15756           #endif
15757           goto __pyx_L6;
15758         }
15759         __pyx_L6:;
15760       }
15761   }
15762 
15763   /* "yt/geometry/_selection_routines/selector_object.pxi":546
15764  *                     mask[i] = self.select_sphere(pos, radius)
15765  *                 count += mask[i]
15766  *         if count == 0: return None             # <<<<<<<<<<<<<<
15767  *         return mask.view("bool")
15768  *
15769  */
15770   __pyx_t_2 = ((__pyx_v_count == 0) != 0);
15771   if (__pyx_t_2) {
15772     __Pyx_XDECREF(__pyx_r);
15773     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
15774     goto __pyx_L0;
15775   }
15776 
15777   /* "yt/geometry/_selection_routines/selector_object.pxi":547
15778  *                 count += mask[i]
15779  *         if count == 0: return None
15780  *         return mask.view("bool")             # <<<<<<<<<<<<<<
15781  *
15782  *     def __hash__(self):
15783  */
15784   __Pyx_XDECREF(__pyx_r);
15785   __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_mask), __pyx_n_s_view); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 547, __pyx_L1_error)
15786   __Pyx_GOTREF(__pyx_t_7);
15787   __pyx_t_8 = NULL;
15788   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
15789     __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
15790     if (likely(__pyx_t_8)) {
15791       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
15792       __Pyx_INCREF(__pyx_t_8);
15793       __Pyx_INCREF(function);
15794       __Pyx_DECREF_SET(__pyx_t_7, function);
15795     }
15796   }
15797   __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_n_s_bool);
15798   __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
15799   if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 547, __pyx_L1_error)
15800   __Pyx_GOTREF(__pyx_t_5);
15801   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
15802   __pyx_r = __pyx_t_5;
15803   __pyx_t_5 = 0;
15804   goto __pyx_L0;
15805 
15806   /* "yt/geometry/_selection_routines/selector_object.pxi":506
15807  *     @cython.wraparound(False)
15808  *     @cython.cdivision(True)
15809  *     def select_points(self,             # <<<<<<<<<<<<<<
15810  *                       np.ndarray[floating, ndim=1] x,
15811  *                       np.ndarray[floating, ndim=1] y,
15812  */
15813 
15814   /* function exit code */
15815   __pyx_L1_error:;
15816   __Pyx_XDECREF(__pyx_t_3);
15817   __Pyx_XDECREF(__pyx_t_4);
15818   __Pyx_XDECREF(__pyx_t_5);
15819   __Pyx_XDECREF(__pyx_t_6);
15820   __Pyx_XDECREF(__pyx_t_7);
15821   __Pyx_XDECREF(__pyx_t_8);
15822   __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
15823   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
15824     __Pyx_PyThreadState_declare
15825     __Pyx_PyThreadState_assign
15826     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
15827     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
15828     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x.rcbuffer->pybuffer);
15829     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y.rcbuffer->pybuffer);
15830     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_z.rcbuffer->pybuffer);
15831   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
15832   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.select_points", __pyx_clineno, __pyx_lineno, __pyx_filename);
15833   __pyx_r = NULL;
15834   goto __pyx_L2;
15835   __pyx_L0:;
15836   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
15837   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x.rcbuffer->pybuffer);
15838   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y.rcbuffer->pybuffer);
15839   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_z.rcbuffer->pybuffer);
15840   __pyx_L2:;
15841   __Pyx_XDECREF((PyObject *)__pyx_v_mask);
15842   __PYX_XDEC_MEMVIEW(&__pyx_v__radii, 1);
15843   __Pyx_XGIVEREF(__pyx_r);
15844   __Pyx_RefNannyFinishContext();
15845   return __pyx_r;
15846 }
15847 
15848 /* Python wrapper */
15849 static PyObject *__pyx_fuse_1__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_43select_points(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
15850 static PyMethodDef __pyx_fuse_1__pyx_mdef_2yt_8geometry_18selection_routines_14SelectorObject_43select_points = {"__pyx_fuse_1select_points", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_43select_points, METH_VARARGS|METH_KEYWORDS, 0};
15851 static PyObject *__pyx_fuse_1__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_43select_points(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
15852   PyArrayObject *__pyx_v_x = 0;
15853   PyArrayObject *__pyx_v_y = 0;
15854   PyArrayObject *__pyx_v_z = 0;
15855   PyObject *__pyx_v_radii = 0;
15856   PyObject *__pyx_r = 0;
15857   __Pyx_RefNannyDeclarations
15858   __Pyx_RefNannySetupContext("select_points (wrapper)", 0);
15859   {
15860     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,&__pyx_n_s_z,&__pyx_n_s_radii,0};
15861     PyObject* values[4] = {0,0,0,0};
15862     if (unlikely(__pyx_kwds)) {
15863       Py_ssize_t kw_args;
15864       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
15865       switch (pos_args) {
15866         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
15867         CYTHON_FALLTHROUGH;
15868         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
15869         CYTHON_FALLTHROUGH;
15870         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
15871         CYTHON_FALLTHROUGH;
15872         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
15873         CYTHON_FALLTHROUGH;
15874         case  0: break;
15875         default: goto __pyx_L5_argtuple_error;
15876       }
15877       kw_args = PyDict_Size(__pyx_kwds);
15878       switch (pos_args) {
15879         case  0:
15880         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
15881         else goto __pyx_L5_argtuple_error;
15882         CYTHON_FALLTHROUGH;
15883         case  1:
15884         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
15885         else {
15886           __Pyx_RaiseArgtupleInvalid("select_points", 1, 4, 4, 1); __PYX_ERR(1, 506, __pyx_L3_error)
15887         }
15888         CYTHON_FALLTHROUGH;
15889         case  2:
15890         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_z)) != 0)) kw_args--;
15891         else {
15892           __Pyx_RaiseArgtupleInvalid("select_points", 1, 4, 4, 2); __PYX_ERR(1, 506, __pyx_L3_error)
15893         }
15894         CYTHON_FALLTHROUGH;
15895         case  3:
15896         if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_radii)) != 0)) kw_args--;
15897         else {
15898           __Pyx_RaiseArgtupleInvalid("select_points", 1, 4, 4, 3); __PYX_ERR(1, 506, __pyx_L3_error)
15899         }
15900       }
15901       if (unlikely(kw_args > 0)) {
15902         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_points") < 0)) __PYX_ERR(1, 506, __pyx_L3_error)
15903       }
15904     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
15905       goto __pyx_L5_argtuple_error;
15906     } else {
15907       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
15908       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
15909       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
15910       values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
15911     }
15912     __pyx_v_x = ((PyArrayObject *)values[0]);
15913     __pyx_v_y = ((PyArrayObject *)values[1]);
15914     __pyx_v_z = ((PyArrayObject *)values[2]);
15915     __pyx_v_radii = values[3];
15916   }
15917   goto __pyx_L4_argument_unpacking_done;
15918   __pyx_L5_argtuple_error:;
15919   __Pyx_RaiseArgtupleInvalid("select_points", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 506, __pyx_L3_error)
15920   __pyx_L3_error:;
15921   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.select_points", __pyx_clineno, __pyx_lineno, __pyx_filename);
15922   __Pyx_RefNannyFinishContext();
15923   return NULL;
15924   __pyx_L4_argument_unpacking_done:;
15925   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_5numpy_ndarray, 1, "x", 0))) __PYX_ERR(1, 507, __pyx_L1_error)
15926   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_5numpy_ndarray, 1, "y", 0))) __PYX_ERR(1, 508, __pyx_L1_error)
15927   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_z), __pyx_ptype_5numpy_ndarray, 1, "z", 0))) __PYX_ERR(1, 509, __pyx_L1_error)
15928   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_42select_points(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y, __pyx_v_z, __pyx_v_radii);
15929 
15930   /* function exit code */
15931   goto __pyx_L0;
15932   __pyx_L1_error:;
15933   __pyx_r = NULL;
15934   __pyx_L0:;
15935   __Pyx_RefNannyFinishContext();
15936   return __pyx_r;
15937 }
15938 
15939 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_42select_points(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyArrayObject *__pyx_v_x, PyArrayObject *__pyx_v_y, PyArrayObject *__pyx_v_z, PyObject *__pyx_v_radii) {
15940   int __pyx_v_count;
15941   int __pyx_v_i;
15942   __pyx_t_5numpy_float64_t __pyx_v_pos[3];
15943   __pyx_t_5numpy_float64_t __pyx_v_radius;
15944   PyArrayObject *__pyx_v_mask = 0;
15945   __Pyx_memviewslice __pyx_v__radii = { 0, 0, { 0 }, { 0 }, { 0 } };
15946   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
15947   __Pyx_Buffer __pyx_pybuffer_mask;
15948   __Pyx_LocalBuf_ND __pyx_pybuffernd_x;
15949   __Pyx_Buffer __pyx_pybuffer_x;
15950   __Pyx_LocalBuf_ND __pyx_pybuffernd_y;
15951   __Pyx_Buffer __pyx_pybuffer_y;
15952   __Pyx_LocalBuf_ND __pyx_pybuffernd_z;
15953   __Pyx_Buffer __pyx_pybuffer_z;
15954   PyObject *__pyx_r = NULL;
15955   __Pyx_RefNannyDeclarations
15956   int __pyx_t_1;
15957   int __pyx_t_2;
15958   PyObject *__pyx_t_3 = NULL;
15959   PyObject *__pyx_t_4 = NULL;
15960   PyObject *__pyx_t_5 = NULL;
15961   PyObject *__pyx_t_6 = NULL;
15962   PyObject *__pyx_t_7 = NULL;
15963   PyObject *__pyx_t_8 = NULL;
15964   __Pyx_memviewslice __pyx_t_9 = { 0, 0, { 0 }, { 0 }, { 0 } };
15965   PyArrayObject *__pyx_t_10 = NULL;
15966   int __pyx_t_11;
15967   PyObject *__pyx_t_12 = NULL;
15968   PyObject *__pyx_t_13 = NULL;
15969   PyObject *__pyx_t_14 = NULL;
15970   npy_intp __pyx_t_15;
15971   npy_intp __pyx_t_16;
15972   Py_ssize_t __pyx_t_17;
15973   Py_ssize_t __pyx_t_18;
15974   Py_ssize_t __pyx_t_19;
15975   Py_ssize_t __pyx_t_20;
15976   Py_ssize_t __pyx_t_21;
15977   Py_ssize_t __pyx_t_22;
15978   Py_ssize_t __pyx_t_23;
15979   __Pyx_RefNannySetupContext("__pyx_fuse_1select_points", 0);
15980   __pyx_pybuffer_mask.pybuffer.buf = NULL;
15981   __pyx_pybuffer_mask.refcount = 0;
15982   __pyx_pybuffernd_mask.data = NULL;
15983   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
15984   __pyx_pybuffer_x.pybuffer.buf = NULL;
15985   __pyx_pybuffer_x.refcount = 0;
15986   __pyx_pybuffernd_x.data = NULL;
15987   __pyx_pybuffernd_x.rcbuffer = &__pyx_pybuffer_x;
15988   __pyx_pybuffer_y.pybuffer.buf = NULL;
15989   __pyx_pybuffer_y.refcount = 0;
15990   __pyx_pybuffernd_y.data = NULL;
15991   __pyx_pybuffernd_y.rcbuffer = &__pyx_pybuffer_y;
15992   __pyx_pybuffer_z.pybuffer.buf = NULL;
15993   __pyx_pybuffer_z.refcount = 0;
15994   __pyx_pybuffernd_z.data = NULL;
15995   __pyx_pybuffernd_z.rcbuffer = &__pyx_pybuffer_z;
15996   {
15997     __Pyx_BufFmt_StackElem __pyx_stack[1];
15998     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_x.rcbuffer->pybuffer, (PyObject*)__pyx_v_x, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(1, 506, __pyx_L1_error)
15999   }
16000   __pyx_pybuffernd_x.diminfo[0].strides = __pyx_pybuffernd_x.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_x.diminfo[0].shape = __pyx_pybuffernd_x.rcbuffer->pybuffer.shape[0];
16001   {
16002     __Pyx_BufFmt_StackElem __pyx_stack[1];
16003     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_y.rcbuffer->pybuffer, (PyObject*)__pyx_v_y, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(1, 506, __pyx_L1_error)
16004   }
16005   __pyx_pybuffernd_y.diminfo[0].strides = __pyx_pybuffernd_y.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_y.diminfo[0].shape = __pyx_pybuffernd_y.rcbuffer->pybuffer.shape[0];
16006   {
16007     __Pyx_BufFmt_StackElem __pyx_stack[1];
16008     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_z.rcbuffer->pybuffer, (PyObject*)__pyx_v_z, &__Pyx_TypeInfo_double, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) __PYX_ERR(1, 506, __pyx_L1_error)
16009   }
16010   __pyx_pybuffernd_z.diminfo[0].strides = __pyx_pybuffernd_z.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_z.diminfo[0].shape = __pyx_pybuffernd_z.rcbuffer->pybuffer.shape[0];
16011 
16012   /* "yt/geometry/_selection_routines/selector_object.pxi":511
16013  *                       np.ndarray[floating, ndim=1] z,
16014  *                       radii):
16015  *         cdef int count = 0             # <<<<<<<<<<<<<<
16016  *         cdef int i
16017  *         cdef np.float64_t pos[3]
16018  */
16019   __pyx_v_count = 0;
16020 
16021   /* "yt/geometry/_selection_routines/selector_object.pxi":517
16022  *         cdef np.ndarray[np.uint8_t, ndim=1] mask
16023  *         cdef np.float64_t[:] _radii
16024  *         if radii is not None:             # <<<<<<<<<<<<<<
16025  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))
16026  *         else:
16027  */
16028   __pyx_t_1 = (__pyx_v_radii != Py_None);
16029   __pyx_t_2 = (__pyx_t_1 != 0);
16030   if (__pyx_t_2) {
16031 
16032     /* "yt/geometry/_selection_routines/selector_object.pxi":518
16033  *         cdef np.float64_t[:] _radii
16034  *         if radii is not None:
16035  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))             # <<<<<<<<<<<<<<
16036  *         else:
16037  *             _radii = np.array([0.0], dtype='float64')
16038  */
16039     __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 518, __pyx_L1_error)
16040     __Pyx_GOTREF(__pyx_t_4);
16041     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_atleast_1d); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 518, __pyx_L1_error)
16042     __Pyx_GOTREF(__pyx_t_5);
16043     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
16044     __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 518, __pyx_L1_error)
16045     __Pyx_GOTREF(__pyx_t_4);
16046     __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 518, __pyx_L1_error)
16047     __Pyx_GOTREF(__pyx_t_6);
16048     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
16049     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 518, __pyx_L1_error)
16050     __Pyx_GOTREF(__pyx_t_4);
16051     __Pyx_INCREF(__pyx_v_radii);
16052     __Pyx_GIVEREF(__pyx_v_radii);
16053     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_radii);
16054     __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 518, __pyx_L1_error)
16055     __Pyx_GOTREF(__pyx_t_7);
16056     if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(1, 518, __pyx_L1_error)
16057     __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 518, __pyx_L1_error)
16058     __Pyx_GOTREF(__pyx_t_8);
16059     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
16060     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
16061     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
16062     __pyx_t_7 = NULL;
16063     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
16064       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
16065       if (likely(__pyx_t_7)) {
16066         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
16067         __Pyx_INCREF(__pyx_t_7);
16068         __Pyx_INCREF(function);
16069         __Pyx_DECREF_SET(__pyx_t_5, function);
16070       }
16071     }
16072     __pyx_t_3 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_7, __pyx_t_8) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_8);
16073     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
16074     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
16075     if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 518, __pyx_L1_error)
16076     __Pyx_GOTREF(__pyx_t_3);
16077     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
16078     __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 518, __pyx_L1_error)
16079     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
16080     __pyx_v__radii = __pyx_t_9;
16081     __pyx_t_9.memview = NULL;
16082     __pyx_t_9.data = NULL;
16083 
16084     /* "yt/geometry/_selection_routines/selector_object.pxi":517
16085  *         cdef np.ndarray[np.uint8_t, ndim=1] mask
16086  *         cdef np.float64_t[:] _radii
16087  *         if radii is not None:             # <<<<<<<<<<<<<<
16088  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))
16089  *         else:
16090  */
16091     goto __pyx_L3;
16092   }
16093 
16094   /* "yt/geometry/_selection_routines/selector_object.pxi":520
16095  *             _radii = np.atleast_1d(np.array(radii, dtype='float64'))
16096  *         else:
16097  *             _radii = np.array([0.0], dtype='float64')             # <<<<<<<<<<<<<<
16098  *         mask = np.empty(x.shape[0], dtype='uint8')
16099  *         _ensure_code(x)
16100  */
16101   /*else*/ {
16102     __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 520, __pyx_L1_error)
16103     __Pyx_GOTREF(__pyx_t_3);
16104     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 520, __pyx_L1_error)
16105     __Pyx_GOTREF(__pyx_t_5);
16106     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
16107     __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 520, __pyx_L1_error)
16108     __Pyx_GOTREF(__pyx_t_3);
16109     __Pyx_INCREF(__pyx_float_0_0);
16110     __Pyx_GIVEREF(__pyx_float_0_0);
16111     PyList_SET_ITEM(__pyx_t_3, 0, __pyx_float_0_0);
16112     __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 520, __pyx_L1_error)
16113     __Pyx_GOTREF(__pyx_t_8);
16114     __Pyx_GIVEREF(__pyx_t_3);
16115     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3);
16116     __pyx_t_3 = 0;
16117     __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 520, __pyx_L1_error)
16118     __Pyx_GOTREF(__pyx_t_3);
16119     if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(1, 520, __pyx_L1_error)
16120     __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 520, __pyx_L1_error)
16121     __Pyx_GOTREF(__pyx_t_7);
16122     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
16123     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
16124     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
16125     __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_7, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 520, __pyx_L1_error)
16126     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
16127     __pyx_v__radii = __pyx_t_9;
16128     __pyx_t_9.memview = NULL;
16129     __pyx_t_9.data = NULL;
16130   }
16131   __pyx_L3:;
16132 
16133   /* "yt/geometry/_selection_routines/selector_object.pxi":521
16134  *         else:
16135  *             _radii = np.array([0.0], dtype='float64')
16136  *         mask = np.empty(x.shape[0], dtype='uint8')             # <<<<<<<<<<<<<<
16137  *         _ensure_code(x)
16138  *         _ensure_code(y)
16139  */
16140   __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 521, __pyx_L1_error)
16141   __Pyx_GOTREF(__pyx_t_7);
16142   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 521, __pyx_L1_error)
16143   __Pyx_GOTREF(__pyx_t_3);
16144   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
16145   __pyx_t_7 = __Pyx_PyInt_From_Py_intptr_t((__pyx_v_x->dimensions[0])); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 521, __pyx_L1_error)
16146   __Pyx_GOTREF(__pyx_t_7);
16147   __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 521, __pyx_L1_error)
16148   __Pyx_GOTREF(__pyx_t_8);
16149   __Pyx_GIVEREF(__pyx_t_7);
16150   PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
16151   __pyx_t_7 = 0;
16152   __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 521, __pyx_L1_error)
16153   __Pyx_GOTREF(__pyx_t_7);
16154   if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(1, 521, __pyx_L1_error)
16155   __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 521, __pyx_L1_error)
16156   __Pyx_GOTREF(__pyx_t_5);
16157   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
16158   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
16159   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
16160   if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(1, 521, __pyx_L1_error)
16161   __pyx_t_10 = ((PyArrayObject *)__pyx_t_5);
16162   {
16163     __Pyx_BufFmt_StackElem __pyx_stack[1];
16164     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
16165     __pyx_t_11 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
16166     if (unlikely(__pyx_t_11 < 0)) {
16167       PyErr_Fetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
16168       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
16169         Py_XDECREF(__pyx_t_12); Py_XDECREF(__pyx_t_13); Py_XDECREF(__pyx_t_14);
16170         __Pyx_RaiseBufferFallbackError();
16171       } else {
16172         PyErr_Restore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
16173       }
16174       __pyx_t_12 = __pyx_t_13 = __pyx_t_14 = 0;
16175     }
16176     __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0];
16177     if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(1, 521, __pyx_L1_error)
16178   }
16179   __pyx_t_10 = 0;
16180   __pyx_v_mask = ((PyArrayObject *)__pyx_t_5);
16181   __pyx_t_5 = 0;
16182 
16183   /* "yt/geometry/_selection_routines/selector_object.pxi":522
16184  *             _radii = np.array([0.0], dtype='float64')
16185  *         mask = np.empty(x.shape[0], dtype='uint8')
16186  *         _ensure_code(x)             # <<<<<<<<<<<<<<
16187  *         _ensure_code(y)
16188  *         _ensure_code(z)
16189  */
16190   __pyx_t_5 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_x)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 522, __pyx_L1_error)
16191   __Pyx_GOTREF(__pyx_t_5);
16192   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
16193 
16194   /* "yt/geometry/_selection_routines/selector_object.pxi":523
16195  *         mask = np.empty(x.shape[0], dtype='uint8')
16196  *         _ensure_code(x)
16197  *         _ensure_code(y)             # <<<<<<<<<<<<<<
16198  *         _ensure_code(z)
16199  *
16200  */
16201   __pyx_t_5 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_y)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 523, __pyx_L1_error)
16202   __Pyx_GOTREF(__pyx_t_5);
16203   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
16204 
16205   /* "yt/geometry/_selection_routines/selector_object.pxi":524
16206  *         _ensure_code(x)
16207  *         _ensure_code(y)
16208  *         _ensure_code(z)             # <<<<<<<<<<<<<<
16209  *
16210  *
16211  */
16212   __pyx_t_5 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(((PyObject *)__pyx_v_z)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 524, __pyx_L1_error)
16213   __Pyx_GOTREF(__pyx_t_5);
16214   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
16215 
16216   /* "yt/geometry/_selection_routines/selector_object.pxi":532
16217  *         # between a ray and a point is null, while ray and a
16218  *         # sphere is allowed)
16219  *         with nogil:             # <<<<<<<<<<<<<<
16220  *             for i in range(x.shape[0]) :
16221  *                 pos[0] = x[i]
16222  */
16223   {
16224       #ifdef WITH_THREAD
16225       PyThreadState *_save;
16226       Py_UNBLOCK_THREADS
16227       __Pyx_FastGIL_Remember();
16228       #endif
16229       /*try:*/ {
16230 
16231         /* "yt/geometry/_selection_routines/selector_object.pxi":533
16232  *         # sphere is allowed)
16233  *         with nogil:
16234  *             for i in range(x.shape[0]) :             # <<<<<<<<<<<<<<
16235  *                 pos[0] = x[i]
16236  *                 pos[1] = y[i]
16237  */
16238         __pyx_t_15 = (__pyx_v_x->dimensions[0]);
16239         __pyx_t_16 = __pyx_t_15;
16240         for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_16; __pyx_t_11+=1) {
16241           __pyx_v_i = __pyx_t_11;
16242 
16243           /* "yt/geometry/_selection_routines/selector_object.pxi":534
16244  *         with nogil:
16245  *             for i in range(x.shape[0]) :
16246  *                 pos[0] = x[i]             # <<<<<<<<<<<<<<
16247  *                 pos[1] = y[i]
16248  *                 pos[2] = z[i]
16249  */
16250           __pyx_t_17 = __pyx_v_i;
16251           (__pyx_v_pos[0]) = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_x.rcbuffer->pybuffer.buf, __pyx_t_17, __pyx_pybuffernd_x.diminfo[0].strides));
16252 
16253           /* "yt/geometry/_selection_routines/selector_object.pxi":535
16254  *             for i in range(x.shape[0]) :
16255  *                 pos[0] = x[i]
16256  *                 pos[1] = y[i]             # <<<<<<<<<<<<<<
16257  *                 pos[2] = z[i]
16258  *                 if _radii.shape[0] == 1:
16259  */
16260           __pyx_t_18 = __pyx_v_i;
16261           (__pyx_v_pos[1]) = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_y.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_y.diminfo[0].strides));
16262 
16263           /* "yt/geometry/_selection_routines/selector_object.pxi":536
16264  *                 pos[0] = x[i]
16265  *                 pos[1] = y[i]
16266  *                 pos[2] = z[i]             # <<<<<<<<<<<<<<
16267  *                 if _radii.shape[0] == 1:
16268  *                     radius = 0
16269  */
16270           __pyx_t_19 = __pyx_v_i;
16271           (__pyx_v_pos[2]) = (*__Pyx_BufPtrStrided1d(double *, __pyx_pybuffernd_z.rcbuffer->pybuffer.buf, __pyx_t_19, __pyx_pybuffernd_z.diminfo[0].strides));
16272 
16273           /* "yt/geometry/_selection_routines/selector_object.pxi":537
16274  *                 pos[1] = y[i]
16275  *                 pos[2] = z[i]
16276  *                 if _radii.shape[0] == 1:             # <<<<<<<<<<<<<<
16277  *                     radius = 0
16278  *                 else:
16279  */
16280           __pyx_t_2 = (((__pyx_v__radii.shape[0]) == 1) != 0);
16281           if (__pyx_t_2) {
16282 
16283             /* "yt/geometry/_selection_routines/selector_object.pxi":538
16284  *                 pos[2] = z[i]
16285  *                 if _radii.shape[0] == 1:
16286  *                     radius = 0             # <<<<<<<<<<<<<<
16287  *                 else:
16288  *                     radius = _radii[i]
16289  */
16290             __pyx_v_radius = 0.0;
16291 
16292             /* "yt/geometry/_selection_routines/selector_object.pxi":537
16293  *                 pos[1] = y[i]
16294  *                 pos[2] = z[i]
16295  *                 if _radii.shape[0] == 1:             # <<<<<<<<<<<<<<
16296  *                     radius = 0
16297  *                 else:
16298  */
16299             goto __pyx_L9;
16300           }
16301 
16302           /* "yt/geometry/_selection_routines/selector_object.pxi":540
16303  *                     radius = 0
16304  *                 else:
16305  *                     radius = _radii[i]             # <<<<<<<<<<<<<<
16306  *                 if radius == 0:
16307  *                     mask[i] = self.select_point(pos)
16308  */
16309           /*else*/ {
16310             __pyx_t_20 = __pyx_v_i;
16311             __pyx_v_radius = (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v__radii.data + __pyx_t_20 * __pyx_v__radii.strides[0]) )));
16312           }
16313           __pyx_L9:;
16314 
16315           /* "yt/geometry/_selection_routines/selector_object.pxi":541
16316  *                 else:
16317  *                     radius = _radii[i]
16318  *                 if radius == 0:             # <<<<<<<<<<<<<<
16319  *                     mask[i] = self.select_point(pos)
16320  *                 else:
16321  */
16322           __pyx_t_2 = ((__pyx_v_radius == 0.0) != 0);
16323           if (__pyx_t_2) {
16324 
16325             /* "yt/geometry/_selection_routines/selector_object.pxi":542
16326  *                     radius = _radii[i]
16327  *                 if radius == 0:
16328  *                     mask[i] = self.select_point(pos)             # <<<<<<<<<<<<<<
16329  *                 else:
16330  *                     mask[i] = self.select_sphere(pos, radius)
16331  */
16332             __pyx_t_21 = __pyx_v_i;
16333             *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_mask.diminfo[0].strides) = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_point(__pyx_v_self, __pyx_v_pos);
16334 
16335             /* "yt/geometry/_selection_routines/selector_object.pxi":541
16336  *                 else:
16337  *                     radius = _radii[i]
16338  *                 if radius == 0:             # <<<<<<<<<<<<<<
16339  *                     mask[i] = self.select_point(pos)
16340  *                 else:
16341  */
16342             goto __pyx_L10;
16343           }
16344 
16345           /* "yt/geometry/_selection_routines/selector_object.pxi":544
16346  *                     mask[i] = self.select_point(pos)
16347  *                 else:
16348  *                     mask[i] = self.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
16349  *                 count += mask[i]
16350  *         if count == 0: return None
16351  */
16352           /*else*/ {
16353             __pyx_t_22 = __pyx_v_i;
16354             *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_22, __pyx_pybuffernd_mask.diminfo[0].strides) = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_vtab)->select_sphere(__pyx_v_self, __pyx_v_pos, __pyx_v_radius);
16355           }
16356           __pyx_L10:;
16357 
16358           /* "yt/geometry/_selection_routines/selector_object.pxi":545
16359  *                 else:
16360  *                     mask[i] = self.select_sphere(pos, radius)
16361  *                 count += mask[i]             # <<<<<<<<<<<<<<
16362  *         if count == 0: return None
16363  *         return mask.view("bool")
16364  */
16365           __pyx_t_23 = __pyx_v_i;
16366           __pyx_v_count = (__pyx_v_count + (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_mask.diminfo[0].strides)));
16367         }
16368       }
16369 
16370       /* "yt/geometry/_selection_routines/selector_object.pxi":532
16371  *         # between a ray and a point is null, while ray and a
16372  *         # sphere is allowed)
16373  *         with nogil:             # <<<<<<<<<<<<<<
16374  *             for i in range(x.shape[0]) :
16375  *                 pos[0] = x[i]
16376  */
16377       /*finally:*/ {
16378         /*normal exit:*/{
16379           #ifdef WITH_THREAD
16380           __Pyx_FastGIL_Forget();
16381           Py_BLOCK_THREADS
16382           #endif
16383           goto __pyx_L6;
16384         }
16385         __pyx_L6:;
16386       }
16387   }
16388 
16389   /* "yt/geometry/_selection_routines/selector_object.pxi":546
16390  *                     mask[i] = self.select_sphere(pos, radius)
16391  *                 count += mask[i]
16392  *         if count == 0: return None             # <<<<<<<<<<<<<<
16393  *         return mask.view("bool")
16394  *
16395  */
16396   __pyx_t_2 = ((__pyx_v_count == 0) != 0);
16397   if (__pyx_t_2) {
16398     __Pyx_XDECREF(__pyx_r);
16399     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
16400     goto __pyx_L0;
16401   }
16402 
16403   /* "yt/geometry/_selection_routines/selector_object.pxi":547
16404  *                 count += mask[i]
16405  *         if count == 0: return None
16406  *         return mask.view("bool")             # <<<<<<<<<<<<<<
16407  *
16408  *     def __hash__(self):
16409  */
16410   __Pyx_XDECREF(__pyx_r);
16411   __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_mask), __pyx_n_s_view); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 547, __pyx_L1_error)
16412   __Pyx_GOTREF(__pyx_t_7);
16413   __pyx_t_8 = NULL;
16414   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
16415     __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
16416     if (likely(__pyx_t_8)) {
16417       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
16418       __Pyx_INCREF(__pyx_t_8);
16419       __Pyx_INCREF(function);
16420       __Pyx_DECREF_SET(__pyx_t_7, function);
16421     }
16422   }
16423   __pyx_t_5 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_n_s_bool);
16424   __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
16425   if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 547, __pyx_L1_error)
16426   __Pyx_GOTREF(__pyx_t_5);
16427   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
16428   __pyx_r = __pyx_t_5;
16429   __pyx_t_5 = 0;
16430   goto __pyx_L0;
16431 
16432   /* "yt/geometry/_selection_routines/selector_object.pxi":506
16433  *     @cython.wraparound(False)
16434  *     @cython.cdivision(True)
16435  *     def select_points(self,             # <<<<<<<<<<<<<<
16436  *                       np.ndarray[floating, ndim=1] x,
16437  *                       np.ndarray[floating, ndim=1] y,
16438  */
16439 
16440   /* function exit code */
16441   __pyx_L1_error:;
16442   __Pyx_XDECREF(__pyx_t_3);
16443   __Pyx_XDECREF(__pyx_t_4);
16444   __Pyx_XDECREF(__pyx_t_5);
16445   __Pyx_XDECREF(__pyx_t_6);
16446   __Pyx_XDECREF(__pyx_t_7);
16447   __Pyx_XDECREF(__pyx_t_8);
16448   __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
16449   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
16450     __Pyx_PyThreadState_declare
16451     __Pyx_PyThreadState_assign
16452     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
16453     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
16454     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x.rcbuffer->pybuffer);
16455     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y.rcbuffer->pybuffer);
16456     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_z.rcbuffer->pybuffer);
16457   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
16458   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.select_points", __pyx_clineno, __pyx_lineno, __pyx_filename);
16459   __pyx_r = NULL;
16460   goto __pyx_L2;
16461   __pyx_L0:;
16462   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
16463   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_x.rcbuffer->pybuffer);
16464   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_y.rcbuffer->pybuffer);
16465   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_z.rcbuffer->pybuffer);
16466   __pyx_L2:;
16467   __Pyx_XDECREF((PyObject *)__pyx_v_mask);
16468   __PYX_XDEC_MEMVIEW(&__pyx_v__radii, 1);
16469   __Pyx_XGIVEREF(__pyx_r);
16470   __Pyx_RefNannyFinishContext();
16471   return __pyx_r;
16472 }
16473 
16474 /* "yt/geometry/_selection_routines/selector_object.pxi":549
16475  *         return mask.view("bool")
16476  *
16477  *     def __hash__(self):             # <<<<<<<<<<<<<<
16478  *         # convert data to be hashed to a byte array, which FNV algorithm expects
16479  *         if self._hash_initialized == 1:
16480  */
16481 
16482 /* Python wrapper */
16483 static Py_hash_t __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_21__hash__(PyObject *__pyx_v_self); /*proto*/
16484 static Py_hash_t __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_21__hash__(PyObject *__pyx_v_self) {
16485   Py_hash_t __pyx_r;
16486   __Pyx_RefNannyDeclarations
16487   __Pyx_RefNannySetupContext("__hash__ (wrapper)", 0);
16488   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_20__hash__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
16489 
16490   /* function exit code */
16491   __Pyx_RefNannyFinishContext();
16492   return __pyx_r;
16493 }
16494 
16495 static Py_hash_t __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_20__hash__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
16496   PyObject *__pyx_v_hash_data = NULL;
16497   PyObject *__pyx_v_v = NULL;
16498   __pyx_t_5numpy_int64_t __pyx_v_hash_value;
16499   Py_hash_t __pyx_r;
16500   __Pyx_RefNannyDeclarations
16501   int __pyx_t_1;
16502   PyObject *__pyx_t_2 = NULL;
16503   PyObject *__pyx_t_3 = NULL;
16504   PyObject *__pyx_t_4 = NULL;
16505   PyObject *__pyx_t_5 = NULL;
16506   Py_ssize_t __pyx_t_6;
16507   PyObject *(*__pyx_t_7)(PyObject *);
16508   int __pyx_t_8;
16509   __Pyx_memviewslice __pyx_t_9 = { 0, 0, { 0 }, { 0 }, { 0 } };
16510   __Pyx_RefNannySetupContext("__hash__", 0);
16511 
16512   /* "yt/geometry/_selection_routines/selector_object.pxi":551
16513  *     def __hash__(self):
16514  *         # convert data to be hashed to a byte array, which FNV algorithm expects
16515  *         if self._hash_initialized == 1:             # <<<<<<<<<<<<<<
16516  *             return self._hash
16517  *         hash_data = bytearray()
16518  */
16519   __pyx_t_1 = ((__pyx_v_self->_hash_initialized == 1) != 0);
16520   if (__pyx_t_1) {
16521 
16522     /* "yt/geometry/_selection_routines/selector_object.pxi":552
16523  *         # convert data to be hashed to a byte array, which FNV algorithm expects
16524  *         if self._hash_initialized == 1:
16525  *             return self._hash             # <<<<<<<<<<<<<<
16526  *         hash_data = bytearray()
16527  *         for v in self._hash_vals() + self._base_hash():
16528  */
16529     __pyx_r = __pyx_v_self->_hash;
16530     goto __pyx_L0;
16531 
16532     /* "yt/geometry/_selection_routines/selector_object.pxi":551
16533  *     def __hash__(self):
16534  *         # convert data to be hashed to a byte array, which FNV algorithm expects
16535  *         if self._hash_initialized == 1:             # <<<<<<<<<<<<<<
16536  *             return self._hash
16537  *         hash_data = bytearray()
16538  */
16539   }
16540 
16541   /* "yt/geometry/_selection_routines/selector_object.pxi":553
16542  *         if self._hash_initialized == 1:
16543  *             return self._hash
16544  *         hash_data = bytearray()             # <<<<<<<<<<<<<<
16545  *         for v in self._hash_vals() + self._base_hash():
16546  *             if isinstance(v, tuple):
16547  */
16548   __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)(&PyByteArray_Type))); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 553, __pyx_L1_error)
16549   __Pyx_GOTREF(__pyx_t_2);
16550   __pyx_v_hash_data = ((PyObject*)__pyx_t_2);
16551   __pyx_t_2 = 0;
16552 
16553   /* "yt/geometry/_selection_routines/selector_object.pxi":554
16554  *             return self._hash
16555  *         hash_data = bytearray()
16556  *         for v in self._hash_vals() + self._base_hash():             # <<<<<<<<<<<<<<
16557  *             if isinstance(v, tuple):
16558  *                 hash_data.extend(v[0].encode('ascii'))
16559  */
16560   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_hash_vals); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 554, __pyx_L1_error)
16561   __Pyx_GOTREF(__pyx_t_3);
16562   __pyx_t_4 = NULL;
16563   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
16564     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
16565     if (likely(__pyx_t_4)) {
16566       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
16567       __Pyx_INCREF(__pyx_t_4);
16568       __Pyx_INCREF(function);
16569       __Pyx_DECREF_SET(__pyx_t_3, function);
16570     }
16571   }
16572   __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
16573   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
16574   if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 554, __pyx_L1_error)
16575   __Pyx_GOTREF(__pyx_t_2);
16576   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
16577   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base_hash); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 554, __pyx_L1_error)
16578   __Pyx_GOTREF(__pyx_t_4);
16579   __pyx_t_5 = NULL;
16580   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
16581     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
16582     if (likely(__pyx_t_5)) {
16583       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
16584       __Pyx_INCREF(__pyx_t_5);
16585       __Pyx_INCREF(function);
16586       __Pyx_DECREF_SET(__pyx_t_4, function);
16587     }
16588   }
16589   __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
16590   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
16591   if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 554, __pyx_L1_error)
16592   __Pyx_GOTREF(__pyx_t_3);
16593   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
16594   __pyx_t_4 = PyNumber_Add(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 554, __pyx_L1_error)
16595   __Pyx_GOTREF(__pyx_t_4);
16596   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
16597   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
16598   if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
16599     __pyx_t_3 = __pyx_t_4; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
16600     __pyx_t_7 = NULL;
16601   } else {
16602     __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 554, __pyx_L1_error)
16603     __Pyx_GOTREF(__pyx_t_3);
16604     __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 554, __pyx_L1_error)
16605   }
16606   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
16607   for (;;) {
16608     if (likely(!__pyx_t_7)) {
16609       if (likely(PyList_CheckExact(__pyx_t_3))) {
16610         if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
16611         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
16612         __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(1, 554, __pyx_L1_error)
16613         #else
16614         __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 554, __pyx_L1_error)
16615         __Pyx_GOTREF(__pyx_t_4);
16616         #endif
16617       } else {
16618         if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
16619         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
16620         __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(1, 554, __pyx_L1_error)
16621         #else
16622         __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 554, __pyx_L1_error)
16623         __Pyx_GOTREF(__pyx_t_4);
16624         #endif
16625       }
16626     } else {
16627       __pyx_t_4 = __pyx_t_7(__pyx_t_3);
16628       if (unlikely(!__pyx_t_4)) {
16629         PyObject* exc_type = PyErr_Occurred();
16630         if (exc_type) {
16631           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
16632           else __PYX_ERR(1, 554, __pyx_L1_error)
16633         }
16634         break;
16635       }
16636       __Pyx_GOTREF(__pyx_t_4);
16637     }
16638     __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_4);
16639     __pyx_t_4 = 0;
16640 
16641     /* "yt/geometry/_selection_routines/selector_object.pxi":555
16642  *         hash_data = bytearray()
16643  *         for v in self._hash_vals() + self._base_hash():
16644  *             if isinstance(v, tuple):             # <<<<<<<<<<<<<<
16645  *                 hash_data.extend(v[0].encode('ascii'))
16646  *                 hash_data.extend(repr(v[1]).encode('ascii'))
16647  */
16648     __pyx_t_1 = PyTuple_Check(__pyx_v_v);
16649     __pyx_t_8 = (__pyx_t_1 != 0);
16650     if (__pyx_t_8) {
16651 
16652       /* "yt/geometry/_selection_routines/selector_object.pxi":556
16653  *         for v in self._hash_vals() + self._base_hash():
16654  *             if isinstance(v, tuple):
16655  *                 hash_data.extend(v[0].encode('ascii'))             # <<<<<<<<<<<<<<
16656  *                 hash_data.extend(repr(v[1]).encode('ascii'))
16657  *             else:
16658  */
16659       __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_v, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 556, __pyx_L1_error)
16660       __Pyx_GOTREF(__pyx_t_2);
16661       __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 556, __pyx_L1_error)
16662       __Pyx_GOTREF(__pyx_t_5);
16663       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
16664       __pyx_t_2 = NULL;
16665       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
16666         __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_5);
16667         if (likely(__pyx_t_2)) {
16668           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
16669           __Pyx_INCREF(__pyx_t_2);
16670           __Pyx_INCREF(function);
16671           __Pyx_DECREF_SET(__pyx_t_5, function);
16672         }
16673       }
16674       __pyx_t_4 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_2, __pyx_n_s_ascii) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ascii);
16675       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
16676       if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 556, __pyx_L1_error)
16677       __Pyx_GOTREF(__pyx_t_4);
16678       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
16679       __pyx_t_5 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyByteArray_Type_extend, __pyx_v_hash_data, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 556, __pyx_L1_error)
16680       __Pyx_GOTREF(__pyx_t_5);
16681       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
16682       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
16683 
16684       /* "yt/geometry/_selection_routines/selector_object.pxi":557
16685  *             if isinstance(v, tuple):
16686  *                 hash_data.extend(v[0].encode('ascii'))
16687  *                 hash_data.extend(repr(v[1]).encode('ascii'))             # <<<<<<<<<<<<<<
16688  *             else:
16689  *                 hash_data.extend(repr(v).encode('ascii'))
16690  */
16691       __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_v, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 557, __pyx_L1_error)
16692       __Pyx_GOTREF(__pyx_t_4);
16693       __pyx_t_2 = PyObject_Repr(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 557, __pyx_L1_error)
16694       __Pyx_GOTREF(__pyx_t_2);
16695       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
16696       __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 557, __pyx_L1_error)
16697       __Pyx_GOTREF(__pyx_t_4);
16698       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
16699       __pyx_t_2 = NULL;
16700       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
16701         __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
16702         if (likely(__pyx_t_2)) {
16703           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
16704           __Pyx_INCREF(__pyx_t_2);
16705           __Pyx_INCREF(function);
16706           __Pyx_DECREF_SET(__pyx_t_4, function);
16707         }
16708       }
16709       __pyx_t_5 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_2, __pyx_n_s_ascii) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_n_s_ascii);
16710       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
16711       if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 557, __pyx_L1_error)
16712       __Pyx_GOTREF(__pyx_t_5);
16713       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
16714       __pyx_t_4 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyByteArray_Type_extend, __pyx_v_hash_data, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 557, __pyx_L1_error)
16715       __Pyx_GOTREF(__pyx_t_4);
16716       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
16717       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
16718 
16719       /* "yt/geometry/_selection_routines/selector_object.pxi":555
16720  *         hash_data = bytearray()
16721  *         for v in self._hash_vals() + self._base_hash():
16722  *             if isinstance(v, tuple):             # <<<<<<<<<<<<<<
16723  *                 hash_data.extend(v[0].encode('ascii'))
16724  *                 hash_data.extend(repr(v[1]).encode('ascii'))
16725  */
16726       goto __pyx_L6;
16727     }
16728 
16729     /* "yt/geometry/_selection_routines/selector_object.pxi":559
16730  *                 hash_data.extend(repr(v[1]).encode('ascii'))
16731  *             else:
16732  *                 hash_data.extend(repr(v).encode('ascii'))             # <<<<<<<<<<<<<<
16733  *         cdef np.int64_t hash_value = fnv_hash(hash_data)
16734  *         self._hash = hash_value
16735  */
16736     /*else*/ {
16737       __pyx_t_5 = PyObject_Repr(__pyx_v_v); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 559, __pyx_L1_error)
16738       __Pyx_GOTREF(__pyx_t_5);
16739       __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_encode); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 559, __pyx_L1_error)
16740       __Pyx_GOTREF(__pyx_t_2);
16741       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
16742       __pyx_t_5 = NULL;
16743       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
16744         __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
16745         if (likely(__pyx_t_5)) {
16746           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
16747           __Pyx_INCREF(__pyx_t_5);
16748           __Pyx_INCREF(function);
16749           __Pyx_DECREF_SET(__pyx_t_2, function);
16750         }
16751       }
16752       __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_n_s_ascii) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_n_s_ascii);
16753       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
16754       if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 559, __pyx_L1_error)
16755       __Pyx_GOTREF(__pyx_t_4);
16756       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
16757       __pyx_t_2 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyByteArray_Type_extend, __pyx_v_hash_data, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 559, __pyx_L1_error)
16758       __Pyx_GOTREF(__pyx_t_2);
16759       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
16760       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
16761     }
16762     __pyx_L6:;
16763 
16764     /* "yt/geometry/_selection_routines/selector_object.pxi":554
16765  *             return self._hash
16766  *         hash_data = bytearray()
16767  *         for v in self._hash_vals() + self._base_hash():             # <<<<<<<<<<<<<<
16768  *             if isinstance(v, tuple):
16769  *                 hash_data.extend(v[0].encode('ascii'))
16770  */
16771   }
16772   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
16773 
16774   /* "yt/geometry/_selection_routines/selector_object.pxi":560
16775  *             else:
16776  *                 hash_data.extend(repr(v).encode('ascii'))
16777  *         cdef np.int64_t hash_value = fnv_hash(hash_data)             # <<<<<<<<<<<<<<
16778  *         self._hash = hash_value
16779  *         self._hash_initialized = 1
16780  */
16781   __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(__pyx_v_hash_data, PyBUF_WRITABLE); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(1, 560, __pyx_L1_error)
16782   __pyx_v_hash_value = __pyx_f_2yt_9utilities_3lib_8fnv_hash_c_fnv_hash(__pyx_t_9);
16783   __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
16784   __pyx_t_9.memview = NULL;
16785   __pyx_t_9.data = NULL;
16786 
16787   /* "yt/geometry/_selection_routines/selector_object.pxi":561
16788  *                 hash_data.extend(repr(v).encode('ascii'))
16789  *         cdef np.int64_t hash_value = fnv_hash(hash_data)
16790  *         self._hash = hash_value             # <<<<<<<<<<<<<<
16791  *         self._hash_initialized = 1
16792  *         return hash_value
16793  */
16794   __pyx_v_self->_hash = __pyx_v_hash_value;
16795 
16796   /* "yt/geometry/_selection_routines/selector_object.pxi":562
16797  *         cdef np.int64_t hash_value = fnv_hash(hash_data)
16798  *         self._hash = hash_value
16799  *         self._hash_initialized = 1             # <<<<<<<<<<<<<<
16800  *         return hash_value
16801  *
16802  */
16803   __pyx_v_self->_hash_initialized = 1;
16804 
16805   /* "yt/geometry/_selection_routines/selector_object.pxi":563
16806  *         self._hash = hash_value
16807  *         self._hash_initialized = 1
16808  *         return hash_value             # <<<<<<<<<<<<<<
16809  *
16810  *     def _hash_vals(self):
16811  */
16812   __pyx_r = __pyx_v_hash_value;
16813   goto __pyx_L0;
16814 
16815   /* "yt/geometry/_selection_routines/selector_object.pxi":549
16816  *         return mask.view("bool")
16817  *
16818  *     def __hash__(self):             # <<<<<<<<<<<<<<
16819  *         # convert data to be hashed to a byte array, which FNV algorithm expects
16820  *         if self._hash_initialized == 1:
16821  */
16822 
16823   /* function exit code */
16824   __pyx_L1_error:;
16825   __Pyx_XDECREF(__pyx_t_2);
16826   __Pyx_XDECREF(__pyx_t_3);
16827   __Pyx_XDECREF(__pyx_t_4);
16828   __Pyx_XDECREF(__pyx_t_5);
16829   __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
16830   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.__hash__", __pyx_clineno, __pyx_lineno, __pyx_filename);
16831   __pyx_r = -1;
16832   __pyx_L0:;
16833   __Pyx_XDECREF(__pyx_v_hash_data);
16834   __Pyx_XDECREF(__pyx_v_v);
16835   if (unlikely(__pyx_r == -1) && !PyErr_Occurred()) __pyx_r = -2;
16836   __Pyx_RefNannyFinishContext();
16837   return __pyx_r;
16838 }
16839 
16840 /* "yt/geometry/_selection_routines/selector_object.pxi":565
16841  *         return hash_value
16842  *
16843  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
16844  *         raise NotImplementedError
16845  *
16846  */
16847 
16848 /* Python wrapper */
16849 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_23_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
16850 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_23_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
16851   PyObject *__pyx_r = 0;
16852   __Pyx_RefNannyDeclarations
16853   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
16854   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_22_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
16855 
16856   /* function exit code */
16857   __Pyx_RefNannyFinishContext();
16858   return __pyx_r;
16859 }
16860 
16861 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_22_hash_vals(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
16862   PyObject *__pyx_r = NULL;
16863   __Pyx_RefNannyDeclarations
16864   __Pyx_RefNannySetupContext("_hash_vals", 0);
16865 
16866   /* "yt/geometry/_selection_routines/selector_object.pxi":566
16867  *
16868  *     def _hash_vals(self):
16869  *         raise NotImplementedError             # <<<<<<<<<<<<<<
16870  *
16871  *     def _base_hash(self):
16872  */
16873   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
16874   __PYX_ERR(1, 566, __pyx_L1_error)
16875 
16876   /* "yt/geometry/_selection_routines/selector_object.pxi":565
16877  *         return hash_value
16878  *
16879  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
16880  *         raise NotImplementedError
16881  *
16882  */
16883 
16884   /* function exit code */
16885   __pyx_L1_error:;
16886   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
16887   __pyx_r = NULL;
16888   __Pyx_XGIVEREF(__pyx_r);
16889   __Pyx_RefNannyFinishContext();
16890   return __pyx_r;
16891 }
16892 
16893 /* "yt/geometry/_selection_routines/selector_object.pxi":568
16894  *         raise NotImplementedError
16895  *
16896  *     def _base_hash(self):             # <<<<<<<<<<<<<<
16897  *         return (("min_level", self.min_level),
16898  *                 ("max_level", self.max_level),
16899  */
16900 
16901 /* Python wrapper */
16902 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_25_base_hash(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
16903 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_25_base_hash(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
16904   PyObject *__pyx_r = 0;
16905   __Pyx_RefNannyDeclarations
16906   __Pyx_RefNannySetupContext("_base_hash (wrapper)", 0);
16907   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_24_base_hash(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
16908 
16909   /* function exit code */
16910   __Pyx_RefNannyFinishContext();
16911   return __pyx_r;
16912 }
16913 
16914 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_24_base_hash(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
16915   PyObject *__pyx_r = NULL;
16916   __Pyx_RefNannyDeclarations
16917   PyObject *__pyx_t_1 = NULL;
16918   PyObject *__pyx_t_2 = NULL;
16919   PyObject *__pyx_t_3 = NULL;
16920   PyObject *__pyx_t_4 = NULL;
16921   PyObject *__pyx_t_5 = NULL;
16922   PyObject *__pyx_t_6 = NULL;
16923   PyObject *__pyx_t_7 = NULL;
16924   PyObject *__pyx_t_8 = NULL;
16925   PyObject *__pyx_t_9 = NULL;
16926   PyObject *__pyx_t_10 = NULL;
16927   __Pyx_RefNannySetupContext("_base_hash", 0);
16928 
16929   /* "yt/geometry/_selection_routines/selector_object.pxi":569
16930  *
16931  *     def _base_hash(self):
16932  *         return (("min_level", self.min_level),             # <<<<<<<<<<<<<<
16933  *                 ("max_level", self.max_level),
16934  *                 ("overlap_cells", self.overlap_cells),
16935  */
16936   __Pyx_XDECREF(__pyx_r);
16937   __pyx_t_1 = __Pyx_PyInt_From_npy_int32(__pyx_v_self->min_level); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 569, __pyx_L1_error)
16938   __Pyx_GOTREF(__pyx_t_1);
16939   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 569, __pyx_L1_error)
16940   __Pyx_GOTREF(__pyx_t_2);
16941   __Pyx_INCREF(__pyx_n_s_min_level);
16942   __Pyx_GIVEREF(__pyx_n_s_min_level);
16943   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_min_level);
16944   __Pyx_GIVEREF(__pyx_t_1);
16945   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
16946   __pyx_t_1 = 0;
16947 
16948   /* "yt/geometry/_selection_routines/selector_object.pxi":570
16949  *     def _base_hash(self):
16950  *         return (("min_level", self.min_level),
16951  *                 ("max_level", self.max_level),             # <<<<<<<<<<<<<<
16952  *                 ("overlap_cells", self.overlap_cells),
16953  *                 ("periodicity[0]", self.periodicity[0]),
16954  */
16955   __pyx_t_1 = __Pyx_PyInt_From_npy_int32(__pyx_v_self->max_level); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 570, __pyx_L1_error)
16956   __Pyx_GOTREF(__pyx_t_1);
16957   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 570, __pyx_L1_error)
16958   __Pyx_GOTREF(__pyx_t_3);
16959   __Pyx_INCREF(__pyx_n_s_max_level);
16960   __Pyx_GIVEREF(__pyx_n_s_max_level);
16961   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_max_level);
16962   __Pyx_GIVEREF(__pyx_t_1);
16963   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
16964   __pyx_t_1 = 0;
16965 
16966   /* "yt/geometry/_selection_routines/selector_object.pxi":571
16967  *         return (("min_level", self.min_level),
16968  *                 ("max_level", self.max_level),
16969  *                 ("overlap_cells", self.overlap_cells),             # <<<<<<<<<<<<<<
16970  *                 ("periodicity[0]", self.periodicity[0]),
16971  *                 ("periodicity[1]", self.periodicity[1]),
16972  */
16973   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->overlap_cells); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 571, __pyx_L1_error)
16974   __Pyx_GOTREF(__pyx_t_1);
16975   __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 571, __pyx_L1_error)
16976   __Pyx_GOTREF(__pyx_t_4);
16977   __Pyx_INCREF(__pyx_n_s_overlap_cells);
16978   __Pyx_GIVEREF(__pyx_n_s_overlap_cells);
16979   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_overlap_cells);
16980   __Pyx_GIVEREF(__pyx_t_1);
16981   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
16982   __pyx_t_1 = 0;
16983 
16984   /* "yt/geometry/_selection_routines/selector_object.pxi":572
16985  *                 ("max_level", self.max_level),
16986  *                 ("overlap_cells", self.overlap_cells),
16987  *                 ("periodicity[0]", self.periodicity[0]),             # <<<<<<<<<<<<<<
16988  *                 ("periodicity[1]", self.periodicity[1]),
16989  *                 ("periodicity[2]", self.periodicity[2]),
16990  */
16991   __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_self->periodicity[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 572, __pyx_L1_error)
16992   __Pyx_GOTREF(__pyx_t_1);
16993   __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 572, __pyx_L1_error)
16994   __Pyx_GOTREF(__pyx_t_5);
16995   __Pyx_INCREF(__pyx_kp_s_periodicity_0);
16996   __Pyx_GIVEREF(__pyx_kp_s_periodicity_0);
16997   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_s_periodicity_0);
16998   __Pyx_GIVEREF(__pyx_t_1);
16999   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
17000   __pyx_t_1 = 0;
17001 
17002   /* "yt/geometry/_selection_routines/selector_object.pxi":573
17003  *                 ("overlap_cells", self.overlap_cells),
17004  *                 ("periodicity[0]", self.periodicity[0]),
17005  *                 ("periodicity[1]", self.periodicity[1]),             # <<<<<<<<<<<<<<
17006  *                 ("periodicity[2]", self.periodicity[2]),
17007  *                 ("domain_width[0]", self.domain_width[0]),
17008  */
17009   __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_self->periodicity[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 573, __pyx_L1_error)
17010   __Pyx_GOTREF(__pyx_t_1);
17011   __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 573, __pyx_L1_error)
17012   __Pyx_GOTREF(__pyx_t_6);
17013   __Pyx_INCREF(__pyx_kp_s_periodicity_1);
17014   __Pyx_GIVEREF(__pyx_kp_s_periodicity_1);
17015   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_s_periodicity_1);
17016   __Pyx_GIVEREF(__pyx_t_1);
17017   PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
17018   __pyx_t_1 = 0;
17019 
17020   /* "yt/geometry/_selection_routines/selector_object.pxi":574
17021  *                 ("periodicity[0]", self.periodicity[0]),
17022  *                 ("periodicity[1]", self.periodicity[1]),
17023  *                 ("periodicity[2]", self.periodicity[2]),             # <<<<<<<<<<<<<<
17024  *                 ("domain_width[0]", self.domain_width[0]),
17025  *                 ("domain_width[1]", self.domain_width[1]),
17026  */
17027   __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_self->periodicity[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 574, __pyx_L1_error)
17028   __Pyx_GOTREF(__pyx_t_1);
17029   __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 574, __pyx_L1_error)
17030   __Pyx_GOTREF(__pyx_t_7);
17031   __Pyx_INCREF(__pyx_kp_s_periodicity_2);
17032   __Pyx_GIVEREF(__pyx_kp_s_periodicity_2);
17033   PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_s_periodicity_2);
17034   __Pyx_GIVEREF(__pyx_t_1);
17035   PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
17036   __pyx_t_1 = 0;
17037 
17038   /* "yt/geometry/_selection_routines/selector_object.pxi":575
17039  *                 ("periodicity[1]", self.periodicity[1]),
17040  *                 ("periodicity[2]", self.periodicity[2]),
17041  *                 ("domain_width[0]", self.domain_width[0]),             # <<<<<<<<<<<<<<
17042  *                 ("domain_width[1]", self.domain_width[1]),
17043  *                 ("domain_width[2]", self.domain_width[2]))
17044  */
17045   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->domain_width[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 575, __pyx_L1_error)
17046   __Pyx_GOTREF(__pyx_t_1);
17047   __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 575, __pyx_L1_error)
17048   __Pyx_GOTREF(__pyx_t_8);
17049   __Pyx_INCREF(__pyx_kp_s_domain_width_0);
17050   __Pyx_GIVEREF(__pyx_kp_s_domain_width_0);
17051   PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_s_domain_width_0);
17052   __Pyx_GIVEREF(__pyx_t_1);
17053   PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1);
17054   __pyx_t_1 = 0;
17055 
17056   /* "yt/geometry/_selection_routines/selector_object.pxi":576
17057  *                 ("periodicity[2]", self.periodicity[2]),
17058  *                 ("domain_width[0]", self.domain_width[0]),
17059  *                 ("domain_width[1]", self.domain_width[1]),             # <<<<<<<<<<<<<<
17060  *                 ("domain_width[2]", self.domain_width[2]))
17061  *
17062  */
17063   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->domain_width[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 576, __pyx_L1_error)
17064   __Pyx_GOTREF(__pyx_t_1);
17065   __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 576, __pyx_L1_error)
17066   __Pyx_GOTREF(__pyx_t_9);
17067   __Pyx_INCREF(__pyx_kp_s_domain_width_1);
17068   __Pyx_GIVEREF(__pyx_kp_s_domain_width_1);
17069   PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_s_domain_width_1);
17070   __Pyx_GIVEREF(__pyx_t_1);
17071   PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1);
17072   __pyx_t_1 = 0;
17073 
17074   /* "yt/geometry/_selection_routines/selector_object.pxi":577
17075  *                 ("domain_width[0]", self.domain_width[0]),
17076  *                 ("domain_width[1]", self.domain_width[1]),
17077  *                 ("domain_width[2]", self.domain_width[2]))             # <<<<<<<<<<<<<<
17078  *
17079  *     def _get_state_attnames(self):
17080  */
17081   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->domain_width[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 577, __pyx_L1_error)
17082   __Pyx_GOTREF(__pyx_t_1);
17083   __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 577, __pyx_L1_error)
17084   __Pyx_GOTREF(__pyx_t_10);
17085   __Pyx_INCREF(__pyx_kp_s_domain_width_2);
17086   __Pyx_GIVEREF(__pyx_kp_s_domain_width_2);
17087   PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_s_domain_width_2);
17088   __Pyx_GIVEREF(__pyx_t_1);
17089   PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_1);
17090   __pyx_t_1 = 0;
17091 
17092   /* "yt/geometry/_selection_routines/selector_object.pxi":569
17093  *
17094  *     def _base_hash(self):
17095  *         return (("min_level", self.min_level),             # <<<<<<<<<<<<<<
17096  *                 ("max_level", self.max_level),
17097  *                 ("overlap_cells", self.overlap_cells),
17098  */
17099   __pyx_t_1 = PyTuple_New(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 569, __pyx_L1_error)
17100   __Pyx_GOTREF(__pyx_t_1);
17101   __Pyx_GIVEREF(__pyx_t_2);
17102   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
17103   __Pyx_GIVEREF(__pyx_t_3);
17104   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
17105   __Pyx_GIVEREF(__pyx_t_4);
17106   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
17107   __Pyx_GIVEREF(__pyx_t_5);
17108   PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_5);
17109   __Pyx_GIVEREF(__pyx_t_6);
17110   PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_6);
17111   __Pyx_GIVEREF(__pyx_t_7);
17112   PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_7);
17113   __Pyx_GIVEREF(__pyx_t_8);
17114   PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_t_8);
17115   __Pyx_GIVEREF(__pyx_t_9);
17116   PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_t_9);
17117   __Pyx_GIVEREF(__pyx_t_10);
17118   PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_t_10);
17119   __pyx_t_2 = 0;
17120   __pyx_t_3 = 0;
17121   __pyx_t_4 = 0;
17122   __pyx_t_5 = 0;
17123   __pyx_t_6 = 0;
17124   __pyx_t_7 = 0;
17125   __pyx_t_8 = 0;
17126   __pyx_t_9 = 0;
17127   __pyx_t_10 = 0;
17128   __pyx_r = __pyx_t_1;
17129   __pyx_t_1 = 0;
17130   goto __pyx_L0;
17131 
17132   /* "yt/geometry/_selection_routines/selector_object.pxi":568
17133  *         raise NotImplementedError
17134  *
17135  *     def _base_hash(self):             # <<<<<<<<<<<<<<
17136  *         return (("min_level", self.min_level),
17137  *                 ("max_level", self.max_level),
17138  */
17139 
17140   /* function exit code */
17141   __pyx_L1_error:;
17142   __Pyx_XDECREF(__pyx_t_1);
17143   __Pyx_XDECREF(__pyx_t_2);
17144   __Pyx_XDECREF(__pyx_t_3);
17145   __Pyx_XDECREF(__pyx_t_4);
17146   __Pyx_XDECREF(__pyx_t_5);
17147   __Pyx_XDECREF(__pyx_t_6);
17148   __Pyx_XDECREF(__pyx_t_7);
17149   __Pyx_XDECREF(__pyx_t_8);
17150   __Pyx_XDECREF(__pyx_t_9);
17151   __Pyx_XDECREF(__pyx_t_10);
17152   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject._base_hash", __pyx_clineno, __pyx_lineno, __pyx_filename);
17153   __pyx_r = NULL;
17154   __pyx_L0:;
17155   __Pyx_XGIVEREF(__pyx_r);
17156   __Pyx_RefNannyFinishContext();
17157   return __pyx_r;
17158 }
17159 
17160 /* "yt/geometry/_selection_routines/selector_object.pxi":579
17161  *                 ("domain_width[2]", self.domain_width[2]))
17162  *
17163  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
17164  *         # return a tupe of attr names for __setstate__: implement for each subclass
17165  *         raise NotImplementedError
17166  */
17167 
17168 /* Python wrapper */
17169 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_27_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
17170 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_27_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
17171   PyObject *__pyx_r = 0;
17172   __Pyx_RefNannyDeclarations
17173   __Pyx_RefNannySetupContext("_get_state_attnames (wrapper)", 0);
17174   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_26_get_state_attnames(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
17175 
17176   /* function exit code */
17177   __Pyx_RefNannyFinishContext();
17178   return __pyx_r;
17179 }
17180 
17181 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_26_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
17182   PyObject *__pyx_r = NULL;
17183   __Pyx_RefNannyDeclarations
17184   __Pyx_RefNannySetupContext("_get_state_attnames", 0);
17185 
17186   /* "yt/geometry/_selection_routines/selector_object.pxi":581
17187  *     def _get_state_attnames(self):
17188  *         # return a tupe of attr names for __setstate__: implement for each subclass
17189  *         raise NotImplementedError             # <<<<<<<<<<<<<<
17190  *
17191  *     def __getstate__(self):
17192  */
17193   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
17194   __PYX_ERR(1, 581, __pyx_L1_error)
17195 
17196   /* "yt/geometry/_selection_routines/selector_object.pxi":579
17197  *                 ("domain_width[2]", self.domain_width[2]))
17198  *
17199  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
17200  *         # return a tupe of attr names for __setstate__: implement for each subclass
17201  *         raise NotImplementedError
17202  */
17203 
17204   /* function exit code */
17205   __pyx_L1_error:;
17206   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject._get_state_attnames", __pyx_clineno, __pyx_lineno, __pyx_filename);
17207   __pyx_r = NULL;
17208   __Pyx_XGIVEREF(__pyx_r);
17209   __Pyx_RefNannyFinishContext();
17210   return __pyx_r;
17211 }
17212 
17213 /* "yt/geometry/_selection_routines/selector_object.pxi":583
17214  *         raise NotImplementedError
17215  *
17216  *     def __getstate__(self):             # <<<<<<<<<<<<<<
17217  *         # returns a tuple containing (attribute name, attribute value) tuples needed to
17218  *         # rebuild the state:
17219  */
17220 
17221 /* Python wrapper */
17222 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_29__getstate__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
17223 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_29__getstate__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
17224   PyObject *__pyx_r = 0;
17225   __Pyx_RefNannyDeclarations
17226   __Pyx_RefNannySetupContext("__getstate__ (wrapper)", 0);
17227   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_28__getstate__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
17228 
17229   /* function exit code */
17230   __Pyx_RefNannyFinishContext();
17231   return __pyx_r;
17232 }
17233 
17234 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_28__getstate__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
17235   PyObject *__pyx_v_base_atts = NULL;
17236   PyObject *__pyx_v_child_atts = NULL;
17237   PyObject *__pyx_v_state_tuple = NULL;
17238   PyObject *__pyx_v_fld = NULL;
17239   PyObject *__pyx_r = NULL;
17240   __Pyx_RefNannyDeclarations
17241   PyObject *__pyx_t_1 = NULL;
17242   PyObject *__pyx_t_2 = NULL;
17243   PyObject *__pyx_t_3 = NULL;
17244   Py_ssize_t __pyx_t_4;
17245   PyObject *(*__pyx_t_5)(PyObject *);
17246   __Pyx_RefNannySetupContext("__getstate__", 0);
17247 
17248   /* "yt/geometry/_selection_routines/selector_object.pxi":586
17249  *         # returns a tuple containing (attribute name, attribute value) tuples needed to
17250  *         # rebuild the state:
17251  *         base_atts = ("min_level", "max_level", "overlap_cells",             # <<<<<<<<<<<<<<
17252  *                      "periodicity", "domain_width", "domain_center")
17253  *         child_atts = self._get_state_attnames()
17254  */
17255   __Pyx_INCREF(__pyx_tuple__6);
17256   __pyx_v_base_atts = __pyx_tuple__6;
17257 
17258   /* "yt/geometry/_selection_routines/selector_object.pxi":588
17259  *         base_atts = ("min_level", "max_level", "overlap_cells",
17260  *                      "periodicity", "domain_width", "domain_center")
17261  *         child_atts = self._get_state_attnames()             # <<<<<<<<<<<<<<
17262  *
17263  *         # assemble the state_tuple (('a1', a1val), ('a2', a2val),...)
17264  */
17265   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_state_attnames); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 588, __pyx_L1_error)
17266   __Pyx_GOTREF(__pyx_t_2);
17267   __pyx_t_3 = NULL;
17268   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
17269     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
17270     if (likely(__pyx_t_3)) {
17271       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
17272       __Pyx_INCREF(__pyx_t_3);
17273       __Pyx_INCREF(function);
17274       __Pyx_DECREF_SET(__pyx_t_2, function);
17275     }
17276   }
17277   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
17278   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
17279   if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 588, __pyx_L1_error)
17280   __Pyx_GOTREF(__pyx_t_1);
17281   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
17282   __pyx_v_child_atts = __pyx_t_1;
17283   __pyx_t_1 = 0;
17284 
17285   /* "yt/geometry/_selection_routines/selector_object.pxi":591
17286  *
17287  *         # assemble the state_tuple (('a1', a1val), ('a2', a2val),...)
17288  *         state_tuple = ()             # <<<<<<<<<<<<<<
17289  *         for fld in base_atts + child_atts:
17290  *             state_tuple += ((fld, getattr(self, fld)), )
17291  */
17292   __Pyx_INCREF(__pyx_empty_tuple);
17293   __pyx_v_state_tuple = __pyx_empty_tuple;
17294 
17295   /* "yt/geometry/_selection_routines/selector_object.pxi":592
17296  *         # assemble the state_tuple (('a1', a1val), ('a2', a2val),...)
17297  *         state_tuple = ()
17298  *         for fld in base_atts + child_atts:             # <<<<<<<<<<<<<<
17299  *             state_tuple += ((fld, getattr(self, fld)), )
17300  *         return state_tuple
17301  */
17302   __pyx_t_1 = PyNumber_Add(__pyx_v_base_atts, __pyx_v_child_atts); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 592, __pyx_L1_error)
17303   __Pyx_GOTREF(__pyx_t_1);
17304   if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
17305     __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0;
17306     __pyx_t_5 = NULL;
17307   } else {
17308     __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 592, __pyx_L1_error)
17309     __Pyx_GOTREF(__pyx_t_2);
17310     __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 592, __pyx_L1_error)
17311   }
17312   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
17313   for (;;) {
17314     if (likely(!__pyx_t_5)) {
17315       if (likely(PyList_CheckExact(__pyx_t_2))) {
17316         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break;
17317         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
17318         __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(1, 592, __pyx_L1_error)
17319         #else
17320         __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 592, __pyx_L1_error)
17321         __Pyx_GOTREF(__pyx_t_1);
17322         #endif
17323       } else {
17324         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
17325         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
17326         __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(1, 592, __pyx_L1_error)
17327         #else
17328         __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 592, __pyx_L1_error)
17329         __Pyx_GOTREF(__pyx_t_1);
17330         #endif
17331       }
17332     } else {
17333       __pyx_t_1 = __pyx_t_5(__pyx_t_2);
17334       if (unlikely(!__pyx_t_1)) {
17335         PyObject* exc_type = PyErr_Occurred();
17336         if (exc_type) {
17337           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
17338           else __PYX_ERR(1, 592, __pyx_L1_error)
17339         }
17340         break;
17341       }
17342       __Pyx_GOTREF(__pyx_t_1);
17343     }
17344     __Pyx_XDECREF_SET(__pyx_v_fld, __pyx_t_1);
17345     __pyx_t_1 = 0;
17346 
17347     /* "yt/geometry/_selection_routines/selector_object.pxi":593
17348  *         state_tuple = ()
17349  *         for fld in base_atts + child_atts:
17350  *             state_tuple += ((fld, getattr(self, fld)), )             # <<<<<<<<<<<<<<
17351  *         return state_tuple
17352  *
17353  */
17354     __pyx_t_1 = __Pyx_GetAttr(((PyObject *)__pyx_v_self), __pyx_v_fld); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 593, __pyx_L1_error)
17355     __Pyx_GOTREF(__pyx_t_1);
17356     __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 593, __pyx_L1_error)
17357     __Pyx_GOTREF(__pyx_t_3);
17358     __Pyx_INCREF(__pyx_v_fld);
17359     __Pyx_GIVEREF(__pyx_v_fld);
17360     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_fld);
17361     __Pyx_GIVEREF(__pyx_t_1);
17362     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
17363     __pyx_t_1 = 0;
17364     __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 593, __pyx_L1_error)
17365     __Pyx_GOTREF(__pyx_t_1);
17366     __Pyx_GIVEREF(__pyx_t_3);
17367     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
17368     __pyx_t_3 = 0;
17369     __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state_tuple, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 593, __pyx_L1_error)
17370     __Pyx_GOTREF(__pyx_t_3);
17371     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
17372     __Pyx_DECREF_SET(__pyx_v_state_tuple, ((PyObject*)__pyx_t_3));
17373     __pyx_t_3 = 0;
17374 
17375     /* "yt/geometry/_selection_routines/selector_object.pxi":592
17376  *         # assemble the state_tuple (('a1', a1val), ('a2', a2val),...)
17377  *         state_tuple = ()
17378  *         for fld in base_atts + child_atts:             # <<<<<<<<<<<<<<
17379  *             state_tuple += ((fld, getattr(self, fld)), )
17380  *         return state_tuple
17381  */
17382   }
17383   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
17384 
17385   /* "yt/geometry/_selection_routines/selector_object.pxi":594
17386  *         for fld in base_atts + child_atts:
17387  *             state_tuple += ((fld, getattr(self, fld)), )
17388  *         return state_tuple             # <<<<<<<<<<<<<<
17389  *
17390  *     def __getnewargs__(self):
17391  */
17392   __Pyx_XDECREF(__pyx_r);
17393   __Pyx_INCREF(__pyx_v_state_tuple);
17394   __pyx_r = __pyx_v_state_tuple;
17395   goto __pyx_L0;
17396 
17397   /* "yt/geometry/_selection_routines/selector_object.pxi":583
17398  *         raise NotImplementedError
17399  *
17400  *     def __getstate__(self):             # <<<<<<<<<<<<<<
17401  *         # returns a tuple containing (attribute name, attribute value) tuples needed to
17402  *         # rebuild the state:
17403  */
17404 
17405   /* function exit code */
17406   __pyx_L1_error:;
17407   __Pyx_XDECREF(__pyx_t_1);
17408   __Pyx_XDECREF(__pyx_t_2);
17409   __Pyx_XDECREF(__pyx_t_3);
17410   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.__getstate__", __pyx_clineno, __pyx_lineno, __pyx_filename);
17411   __pyx_r = NULL;
17412   __pyx_L0:;
17413   __Pyx_XDECREF(__pyx_v_base_atts);
17414   __Pyx_XDECREF(__pyx_v_child_atts);
17415   __Pyx_XDECREF(__pyx_v_state_tuple);
17416   __Pyx_XDECREF(__pyx_v_fld);
17417   __Pyx_XGIVEREF(__pyx_r);
17418   __Pyx_RefNannyFinishContext();
17419   return __pyx_r;
17420 }
17421 
17422 /* "yt/geometry/_selection_routines/selector_object.pxi":596
17423  *         return state_tuple
17424  *
17425  *     def __getnewargs__(self):             # <<<<<<<<<<<<<<
17426  *         # __setstate__ will always call __cinit__, this pickle hoook returns arguments
17427  *         # to __cinit__. We will give it None so we dont error then set attributes in
17428  */
17429 
17430 /* Python wrapper */
17431 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_31__getnewargs__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
17432 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_31__getnewargs__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
17433   PyObject *__pyx_r = 0;
17434   __Pyx_RefNannyDeclarations
17435   __Pyx_RefNannySetupContext("__getnewargs__ (wrapper)", 0);
17436   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_30__getnewargs__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
17437 
17438   /* function exit code */
17439   __Pyx_RefNannyFinishContext();
17440   return __pyx_r;
17441 }
17442 
17443 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_30__getnewargs__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
17444   PyObject *__pyx_r = NULL;
17445   __Pyx_RefNannyDeclarations
17446   __Pyx_RefNannySetupContext("__getnewargs__", 0);
17447 
17448   /* "yt/geometry/_selection_routines/selector_object.pxi":601
17449  *         # __setstate__ Note that we could avoid this by making dobj an optional argument
17450  *         # to __cinit__
17451  *         return (None, )             # <<<<<<<<<<<<<<
17452  *
17453  *     def __setstate__(self, state_tuple):
17454  */
17455   __Pyx_XDECREF(__pyx_r);
17456   __Pyx_INCREF(__pyx_tuple__7);
17457   __pyx_r = __pyx_tuple__7;
17458   goto __pyx_L0;
17459 
17460   /* "yt/geometry/_selection_routines/selector_object.pxi":596
17461  *         return state_tuple
17462  *
17463  *     def __getnewargs__(self):             # <<<<<<<<<<<<<<
17464  *         # __setstate__ will always call __cinit__, this pickle hoook returns arguments
17465  *         # to __cinit__. We will give it None so we dont error then set attributes in
17466  */
17467 
17468   /* function exit code */
17469   __pyx_L0:;
17470   __Pyx_XGIVEREF(__pyx_r);
17471   __Pyx_RefNannyFinishContext();
17472   return __pyx_r;
17473 }
17474 
17475 /* "yt/geometry/_selection_routines/selector_object.pxi":603
17476  *         return (None, )
17477  *
17478  *     def __setstate__(self, state_tuple):             # <<<<<<<<<<<<<<
17479  *         # parse and set attributes from the state_tuple: (('a1',a1val),('a2',a2val),...)
17480  *         for attr in state_tuple:
17481  */
17482 
17483 /* Python wrapper */
17484 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_33__setstate__(PyObject *__pyx_v_self, PyObject *__pyx_v_state_tuple); /*proto*/
17485 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_33__setstate__(PyObject *__pyx_v_self, PyObject *__pyx_v_state_tuple) {
17486   PyObject *__pyx_r = 0;
17487   __Pyx_RefNannyDeclarations
17488   __Pyx_RefNannySetupContext("__setstate__ (wrapper)", 0);
17489   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_32__setstate__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), ((PyObject *)__pyx_v_state_tuple));
17490 
17491   /* function exit code */
17492   __Pyx_RefNannyFinishContext();
17493   return __pyx_r;
17494 }
17495 
17496 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_32__setstate__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_state_tuple) {
17497   PyObject *__pyx_v_attr = NULL;
17498   PyObject *__pyx_r = NULL;
17499   __Pyx_RefNannyDeclarations
17500   PyObject *__pyx_t_1 = NULL;
17501   Py_ssize_t __pyx_t_2;
17502   PyObject *(*__pyx_t_3)(PyObject *);
17503   PyObject *__pyx_t_4 = NULL;
17504   PyObject *__pyx_t_5 = NULL;
17505   int __pyx_t_6;
17506   __Pyx_RefNannySetupContext("__setstate__", 0);
17507 
17508   /* "yt/geometry/_selection_routines/selector_object.pxi":605
17509  *     def __setstate__(self, state_tuple):
17510  *         # parse and set attributes from the state_tuple: (('a1',a1val),('a2',a2val),...)
17511  *         for attr in state_tuple:             # <<<<<<<<<<<<<<
17512  *             setattr(self, attr[0], attr[1])
17513  */
17514   if (likely(PyList_CheckExact(__pyx_v_state_tuple)) || PyTuple_CheckExact(__pyx_v_state_tuple)) {
17515     __pyx_t_1 = __pyx_v_state_tuple; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
17516     __pyx_t_3 = NULL;
17517   } else {
17518     __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_state_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 605, __pyx_L1_error)
17519     __Pyx_GOTREF(__pyx_t_1);
17520     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 605, __pyx_L1_error)
17521   }
17522   for (;;) {
17523     if (likely(!__pyx_t_3)) {
17524       if (likely(PyList_CheckExact(__pyx_t_1))) {
17525         if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
17526         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
17527         __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(1, 605, __pyx_L1_error)
17528         #else
17529         __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 605, __pyx_L1_error)
17530         __Pyx_GOTREF(__pyx_t_4);
17531         #endif
17532       } else {
17533         if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
17534         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
17535         __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(1, 605, __pyx_L1_error)
17536         #else
17537         __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 605, __pyx_L1_error)
17538         __Pyx_GOTREF(__pyx_t_4);
17539         #endif
17540       }
17541     } else {
17542       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
17543       if (unlikely(!__pyx_t_4)) {
17544         PyObject* exc_type = PyErr_Occurred();
17545         if (exc_type) {
17546           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
17547           else __PYX_ERR(1, 605, __pyx_L1_error)
17548         }
17549         break;
17550       }
17551       __Pyx_GOTREF(__pyx_t_4);
17552     }
17553     __Pyx_XDECREF_SET(__pyx_v_attr, __pyx_t_4);
17554     __pyx_t_4 = 0;
17555 
17556     /* "yt/geometry/_selection_routines/selector_object.pxi":606
17557  *         # parse and set attributes from the state_tuple: (('a1',a1val),('a2',a2val),...)
17558  *         for attr in state_tuple:
17559  *             setattr(self, attr[0], attr[1])             # <<<<<<<<<<<<<<
17560  */
17561     __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_attr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 606, __pyx_L1_error)
17562     __Pyx_GOTREF(__pyx_t_4);
17563     __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_attr, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 606, __pyx_L1_error)
17564     __Pyx_GOTREF(__pyx_t_5);
17565     __pyx_t_6 = PyObject_SetAttr(((PyObject *)__pyx_v_self), __pyx_t_4, __pyx_t_5); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 606, __pyx_L1_error)
17566     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
17567     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
17568 
17569     /* "yt/geometry/_selection_routines/selector_object.pxi":605
17570  *     def __setstate__(self, state_tuple):
17571  *         # parse and set attributes from the state_tuple: (('a1',a1val),('a2',a2val),...)
17572  *         for attr in state_tuple:             # <<<<<<<<<<<<<<
17573  *             setattr(self, attr[0], attr[1])
17574  */
17575   }
17576   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
17577 
17578   /* "yt/geometry/_selection_routines/selector_object.pxi":603
17579  *         return (None, )
17580  *
17581  *     def __setstate__(self, state_tuple):             # <<<<<<<<<<<<<<
17582  *         # parse and set attributes from the state_tuple: (('a1',a1val),('a2',a2val),...)
17583  *         for attr in state_tuple:
17584  */
17585 
17586   /* function exit code */
17587   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
17588   goto __pyx_L0;
17589   __pyx_L1_error:;
17590   __Pyx_XDECREF(__pyx_t_1);
17591   __Pyx_XDECREF(__pyx_t_4);
17592   __Pyx_XDECREF(__pyx_t_5);
17593   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.__setstate__", __pyx_clineno, __pyx_lineno, __pyx_filename);
17594   __pyx_r = NULL;
17595   __pyx_L0:;
17596   __Pyx_XDECREF(__pyx_v_attr);
17597   __Pyx_XGIVEREF(__pyx_r);
17598   __Pyx_RefNannyFinishContext();
17599   return __pyx_r;
17600 }
17601 
17602 /* "yt/geometry/selection_routines.pxd":25
17603  *
17604  * cdef class SelectorObject:
17605  *     cdef public np.int32_t min_level             # <<<<<<<<<<<<<<
17606  *     cdef public np.int32_t max_level
17607  *     cdef public int overlap_cells
17608  */
17609 
17610 /* Python wrapper */
17611 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9min_level_1__get__(PyObject *__pyx_v_self); /*proto*/
17612 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9min_level_1__get__(PyObject *__pyx_v_self) {
17613   PyObject *__pyx_r = 0;
17614   __Pyx_RefNannyDeclarations
17615   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
17616   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_9min_level___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
17617 
17618   /* function exit code */
17619   __Pyx_RefNannyFinishContext();
17620   return __pyx_r;
17621 }
17622 
17623 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_9min_level___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
17624   PyObject *__pyx_r = NULL;
17625   __Pyx_RefNannyDeclarations
17626   PyObject *__pyx_t_1 = NULL;
17627   __Pyx_RefNannySetupContext("__get__", 0);
17628   __Pyx_XDECREF(__pyx_r);
17629   __pyx_t_1 = __Pyx_PyInt_From_npy_int32(__pyx_v_self->min_level); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 25, __pyx_L1_error)
17630   __Pyx_GOTREF(__pyx_t_1);
17631   __pyx_r = __pyx_t_1;
17632   __pyx_t_1 = 0;
17633   goto __pyx_L0;
17634 
17635   /* function exit code */
17636   __pyx_L1_error:;
17637   __Pyx_XDECREF(__pyx_t_1);
17638   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.min_level.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
17639   __pyx_r = NULL;
17640   __pyx_L0:;
17641   __Pyx_XGIVEREF(__pyx_r);
17642   __Pyx_RefNannyFinishContext();
17643   return __pyx_r;
17644 }
17645 
17646 /* Python wrapper */
17647 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9min_level_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
17648 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9min_level_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
17649   int __pyx_r;
17650   __Pyx_RefNannyDeclarations
17651   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
17652   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_9min_level_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
17653 
17654   /* function exit code */
17655   __Pyx_RefNannyFinishContext();
17656   return __pyx_r;
17657 }
17658 
17659 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_9min_level_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_value) {
17660   int __pyx_r;
17661   __Pyx_RefNannyDeclarations
17662   __pyx_t_5numpy_int32_t __pyx_t_1;
17663   __Pyx_RefNannySetupContext("__set__", 0);
17664   __pyx_t_1 = __Pyx_PyInt_As_npy_int32(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_int32)-1)) && PyErr_Occurred())) __PYX_ERR(4, 25, __pyx_L1_error)
17665   __pyx_v_self->min_level = __pyx_t_1;
17666 
17667   /* function exit code */
17668   __pyx_r = 0;
17669   goto __pyx_L0;
17670   __pyx_L1_error:;
17671   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.min_level.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
17672   __pyx_r = -1;
17673   __pyx_L0:;
17674   __Pyx_RefNannyFinishContext();
17675   return __pyx_r;
17676 }
17677 
17678 /* "yt/geometry/selection_routines.pxd":26
17679  * cdef class SelectorObject:
17680  *     cdef public np.int32_t min_level
17681  *     cdef public np.int32_t max_level             # <<<<<<<<<<<<<<
17682  *     cdef public int overlap_cells
17683  *     cdef public np.float64_t domain_width[3]
17684  */
17685 
17686 /* Python wrapper */
17687 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9max_level_1__get__(PyObject *__pyx_v_self); /*proto*/
17688 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9max_level_1__get__(PyObject *__pyx_v_self) {
17689   PyObject *__pyx_r = 0;
17690   __Pyx_RefNannyDeclarations
17691   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
17692   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_9max_level___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
17693 
17694   /* function exit code */
17695   __Pyx_RefNannyFinishContext();
17696   return __pyx_r;
17697 }
17698 
17699 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_9max_level___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
17700   PyObject *__pyx_r = NULL;
17701   __Pyx_RefNannyDeclarations
17702   PyObject *__pyx_t_1 = NULL;
17703   __Pyx_RefNannySetupContext("__get__", 0);
17704   __Pyx_XDECREF(__pyx_r);
17705   __pyx_t_1 = __Pyx_PyInt_From_npy_int32(__pyx_v_self->max_level); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 26, __pyx_L1_error)
17706   __Pyx_GOTREF(__pyx_t_1);
17707   __pyx_r = __pyx_t_1;
17708   __pyx_t_1 = 0;
17709   goto __pyx_L0;
17710 
17711   /* function exit code */
17712   __pyx_L1_error:;
17713   __Pyx_XDECREF(__pyx_t_1);
17714   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.max_level.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
17715   __pyx_r = NULL;
17716   __pyx_L0:;
17717   __Pyx_XGIVEREF(__pyx_r);
17718   __Pyx_RefNannyFinishContext();
17719   return __pyx_r;
17720 }
17721 
17722 /* Python wrapper */
17723 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9max_level_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
17724 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9max_level_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
17725   int __pyx_r;
17726   __Pyx_RefNannyDeclarations
17727   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
17728   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_9max_level_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
17729 
17730   /* function exit code */
17731   __Pyx_RefNannyFinishContext();
17732   return __pyx_r;
17733 }
17734 
17735 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_9max_level_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_value) {
17736   int __pyx_r;
17737   __Pyx_RefNannyDeclarations
17738   __pyx_t_5numpy_int32_t __pyx_t_1;
17739   __Pyx_RefNannySetupContext("__set__", 0);
17740   __pyx_t_1 = __Pyx_PyInt_As_npy_int32(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_int32)-1)) && PyErr_Occurred())) __PYX_ERR(4, 26, __pyx_L1_error)
17741   __pyx_v_self->max_level = __pyx_t_1;
17742 
17743   /* function exit code */
17744   __pyx_r = 0;
17745   goto __pyx_L0;
17746   __pyx_L1_error:;
17747   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.max_level.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
17748   __pyx_r = -1;
17749   __pyx_L0:;
17750   __Pyx_RefNannyFinishContext();
17751   return __pyx_r;
17752 }
17753 
17754 /* "yt/geometry/selection_routines.pxd":27
17755  *     cdef public np.int32_t min_level
17756  *     cdef public np.int32_t max_level
17757  *     cdef public int overlap_cells             # <<<<<<<<<<<<<<
17758  *     cdef public np.float64_t domain_width[3]
17759  *     cdef public np.float64_t domain_center[3]
17760  */
17761 
17762 /* Python wrapper */
17763 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13overlap_cells_1__get__(PyObject *__pyx_v_self); /*proto*/
17764 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13overlap_cells_1__get__(PyObject *__pyx_v_self) {
17765   PyObject *__pyx_r = 0;
17766   __Pyx_RefNannyDeclarations
17767   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
17768   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_13overlap_cells___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
17769 
17770   /* function exit code */
17771   __Pyx_RefNannyFinishContext();
17772   return __pyx_r;
17773 }
17774 
17775 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_13overlap_cells___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
17776   PyObject *__pyx_r = NULL;
17777   __Pyx_RefNannyDeclarations
17778   PyObject *__pyx_t_1 = NULL;
17779   __Pyx_RefNannySetupContext("__get__", 0);
17780   __Pyx_XDECREF(__pyx_r);
17781   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->overlap_cells); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 27, __pyx_L1_error)
17782   __Pyx_GOTREF(__pyx_t_1);
17783   __pyx_r = __pyx_t_1;
17784   __pyx_t_1 = 0;
17785   goto __pyx_L0;
17786 
17787   /* function exit code */
17788   __pyx_L1_error:;
17789   __Pyx_XDECREF(__pyx_t_1);
17790   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.overlap_cells.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
17791   __pyx_r = NULL;
17792   __pyx_L0:;
17793   __Pyx_XGIVEREF(__pyx_r);
17794   __Pyx_RefNannyFinishContext();
17795   return __pyx_r;
17796 }
17797 
17798 /* Python wrapper */
17799 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13overlap_cells_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
17800 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13overlap_cells_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
17801   int __pyx_r;
17802   __Pyx_RefNannyDeclarations
17803   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
17804   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_13overlap_cells_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
17805 
17806   /* function exit code */
17807   __Pyx_RefNannyFinishContext();
17808   return __pyx_r;
17809 }
17810 
17811 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_13overlap_cells_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_value) {
17812   int __pyx_r;
17813   __Pyx_RefNannyDeclarations
17814   int __pyx_t_1;
17815   __Pyx_RefNannySetupContext("__set__", 0);
17816   __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(4, 27, __pyx_L1_error)
17817   __pyx_v_self->overlap_cells = __pyx_t_1;
17818 
17819   /* function exit code */
17820   __pyx_r = 0;
17821   goto __pyx_L0;
17822   __pyx_L1_error:;
17823   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.overlap_cells.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
17824   __pyx_r = -1;
17825   __pyx_L0:;
17826   __Pyx_RefNannyFinishContext();
17827   return __pyx_r;
17828 }
17829 
17830 /* "yt/geometry/selection_routines.pxd":28
17831  *     cdef public np.int32_t max_level
17832  *     cdef public int overlap_cells
17833  *     cdef public np.float64_t domain_width[3]             # <<<<<<<<<<<<<<
17834  *     cdef public np.float64_t domain_center[3]
17835  *     cdef public bint periodicity[3]
17836  */
17837 
17838 /* Python wrapper */
17839 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_12domain_width_1__get__(PyObject *__pyx_v_self); /*proto*/
17840 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_12domain_width_1__get__(PyObject *__pyx_v_self) {
17841   PyObject *__pyx_r = 0;
17842   __Pyx_RefNannyDeclarations
17843   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
17844   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_12domain_width___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
17845 
17846   /* function exit code */
17847   __Pyx_RefNannyFinishContext();
17848   return __pyx_r;
17849 }
17850 
17851 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_12domain_width___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
17852   PyObject *__pyx_r = NULL;
17853   __Pyx_RefNannyDeclarations
17854   PyObject *__pyx_t_1 = NULL;
17855   __Pyx_RefNannySetupContext("__get__", 0);
17856   __Pyx_XDECREF(__pyx_r);
17857   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->domain_width, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 28, __pyx_L1_error)
17858   __Pyx_GOTREF(__pyx_t_1);
17859   __pyx_r = __pyx_t_1;
17860   __pyx_t_1 = 0;
17861   goto __pyx_L0;
17862 
17863   /* function exit code */
17864   __pyx_L1_error:;
17865   __Pyx_XDECREF(__pyx_t_1);
17866   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.domain_width.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
17867   __pyx_r = NULL;
17868   __pyx_L0:;
17869   __Pyx_XGIVEREF(__pyx_r);
17870   __Pyx_RefNannyFinishContext();
17871   return __pyx_r;
17872 }
17873 
17874 /* Python wrapper */
17875 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_12domain_width_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
17876 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_12domain_width_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
17877   int __pyx_r;
17878   __Pyx_RefNannyDeclarations
17879   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
17880   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_12domain_width_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
17881 
17882   /* function exit code */
17883   __Pyx_RefNannyFinishContext();
17884   return __pyx_r;
17885 }
17886 
17887 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_12domain_width_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_value) {
17888   int __pyx_r;
17889   __Pyx_RefNannyDeclarations
17890   __pyx_t_5numpy_float64_t __pyx_t_1[3];
17891   __Pyx_RefNannySetupContext("__set__", 0);
17892   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(4, 28, __pyx_L1_error)
17893   memcpy(&(__pyx_v_self->domain_width[0]), __pyx_t_1, sizeof(__pyx_v_self->domain_width[0]) * (3));
17894 
17895   /* function exit code */
17896   __pyx_r = 0;
17897   goto __pyx_L0;
17898   __pyx_L1_error:;
17899   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.domain_width.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
17900   __pyx_r = -1;
17901   __pyx_L0:;
17902   __Pyx_RefNannyFinishContext();
17903   return __pyx_r;
17904 }
17905 
17906 /* "yt/geometry/selection_routines.pxd":29
17907  *     cdef public int overlap_cells
17908  *     cdef public np.float64_t domain_width[3]
17909  *     cdef public np.float64_t domain_center[3]             # <<<<<<<<<<<<<<
17910  *     cdef public bint periodicity[3]
17911  *     cdef bint _hash_initialized
17912  */
17913 
17914 /* Python wrapper */
17915 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13domain_center_1__get__(PyObject *__pyx_v_self); /*proto*/
17916 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13domain_center_1__get__(PyObject *__pyx_v_self) {
17917   PyObject *__pyx_r = 0;
17918   __Pyx_RefNannyDeclarations
17919   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
17920   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_13domain_center___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
17921 
17922   /* function exit code */
17923   __Pyx_RefNannyFinishContext();
17924   return __pyx_r;
17925 }
17926 
17927 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_13domain_center___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
17928   PyObject *__pyx_r = NULL;
17929   __Pyx_RefNannyDeclarations
17930   PyObject *__pyx_t_1 = NULL;
17931   __Pyx_RefNannySetupContext("__get__", 0);
17932   __Pyx_XDECREF(__pyx_r);
17933   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->domain_center, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 29, __pyx_L1_error)
17934   __Pyx_GOTREF(__pyx_t_1);
17935   __pyx_r = __pyx_t_1;
17936   __pyx_t_1 = 0;
17937   goto __pyx_L0;
17938 
17939   /* function exit code */
17940   __pyx_L1_error:;
17941   __Pyx_XDECREF(__pyx_t_1);
17942   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.domain_center.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
17943   __pyx_r = NULL;
17944   __pyx_L0:;
17945   __Pyx_XGIVEREF(__pyx_r);
17946   __Pyx_RefNannyFinishContext();
17947   return __pyx_r;
17948 }
17949 
17950 /* Python wrapper */
17951 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13domain_center_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
17952 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13domain_center_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
17953   int __pyx_r;
17954   __Pyx_RefNannyDeclarations
17955   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
17956   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_13domain_center_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
17957 
17958   /* function exit code */
17959   __Pyx_RefNannyFinishContext();
17960   return __pyx_r;
17961 }
17962 
17963 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_13domain_center_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_value) {
17964   int __pyx_r;
17965   __Pyx_RefNannyDeclarations
17966   __pyx_t_5numpy_float64_t __pyx_t_1[3];
17967   __Pyx_RefNannySetupContext("__set__", 0);
17968   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(4, 29, __pyx_L1_error)
17969   memcpy(&(__pyx_v_self->domain_center[0]), __pyx_t_1, sizeof(__pyx_v_self->domain_center[0]) * (3));
17970 
17971   /* function exit code */
17972   __pyx_r = 0;
17973   goto __pyx_L0;
17974   __pyx_L1_error:;
17975   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.domain_center.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
17976   __pyx_r = -1;
17977   __pyx_L0:;
17978   __Pyx_RefNannyFinishContext();
17979   return __pyx_r;
17980 }
17981 
17982 /* "yt/geometry/selection_routines.pxd":30
17983  *     cdef public np.float64_t domain_width[3]
17984  *     cdef public np.float64_t domain_center[3]
17985  *     cdef public bint periodicity[3]             # <<<<<<<<<<<<<<
17986  *     cdef bint _hash_initialized
17987  *     cdef np.int64_t _hash
17988  */
17989 
17990 /* Python wrapper */
17991 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_11periodicity_1__get__(PyObject *__pyx_v_self); /*proto*/
17992 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_11periodicity_1__get__(PyObject *__pyx_v_self) {
17993   PyObject *__pyx_r = 0;
17994   __Pyx_RefNannyDeclarations
17995   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
17996   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_11periodicity___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
17997 
17998   /* function exit code */
17999   __Pyx_RefNannyFinishContext();
18000   return __pyx_r;
18001 }
18002 
18003 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_11periodicity___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
18004   PyObject *__pyx_r = NULL;
18005   __Pyx_RefNannyDeclarations
18006   PyObject *__pyx_t_1 = NULL;
18007   __Pyx_RefNannySetupContext("__get__", 0);
18008   __Pyx_XDECREF(__pyx_r);
18009   __pyx_t_1 = __Pyx_carray_to_py_int(__pyx_v_self->periodicity, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 30, __pyx_L1_error)
18010   __Pyx_GOTREF(__pyx_t_1);
18011   __pyx_r = __pyx_t_1;
18012   __pyx_t_1 = 0;
18013   goto __pyx_L0;
18014 
18015   /* function exit code */
18016   __pyx_L1_error:;
18017   __Pyx_XDECREF(__pyx_t_1);
18018   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.periodicity.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
18019   __pyx_r = NULL;
18020   __pyx_L0:;
18021   __Pyx_XGIVEREF(__pyx_r);
18022   __Pyx_RefNannyFinishContext();
18023   return __pyx_r;
18024 }
18025 
18026 /* Python wrapper */
18027 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_11periodicity_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
18028 static int __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_11periodicity_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
18029   int __pyx_r;
18030   __Pyx_RefNannyDeclarations
18031   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
18032   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_11periodicity_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
18033 
18034   /* function exit code */
18035   __Pyx_RefNannyFinishContext();
18036   return __pyx_r;
18037 }
18038 
18039 static int __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_11periodicity_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, PyObject *__pyx_v_value) {
18040   int __pyx_r;
18041   __Pyx_RefNannyDeclarations
18042   int __pyx_t_1[3];
18043   __Pyx_RefNannySetupContext("__set__", 0);
18044   if (unlikely(__Pyx_carray_from_py_int(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(4, 30, __pyx_L1_error)
18045   memcpy(&(__pyx_v_self->periodicity[0]), __pyx_t_1, sizeof(__pyx_v_self->periodicity[0]) * (3));
18046 
18047   /* function exit code */
18048   __pyx_r = 0;
18049   goto __pyx_L0;
18050   __pyx_L1_error:;
18051   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.periodicity.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
18052   __pyx_r = -1;
18053   __pyx_L0:;
18054   __Pyx_RefNannyFinishContext();
18055   return __pyx_r;
18056 }
18057 
18058 /* "(tree fragment)":1
18059  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
18060  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
18061  * def __setstate_cython__(self, __pyx_state):
18062  */
18063 
18064 /* Python wrapper */
18065 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_47__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
18066 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_47__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
18067   PyObject *__pyx_r = 0;
18068   __Pyx_RefNannyDeclarations
18069   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
18070   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_46__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self));
18071 
18072   /* function exit code */
18073   __Pyx_RefNannyFinishContext();
18074   return __pyx_r;
18075 }
18076 
18077 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_46__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self) {
18078   PyObject *__pyx_r = NULL;
18079   __Pyx_RefNannyDeclarations
18080   PyObject *__pyx_t_1 = NULL;
18081   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
18082 
18083   /* "(tree fragment)":2
18084  * def __reduce_cython__(self):
18085  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
18086  * def __setstate_cython__(self, __pyx_state):
18087  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
18088  */
18089   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
18090   __Pyx_GOTREF(__pyx_t_1);
18091   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
18092   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
18093   __PYX_ERR(5, 2, __pyx_L1_error)
18094 
18095   /* "(tree fragment)":1
18096  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
18097  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
18098  * def __setstate_cython__(self, __pyx_state):
18099  */
18100 
18101   /* function exit code */
18102   __pyx_L1_error:;
18103   __Pyx_XDECREF(__pyx_t_1);
18104   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
18105   __pyx_r = NULL;
18106   __Pyx_XGIVEREF(__pyx_r);
18107   __Pyx_RefNannyFinishContext();
18108   return __pyx_r;
18109 }
18110 
18111 /* "(tree fragment)":3
18112  * def __reduce_cython__(self):
18113  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
18114  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
18115  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
18116  */
18117 
18118 /* Python wrapper */
18119 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_49__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
18120 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_49__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
18121   PyObject *__pyx_r = 0;
18122   __Pyx_RefNannyDeclarations
18123   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
18124   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_48__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
18125 
18126   /* function exit code */
18127   __Pyx_RefNannyFinishContext();
18128   return __pyx_r;
18129 }
18130 
18131 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SelectorObject_48__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
18132   PyObject *__pyx_r = NULL;
18133   __Pyx_RefNannyDeclarations
18134   PyObject *__pyx_t_1 = NULL;
18135   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
18136 
18137   /* "(tree fragment)":4
18138  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
18139  * def __setstate_cython__(self, __pyx_state):
18140  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
18141  */
18142   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
18143   __Pyx_GOTREF(__pyx_t_1);
18144   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
18145   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
18146   __PYX_ERR(5, 4, __pyx_L1_error)
18147 
18148   /* "(tree fragment)":3
18149  * def __reduce_cython__(self):
18150  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
18151  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
18152  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
18153  */
18154 
18155   /* function exit code */
18156   __pyx_L1_error:;
18157   __Pyx_XDECREF(__pyx_t_1);
18158   __Pyx_AddTraceback("yt.geometry.selection_routines.SelectorObject.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
18159   __pyx_r = NULL;
18160   __Pyx_XGIVEREF(__pyx_r);
18161   __Pyx_RefNannyFinishContext();
18162   return __pyx_r;
18163 }
18164 
18165 /* "yt/geometry/_selection_routines/point_selector.pxi":4
18166  *     cdef public np.float64_t p[3]
18167  *
18168  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
18169  *         cdef np.float64_t[:] DLE = _ensure_code(dobj.ds.domain_left_edge)
18170  *         cdef np.float64_t[:] DRE = _ensure_code(dobj.ds.domain_right_edge)
18171  */
18172 
18173 /* Python wrapper */
18174 static int __pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
18175 static int __pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
18176   PyObject *__pyx_v_dobj = 0;
18177   int __pyx_r;
18178   __Pyx_RefNannyDeclarations
18179   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
18180   {
18181     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
18182     PyObject* values[1] = {0};
18183     if (unlikely(__pyx_kwds)) {
18184       Py_ssize_t kw_args;
18185       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
18186       switch (pos_args) {
18187         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
18188         CYTHON_FALLTHROUGH;
18189         case  0: break;
18190         default: goto __pyx_L5_argtuple_error;
18191       }
18192       kw_args = PyDict_Size(__pyx_kwds);
18193       switch (pos_args) {
18194         case  0:
18195         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
18196         else goto __pyx_L5_argtuple_error;
18197       }
18198       if (unlikely(kw_args > 0)) {
18199         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(6, 4, __pyx_L3_error)
18200       }
18201     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
18202       goto __pyx_L5_argtuple_error;
18203     } else {
18204       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
18205     }
18206     __pyx_v_dobj = values[0];
18207   }
18208   goto __pyx_L4_argument_unpacking_done;
18209   __pyx_L5_argtuple_error:;
18210   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(6, 4, __pyx_L3_error)
18211   __pyx_L3_error:;
18212   __Pyx_AddTraceback("yt.geometry.selection_routines.PointSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
18213   __Pyx_RefNannyFinishContext();
18214   return -1;
18215   __pyx_L4_argument_unpacking_done:;
18216   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13PointSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *)__pyx_v_self), __pyx_v_dobj);
18217 
18218   /* function exit code */
18219   __Pyx_RefNannyFinishContext();
18220   return __pyx_r;
18221 }
18222 
18223 static int __pyx_pf_2yt_8geometry_18selection_routines_13PointSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
18224   __Pyx_memviewslice __pyx_v_DLE = { 0, 0, { 0 }, { 0 }, { 0 } };
18225   __Pyx_memviewslice __pyx_v_DRE = { 0, 0, { 0 }, { 0 }, { 0 } };
18226   long __pyx_v_i;
18227   int __pyx_r;
18228   __Pyx_RefNannyDeclarations
18229   PyObject *__pyx_t_1 = NULL;
18230   PyObject *__pyx_t_2 = NULL;
18231   __Pyx_memviewslice __pyx_t_3 = { 0, 0, { 0 }, { 0 }, { 0 } };
18232   long __pyx_t_4;
18233   __pyx_t_5numpy_float64_t __pyx_t_5;
18234   int __pyx_t_6;
18235   PyObject *__pyx_t_7 = NULL;
18236   PyObject *__pyx_t_8 = NULL;
18237   PyObject *__pyx_t_9 = NULL;
18238   int __pyx_t_10;
18239   PyObject *__pyx_t_11 = NULL;
18240   Py_ssize_t __pyx_t_12;
18241   long __pyx_t_13;
18242   Py_ssize_t __pyx_t_14;
18243   __Pyx_RefNannySetupContext("__init__", 0);
18244 
18245   /* "yt/geometry/_selection_routines/point_selector.pxi":5
18246  *
18247  *     def __init__(self, dobj):
18248  *         cdef np.float64_t[:] DLE = _ensure_code(dobj.ds.domain_left_edge)             # <<<<<<<<<<<<<<
18249  *         cdef np.float64_t[:] DRE = _ensure_code(dobj.ds.domain_right_edge)
18250  *         for i in range(3):
18251  */
18252   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 5, __pyx_L1_error)
18253   __Pyx_GOTREF(__pyx_t_1);
18254   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_domain_left_edge); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 5, __pyx_L1_error)
18255   __Pyx_GOTREF(__pyx_t_2);
18256   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
18257   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 5, __pyx_L1_error)
18258   __Pyx_GOTREF(__pyx_t_1);
18259   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
18260   __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(6, 5, __pyx_L1_error)
18261   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
18262   __pyx_v_DLE = __pyx_t_3;
18263   __pyx_t_3.memview = NULL;
18264   __pyx_t_3.data = NULL;
18265 
18266   /* "yt/geometry/_selection_routines/point_selector.pxi":6
18267  *     def __init__(self, dobj):
18268  *         cdef np.float64_t[:] DLE = _ensure_code(dobj.ds.domain_left_edge)
18269  *         cdef np.float64_t[:] DRE = _ensure_code(dobj.ds.domain_right_edge)             # <<<<<<<<<<<<<<
18270  *         for i in range(3):
18271  *             self.p[i] = _ensure_code(dobj.p[i])
18272  */
18273   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 6, __pyx_L1_error)
18274   __Pyx_GOTREF(__pyx_t_1);
18275   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_domain_right_edge); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 6, __pyx_L1_error)
18276   __Pyx_GOTREF(__pyx_t_2);
18277   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
18278   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 6, __pyx_L1_error)
18279   __Pyx_GOTREF(__pyx_t_1);
18280   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
18281   __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(6, 6, __pyx_L1_error)
18282   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
18283   __pyx_v_DRE = __pyx_t_3;
18284   __pyx_t_3.memview = NULL;
18285   __pyx_t_3.data = NULL;
18286 
18287   /* "yt/geometry/_selection_routines/point_selector.pxi":7
18288  *         cdef np.float64_t[:] DLE = _ensure_code(dobj.ds.domain_left_edge)
18289  *         cdef np.float64_t[:] DRE = _ensure_code(dobj.ds.domain_right_edge)
18290  *         for i in range(3):             # <<<<<<<<<<<<<<
18291  *             self.p[i] = _ensure_code(dobj.p[i])
18292  *
18293  */
18294   for (__pyx_t_4 = 0; __pyx_t_4 < 3; __pyx_t_4+=1) {
18295     __pyx_v_i = __pyx_t_4;
18296 
18297     /* "yt/geometry/_selection_routines/point_selector.pxi":8
18298  *         cdef np.float64_t[:] DRE = _ensure_code(dobj.ds.domain_right_edge)
18299  *         for i in range(3):
18300  *             self.p[i] = _ensure_code(dobj.p[i])             # <<<<<<<<<<<<<<
18301  *
18302  *             # ensure the point lies in the domain
18303  */
18304     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_p); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 8, __pyx_L1_error)
18305     __Pyx_GOTREF(__pyx_t_1);
18306     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 8, __pyx_L1_error)
18307     __Pyx_GOTREF(__pyx_t_2);
18308     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
18309     __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 8, __pyx_L1_error)
18310     __Pyx_GOTREF(__pyx_t_1);
18311     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
18312     __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(6, 8, __pyx_L1_error)
18313     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
18314     (__pyx_v_self->p[__pyx_v_i]) = __pyx_t_5;
18315 
18316     /* "yt/geometry/_selection_routines/point_selector.pxi":11
18317  *
18318  *             # ensure the point lies in the domain
18319  *             if self.periodicity[i]:             # <<<<<<<<<<<<<<
18320  *                 self.p[i] = np.fmod(self.p[i], self.domain_width[i])
18321  *                 if self.p[i] < DLE[i]:
18322  */
18323     __pyx_t_6 = ((__pyx_v_self->__pyx_base.periodicity[__pyx_v_i]) != 0);
18324     if (__pyx_t_6) {
18325 
18326       /* "yt/geometry/_selection_routines/point_selector.pxi":12
18327  *             # ensure the point lies in the domain
18328  *             if self.periodicity[i]:
18329  *                 self.p[i] = np.fmod(self.p[i], self.domain_width[i])             # <<<<<<<<<<<<<<
18330  *                 if self.p[i] < DLE[i]:
18331  *                     self.p[i] += self.domain_width[i]
18332  */
18333       __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 12, __pyx_L1_error)
18334       __Pyx_GOTREF(__pyx_t_2);
18335       __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_fmod); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 12, __pyx_L1_error)
18336       __Pyx_GOTREF(__pyx_t_7);
18337       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
18338       __pyx_t_2 = PyFloat_FromDouble((__pyx_v_self->p[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 12, __pyx_L1_error)
18339       __Pyx_GOTREF(__pyx_t_2);
18340       __pyx_t_8 = PyFloat_FromDouble((__pyx_v_self->__pyx_base.domain_width[__pyx_v_i])); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 12, __pyx_L1_error)
18341       __Pyx_GOTREF(__pyx_t_8);
18342       __pyx_t_9 = NULL;
18343       __pyx_t_10 = 0;
18344       if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
18345         __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
18346         if (likely(__pyx_t_9)) {
18347           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
18348           __Pyx_INCREF(__pyx_t_9);
18349           __Pyx_INCREF(function);
18350           __Pyx_DECREF_SET(__pyx_t_7, function);
18351           __pyx_t_10 = 1;
18352         }
18353       }
18354       #if CYTHON_FAST_PYCALL
18355       if (PyFunction_Check(__pyx_t_7)) {
18356         PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_2, __pyx_t_8};
18357         __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 12, __pyx_L1_error)
18358         __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
18359         __Pyx_GOTREF(__pyx_t_1);
18360         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
18361         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
18362       } else
18363       #endif
18364       #if CYTHON_FAST_PYCCALL
18365       if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
18366         PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_t_2, __pyx_t_8};
18367         __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_10, 2+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 12, __pyx_L1_error)
18368         __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
18369         __Pyx_GOTREF(__pyx_t_1);
18370         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
18371         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
18372       } else
18373       #endif
18374       {
18375         __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(6, 12, __pyx_L1_error)
18376         __Pyx_GOTREF(__pyx_t_11);
18377         if (__pyx_t_9) {
18378           __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL;
18379         }
18380         __Pyx_GIVEREF(__pyx_t_2);
18381         PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_2);
18382         __Pyx_GIVEREF(__pyx_t_8);
18383         PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_8);
18384         __pyx_t_2 = 0;
18385         __pyx_t_8 = 0;
18386         __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 12, __pyx_L1_error)
18387         __Pyx_GOTREF(__pyx_t_1);
18388         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
18389       }
18390       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
18391       __pyx_t_5 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_5 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(6, 12, __pyx_L1_error)
18392       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
18393       (__pyx_v_self->p[__pyx_v_i]) = __pyx_t_5;
18394 
18395       /* "yt/geometry/_selection_routines/point_selector.pxi":13
18396  *             if self.periodicity[i]:
18397  *                 self.p[i] = np.fmod(self.p[i], self.domain_width[i])
18398  *                 if self.p[i] < DLE[i]:             # <<<<<<<<<<<<<<
18399  *                     self.p[i] += self.domain_width[i]
18400  *                 elif self.p[i] >= DRE[i]:
18401  */
18402       __pyx_t_12 = __pyx_v_i;
18403       __pyx_t_10 = -1;
18404       if (__pyx_t_12 < 0) {
18405         __pyx_t_12 += __pyx_v_DLE.shape[0];
18406         if (unlikely(__pyx_t_12 < 0)) __pyx_t_10 = 0;
18407       } else if (unlikely(__pyx_t_12 >= __pyx_v_DLE.shape[0])) __pyx_t_10 = 0;
18408       if (unlikely(__pyx_t_10 != -1)) {
18409         __Pyx_RaiseBufferIndexError(__pyx_t_10);
18410         __PYX_ERR(6, 13, __pyx_L1_error)
18411       }
18412       __pyx_t_6 = (((__pyx_v_self->p[__pyx_v_i]) < (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DLE.data + __pyx_t_12 * __pyx_v_DLE.strides[0]) )))) != 0);
18413       if (__pyx_t_6) {
18414 
18415         /* "yt/geometry/_selection_routines/point_selector.pxi":14
18416  *                 self.p[i] = np.fmod(self.p[i], self.domain_width[i])
18417  *                 if self.p[i] < DLE[i]:
18418  *                     self.p[i] += self.domain_width[i]             # <<<<<<<<<<<<<<
18419  *                 elif self.p[i] >= DRE[i]:
18420  *                     self.p[i] -= self.domain_width[i]
18421  */
18422         __pyx_t_13 = __pyx_v_i;
18423         (__pyx_v_self->p[__pyx_t_13]) = ((__pyx_v_self->p[__pyx_t_13]) + (__pyx_v_self->__pyx_base.domain_width[__pyx_v_i]));
18424 
18425         /* "yt/geometry/_selection_routines/point_selector.pxi":13
18426  *             if self.periodicity[i]:
18427  *                 self.p[i] = np.fmod(self.p[i], self.domain_width[i])
18428  *                 if self.p[i] < DLE[i]:             # <<<<<<<<<<<<<<
18429  *                     self.p[i] += self.domain_width[i]
18430  *                 elif self.p[i] >= DRE[i]:
18431  */
18432         goto __pyx_L6;
18433       }
18434 
18435       /* "yt/geometry/_selection_routines/point_selector.pxi":15
18436  *                 if self.p[i] < DLE[i]:
18437  *                     self.p[i] += self.domain_width[i]
18438  *                 elif self.p[i] >= DRE[i]:             # <<<<<<<<<<<<<<
18439  *                     self.p[i] -= self.domain_width[i]
18440  *
18441  */
18442       __pyx_t_14 = __pyx_v_i;
18443       __pyx_t_10 = -1;
18444       if (__pyx_t_14 < 0) {
18445         __pyx_t_14 += __pyx_v_DRE.shape[0];
18446         if (unlikely(__pyx_t_14 < 0)) __pyx_t_10 = 0;
18447       } else if (unlikely(__pyx_t_14 >= __pyx_v_DRE.shape[0])) __pyx_t_10 = 0;
18448       if (unlikely(__pyx_t_10 != -1)) {
18449         __Pyx_RaiseBufferIndexError(__pyx_t_10);
18450         __PYX_ERR(6, 15, __pyx_L1_error)
18451       }
18452       __pyx_t_6 = (((__pyx_v_self->p[__pyx_v_i]) >= (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DRE.data + __pyx_t_14 * __pyx_v_DRE.strides[0]) )))) != 0);
18453       if (__pyx_t_6) {
18454 
18455         /* "yt/geometry/_selection_routines/point_selector.pxi":16
18456  *                     self.p[i] += self.domain_width[i]
18457  *                 elif self.p[i] >= DRE[i]:
18458  *                     self.p[i] -= self.domain_width[i]             # <<<<<<<<<<<<<<
18459  *
18460  *     @cython.boundscheck(False)
18461  */
18462         __pyx_t_13 = __pyx_v_i;
18463         (__pyx_v_self->p[__pyx_t_13]) = ((__pyx_v_self->p[__pyx_t_13]) - (__pyx_v_self->__pyx_base.domain_width[__pyx_v_i]));
18464 
18465         /* "yt/geometry/_selection_routines/point_selector.pxi":15
18466  *                 if self.p[i] < DLE[i]:
18467  *                     self.p[i] += self.domain_width[i]
18468  *                 elif self.p[i] >= DRE[i]:             # <<<<<<<<<<<<<<
18469  *                     self.p[i] -= self.domain_width[i]
18470  *
18471  */
18472       }
18473       __pyx_L6:;
18474 
18475       /* "yt/geometry/_selection_routines/point_selector.pxi":11
18476  *
18477  *             # ensure the point lies in the domain
18478  *             if self.periodicity[i]:             # <<<<<<<<<<<<<<
18479  *                 self.p[i] = np.fmod(self.p[i], self.domain_width[i])
18480  *                 if self.p[i] < DLE[i]:
18481  */
18482     }
18483   }
18484 
18485   /* "yt/geometry/_selection_routines/point_selector.pxi":4
18486  *     cdef public np.float64_t p[3]
18487  *
18488  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
18489  *         cdef np.float64_t[:] DLE = _ensure_code(dobj.ds.domain_left_edge)
18490  *         cdef np.float64_t[:] DRE = _ensure_code(dobj.ds.domain_right_edge)
18491  */
18492 
18493   /* function exit code */
18494   __pyx_r = 0;
18495   goto __pyx_L0;
18496   __pyx_L1_error:;
18497   __Pyx_XDECREF(__pyx_t_1);
18498   __Pyx_XDECREF(__pyx_t_2);
18499   __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
18500   __Pyx_XDECREF(__pyx_t_7);
18501   __Pyx_XDECREF(__pyx_t_8);
18502   __Pyx_XDECREF(__pyx_t_9);
18503   __Pyx_XDECREF(__pyx_t_11);
18504   __Pyx_AddTraceback("yt.geometry.selection_routines.PointSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
18505   __pyx_r = -1;
18506   __pyx_L0:;
18507   __PYX_XDEC_MEMVIEW(&__pyx_v_DLE, 1);
18508   __PYX_XDEC_MEMVIEW(&__pyx_v_DRE, 1);
18509   __Pyx_RefNannyFinishContext();
18510   return __pyx_r;
18511 }
18512 
18513 /* "yt/geometry/_selection_routines/point_selector.pxi":21
18514  *     @cython.wraparound(False)
18515  *     @cython.cdivision(True)
18516  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
18517  *         if (pos[0] - 0.5*dds[0] <= self.p[0] < pos[0]+0.5*dds[0] and
18518  *             pos[1] - 0.5*dds[1] <= self.p[1] < pos[1]+0.5*dds[1] and
18519  */
18520 
18521 static int __pyx_f_2yt_8geometry_18selection_routines_13PointSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
18522   int __pyx_r;
18523   int __pyx_t_1;
18524   int __pyx_t_2;
18525   int __pyx_t_3;
18526 
18527   /* "yt/geometry/_selection_routines/point_selector.pxi":22
18528  *     @cython.cdivision(True)
18529  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
18530  *         if (pos[0] - 0.5*dds[0] <= self.p[0] < pos[0]+0.5*dds[0] and             # <<<<<<<<<<<<<<
18531  *             pos[1] - 0.5*dds[1] <= self.p[1] < pos[1]+0.5*dds[1] and
18532  *             pos[2] - 0.5*dds[2] <= self.p[2] < pos[2]+0.5*dds[2]):
18533  */
18534   __pyx_t_2 = (((__pyx_v_pos[0]) - (0.5 * (__pyx_v_dds[0]))) <= (__pyx_v_self->p[0]));
18535   if (__pyx_t_2) {
18536     __pyx_t_2 = ((__pyx_v_self->p[0]) < ((__pyx_v_pos[0]) + (0.5 * (__pyx_v_dds[0]))));
18537   }
18538   __pyx_t_3 = (__pyx_t_2 != 0);
18539   if (__pyx_t_3) {
18540   } else {
18541     __pyx_t_1 = __pyx_t_3;
18542     goto __pyx_L4_bool_binop_done;
18543   }
18544 
18545   /* "yt/geometry/_selection_routines/point_selector.pxi":23
18546  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
18547  *         if (pos[0] - 0.5*dds[0] <= self.p[0] < pos[0]+0.5*dds[0] and
18548  *             pos[1] - 0.5*dds[1] <= self.p[1] < pos[1]+0.5*dds[1] and             # <<<<<<<<<<<<<<
18549  *             pos[2] - 0.5*dds[2] <= self.p[2] < pos[2]+0.5*dds[2]):
18550  *             return 1
18551  */
18552   __pyx_t_3 = (((__pyx_v_pos[1]) - (0.5 * (__pyx_v_dds[1]))) <= (__pyx_v_self->p[1]));
18553   if (__pyx_t_3) {
18554     __pyx_t_3 = ((__pyx_v_self->p[1]) < ((__pyx_v_pos[1]) + (0.5 * (__pyx_v_dds[1]))));
18555   }
18556   __pyx_t_2 = (__pyx_t_3 != 0);
18557   if (__pyx_t_2) {
18558   } else {
18559     __pyx_t_1 = __pyx_t_2;
18560     goto __pyx_L4_bool_binop_done;
18561   }
18562 
18563   /* "yt/geometry/_selection_routines/point_selector.pxi":24
18564  *         if (pos[0] - 0.5*dds[0] <= self.p[0] < pos[0]+0.5*dds[0] and
18565  *             pos[1] - 0.5*dds[1] <= self.p[1] < pos[1]+0.5*dds[1] and
18566  *             pos[2] - 0.5*dds[2] <= self.p[2] < pos[2]+0.5*dds[2]):             # <<<<<<<<<<<<<<
18567  *             return 1
18568  *         else:
18569  */
18570   __pyx_t_2 = (((__pyx_v_pos[2]) - (0.5 * (__pyx_v_dds[2]))) <= (__pyx_v_self->p[2]));
18571   if (__pyx_t_2) {
18572     __pyx_t_2 = ((__pyx_v_self->p[2]) < ((__pyx_v_pos[2]) + (0.5 * (__pyx_v_dds[2]))));
18573   }
18574   __pyx_t_3 = (__pyx_t_2 != 0);
18575   __pyx_t_1 = __pyx_t_3;
18576   __pyx_L4_bool_binop_done:;
18577 
18578   /* "yt/geometry/_selection_routines/point_selector.pxi":22
18579  *     @cython.cdivision(True)
18580  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
18581  *         if (pos[0] - 0.5*dds[0] <= self.p[0] < pos[0]+0.5*dds[0] and             # <<<<<<<<<<<<<<
18582  *             pos[1] - 0.5*dds[1] <= self.p[1] < pos[1]+0.5*dds[1] and
18583  *             pos[2] - 0.5*dds[2] <= self.p[2] < pos[2]+0.5*dds[2]):
18584  */
18585   if (__pyx_t_1) {
18586 
18587     /* "yt/geometry/_selection_routines/point_selector.pxi":25
18588  *             pos[1] - 0.5*dds[1] <= self.p[1] < pos[1]+0.5*dds[1] and
18589  *             pos[2] - 0.5*dds[2] <= self.p[2] < pos[2]+0.5*dds[2]):
18590  *             return 1             # <<<<<<<<<<<<<<
18591  *         else:
18592  *             return 0
18593  */
18594     __pyx_r = 1;
18595     goto __pyx_L0;
18596 
18597     /* "yt/geometry/_selection_routines/point_selector.pxi":22
18598  *     @cython.cdivision(True)
18599  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
18600  *         if (pos[0] - 0.5*dds[0] <= self.p[0] < pos[0]+0.5*dds[0] and             # <<<<<<<<<<<<<<
18601  *             pos[1] - 0.5*dds[1] <= self.p[1] < pos[1]+0.5*dds[1] and
18602  *             pos[2] - 0.5*dds[2] <= self.p[2] < pos[2]+0.5*dds[2]):
18603  */
18604   }
18605 
18606   /* "yt/geometry/_selection_routines/point_selector.pxi":27
18607  *             return 1
18608  *         else:
18609  *             return 0             # <<<<<<<<<<<<<<
18610  *
18611  *     @cython.boundscheck(False)
18612  */
18613   /*else*/ {
18614     __pyx_r = 0;
18615     goto __pyx_L0;
18616   }
18617 
18618   /* "yt/geometry/_selection_routines/point_selector.pxi":21
18619  *     @cython.wraparound(False)
18620  *     @cython.cdivision(True)
18621  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
18622  *         if (pos[0] - 0.5*dds[0] <= self.p[0] < pos[0]+0.5*dds[0] and
18623  *             pos[1] - 0.5*dds[1] <= self.p[1] < pos[1]+0.5*dds[1] and
18624  */
18625 
18626   /* function exit code */
18627   __pyx_L0:;
18628   return __pyx_r;
18629 }
18630 
18631 /* "yt/geometry/_selection_routines/point_selector.pxi":32
18632  *     @cython.wraparound(False)
18633  *     @cython.cdivision(True)
18634  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
18635  *         cdef int i
18636  *         cdef np.float64_t dist, dist2 = 0
18637  */
18638 
18639 static int __pyx_f_2yt_8geometry_18selection_routines_13PointSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
18640   int __pyx_v_i;
18641   __pyx_t_5numpy_float64_t __pyx_v_dist;
18642   __pyx_t_5numpy_float64_t __pyx_v_dist2;
18643   int __pyx_r;
18644   int __pyx_t_1;
18645   int __pyx_t_2;
18646 
18647   /* "yt/geometry/_selection_routines/point_selector.pxi":34
18648  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
18649  *         cdef int i
18650  *         cdef np.float64_t dist, dist2 = 0             # <<<<<<<<<<<<<<
18651  *         for i in range(3):
18652  *             dist = self.periodic_difference(pos[i], self.p[i], i)
18653  */
18654   __pyx_v_dist2 = 0.0;
18655 
18656   /* "yt/geometry/_selection_routines/point_selector.pxi":35
18657  *         cdef int i
18658  *         cdef np.float64_t dist, dist2 = 0
18659  *         for i in range(3):             # <<<<<<<<<<<<<<
18660  *             dist = self.periodic_difference(pos[i], self.p[i], i)
18661  *             dist2 += dist*dist
18662  */
18663   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
18664     __pyx_v_i = __pyx_t_1;
18665 
18666     /* "yt/geometry/_selection_routines/point_selector.pxi":36
18667  *         cdef np.float64_t dist, dist2 = 0
18668  *         for i in range(3):
18669  *             dist = self.periodic_difference(pos[i], self.p[i], i)             # <<<<<<<<<<<<<<
18670  *             dist2 += dist*dist
18671  *         if dist2 <= radius*radius: return 1
18672  */
18673     __pyx_v_dist = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_PointSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), (__pyx_v_pos[__pyx_v_i]), (__pyx_v_self->p[__pyx_v_i]), __pyx_v_i);
18674 
18675     /* "yt/geometry/_selection_routines/point_selector.pxi":37
18676  *         for i in range(3):
18677  *             dist = self.periodic_difference(pos[i], self.p[i], i)
18678  *             dist2 += dist*dist             # <<<<<<<<<<<<<<
18679  *         if dist2 <= radius*radius: return 1
18680  *         return 0
18681  */
18682     __pyx_v_dist2 = (__pyx_v_dist2 + (__pyx_v_dist * __pyx_v_dist));
18683   }
18684 
18685   /* "yt/geometry/_selection_routines/point_selector.pxi":38
18686  *             dist = self.periodic_difference(pos[i], self.p[i], i)
18687  *             dist2 += dist*dist
18688  *         if dist2 <= radius*radius: return 1             # <<<<<<<<<<<<<<
18689  *         return 0
18690  *
18691  */
18692   __pyx_t_2 = ((__pyx_v_dist2 <= (__pyx_v_radius * __pyx_v_radius)) != 0);
18693   if (__pyx_t_2) {
18694     __pyx_r = 1;
18695     goto __pyx_L0;
18696   }
18697 
18698   /* "yt/geometry/_selection_routines/point_selector.pxi":39
18699  *             dist2 += dist*dist
18700  *         if dist2 <= radius*radius: return 1
18701  *         return 0             # <<<<<<<<<<<<<<
18702  *
18703  *     @cython.boundscheck(False)
18704  */
18705   __pyx_r = 0;
18706   goto __pyx_L0;
18707 
18708   /* "yt/geometry/_selection_routines/point_selector.pxi":32
18709  *     @cython.wraparound(False)
18710  *     @cython.cdivision(True)
18711  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
18712  *         cdef int i
18713  *         cdef np.float64_t dist, dist2 = 0
18714  */
18715 
18716   /* function exit code */
18717   __pyx_L0:;
18718   return __pyx_r;
18719 }
18720 
18721 /* "yt/geometry/_selection_routines/point_selector.pxi":44
18722  *     @cython.wraparound(False)
18723  *     @cython.cdivision(True)
18724  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
18725  *                                np.float64_t right_edge[3]) nogil:
18726  *         # point definitely can only be in one cell
18727  */
18728 
18729 static int __pyx_f_2yt_8geometry_18selection_routines_13PointSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
18730   int __pyx_r;
18731   int __pyx_t_1;
18732   int __pyx_t_2;
18733   int __pyx_t_3;
18734 
18735   /* "yt/geometry/_selection_routines/point_selector.pxi":47
18736  *                                np.float64_t right_edge[3]) nogil:
18737  *         # point definitely can only be in one cell
18738  *         if (left_edge[0] <= self.p[0] < right_edge[0] and             # <<<<<<<<<<<<<<
18739  *             left_edge[1] <= self.p[1] < right_edge[1] and
18740  *             left_edge[2] <= self.p[2] < right_edge[2]):
18741  */
18742   __pyx_t_2 = ((__pyx_v_left_edge[0]) <= (__pyx_v_self->p[0]));
18743   if (__pyx_t_2) {
18744     __pyx_t_2 = ((__pyx_v_self->p[0]) < (__pyx_v_right_edge[0]));
18745   }
18746   __pyx_t_3 = (__pyx_t_2 != 0);
18747   if (__pyx_t_3) {
18748   } else {
18749     __pyx_t_1 = __pyx_t_3;
18750     goto __pyx_L4_bool_binop_done;
18751   }
18752 
18753   /* "yt/geometry/_selection_routines/point_selector.pxi":48
18754  *         # point definitely can only be in one cell
18755  *         if (left_edge[0] <= self.p[0] < right_edge[0] and
18756  *             left_edge[1] <= self.p[1] < right_edge[1] and             # <<<<<<<<<<<<<<
18757  *             left_edge[2] <= self.p[2] < right_edge[2]):
18758  *             return 1
18759  */
18760   __pyx_t_3 = ((__pyx_v_left_edge[1]) <= (__pyx_v_self->p[1]));
18761   if (__pyx_t_3) {
18762     __pyx_t_3 = ((__pyx_v_self->p[1]) < (__pyx_v_right_edge[1]));
18763   }
18764   __pyx_t_2 = (__pyx_t_3 != 0);
18765   if (__pyx_t_2) {
18766   } else {
18767     __pyx_t_1 = __pyx_t_2;
18768     goto __pyx_L4_bool_binop_done;
18769   }
18770 
18771   /* "yt/geometry/_selection_routines/point_selector.pxi":49
18772  *         if (left_edge[0] <= self.p[0] < right_edge[0] and
18773  *             left_edge[1] <= self.p[1] < right_edge[1] and
18774  *             left_edge[2] <= self.p[2] < right_edge[2]):             # <<<<<<<<<<<<<<
18775  *             return 1
18776  *         else:
18777  */
18778   __pyx_t_2 = ((__pyx_v_left_edge[2]) <= (__pyx_v_self->p[2]));
18779   if (__pyx_t_2) {
18780     __pyx_t_2 = ((__pyx_v_self->p[2]) < (__pyx_v_right_edge[2]));
18781   }
18782   __pyx_t_3 = (__pyx_t_2 != 0);
18783   __pyx_t_1 = __pyx_t_3;
18784   __pyx_L4_bool_binop_done:;
18785 
18786   /* "yt/geometry/_selection_routines/point_selector.pxi":47
18787  *                                np.float64_t right_edge[3]) nogil:
18788  *         # point definitely can only be in one cell
18789  *         if (left_edge[0] <= self.p[0] < right_edge[0] and             # <<<<<<<<<<<<<<
18790  *             left_edge[1] <= self.p[1] < right_edge[1] and
18791  *             left_edge[2] <= self.p[2] < right_edge[2]):
18792  */
18793   if (__pyx_t_1) {
18794 
18795     /* "yt/geometry/_selection_routines/point_selector.pxi":50
18796  *             left_edge[1] <= self.p[1] < right_edge[1] and
18797  *             left_edge[2] <= self.p[2] < right_edge[2]):
18798  *             return 1             # <<<<<<<<<<<<<<
18799  *         else:
18800  *             return 0
18801  */
18802     __pyx_r = 1;
18803     goto __pyx_L0;
18804 
18805     /* "yt/geometry/_selection_routines/point_selector.pxi":47
18806  *                                np.float64_t right_edge[3]) nogil:
18807  *         # point definitely can only be in one cell
18808  *         if (left_edge[0] <= self.p[0] < right_edge[0] and             # <<<<<<<<<<<<<<
18809  *             left_edge[1] <= self.p[1] < right_edge[1] and
18810  *             left_edge[2] <= self.p[2] < right_edge[2]):
18811  */
18812   }
18813 
18814   /* "yt/geometry/_selection_routines/point_selector.pxi":52
18815  *             return 1
18816  *         else:
18817  *             return 0             # <<<<<<<<<<<<<<
18818  *
18819  *     @cython.boundscheck(False)
18820  */
18821   /*else*/ {
18822     __pyx_r = 0;
18823     goto __pyx_L0;
18824   }
18825 
18826   /* "yt/geometry/_selection_routines/point_selector.pxi":44
18827  *     @cython.wraparound(False)
18828  *     @cython.cdivision(True)
18829  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
18830  *                                np.float64_t right_edge[3]) nogil:
18831  *         # point definitely can only be in one cell
18832  */
18833 
18834   /* function exit code */
18835   __pyx_L0:;
18836   return __pyx_r;
18837 }
18838 
18839 /* "yt/geometry/_selection_routines/point_selector.pxi":57
18840  *     @cython.wraparound(False)
18841  *     @cython.cdivision(True)
18842  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
18843  *                                np.float64_t right_edge[3]) nogil:
18844  *         # point definitely can only be in one cell
18845  */
18846 
18847 static int __pyx_f_2yt_8geometry_18selection_routines_13PointSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
18848   int __pyx_r;
18849   int __pyx_t_1;
18850   int __pyx_t_2;
18851   int __pyx_t_3;
18852 
18853   /* "yt/geometry/_selection_routines/point_selector.pxi":62
18854  *         # Return 2 in all cases to indicate that the point only overlaps
18855  *         # portion of box
18856  *         if (left_edge[0] <= self.p[0] <= right_edge[0] and             # <<<<<<<<<<<<<<
18857  *             left_edge[1] <= self.p[1] <= right_edge[1] and
18858  *             left_edge[2] <= self.p[2] <= right_edge[2]):
18859  */
18860   __pyx_t_2 = ((__pyx_v_left_edge[0]) <= (__pyx_v_self->p[0]));
18861   if (__pyx_t_2) {
18862     __pyx_t_2 = ((__pyx_v_self->p[0]) <= (__pyx_v_right_edge[0]));
18863   }
18864   __pyx_t_3 = (__pyx_t_2 != 0);
18865   if (__pyx_t_3) {
18866   } else {
18867     __pyx_t_1 = __pyx_t_3;
18868     goto __pyx_L4_bool_binop_done;
18869   }
18870 
18871   /* "yt/geometry/_selection_routines/point_selector.pxi":63
18872  *         # portion of box
18873  *         if (left_edge[0] <= self.p[0] <= right_edge[0] and
18874  *             left_edge[1] <= self.p[1] <= right_edge[1] and             # <<<<<<<<<<<<<<
18875  *             left_edge[2] <= self.p[2] <= right_edge[2]):
18876  *             return 2
18877  */
18878   __pyx_t_3 = ((__pyx_v_left_edge[1]) <= (__pyx_v_self->p[1]));
18879   if (__pyx_t_3) {
18880     __pyx_t_3 = ((__pyx_v_self->p[1]) <= (__pyx_v_right_edge[1]));
18881   }
18882   __pyx_t_2 = (__pyx_t_3 != 0);
18883   if (__pyx_t_2) {
18884   } else {
18885     __pyx_t_1 = __pyx_t_2;
18886     goto __pyx_L4_bool_binop_done;
18887   }
18888 
18889   /* "yt/geometry/_selection_routines/point_selector.pxi":64
18890  *         if (left_edge[0] <= self.p[0] <= right_edge[0] and
18891  *             left_edge[1] <= self.p[1] <= right_edge[1] and
18892  *             left_edge[2] <= self.p[2] <= right_edge[2]):             # <<<<<<<<<<<<<<
18893  *             return 2
18894  *         else:
18895  */
18896   __pyx_t_2 = ((__pyx_v_left_edge[2]) <= (__pyx_v_self->p[2]));
18897   if (__pyx_t_2) {
18898     __pyx_t_2 = ((__pyx_v_self->p[2]) <= (__pyx_v_right_edge[2]));
18899   }
18900   __pyx_t_3 = (__pyx_t_2 != 0);
18901   __pyx_t_1 = __pyx_t_3;
18902   __pyx_L4_bool_binop_done:;
18903 
18904   /* "yt/geometry/_selection_routines/point_selector.pxi":62
18905  *         # Return 2 in all cases to indicate that the point only overlaps
18906  *         # portion of box
18907  *         if (left_edge[0] <= self.p[0] <= right_edge[0] and             # <<<<<<<<<<<<<<
18908  *             left_edge[1] <= self.p[1] <= right_edge[1] and
18909  *             left_edge[2] <= self.p[2] <= right_edge[2]):
18910  */
18911   if (__pyx_t_1) {
18912 
18913     /* "yt/geometry/_selection_routines/point_selector.pxi":65
18914  *             left_edge[1] <= self.p[1] <= right_edge[1] and
18915  *             left_edge[2] <= self.p[2] <= right_edge[2]):
18916  *             return 2             # <<<<<<<<<<<<<<
18917  *         else:
18918  *             return 0
18919  */
18920     __pyx_r = 2;
18921     goto __pyx_L0;
18922 
18923     /* "yt/geometry/_selection_routines/point_selector.pxi":62
18924  *         # Return 2 in all cases to indicate that the point only overlaps
18925  *         # portion of box
18926  *         if (left_edge[0] <= self.p[0] <= right_edge[0] and             # <<<<<<<<<<<<<<
18927  *             left_edge[1] <= self.p[1] <= right_edge[1] and
18928  *             left_edge[2] <= self.p[2] <= right_edge[2]):
18929  */
18930   }
18931 
18932   /* "yt/geometry/_selection_routines/point_selector.pxi":67
18933  *             return 2
18934  *         else:
18935  *             return 0             # <<<<<<<<<<<<<<
18936  *
18937  *     def _hash_vals(self):
18938  */
18939   /*else*/ {
18940     __pyx_r = 0;
18941     goto __pyx_L0;
18942   }
18943 
18944   /* "yt/geometry/_selection_routines/point_selector.pxi":57
18945  *     @cython.wraparound(False)
18946  *     @cython.cdivision(True)
18947  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
18948  *                                np.float64_t right_edge[3]) nogil:
18949  *         # point definitely can only be in one cell
18950  */
18951 
18952   /* function exit code */
18953   __pyx_L0:;
18954   return __pyx_r;
18955 }
18956 
18957 /* "yt/geometry/_selection_routines/point_selector.pxi":69
18958  *             return 0
18959  *
18960  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
18961  *         return (("p[0]", self.p[0]),
18962  *                 ("p[1]", self.p[1]),
18963  */
18964 
18965 /* Python wrapper */
18966 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
18967 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
18968   PyObject *__pyx_r = 0;
18969   __Pyx_RefNannyDeclarations
18970   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
18971   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_2_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *)__pyx_v_self));
18972 
18973   /* function exit code */
18974   __Pyx_RefNannyFinishContext();
18975   return __pyx_r;
18976 }
18977 
18978 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self) {
18979   PyObject *__pyx_r = NULL;
18980   __Pyx_RefNannyDeclarations
18981   PyObject *__pyx_t_1 = NULL;
18982   PyObject *__pyx_t_2 = NULL;
18983   PyObject *__pyx_t_3 = NULL;
18984   PyObject *__pyx_t_4 = NULL;
18985   __Pyx_RefNannySetupContext("_hash_vals", 0);
18986 
18987   /* "yt/geometry/_selection_routines/point_selector.pxi":70
18988  *
18989  *     def _hash_vals(self):
18990  *         return (("p[0]", self.p[0]),             # <<<<<<<<<<<<<<
18991  *                 ("p[1]", self.p[1]),
18992  *                 ("p[2]", self.p[2]))
18993  */
18994   __Pyx_XDECREF(__pyx_r);
18995   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->p[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 70, __pyx_L1_error)
18996   __Pyx_GOTREF(__pyx_t_1);
18997   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 70, __pyx_L1_error)
18998   __Pyx_GOTREF(__pyx_t_2);
18999   __Pyx_INCREF(__pyx_kp_s_p_0);
19000   __Pyx_GIVEREF(__pyx_kp_s_p_0);
19001   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_s_p_0);
19002   __Pyx_GIVEREF(__pyx_t_1);
19003   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
19004   __pyx_t_1 = 0;
19005 
19006   /* "yt/geometry/_selection_routines/point_selector.pxi":71
19007  *     def _hash_vals(self):
19008  *         return (("p[0]", self.p[0]),
19009  *                 ("p[1]", self.p[1]),             # <<<<<<<<<<<<<<
19010  *                 ("p[2]", self.p[2]))
19011  *
19012  */
19013   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->p[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 71, __pyx_L1_error)
19014   __Pyx_GOTREF(__pyx_t_1);
19015   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 71, __pyx_L1_error)
19016   __Pyx_GOTREF(__pyx_t_3);
19017   __Pyx_INCREF(__pyx_kp_s_p_1);
19018   __Pyx_GIVEREF(__pyx_kp_s_p_1);
19019   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_p_1);
19020   __Pyx_GIVEREF(__pyx_t_1);
19021   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
19022   __pyx_t_1 = 0;
19023 
19024   /* "yt/geometry/_selection_routines/point_selector.pxi":72
19025  *         return (("p[0]", self.p[0]),
19026  *                 ("p[1]", self.p[1]),
19027  *                 ("p[2]", self.p[2]))             # <<<<<<<<<<<<<<
19028  *
19029  *     def _get_state_attnames(self):
19030  */
19031   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->p[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 72, __pyx_L1_error)
19032   __Pyx_GOTREF(__pyx_t_1);
19033   __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 72, __pyx_L1_error)
19034   __Pyx_GOTREF(__pyx_t_4);
19035   __Pyx_INCREF(__pyx_kp_s_p_2);
19036   __Pyx_GIVEREF(__pyx_kp_s_p_2);
19037   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_s_p_2);
19038   __Pyx_GIVEREF(__pyx_t_1);
19039   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
19040   __pyx_t_1 = 0;
19041 
19042   /* "yt/geometry/_selection_routines/point_selector.pxi":70
19043  *
19044  *     def _hash_vals(self):
19045  *         return (("p[0]", self.p[0]),             # <<<<<<<<<<<<<<
19046  *                 ("p[1]", self.p[1]),
19047  *                 ("p[2]", self.p[2]))
19048  */
19049   __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 70, __pyx_L1_error)
19050   __Pyx_GOTREF(__pyx_t_1);
19051   __Pyx_GIVEREF(__pyx_t_2);
19052   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
19053   __Pyx_GIVEREF(__pyx_t_3);
19054   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
19055   __Pyx_GIVEREF(__pyx_t_4);
19056   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
19057   __pyx_t_2 = 0;
19058   __pyx_t_3 = 0;
19059   __pyx_t_4 = 0;
19060   __pyx_r = __pyx_t_1;
19061   __pyx_t_1 = 0;
19062   goto __pyx_L0;
19063 
19064   /* "yt/geometry/_selection_routines/point_selector.pxi":69
19065  *             return 0
19066  *
19067  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
19068  *         return (("p[0]", self.p[0]),
19069  *                 ("p[1]", self.p[1]),
19070  */
19071 
19072   /* function exit code */
19073   __pyx_L1_error:;
19074   __Pyx_XDECREF(__pyx_t_1);
19075   __Pyx_XDECREF(__pyx_t_2);
19076   __Pyx_XDECREF(__pyx_t_3);
19077   __Pyx_XDECREF(__pyx_t_4);
19078   __Pyx_AddTraceback("yt.geometry.selection_routines.PointSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
19079   __pyx_r = NULL;
19080   __pyx_L0:;
19081   __Pyx_XGIVEREF(__pyx_r);
19082   __Pyx_RefNannyFinishContext();
19083   return __pyx_r;
19084 }
19085 
19086 /* "yt/geometry/_selection_routines/point_selector.pxi":74
19087  *                 ("p[2]", self.p[2]))
19088  *
19089  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
19090  *         return ('p', )
19091  *
19092  */
19093 
19094 /* Python wrapper */
19095 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_5_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
19096 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_5_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
19097   PyObject *__pyx_r = 0;
19098   __Pyx_RefNannyDeclarations
19099   __Pyx_RefNannySetupContext("_get_state_attnames (wrapper)", 0);
19100   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_4_get_state_attnames(((struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *)__pyx_v_self));
19101 
19102   /* function exit code */
19103   __Pyx_RefNannyFinishContext();
19104   return __pyx_r;
19105 }
19106 
19107 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_4_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self) {
19108   PyObject *__pyx_r = NULL;
19109   __Pyx_RefNannyDeclarations
19110   __Pyx_RefNannySetupContext("_get_state_attnames", 0);
19111 
19112   /* "yt/geometry/_selection_routines/point_selector.pxi":75
19113  *
19114  *     def _get_state_attnames(self):
19115  *         return ('p', )             # <<<<<<<<<<<<<<
19116  *
19117  * point_selector = PointSelector
19118  */
19119   __Pyx_XDECREF(__pyx_r);
19120   __Pyx_INCREF(__pyx_tuple__10);
19121   __pyx_r = __pyx_tuple__10;
19122   goto __pyx_L0;
19123 
19124   /* "yt/geometry/_selection_routines/point_selector.pxi":74
19125  *                 ("p[2]", self.p[2]))
19126  *
19127  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
19128  *         return ('p', )
19129  *
19130  */
19131 
19132   /* function exit code */
19133   __pyx_L0:;
19134   __Pyx_XGIVEREF(__pyx_r);
19135   __Pyx_RefNannyFinishContext();
19136   return __pyx_r;
19137 }
19138 
19139 /* "yt/geometry/_selection_routines/point_selector.pxi":2
19140  * cdef class PointSelector(SelectorObject):
19141  *     cdef public np.float64_t p[3]             # <<<<<<<<<<<<<<
19142  *
19143  *     def __init__(self, dobj):
19144  */
19145 
19146 /* Python wrapper */
19147 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_1p_1__get__(PyObject *__pyx_v_self); /*proto*/
19148 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_1p_1__get__(PyObject *__pyx_v_self) {
19149   PyObject *__pyx_r = 0;
19150   __Pyx_RefNannyDeclarations
19151   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
19152   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_1p___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *)__pyx_v_self));
19153 
19154   /* function exit code */
19155   __Pyx_RefNannyFinishContext();
19156   return __pyx_r;
19157 }
19158 
19159 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_1p___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self) {
19160   PyObject *__pyx_r = NULL;
19161   __Pyx_RefNannyDeclarations
19162   PyObject *__pyx_t_1 = NULL;
19163   __Pyx_RefNannySetupContext("__get__", 0);
19164   __Pyx_XDECREF(__pyx_r);
19165   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->p, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 2, __pyx_L1_error)
19166   __Pyx_GOTREF(__pyx_t_1);
19167   __pyx_r = __pyx_t_1;
19168   __pyx_t_1 = 0;
19169   goto __pyx_L0;
19170 
19171   /* function exit code */
19172   __pyx_L1_error:;
19173   __Pyx_XDECREF(__pyx_t_1);
19174   __Pyx_AddTraceback("yt.geometry.selection_routines.PointSelector.p.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
19175   __pyx_r = NULL;
19176   __pyx_L0:;
19177   __Pyx_XGIVEREF(__pyx_r);
19178   __Pyx_RefNannyFinishContext();
19179   return __pyx_r;
19180 }
19181 
19182 /* Python wrapper */
19183 static int __pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_1p_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
19184 static int __pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_1p_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
19185   int __pyx_r;
19186   __Pyx_RefNannyDeclarations
19187   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
19188   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_1p_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
19189 
19190   /* function exit code */
19191   __Pyx_RefNannyFinishContext();
19192   return __pyx_r;
19193 }
19194 
19195 static int __pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_1p_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, PyObject *__pyx_v_value) {
19196   int __pyx_r;
19197   __Pyx_RefNannyDeclarations
19198   __pyx_t_5numpy_float64_t __pyx_t_1[3];
19199   __Pyx_RefNannySetupContext("__set__", 0);
19200   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(6, 2, __pyx_L1_error)
19201   memcpy(&(__pyx_v_self->p[0]), __pyx_t_1, sizeof(__pyx_v_self->p[0]) * (3));
19202 
19203   /* function exit code */
19204   __pyx_r = 0;
19205   goto __pyx_L0;
19206   __pyx_L1_error:;
19207   __Pyx_AddTraceback("yt.geometry.selection_routines.PointSelector.p.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
19208   __pyx_r = -1;
19209   __pyx_L0:;
19210   __Pyx_RefNannyFinishContext();
19211   return __pyx_r;
19212 }
19213 
19214 /* "(tree fragment)":1
19215  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
19216  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
19217  * def __setstate_cython__(self, __pyx_state):
19218  */
19219 
19220 /* Python wrapper */
19221 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
19222 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
19223   PyObject *__pyx_r = 0;
19224   __Pyx_RefNannyDeclarations
19225   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
19226   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_6__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *)__pyx_v_self));
19227 
19228   /* function exit code */
19229   __Pyx_RefNannyFinishContext();
19230   return __pyx_r;
19231 }
19232 
19233 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self) {
19234   PyObject *__pyx_r = NULL;
19235   __Pyx_RefNannyDeclarations
19236   PyObject *__pyx_t_1 = NULL;
19237   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
19238 
19239   /* "(tree fragment)":2
19240  * def __reduce_cython__(self):
19241  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
19242  * def __setstate_cython__(self, __pyx_state):
19243  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
19244  */
19245   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
19246   __Pyx_GOTREF(__pyx_t_1);
19247   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
19248   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
19249   __PYX_ERR(5, 2, __pyx_L1_error)
19250 
19251   /* "(tree fragment)":1
19252  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
19253  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
19254  * def __setstate_cython__(self, __pyx_state):
19255  */
19256 
19257   /* function exit code */
19258   __pyx_L1_error:;
19259   __Pyx_XDECREF(__pyx_t_1);
19260   __Pyx_AddTraceback("yt.geometry.selection_routines.PointSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
19261   __pyx_r = NULL;
19262   __Pyx_XGIVEREF(__pyx_r);
19263   __Pyx_RefNannyFinishContext();
19264   return __pyx_r;
19265 }
19266 
19267 /* "(tree fragment)":3
19268  * def __reduce_cython__(self):
19269  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
19270  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
19271  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
19272  */
19273 
19274 /* Python wrapper */
19275 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
19276 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
19277   PyObject *__pyx_r = 0;
19278   __Pyx_RefNannyDeclarations
19279   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
19280   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_8__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
19281 
19282   /* function exit code */
19283   __Pyx_RefNannyFinishContext();
19284   return __pyx_r;
19285 }
19286 
19287 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13PointSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
19288   PyObject *__pyx_r = NULL;
19289   __Pyx_RefNannyDeclarations
19290   PyObject *__pyx_t_1 = NULL;
19291   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
19292 
19293   /* "(tree fragment)":4
19294  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
19295  * def __setstate_cython__(self, __pyx_state):
19296  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
19297  */
19298   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
19299   __Pyx_GOTREF(__pyx_t_1);
19300   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
19301   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
19302   __PYX_ERR(5, 4, __pyx_L1_error)
19303 
19304   /* "(tree fragment)":3
19305  * def __reduce_cython__(self):
19306  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
19307  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
19308  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
19309  */
19310 
19311   /* function exit code */
19312   __pyx_L1_error:;
19313   __Pyx_XDECREF(__pyx_t_1);
19314   __Pyx_AddTraceback("yt.geometry.selection_routines.PointSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
19315   __pyx_r = NULL;
19316   __Pyx_XGIVEREF(__pyx_r);
19317   __Pyx_RefNannyFinishContext();
19318   return __pyx_r;
19319 }
19320 
19321 /* "yt/geometry/_selection_routines/sphere_selector.pxi":8
19322  *     cdef public bint check_box[3]
19323  *
19324  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
19325  *         for i in range(3):
19326  *             self.center[i] = _ensure_code(dobj.center[i])
19327  */
19328 
19329 /* Python wrapper */
19330 static int __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
19331 static int __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
19332   PyObject *__pyx_v_dobj = 0;
19333   int __pyx_r;
19334   __Pyx_RefNannyDeclarations
19335   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
19336   {
19337     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
19338     PyObject* values[1] = {0};
19339     if (unlikely(__pyx_kwds)) {
19340       Py_ssize_t kw_args;
19341       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
19342       switch (pos_args) {
19343         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
19344         CYTHON_FALLTHROUGH;
19345         case  0: break;
19346         default: goto __pyx_L5_argtuple_error;
19347       }
19348       kw_args = PyDict_Size(__pyx_kwds);
19349       switch (pos_args) {
19350         case  0:
19351         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
19352         else goto __pyx_L5_argtuple_error;
19353       }
19354       if (unlikely(kw_args > 0)) {
19355         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(2, 8, __pyx_L3_error)
19356       }
19357     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
19358       goto __pyx_L5_argtuple_error;
19359     } else {
19360       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
19361     }
19362     __pyx_v_dobj = values[0];
19363   }
19364   goto __pyx_L4_argument_unpacking_done;
19365   __pyx_L5_argtuple_error:;
19366   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 8, __pyx_L3_error)
19367   __pyx_L3_error:;
19368   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
19369   __Pyx_RefNannyFinishContext();
19370   return -1;
19371   __pyx_L4_argument_unpacking_done:;
19372   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self), __pyx_v_dobj);
19373 
19374   /* function exit code */
19375   __Pyx_RefNannyFinishContext();
19376   return __pyx_r;
19377 }
19378 
19379 static int __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
19380   long __pyx_v_i;
19381   int __pyx_r;
19382   __Pyx_RefNannyDeclarations
19383   long __pyx_t_1;
19384   PyObject *__pyx_t_2 = NULL;
19385   PyObject *__pyx_t_3 = NULL;
19386   __pyx_t_5numpy_float64_t __pyx_t_4;
19387   PyObject *__pyx_t_5 = NULL;
19388   PyObject *__pyx_t_6 = NULL;
19389   int __pyx_t_7;
19390   __Pyx_RefNannySetupContext("__init__", 0);
19391 
19392   /* "yt/geometry/_selection_routines/sphere_selector.pxi":9
19393  *
19394  *     def __init__(self, dobj):
19395  *         for i in range(3):             # <<<<<<<<<<<<<<
19396  *             self.center[i] = _ensure_code(dobj.center[i])
19397  *         self.radius = _ensure_code(dobj.radius)
19398  */
19399   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
19400     __pyx_v_i = __pyx_t_1;
19401 
19402     /* "yt/geometry/_selection_routines/sphere_selector.pxi":10
19403  *     def __init__(self, dobj):
19404  *         for i in range(3):
19405  *             self.center[i] = _ensure_code(dobj.center[i])             # <<<<<<<<<<<<<<
19406  *         self.radius = _ensure_code(dobj.radius)
19407  *         self.radius2 = self.radius * self.radius
19408  */
19409     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_center); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 10, __pyx_L1_error)
19410     __Pyx_GOTREF(__pyx_t_2);
19411     __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 10, __pyx_L1_error)
19412     __Pyx_GOTREF(__pyx_t_3);
19413     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
19414     __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 10, __pyx_L1_error)
19415     __Pyx_GOTREF(__pyx_t_2);
19416     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
19417     __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(2, 10, __pyx_L1_error)
19418     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
19419     (__pyx_v_self->center[__pyx_v_i]) = __pyx_t_4;
19420   }
19421 
19422   /* "yt/geometry/_selection_routines/sphere_selector.pxi":11
19423  *         for i in range(3):
19424  *             self.center[i] = _ensure_code(dobj.center[i])
19425  *         self.radius = _ensure_code(dobj.radius)             # <<<<<<<<<<<<<<
19426  *         self.radius2 = self.radius * self.radius
19427  *         self.set_bbox(_ensure_code(dobj.center))
19428  */
19429   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_radius); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 11, __pyx_L1_error)
19430   __Pyx_GOTREF(__pyx_t_2);
19431   __pyx_t_3 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 11, __pyx_L1_error)
19432   __Pyx_GOTREF(__pyx_t_3);
19433   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
19434   __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(2, 11, __pyx_L1_error)
19435   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
19436   __pyx_v_self->radius = __pyx_t_4;
19437 
19438   /* "yt/geometry/_selection_routines/sphere_selector.pxi":12
19439  *             self.center[i] = _ensure_code(dobj.center[i])
19440  *         self.radius = _ensure_code(dobj.radius)
19441  *         self.radius2 = self.radius * self.radius             # <<<<<<<<<<<<<<
19442  *         self.set_bbox(_ensure_code(dobj.center))
19443  *         for i in range(3):
19444  */
19445   __pyx_v_self->radius2 = (__pyx_v_self->radius * __pyx_v_self->radius);
19446 
19447   /* "yt/geometry/_selection_routines/sphere_selector.pxi":13
19448  *         self.radius = _ensure_code(dobj.radius)
19449  *         self.radius2 = self.radius * self.radius
19450  *         self.set_bbox(_ensure_code(dobj.center))             # <<<<<<<<<<<<<<
19451  *         for i in range(3):
19452  *             if self.bbox[i][0] < dobj.ds.domain_left_edge[i]:
19453  */
19454   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_bbox); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error)
19455   __Pyx_GOTREF(__pyx_t_2);
19456   __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_center); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 13, __pyx_L1_error)
19457   __Pyx_GOTREF(__pyx_t_5);
19458   __pyx_t_6 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 13, __pyx_L1_error)
19459   __Pyx_GOTREF(__pyx_t_6);
19460   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
19461   __pyx_t_5 = NULL;
19462   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
19463     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
19464     if (likely(__pyx_t_5)) {
19465       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
19466       __Pyx_INCREF(__pyx_t_5);
19467       __Pyx_INCREF(function);
19468       __Pyx_DECREF_SET(__pyx_t_2, function);
19469     }
19470   }
19471   __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6);
19472   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
19473   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
19474   if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error)
19475   __Pyx_GOTREF(__pyx_t_3);
19476   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
19477   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
19478 
19479   /* "yt/geometry/_selection_routines/sphere_selector.pxi":14
19480  *         self.radius2 = self.radius * self.radius
19481  *         self.set_bbox(_ensure_code(dobj.center))
19482  *         for i in range(3):             # <<<<<<<<<<<<<<
19483  *             if self.bbox[i][0] < dobj.ds.domain_left_edge[i]:
19484  *                 self.check_box[i] = False
19485  */
19486   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
19487     __pyx_v_i = __pyx_t_1;
19488 
19489     /* "yt/geometry/_selection_routines/sphere_selector.pxi":15
19490  *         self.set_bbox(_ensure_code(dobj.center))
19491  *         for i in range(3):
19492  *             if self.bbox[i][0] < dobj.ds.domain_left_edge[i]:             # <<<<<<<<<<<<<<
19493  *                 self.check_box[i] = False
19494  *             elif self.bbox[i][1] > dobj.ds.domain_right_edge[i]:
19495  */
19496     __pyx_t_3 = PyFloat_FromDouble(((__pyx_v_self->bbox[__pyx_v_i])[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 15, __pyx_L1_error)
19497     __Pyx_GOTREF(__pyx_t_3);
19498     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error)
19499     __Pyx_GOTREF(__pyx_t_2);
19500     __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_domain_left_edge); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 15, __pyx_L1_error)
19501     __Pyx_GOTREF(__pyx_t_6);
19502     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
19503     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_6, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error)
19504     __Pyx_GOTREF(__pyx_t_2);
19505     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
19506     __pyx_t_6 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 15, __pyx_L1_error)
19507     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
19508     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
19509     __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(2, 15, __pyx_L1_error)
19510     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
19511     if (__pyx_t_7) {
19512 
19513       /* "yt/geometry/_selection_routines/sphere_selector.pxi":16
19514  *         for i in range(3):
19515  *             if self.bbox[i][0] < dobj.ds.domain_left_edge[i]:
19516  *                 self.check_box[i] = False             # <<<<<<<<<<<<<<
19517  *             elif self.bbox[i][1] > dobj.ds.domain_right_edge[i]:
19518  *                 self.check_box[i] = False
19519  */
19520       (__pyx_v_self->check_box[__pyx_v_i]) = 0;
19521 
19522       /* "yt/geometry/_selection_routines/sphere_selector.pxi":15
19523  *         self.set_bbox(_ensure_code(dobj.center))
19524  *         for i in range(3):
19525  *             if self.bbox[i][0] < dobj.ds.domain_left_edge[i]:             # <<<<<<<<<<<<<<
19526  *                 self.check_box[i] = False
19527  *             elif self.bbox[i][1] > dobj.ds.domain_right_edge[i]:
19528  */
19529       goto __pyx_L7;
19530     }
19531 
19532     /* "yt/geometry/_selection_routines/sphere_selector.pxi":17
19533  *             if self.bbox[i][0] < dobj.ds.domain_left_edge[i]:
19534  *                 self.check_box[i] = False
19535  *             elif self.bbox[i][1] > dobj.ds.domain_right_edge[i]:             # <<<<<<<<<<<<<<
19536  *                 self.check_box[i] = False
19537  *             else:
19538  */
19539     __pyx_t_6 = PyFloat_FromDouble(((__pyx_v_self->bbox[__pyx_v_i])[1])); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 17, __pyx_L1_error)
19540     __Pyx_GOTREF(__pyx_t_6);
19541     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 17, __pyx_L1_error)
19542     __Pyx_GOTREF(__pyx_t_2);
19543     __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_domain_right_edge); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 17, __pyx_L1_error)
19544     __Pyx_GOTREF(__pyx_t_3);
19545     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
19546     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 17, __pyx_L1_error)
19547     __Pyx_GOTREF(__pyx_t_2);
19548     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
19549     __pyx_t_3 = PyObject_RichCompare(__pyx_t_6, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 17, __pyx_L1_error)
19550     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
19551     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
19552     __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(2, 17, __pyx_L1_error)
19553     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
19554     if (__pyx_t_7) {
19555 
19556       /* "yt/geometry/_selection_routines/sphere_selector.pxi":18
19557  *                 self.check_box[i] = False
19558  *             elif self.bbox[i][1] > dobj.ds.domain_right_edge[i]:
19559  *                 self.check_box[i] = False             # <<<<<<<<<<<<<<
19560  *             else:
19561  *                 self.check_box[i] = True
19562  */
19563       (__pyx_v_self->check_box[__pyx_v_i]) = 0;
19564 
19565       /* "yt/geometry/_selection_routines/sphere_selector.pxi":17
19566  *             if self.bbox[i][0] < dobj.ds.domain_left_edge[i]:
19567  *                 self.check_box[i] = False
19568  *             elif self.bbox[i][1] > dobj.ds.domain_right_edge[i]:             # <<<<<<<<<<<<<<
19569  *                 self.check_box[i] = False
19570  *             else:
19571  */
19572       goto __pyx_L7;
19573     }
19574 
19575     /* "yt/geometry/_selection_routines/sphere_selector.pxi":20
19576  *                 self.check_box[i] = False
19577  *             else:
19578  *                 self.check_box[i] = True             # <<<<<<<<<<<<<<
19579  *
19580  *     def set_bbox(self, center):
19581  */
19582     /*else*/ {
19583       (__pyx_v_self->check_box[__pyx_v_i]) = 1;
19584     }
19585     __pyx_L7:;
19586   }
19587 
19588   /* "yt/geometry/_selection_routines/sphere_selector.pxi":8
19589  *     cdef public bint check_box[3]
19590  *
19591  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
19592  *         for i in range(3):
19593  *             self.center[i] = _ensure_code(dobj.center[i])
19594  */
19595 
19596   /* function exit code */
19597   __pyx_r = 0;
19598   goto __pyx_L0;
19599   __pyx_L1_error:;
19600   __Pyx_XDECREF(__pyx_t_2);
19601   __Pyx_XDECREF(__pyx_t_3);
19602   __Pyx_XDECREF(__pyx_t_5);
19603   __Pyx_XDECREF(__pyx_t_6);
19604   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
19605   __pyx_r = -1;
19606   __pyx_L0:;
19607   __Pyx_RefNannyFinishContext();
19608   return __pyx_r;
19609 }
19610 
19611 /* "yt/geometry/_selection_routines/sphere_selector.pxi":22
19612  *                 self.check_box[i] = True
19613  *
19614  *     def set_bbox(self, center):             # <<<<<<<<<<<<<<
19615  *         for i in range(3):
19616  *             self.center[i] = center[i]
19617  */
19618 
19619 /* Python wrapper */
19620 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_3set_bbox(PyObject *__pyx_v_self, PyObject *__pyx_v_center); /*proto*/
19621 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_3set_bbox(PyObject *__pyx_v_self, PyObject *__pyx_v_center) {
19622   PyObject *__pyx_r = 0;
19623   __Pyx_RefNannyDeclarations
19624   __Pyx_RefNannySetupContext("set_bbox (wrapper)", 0);
19625   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_2set_bbox(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self), ((PyObject *)__pyx_v_center));
19626 
19627   /* function exit code */
19628   __Pyx_RefNannyFinishContext();
19629   return __pyx_r;
19630 }
19631 
19632 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_2set_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_center) {
19633   long __pyx_v_i;
19634   PyObject *__pyx_r = NULL;
19635   __Pyx_RefNannyDeclarations
19636   long __pyx_t_1;
19637   PyObject *__pyx_t_2 = NULL;
19638   __pyx_t_5numpy_float64_t __pyx_t_3;
19639   __Pyx_RefNannySetupContext("set_bbox", 0);
19640 
19641   /* "yt/geometry/_selection_routines/sphere_selector.pxi":23
19642  *
19643  *     def set_bbox(self, center):
19644  *         for i in range(3):             # <<<<<<<<<<<<<<
19645  *             self.center[i] = center[i]
19646  *             self.bbox[i][0] = self.center[i] - self.radius
19647  */
19648   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
19649     __pyx_v_i = __pyx_t_1;
19650 
19651     /* "yt/geometry/_selection_routines/sphere_selector.pxi":24
19652  *     def set_bbox(self, center):
19653  *         for i in range(3):
19654  *             self.center[i] = center[i]             # <<<<<<<<<<<<<<
19655  *             self.bbox[i][0] = self.center[i] - self.radius
19656  *             self.bbox[i][1] = self.center[i] + self.radius
19657  */
19658     __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_center, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 24, __pyx_L1_error)
19659     __Pyx_GOTREF(__pyx_t_2);
19660     __pyx_t_3 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_3 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(2, 24, __pyx_L1_error)
19661     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
19662     (__pyx_v_self->center[__pyx_v_i]) = __pyx_t_3;
19663 
19664     /* "yt/geometry/_selection_routines/sphere_selector.pxi":25
19665  *         for i in range(3):
19666  *             self.center[i] = center[i]
19667  *             self.bbox[i][0] = self.center[i] - self.radius             # <<<<<<<<<<<<<<
19668  *             self.bbox[i][1] = self.center[i] + self.radius
19669  *
19670  */
19671     ((__pyx_v_self->bbox[__pyx_v_i])[0]) = ((__pyx_v_self->center[__pyx_v_i]) - __pyx_v_self->radius);
19672 
19673     /* "yt/geometry/_selection_routines/sphere_selector.pxi":26
19674  *             self.center[i] = center[i]
19675  *             self.bbox[i][0] = self.center[i] - self.radius
19676  *             self.bbox[i][1] = self.center[i] + self.radius             # <<<<<<<<<<<<<<
19677  *
19678  *     @cython.boundscheck(False)
19679  */
19680     ((__pyx_v_self->bbox[__pyx_v_i])[1]) = ((__pyx_v_self->center[__pyx_v_i]) + __pyx_v_self->radius);
19681   }
19682 
19683   /* "yt/geometry/_selection_routines/sphere_selector.pxi":22
19684  *                 self.check_box[i] = True
19685  *
19686  *     def set_bbox(self, center):             # <<<<<<<<<<<<<<
19687  *         for i in range(3):
19688  *             self.center[i] = center[i]
19689  */
19690 
19691   /* function exit code */
19692   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
19693   goto __pyx_L0;
19694   __pyx_L1_error:;
19695   __Pyx_XDECREF(__pyx_t_2);
19696   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.set_bbox", __pyx_clineno, __pyx_lineno, __pyx_filename);
19697   __pyx_r = NULL;
19698   __pyx_L0:;
19699   __Pyx_XGIVEREF(__pyx_r);
19700   __Pyx_RefNannyFinishContext();
19701   return __pyx_r;
19702 }
19703 
19704 /* "yt/geometry/_selection_routines/sphere_selector.pxi":31
19705  *     @cython.wraparound(False)
19706  *     @cython.cdivision(True)
19707  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
19708  *         # sphere center either inside cell or center of cell lies inside sphere
19709  *         if (pos[0] - 0.5*dds[0] <= self.center[0] <= pos[0]+0.5*dds[0] and
19710  */
19711 
19712 static int __pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
19713   int __pyx_r;
19714   int __pyx_t_1;
19715   int __pyx_t_2;
19716   int __pyx_t_3;
19717 
19718   /* "yt/geometry/_selection_routines/sphere_selector.pxi":33
19719  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
19720  *         # sphere center either inside cell or center of cell lies inside sphere
19721  *         if (pos[0] - 0.5*dds[0] <= self.center[0] <= pos[0]+0.5*dds[0] and             # <<<<<<<<<<<<<<
19722  *             pos[1] - 0.5*dds[1] <= self.center[1] <= pos[1]+0.5*dds[1] and
19723  *             pos[2] - 0.5*dds[2] <= self.center[2] <= pos[2]+0.5*dds[2]):
19724  */
19725   __pyx_t_2 = (((__pyx_v_pos[0]) - (0.5 * (__pyx_v_dds[0]))) <= (__pyx_v_self->center[0]));
19726   if (__pyx_t_2) {
19727     __pyx_t_2 = ((__pyx_v_self->center[0]) <= ((__pyx_v_pos[0]) + (0.5 * (__pyx_v_dds[0]))));
19728   }
19729   __pyx_t_3 = (__pyx_t_2 != 0);
19730   if (__pyx_t_3) {
19731   } else {
19732     __pyx_t_1 = __pyx_t_3;
19733     goto __pyx_L4_bool_binop_done;
19734   }
19735 
19736   /* "yt/geometry/_selection_routines/sphere_selector.pxi":34
19737  *         # sphere center either inside cell or center of cell lies inside sphere
19738  *         if (pos[0] - 0.5*dds[0] <= self.center[0] <= pos[0]+0.5*dds[0] and
19739  *             pos[1] - 0.5*dds[1] <= self.center[1] <= pos[1]+0.5*dds[1] and             # <<<<<<<<<<<<<<
19740  *             pos[2] - 0.5*dds[2] <= self.center[2] <= pos[2]+0.5*dds[2]):
19741  *             return 1
19742  */
19743   __pyx_t_3 = (((__pyx_v_pos[1]) - (0.5 * (__pyx_v_dds[1]))) <= (__pyx_v_self->center[1]));
19744   if (__pyx_t_3) {
19745     __pyx_t_3 = ((__pyx_v_self->center[1]) <= ((__pyx_v_pos[1]) + (0.5 * (__pyx_v_dds[1]))));
19746   }
19747   __pyx_t_2 = (__pyx_t_3 != 0);
19748   if (__pyx_t_2) {
19749   } else {
19750     __pyx_t_1 = __pyx_t_2;
19751     goto __pyx_L4_bool_binop_done;
19752   }
19753 
19754   /* "yt/geometry/_selection_routines/sphere_selector.pxi":35
19755  *         if (pos[0] - 0.5*dds[0] <= self.center[0] <= pos[0]+0.5*dds[0] and
19756  *             pos[1] - 0.5*dds[1] <= self.center[1] <= pos[1]+0.5*dds[1] and
19757  *             pos[2] - 0.5*dds[2] <= self.center[2] <= pos[2]+0.5*dds[2]):             # <<<<<<<<<<<<<<
19758  *             return 1
19759  *         return self.select_point(pos)
19760  */
19761   __pyx_t_2 = (((__pyx_v_pos[2]) - (0.5 * (__pyx_v_dds[2]))) <= (__pyx_v_self->center[2]));
19762   if (__pyx_t_2) {
19763     __pyx_t_2 = ((__pyx_v_self->center[2]) <= ((__pyx_v_pos[2]) + (0.5 * (__pyx_v_dds[2]))));
19764   }
19765   __pyx_t_3 = (__pyx_t_2 != 0);
19766   __pyx_t_1 = __pyx_t_3;
19767   __pyx_L4_bool_binop_done:;
19768 
19769   /* "yt/geometry/_selection_routines/sphere_selector.pxi":33
19770  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
19771  *         # sphere center either inside cell or center of cell lies inside sphere
19772  *         if (pos[0] - 0.5*dds[0] <= self.center[0] <= pos[0]+0.5*dds[0] and             # <<<<<<<<<<<<<<
19773  *             pos[1] - 0.5*dds[1] <= self.center[1] <= pos[1]+0.5*dds[1] and
19774  *             pos[2] - 0.5*dds[2] <= self.center[2] <= pos[2]+0.5*dds[2]):
19775  */
19776   if (__pyx_t_1) {
19777 
19778     /* "yt/geometry/_selection_routines/sphere_selector.pxi":36
19779  *             pos[1] - 0.5*dds[1] <= self.center[1] <= pos[1]+0.5*dds[1] and
19780  *             pos[2] - 0.5*dds[2] <= self.center[2] <= pos[2]+0.5*dds[2]):
19781  *             return 1             # <<<<<<<<<<<<<<
19782  *         return self.select_point(pos)
19783  *         # # langmm: added to allow sphere to interesect edge/corner of cell
19784  */
19785     __pyx_r = 1;
19786     goto __pyx_L0;
19787 
19788     /* "yt/geometry/_selection_routines/sphere_selector.pxi":33
19789  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
19790  *         # sphere center either inside cell or center of cell lies inside sphere
19791  *         if (pos[0] - 0.5*dds[0] <= self.center[0] <= pos[0]+0.5*dds[0] and             # <<<<<<<<<<<<<<
19792  *             pos[1] - 0.5*dds[1] <= self.center[1] <= pos[1]+0.5*dds[1] and
19793  *             pos[2] - 0.5*dds[2] <= self.center[2] <= pos[2]+0.5*dds[2]):
19794  */
19795   }
19796 
19797   /* "yt/geometry/_selection_routines/sphere_selector.pxi":37
19798  *             pos[2] - 0.5*dds[2] <= self.center[2] <= pos[2]+0.5*dds[2]):
19799  *             return 1
19800  *         return self.select_point(pos)             # <<<<<<<<<<<<<<
19801  *         # # langmm: added to allow sphere to interesect edge/corner of cell
19802  *         # cdef np.float64_t LE[3]
19803  */
19804   __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.select_point(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_pos);
19805   goto __pyx_L0;
19806 
19807   /* "yt/geometry/_selection_routines/sphere_selector.pxi":31
19808  *     @cython.wraparound(False)
19809  *     @cython.cdivision(True)
19810  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
19811  *         # sphere center either inside cell or center of cell lies inside sphere
19812  *         if (pos[0] - 0.5*dds[0] <= self.center[0] <= pos[0]+0.5*dds[0] and
19813  */
19814 
19815   /* function exit code */
19816   __pyx_L0:;
19817   return __pyx_r;
19818 }
19819 
19820 /* "yt/geometry/_selection_routines/sphere_selector.pxi":50
19821  *     @cython.wraparound(False)
19822  *     @cython.cdivision(True)
19823  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
19824  *         cdef int i
19825  *         cdef np.float64_t dist, dist2 = 0
19826  */
19827 
19828 static int __pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
19829   int __pyx_v_i;
19830   __pyx_t_5numpy_float64_t __pyx_v_dist;
19831   __pyx_t_5numpy_float64_t __pyx_v_dist2;
19832   int __pyx_r;
19833   int __pyx_t_1;
19834   int __pyx_t_2;
19835   int __pyx_t_3;
19836 
19837   /* "yt/geometry/_selection_routines/sphere_selector.pxi":52
19838  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
19839  *         cdef int i
19840  *         cdef np.float64_t dist, dist2 = 0             # <<<<<<<<<<<<<<
19841  *         for i in range(3):
19842  *             if self.check_box[i] and \
19843  */
19844   __pyx_v_dist2 = 0.0;
19845 
19846   /* "yt/geometry/_selection_routines/sphere_selector.pxi":53
19847  *         cdef int i
19848  *         cdef np.float64_t dist, dist2 = 0
19849  *         for i in range(3):             # <<<<<<<<<<<<<<
19850  *             if self.check_box[i] and \
19851  *               (pos[i] < self.bbox[i][0] or
19852  */
19853   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
19854     __pyx_v_i = __pyx_t_1;
19855 
19856     /* "yt/geometry/_selection_routines/sphere_selector.pxi":54
19857  *         cdef np.float64_t dist, dist2 = 0
19858  *         for i in range(3):
19859  *             if self.check_box[i] and \             # <<<<<<<<<<<<<<
19860  *               (pos[i] < self.bbox[i][0] or
19861  *                pos[i] > self.bbox[i][1]):
19862  */
19863     __pyx_t_3 = ((__pyx_v_self->check_box[__pyx_v_i]) != 0);
19864     if (__pyx_t_3) {
19865     } else {
19866       __pyx_t_2 = __pyx_t_3;
19867       goto __pyx_L6_bool_binop_done;
19868     }
19869 
19870     /* "yt/geometry/_selection_routines/sphere_selector.pxi":55
19871  *         for i in range(3):
19872  *             if self.check_box[i] and \
19873  *               (pos[i] < self.bbox[i][0] or             # <<<<<<<<<<<<<<
19874  *                pos[i] > self.bbox[i][1]):
19875  *                 return 0
19876  */
19877     __pyx_t_3 = (((__pyx_v_pos[__pyx_v_i]) < ((__pyx_v_self->bbox[__pyx_v_i])[0])) != 0);
19878     if (!__pyx_t_3) {
19879     } else {
19880       __pyx_t_2 = __pyx_t_3;
19881       goto __pyx_L6_bool_binop_done;
19882     }
19883 
19884     /* "yt/geometry/_selection_routines/sphere_selector.pxi":56
19885  *             if self.check_box[i] and \
19886  *               (pos[i] < self.bbox[i][0] or
19887  *                pos[i] > self.bbox[i][1]):             # <<<<<<<<<<<<<<
19888  *                 return 0
19889  *             dist = _periodic_dist(pos[i], self.center[i], self.domain_width[i],
19890  */
19891     __pyx_t_3 = (((__pyx_v_pos[__pyx_v_i]) > ((__pyx_v_self->bbox[__pyx_v_i])[1])) != 0);
19892     __pyx_t_2 = __pyx_t_3;
19893     __pyx_L6_bool_binop_done:;
19894 
19895     /* "yt/geometry/_selection_routines/sphere_selector.pxi":54
19896  *         cdef np.float64_t dist, dist2 = 0
19897  *         for i in range(3):
19898  *             if self.check_box[i] and \             # <<<<<<<<<<<<<<
19899  *               (pos[i] < self.bbox[i][0] or
19900  *                pos[i] > self.bbox[i][1]):
19901  */
19902     if (__pyx_t_2) {
19903 
19904       /* "yt/geometry/_selection_routines/sphere_selector.pxi":57
19905  *               (pos[i] < self.bbox[i][0] or
19906  *                pos[i] > self.bbox[i][1]):
19907  *                 return 0             # <<<<<<<<<<<<<<
19908  *             dist = _periodic_dist(pos[i], self.center[i], self.domain_width[i],
19909  *                                   self.periodicity[i])
19910  */
19911       __pyx_r = 0;
19912       goto __pyx_L0;
19913 
19914       /* "yt/geometry/_selection_routines/sphere_selector.pxi":54
19915  *         cdef np.float64_t dist, dist2 = 0
19916  *         for i in range(3):
19917  *             if self.check_box[i] and \             # <<<<<<<<<<<<<<
19918  *               (pos[i] < self.bbox[i][0] or
19919  *                pos[i] > self.bbox[i][1]):
19920  */
19921     }
19922 
19923     /* "yt/geometry/_selection_routines/sphere_selector.pxi":58
19924  *                pos[i] > self.bbox[i][1]):
19925  *                 return 0
19926  *             dist = _periodic_dist(pos[i], self.center[i], self.domain_width[i],             # <<<<<<<<<<<<<<
19927  *                                   self.periodicity[i])
19928  *             dist2 += dist*dist
19929  */
19930     __pyx_v_dist = __pyx_f_2yt_8geometry_18selection_routines__periodic_dist((__pyx_v_pos[__pyx_v_i]), (__pyx_v_self->center[__pyx_v_i]), (__pyx_v_self->__pyx_base.domain_width[__pyx_v_i]), (__pyx_v_self->__pyx_base.periodicity[__pyx_v_i]));
19931 
19932     /* "yt/geometry/_selection_routines/sphere_selector.pxi":60
19933  *             dist = _periodic_dist(pos[i], self.center[i], self.domain_width[i],
19934  *                                   self.periodicity[i])
19935  *             dist2 += dist*dist             # <<<<<<<<<<<<<<
19936  *             if dist2 > self.radius2: return 0
19937  *         return 1
19938  */
19939     __pyx_v_dist2 = (__pyx_v_dist2 + (__pyx_v_dist * __pyx_v_dist));
19940 
19941     /* "yt/geometry/_selection_routines/sphere_selector.pxi":61
19942  *                                   self.periodicity[i])
19943  *             dist2 += dist*dist
19944  *             if dist2 > self.radius2: return 0             # <<<<<<<<<<<<<<
19945  *         return 1
19946  *
19947  */
19948     __pyx_t_2 = ((__pyx_v_dist2 > __pyx_v_self->radius2) != 0);
19949     if (__pyx_t_2) {
19950       __pyx_r = 0;
19951       goto __pyx_L0;
19952     }
19953   }
19954 
19955   /* "yt/geometry/_selection_routines/sphere_selector.pxi":62
19956  *             dist2 += dist*dist
19957  *             if dist2 > self.radius2: return 0
19958  *         return 1             # <<<<<<<<<<<<<<
19959  *
19960  *     @cython.boundscheck(False)
19961  */
19962   __pyx_r = 1;
19963   goto __pyx_L0;
19964 
19965   /* "yt/geometry/_selection_routines/sphere_selector.pxi":50
19966  *     @cython.wraparound(False)
19967  *     @cython.cdivision(True)
19968  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
19969  *         cdef int i
19970  *         cdef np.float64_t dist, dist2 = 0
19971  */
19972 
19973   /* function exit code */
19974   __pyx_L0:;
19975   return __pyx_r;
19976 }
19977 
19978 /* "yt/geometry/_selection_routines/sphere_selector.pxi":67
19979  *     @cython.wraparound(False)
19980  *     @cython.cdivision(True)
19981  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
19982  *         cdef int i
19983  *         cdef np.float64_t dist, dist2 = 0
19984  */
19985 
19986 static int __pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
19987   int __pyx_v_i;
19988   __pyx_t_5numpy_float64_t __pyx_v_dist;
19989   __pyx_t_5numpy_float64_t __pyx_v_dist2;
19990   int __pyx_r;
19991   int __pyx_t_1;
19992   int __pyx_t_2;
19993 
19994   /* "yt/geometry/_selection_routines/sphere_selector.pxi":69
19995  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
19996  *         cdef int i
19997  *         cdef np.float64_t dist, dist2 = 0             # <<<<<<<<<<<<<<
19998  *         for i in range(3):
19999  *             dist = self.periodic_difference(pos[i], self.center[i], i)
20000  */
20001   __pyx_v_dist2 = 0.0;
20002 
20003   /* "yt/geometry/_selection_routines/sphere_selector.pxi":70
20004  *         cdef int i
20005  *         cdef np.float64_t dist, dist2 = 0
20006  *         for i in range(3):             # <<<<<<<<<<<<<<
20007  *             dist = self.periodic_difference(pos[i], self.center[i], i)
20008  *             dist2 += dist*dist
20009  */
20010   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
20011     __pyx_v_i = __pyx_t_1;
20012 
20013     /* "yt/geometry/_selection_routines/sphere_selector.pxi":71
20014  *         cdef np.float64_t dist, dist2 = 0
20015  *         for i in range(3):
20016  *             dist = self.periodic_difference(pos[i], self.center[i], i)             # <<<<<<<<<<<<<<
20017  *             dist2 += dist*dist
20018  *         dist = self.radius+radius
20019  */
20020     __pyx_v_dist = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), (__pyx_v_pos[__pyx_v_i]), (__pyx_v_self->center[__pyx_v_i]), __pyx_v_i);
20021 
20022     /* "yt/geometry/_selection_routines/sphere_selector.pxi":72
20023  *         for i in range(3):
20024  *             dist = self.periodic_difference(pos[i], self.center[i], i)
20025  *             dist2 += dist*dist             # <<<<<<<<<<<<<<
20026  *         dist = self.radius+radius
20027  *         if dist2 <= dist*dist: return 1
20028  */
20029     __pyx_v_dist2 = (__pyx_v_dist2 + (__pyx_v_dist * __pyx_v_dist));
20030   }
20031 
20032   /* "yt/geometry/_selection_routines/sphere_selector.pxi":73
20033  *             dist = self.periodic_difference(pos[i], self.center[i], i)
20034  *             dist2 += dist*dist
20035  *         dist = self.radius+radius             # <<<<<<<<<<<<<<
20036  *         if dist2 <= dist*dist: return 1
20037  *         return 0
20038  */
20039   __pyx_v_dist = (__pyx_v_self->radius + __pyx_v_radius);
20040 
20041   /* "yt/geometry/_selection_routines/sphere_selector.pxi":74
20042  *             dist2 += dist*dist
20043  *         dist = self.radius+radius
20044  *         if dist2 <= dist*dist: return 1             # <<<<<<<<<<<<<<
20045  *         return 0
20046  *
20047  */
20048   __pyx_t_2 = ((__pyx_v_dist2 <= (__pyx_v_dist * __pyx_v_dist)) != 0);
20049   if (__pyx_t_2) {
20050     __pyx_r = 1;
20051     goto __pyx_L0;
20052   }
20053 
20054   /* "yt/geometry/_selection_routines/sphere_selector.pxi":75
20055  *         dist = self.radius+radius
20056  *         if dist2 <= dist*dist: return 1
20057  *         return 0             # <<<<<<<<<<<<<<
20058  *
20059  *     @cython.boundscheck(False)
20060  */
20061   __pyx_r = 0;
20062   goto __pyx_L0;
20063 
20064   /* "yt/geometry/_selection_routines/sphere_selector.pxi":67
20065  *     @cython.wraparound(False)
20066  *     @cython.cdivision(True)
20067  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
20068  *         cdef int i
20069  *         cdef np.float64_t dist, dist2 = 0
20070  */
20071 
20072   /* function exit code */
20073   __pyx_L0:;
20074   return __pyx_r;
20075 }
20076 
20077 /* "yt/geometry/_selection_routines/sphere_selector.pxi":80
20078  *     @cython.wraparound(False)
20079  *     @cython.cdivision(True)
20080  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
20081  *                                np.float64_t right_edge[3]) nogil:
20082  *         cdef np.float64_t box_center, relcenter, closest, dist, edge
20083  */
20084 
20085 static int __pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
20086   __pyx_t_5numpy_float64_t __pyx_v_box_center;
20087   __pyx_t_5numpy_float64_t __pyx_v_relcenter;
20088   __pyx_t_5numpy_float64_t __pyx_v_closest;
20089   __pyx_t_5numpy_float64_t __pyx_v_dist;
20090   __pyx_t_5numpy_float64_t __pyx_v_edge;
20091   int __pyx_v_i;
20092   int __pyx_r;
20093   int __pyx_t_1;
20094   int __pyx_t_2;
20095   int __pyx_t_3;
20096   int __pyx_t_4;
20097 
20098   /* "yt/geometry/_selection_routines/sphere_selector.pxi":84
20099  *         cdef np.float64_t box_center, relcenter, closest, dist, edge
20100  *         cdef int i
20101  *         if (left_edge[0] <= self.center[0] < right_edge[0] and             # <<<<<<<<<<<<<<
20102  *             left_edge[1] <= self.center[1] < right_edge[1] and
20103  *             left_edge[2] <= self.center[2] < right_edge[2]):
20104  */
20105   __pyx_t_2 = ((__pyx_v_left_edge[0]) <= (__pyx_v_self->center[0]));
20106   if (__pyx_t_2) {
20107     __pyx_t_2 = ((__pyx_v_self->center[0]) < (__pyx_v_right_edge[0]));
20108   }
20109   __pyx_t_3 = (__pyx_t_2 != 0);
20110   if (__pyx_t_3) {
20111   } else {
20112     __pyx_t_1 = __pyx_t_3;
20113     goto __pyx_L4_bool_binop_done;
20114   }
20115 
20116   /* "yt/geometry/_selection_routines/sphere_selector.pxi":85
20117  *         cdef int i
20118  *         if (left_edge[0] <= self.center[0] < right_edge[0] and
20119  *             left_edge[1] <= self.center[1] < right_edge[1] and             # <<<<<<<<<<<<<<
20120  *             left_edge[2] <= self.center[2] < right_edge[2]):
20121  *             return 1
20122  */
20123   __pyx_t_3 = ((__pyx_v_left_edge[1]) <= (__pyx_v_self->center[1]));
20124   if (__pyx_t_3) {
20125     __pyx_t_3 = ((__pyx_v_self->center[1]) < (__pyx_v_right_edge[1]));
20126   }
20127   __pyx_t_2 = (__pyx_t_3 != 0);
20128   if (__pyx_t_2) {
20129   } else {
20130     __pyx_t_1 = __pyx_t_2;
20131     goto __pyx_L4_bool_binop_done;
20132   }
20133 
20134   /* "yt/geometry/_selection_routines/sphere_selector.pxi":86
20135  *         if (left_edge[0] <= self.center[0] < right_edge[0] and
20136  *             left_edge[1] <= self.center[1] < right_edge[1] and
20137  *             left_edge[2] <= self.center[2] < right_edge[2]):             # <<<<<<<<<<<<<<
20138  *             return 1
20139  *         for i in range(3):
20140  */
20141   __pyx_t_2 = ((__pyx_v_left_edge[2]) <= (__pyx_v_self->center[2]));
20142   if (__pyx_t_2) {
20143     __pyx_t_2 = ((__pyx_v_self->center[2]) < (__pyx_v_right_edge[2]));
20144   }
20145   __pyx_t_3 = (__pyx_t_2 != 0);
20146   __pyx_t_1 = __pyx_t_3;
20147   __pyx_L4_bool_binop_done:;
20148 
20149   /* "yt/geometry/_selection_routines/sphere_selector.pxi":84
20150  *         cdef np.float64_t box_center, relcenter, closest, dist, edge
20151  *         cdef int i
20152  *         if (left_edge[0] <= self.center[0] < right_edge[0] and             # <<<<<<<<<<<<<<
20153  *             left_edge[1] <= self.center[1] < right_edge[1] and
20154  *             left_edge[2] <= self.center[2] < right_edge[2]):
20155  */
20156   if (__pyx_t_1) {
20157 
20158     /* "yt/geometry/_selection_routines/sphere_selector.pxi":87
20159  *             left_edge[1] <= self.center[1] < right_edge[1] and
20160  *             left_edge[2] <= self.center[2] < right_edge[2]):
20161  *             return 1             # <<<<<<<<<<<<<<
20162  *         for i in range(3):
20163  *             if not self.check_box[i]: continue
20164  */
20165     __pyx_r = 1;
20166     goto __pyx_L0;
20167 
20168     /* "yt/geometry/_selection_routines/sphere_selector.pxi":84
20169  *         cdef np.float64_t box_center, relcenter, closest, dist, edge
20170  *         cdef int i
20171  *         if (left_edge[0] <= self.center[0] < right_edge[0] and             # <<<<<<<<<<<<<<
20172  *             left_edge[1] <= self.center[1] < right_edge[1] and
20173  *             left_edge[2] <= self.center[2] < right_edge[2]):
20174  */
20175   }
20176 
20177   /* "yt/geometry/_selection_routines/sphere_selector.pxi":88
20178  *             left_edge[2] <= self.center[2] < right_edge[2]):
20179  *             return 1
20180  *         for i in range(3):             # <<<<<<<<<<<<<<
20181  *             if not self.check_box[i]: continue
20182  *             if right_edge[i] < self.bbox[i][0] or \
20183  */
20184   for (__pyx_t_4 = 0; __pyx_t_4 < 3; __pyx_t_4+=1) {
20185     __pyx_v_i = __pyx_t_4;
20186 
20187     /* "yt/geometry/_selection_routines/sphere_selector.pxi":89
20188  *             return 1
20189  *         for i in range(3):
20190  *             if not self.check_box[i]: continue             # <<<<<<<<<<<<<<
20191  *             if right_edge[i] < self.bbox[i][0] or \
20192  *                left_edge[i] > self.bbox[i][1]:
20193  */
20194     __pyx_t_1 = ((!((__pyx_v_self->check_box[__pyx_v_i]) != 0)) != 0);
20195     if (__pyx_t_1) {
20196       goto __pyx_L7_continue;
20197     }
20198 
20199     /* "yt/geometry/_selection_routines/sphere_selector.pxi":90
20200  *         for i in range(3):
20201  *             if not self.check_box[i]: continue
20202  *             if right_edge[i] < self.bbox[i][0] or \             # <<<<<<<<<<<<<<
20203  *                left_edge[i] > self.bbox[i][1]:
20204  *                 return 0
20205  */
20206     __pyx_t_3 = (((__pyx_v_right_edge[__pyx_v_i]) < ((__pyx_v_self->bbox[__pyx_v_i])[0])) != 0);
20207     if (!__pyx_t_3) {
20208     } else {
20209       __pyx_t_1 = __pyx_t_3;
20210       goto __pyx_L11_bool_binop_done;
20211     }
20212 
20213     /* "yt/geometry/_selection_routines/sphere_selector.pxi":91
20214  *             if not self.check_box[i]: continue
20215  *             if right_edge[i] < self.bbox[i][0] or \
20216  *                left_edge[i] > self.bbox[i][1]:             # <<<<<<<<<<<<<<
20217  *                 return 0
20218  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
20219  */
20220     __pyx_t_3 = (((__pyx_v_left_edge[__pyx_v_i]) > ((__pyx_v_self->bbox[__pyx_v_i])[1])) != 0);
20221     __pyx_t_1 = __pyx_t_3;
20222     __pyx_L11_bool_binop_done:;
20223 
20224     /* "yt/geometry/_selection_routines/sphere_selector.pxi":90
20225  *         for i in range(3):
20226  *             if not self.check_box[i]: continue
20227  *             if right_edge[i] < self.bbox[i][0] or \             # <<<<<<<<<<<<<<
20228  *                left_edge[i] > self.bbox[i][1]:
20229  *                 return 0
20230  */
20231     if (__pyx_t_1) {
20232 
20233       /* "yt/geometry/_selection_routines/sphere_selector.pxi":92
20234  *             if right_edge[i] < self.bbox[i][0] or \
20235  *                left_edge[i] > self.bbox[i][1]:
20236  *                 return 0             # <<<<<<<<<<<<<<
20237  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
20238  *         dist = 0
20239  */
20240       __pyx_r = 0;
20241       goto __pyx_L0;
20242 
20243       /* "yt/geometry/_selection_routines/sphere_selector.pxi":90
20244  *         for i in range(3):
20245  *             if not self.check_box[i]: continue
20246  *             if right_edge[i] < self.bbox[i][0] or \             # <<<<<<<<<<<<<<
20247  *                left_edge[i] > self.bbox[i][1]:
20248  *                 return 0
20249  */
20250     }
20251     __pyx_L7_continue:;
20252   }
20253 
20254   /* "yt/geometry/_selection_routines/sphere_selector.pxi":94
20255  *                 return 0
20256  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
20257  *         dist = 0             # <<<<<<<<<<<<<<
20258  *         for i in range(3):
20259  *             # Early terminate
20260  */
20261   __pyx_v_dist = 0.0;
20262 
20263   /* "yt/geometry/_selection_routines/sphere_selector.pxi":95
20264  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
20265  *         dist = 0
20266  *         for i in range(3):             # <<<<<<<<<<<<<<
20267  *             # Early terminate
20268  *             box_center = (right_edge[i] + left_edge[i])/2.0
20269  */
20270   for (__pyx_t_4 = 0; __pyx_t_4 < 3; __pyx_t_4+=1) {
20271     __pyx_v_i = __pyx_t_4;
20272 
20273     /* "yt/geometry/_selection_routines/sphere_selector.pxi":97
20274  *         for i in range(3):
20275  *             # Early terminate
20276  *             box_center = (right_edge[i] + left_edge[i])/2.0             # <<<<<<<<<<<<<<
20277  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
20278  *             edge = right_edge[i] - left_edge[i]
20279  */
20280     __pyx_v_box_center = (((__pyx_v_right_edge[__pyx_v_i]) + (__pyx_v_left_edge[__pyx_v_i])) / 2.0);
20281 
20282     /* "yt/geometry/_selection_routines/sphere_selector.pxi":98
20283  *             # Early terminate
20284  *             box_center = (right_edge[i] + left_edge[i])/2.0
20285  *             relcenter = self.periodic_difference(box_center, self.center[i], i)             # <<<<<<<<<<<<<<
20286  *             edge = right_edge[i] - left_edge[i]
20287  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
20288  */
20289     __pyx_v_relcenter = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_box_center, (__pyx_v_self->center[__pyx_v_i]), __pyx_v_i);
20290 
20291     /* "yt/geometry/_selection_routines/sphere_selector.pxi":99
20292  *             box_center = (right_edge[i] + left_edge[i])/2.0
20293  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
20294  *             edge = right_edge[i] - left_edge[i]             # <<<<<<<<<<<<<<
20295  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
20296  *             dist += closest*closest
20297  */
20298     __pyx_v_edge = ((__pyx_v_right_edge[__pyx_v_i]) - (__pyx_v_left_edge[__pyx_v_i]));
20299 
20300     /* "yt/geometry/_selection_routines/sphere_selector.pxi":100
20301  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
20302  *             edge = right_edge[i] - left_edge[i]
20303  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)             # <<<<<<<<<<<<<<
20304  *             dist += closest*closest
20305  *             if dist > self.radius2: return 0
20306  */
20307     __pyx_v_closest = (__pyx_v_relcenter - __pyx_f_2yt_9utilities_3lib_8fp_utils_fclip(__pyx_v_relcenter, ((-__pyx_v_edge) / 2.0), (__pyx_v_edge / 2.0)));
20308 
20309     /* "yt/geometry/_selection_routines/sphere_selector.pxi":101
20310  *             edge = right_edge[i] - left_edge[i]
20311  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
20312  *             dist += closest*closest             # <<<<<<<<<<<<<<
20313  *             if dist > self.radius2: return 0
20314  *         return 1
20315  */
20316     __pyx_v_dist = (__pyx_v_dist + (__pyx_v_closest * __pyx_v_closest));
20317 
20318     /* "yt/geometry/_selection_routines/sphere_selector.pxi":102
20319  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
20320  *             dist += closest*closest
20321  *             if dist > self.radius2: return 0             # <<<<<<<<<<<<<<
20322  *         return 1
20323  *
20324  */
20325     __pyx_t_1 = ((__pyx_v_dist > __pyx_v_self->radius2) != 0);
20326     if (__pyx_t_1) {
20327       __pyx_r = 0;
20328       goto __pyx_L0;
20329     }
20330   }
20331 
20332   /* "yt/geometry/_selection_routines/sphere_selector.pxi":103
20333  *             dist += closest*closest
20334  *             if dist > self.radius2: return 0
20335  *         return 1             # <<<<<<<<<<<<<<
20336  *
20337  *     @cython.boundscheck(False)
20338  */
20339   __pyx_r = 1;
20340   goto __pyx_L0;
20341 
20342   /* "yt/geometry/_selection_routines/sphere_selector.pxi":80
20343  *     @cython.wraparound(False)
20344  *     @cython.cdivision(True)
20345  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
20346  *                                np.float64_t right_edge[3]) nogil:
20347  *         cdef np.float64_t box_center, relcenter, closest, dist, edge
20348  */
20349 
20350   /* function exit code */
20351   __pyx_L0:;
20352   return __pyx_r;
20353 }
20354 
20355 /* "yt/geometry/_selection_routines/sphere_selector.pxi":108
20356  *     @cython.wraparound(False)
20357  *     @cython.cdivision(True)
20358  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
20359  *                                np.float64_t right_edge[3]) nogil:
20360  *         cdef np.float64_t box_center, relcenter, closest, farthest, cdist, fdist, edge
20361  */
20362 
20363 static int __pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
20364   __pyx_t_5numpy_float64_t __pyx_v_box_center;
20365   __pyx_t_5numpy_float64_t __pyx_v_relcenter;
20366   __pyx_t_5numpy_float64_t __pyx_v_closest;
20367   __pyx_t_5numpy_float64_t __pyx_v_farthest;
20368   __pyx_t_5numpy_float64_t __pyx_v_cdist;
20369   __pyx_t_5numpy_float64_t __pyx_v_fdist;
20370   __pyx_t_5numpy_float64_t __pyx_v_edge;
20371   int __pyx_v_i;
20372   int __pyx_r;
20373   int __pyx_t_1;
20374   int __pyx_t_2;
20375   int __pyx_t_3;
20376   int __pyx_t_4;
20377 
20378   /* "yt/geometry/_selection_routines/sphere_selector.pxi":112
20379  *         cdef np.float64_t box_center, relcenter, closest, farthest, cdist, fdist, edge
20380  *         cdef int i
20381  *         if (left_edge[0] <= self.center[0] <= right_edge[0] and             # <<<<<<<<<<<<<<
20382  *             left_edge[1] <= self.center[1] <= right_edge[1] and
20383  *             left_edge[2] <= self.center[2] <= right_edge[2]):
20384  */
20385   __pyx_t_2 = ((__pyx_v_left_edge[0]) <= (__pyx_v_self->center[0]));
20386   if (__pyx_t_2) {
20387     __pyx_t_2 = ((__pyx_v_self->center[0]) <= (__pyx_v_right_edge[0]));
20388   }
20389   __pyx_t_3 = (__pyx_t_2 != 0);
20390   if (__pyx_t_3) {
20391   } else {
20392     __pyx_t_1 = __pyx_t_3;
20393     goto __pyx_L4_bool_binop_done;
20394   }
20395 
20396   /* "yt/geometry/_selection_routines/sphere_selector.pxi":113
20397  *         cdef int i
20398  *         if (left_edge[0] <= self.center[0] <= right_edge[0] and
20399  *             left_edge[1] <= self.center[1] <= right_edge[1] and             # <<<<<<<<<<<<<<
20400  *             left_edge[2] <= self.center[2] <= right_edge[2]):
20401  *             fdist = 0
20402  */
20403   __pyx_t_3 = ((__pyx_v_left_edge[1]) <= (__pyx_v_self->center[1]));
20404   if (__pyx_t_3) {
20405     __pyx_t_3 = ((__pyx_v_self->center[1]) <= (__pyx_v_right_edge[1]));
20406   }
20407   __pyx_t_2 = (__pyx_t_3 != 0);
20408   if (__pyx_t_2) {
20409   } else {
20410     __pyx_t_1 = __pyx_t_2;
20411     goto __pyx_L4_bool_binop_done;
20412   }
20413 
20414   /* "yt/geometry/_selection_routines/sphere_selector.pxi":114
20415  *         if (left_edge[0] <= self.center[0] <= right_edge[0] and
20416  *             left_edge[1] <= self.center[1] <= right_edge[1] and
20417  *             left_edge[2] <= self.center[2] <= right_edge[2]):             # <<<<<<<<<<<<<<
20418  *             fdist = 0
20419  *             for i in range(3):
20420  */
20421   __pyx_t_2 = ((__pyx_v_left_edge[2]) <= (__pyx_v_self->center[2]));
20422   if (__pyx_t_2) {
20423     __pyx_t_2 = ((__pyx_v_self->center[2]) <= (__pyx_v_right_edge[2]));
20424   }
20425   __pyx_t_3 = (__pyx_t_2 != 0);
20426   __pyx_t_1 = __pyx_t_3;
20427   __pyx_L4_bool_binop_done:;
20428 
20429   /* "yt/geometry/_selection_routines/sphere_selector.pxi":112
20430  *         cdef np.float64_t box_center, relcenter, closest, farthest, cdist, fdist, edge
20431  *         cdef int i
20432  *         if (left_edge[0] <= self.center[0] <= right_edge[0] and             # <<<<<<<<<<<<<<
20433  *             left_edge[1] <= self.center[1] <= right_edge[1] and
20434  *             left_edge[2] <= self.center[2] <= right_edge[2]):
20435  */
20436   if (__pyx_t_1) {
20437 
20438     /* "yt/geometry/_selection_routines/sphere_selector.pxi":115
20439  *             left_edge[1] <= self.center[1] <= right_edge[1] and
20440  *             left_edge[2] <= self.center[2] <= right_edge[2]):
20441  *             fdist = 0             # <<<<<<<<<<<<<<
20442  *             for i in range(3):
20443  *                 edge = right_edge[i] - left_edge[i]
20444  */
20445     __pyx_v_fdist = 0.0;
20446 
20447     /* "yt/geometry/_selection_routines/sphere_selector.pxi":116
20448  *             left_edge[2] <= self.center[2] <= right_edge[2]):
20449  *             fdist = 0
20450  *             for i in range(3):             # <<<<<<<<<<<<<<
20451  *                 edge = right_edge[i] - left_edge[i]
20452  *                 box_center = (right_edge[i] + left_edge[i])/2.0
20453  */
20454     for (__pyx_t_4 = 0; __pyx_t_4 < 3; __pyx_t_4+=1) {
20455       __pyx_v_i = __pyx_t_4;
20456 
20457       /* "yt/geometry/_selection_routines/sphere_selector.pxi":117
20458  *             fdist = 0
20459  *             for i in range(3):
20460  *                 edge = right_edge[i] - left_edge[i]             # <<<<<<<<<<<<<<
20461  *                 box_center = (right_edge[i] + left_edge[i])/2.0
20462  *                 relcenter = self.periodic_difference(
20463  */
20464       __pyx_v_edge = ((__pyx_v_right_edge[__pyx_v_i]) - (__pyx_v_left_edge[__pyx_v_i]));
20465 
20466       /* "yt/geometry/_selection_routines/sphere_selector.pxi":118
20467  *             for i in range(3):
20468  *                 edge = right_edge[i] - left_edge[i]
20469  *                 box_center = (right_edge[i] + left_edge[i])/2.0             # <<<<<<<<<<<<<<
20470  *                 relcenter = self.periodic_difference(
20471  *                     box_center, self.center[i], i)
20472  */
20473       __pyx_v_box_center = (((__pyx_v_right_edge[__pyx_v_i]) + (__pyx_v_left_edge[__pyx_v_i])) / 2.0);
20474 
20475       /* "yt/geometry/_selection_routines/sphere_selector.pxi":119
20476  *                 edge = right_edge[i] - left_edge[i]
20477  *                 box_center = (right_edge[i] + left_edge[i])/2.0
20478  *                 relcenter = self.periodic_difference(             # <<<<<<<<<<<<<<
20479  *                     box_center, self.center[i], i)
20480  *                 if relcenter >= 0:
20481  */
20482       __pyx_v_relcenter = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_box_center, (__pyx_v_self->center[__pyx_v_i]), __pyx_v_i);
20483 
20484       /* "yt/geometry/_selection_routines/sphere_selector.pxi":121
20485  *                 relcenter = self.periodic_difference(
20486  *                     box_center, self.center[i], i)
20487  *                 if relcenter >= 0:             # <<<<<<<<<<<<<<
20488  *                     farthest = relcenter + edge/2.0
20489  *                 else:
20490  */
20491       __pyx_t_1 = ((__pyx_v_relcenter >= 0.0) != 0);
20492       if (__pyx_t_1) {
20493 
20494         /* "yt/geometry/_selection_routines/sphere_selector.pxi":122
20495  *                     box_center, self.center[i], i)
20496  *                 if relcenter >= 0:
20497  *                     farthest = relcenter + edge/2.0             # <<<<<<<<<<<<<<
20498  *                 else:
20499  *                     farthest = relcenter - edge/2.0
20500  */
20501         __pyx_v_farthest = (__pyx_v_relcenter + (__pyx_v_edge / 2.0));
20502 
20503         /* "yt/geometry/_selection_routines/sphere_selector.pxi":121
20504  *                 relcenter = self.periodic_difference(
20505  *                     box_center, self.center[i], i)
20506  *                 if relcenter >= 0:             # <<<<<<<<<<<<<<
20507  *                     farthest = relcenter + edge/2.0
20508  *                 else:
20509  */
20510         goto __pyx_L9;
20511       }
20512 
20513       /* "yt/geometry/_selection_routines/sphere_selector.pxi":124
20514  *                     farthest = relcenter + edge/2.0
20515  *                 else:
20516  *                     farthest = relcenter - edge/2.0             # <<<<<<<<<<<<<<
20517  *                 # farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
20518  *                 fdist += farthest*farthest
20519  */
20520       /*else*/ {
20521         __pyx_v_farthest = (__pyx_v_relcenter - (__pyx_v_edge / 2.0));
20522       }
20523       __pyx_L9:;
20524 
20525       /* "yt/geometry/_selection_routines/sphere_selector.pxi":126
20526  *                     farthest = relcenter - edge/2.0
20527  *                 # farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
20528  *                 fdist += farthest*farthest             # <<<<<<<<<<<<<<
20529  *                 if fdist >= self.radius2:
20530  *                     return 2  # Box extends outside sphere
20531  */
20532       __pyx_v_fdist = (__pyx_v_fdist + (__pyx_v_farthest * __pyx_v_farthest));
20533 
20534       /* "yt/geometry/_selection_routines/sphere_selector.pxi":127
20535  *                 # farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
20536  *                 fdist += farthest*farthest
20537  *                 if fdist >= self.radius2:             # <<<<<<<<<<<<<<
20538  *                     return 2  # Box extends outside sphere
20539  *             return 1  # Box entirely inside sphere
20540  */
20541       __pyx_t_1 = ((__pyx_v_fdist >= __pyx_v_self->radius2) != 0);
20542       if (__pyx_t_1) {
20543 
20544         /* "yt/geometry/_selection_routines/sphere_selector.pxi":128
20545  *                 fdist += farthest*farthest
20546  *                 if fdist >= self.radius2:
20547  *                     return 2  # Box extends outside sphere             # <<<<<<<<<<<<<<
20548  *             return 1  # Box entirely inside sphere
20549  *         for i in range(3):
20550  */
20551         __pyx_r = 2;
20552         goto __pyx_L0;
20553 
20554         /* "yt/geometry/_selection_routines/sphere_selector.pxi":127
20555  *                 # farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
20556  *                 fdist += farthest*farthest
20557  *                 if fdist >= self.radius2:             # <<<<<<<<<<<<<<
20558  *                     return 2  # Box extends outside sphere
20559  *             return 1  # Box entirely inside sphere
20560  */
20561       }
20562     }
20563 
20564     /* "yt/geometry/_selection_routines/sphere_selector.pxi":129
20565  *                 if fdist >= self.radius2:
20566  *                     return 2  # Box extends outside sphere
20567  *             return 1  # Box entirely inside sphere             # <<<<<<<<<<<<<<
20568  *         for i in range(3):
20569  *             if not self.check_box[i]: continue
20570  */
20571     __pyx_r = 1;
20572     goto __pyx_L0;
20573 
20574     /* "yt/geometry/_selection_routines/sphere_selector.pxi":112
20575  *         cdef np.float64_t box_center, relcenter, closest, farthest, cdist, fdist, edge
20576  *         cdef int i
20577  *         if (left_edge[0] <= self.center[0] <= right_edge[0] and             # <<<<<<<<<<<<<<
20578  *             left_edge[1] <= self.center[1] <= right_edge[1] and
20579  *             left_edge[2] <= self.center[2] <= right_edge[2]):
20580  */
20581   }
20582 
20583   /* "yt/geometry/_selection_routines/sphere_selector.pxi":130
20584  *                     return 2  # Box extends outside sphere
20585  *             return 1  # Box entirely inside sphere
20586  *         for i in range(3):             # <<<<<<<<<<<<<<
20587  *             if not self.check_box[i]: continue
20588  *             if right_edge[i] < self.bbox[i][0] or \
20589  */
20590   for (__pyx_t_4 = 0; __pyx_t_4 < 3; __pyx_t_4+=1) {
20591     __pyx_v_i = __pyx_t_4;
20592 
20593     /* "yt/geometry/_selection_routines/sphere_selector.pxi":131
20594  *             return 1  # Box entirely inside sphere
20595  *         for i in range(3):
20596  *             if not self.check_box[i]: continue             # <<<<<<<<<<<<<<
20597  *             if right_edge[i] < self.bbox[i][0] or \
20598  *                left_edge[i] > self.bbox[i][1]:
20599  */
20600     __pyx_t_1 = ((!((__pyx_v_self->check_box[__pyx_v_i]) != 0)) != 0);
20601     if (__pyx_t_1) {
20602       goto __pyx_L11_continue;
20603     }
20604 
20605     /* "yt/geometry/_selection_routines/sphere_selector.pxi":132
20606  *         for i in range(3):
20607  *             if not self.check_box[i]: continue
20608  *             if right_edge[i] < self.bbox[i][0] or \             # <<<<<<<<<<<<<<
20609  *                left_edge[i] > self.bbox[i][1]:
20610  *                 return 0  # Box outside sphere bounding box
20611  */
20612     __pyx_t_3 = (((__pyx_v_right_edge[__pyx_v_i]) < ((__pyx_v_self->bbox[__pyx_v_i])[0])) != 0);
20613     if (!__pyx_t_3) {
20614     } else {
20615       __pyx_t_1 = __pyx_t_3;
20616       goto __pyx_L15_bool_binop_done;
20617     }
20618 
20619     /* "yt/geometry/_selection_routines/sphere_selector.pxi":133
20620  *             if not self.check_box[i]: continue
20621  *             if right_edge[i] < self.bbox[i][0] or \
20622  *                left_edge[i] > self.bbox[i][1]:             # <<<<<<<<<<<<<<
20623  *                 return 0  # Box outside sphere bounding box
20624  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
20625  */
20626     __pyx_t_3 = (((__pyx_v_left_edge[__pyx_v_i]) > ((__pyx_v_self->bbox[__pyx_v_i])[1])) != 0);
20627     __pyx_t_1 = __pyx_t_3;
20628     __pyx_L15_bool_binop_done:;
20629 
20630     /* "yt/geometry/_selection_routines/sphere_selector.pxi":132
20631  *         for i in range(3):
20632  *             if not self.check_box[i]: continue
20633  *             if right_edge[i] < self.bbox[i][0] or \             # <<<<<<<<<<<<<<
20634  *                left_edge[i] > self.bbox[i][1]:
20635  *                 return 0  # Box outside sphere bounding box
20636  */
20637     if (__pyx_t_1) {
20638 
20639       /* "yt/geometry/_selection_routines/sphere_selector.pxi":134
20640  *             if right_edge[i] < self.bbox[i][0] or \
20641  *                left_edge[i] > self.bbox[i][1]:
20642  *                 return 0  # Box outside sphere bounding box             # <<<<<<<<<<<<<<
20643  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
20644  *         cdist = 0
20645  */
20646       __pyx_r = 0;
20647       goto __pyx_L0;
20648 
20649       /* "yt/geometry/_selection_routines/sphere_selector.pxi":132
20650  *         for i in range(3):
20651  *             if not self.check_box[i]: continue
20652  *             if right_edge[i] < self.bbox[i][0] or \             # <<<<<<<<<<<<<<
20653  *                left_edge[i] > self.bbox[i][1]:
20654  *                 return 0  # Box outside sphere bounding box
20655  */
20656     }
20657     __pyx_L11_continue:;
20658   }
20659 
20660   /* "yt/geometry/_selection_routines/sphere_selector.pxi":136
20661  *                 return 0  # Box outside sphere bounding box
20662  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
20663  *         cdist = 0             # <<<<<<<<<<<<<<
20664  *         fdist = 0
20665  *         for i in range(3):
20666  */
20667   __pyx_v_cdist = 0.0;
20668 
20669   /* "yt/geometry/_selection_routines/sphere_selector.pxi":137
20670  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
20671  *         cdist = 0
20672  *         fdist = 0             # <<<<<<<<<<<<<<
20673  *         for i in range(3):
20674  *             # Early terminate
20675  */
20676   __pyx_v_fdist = 0.0;
20677 
20678   /* "yt/geometry/_selection_routines/sphere_selector.pxi":138
20679  *         cdist = 0
20680  *         fdist = 0
20681  *         for i in range(3):             # <<<<<<<<<<<<<<
20682  *             # Early terminate
20683  *             box_center = (right_edge[i] + left_edge[i])/2.0
20684  */
20685   for (__pyx_t_4 = 0; __pyx_t_4 < 3; __pyx_t_4+=1) {
20686     __pyx_v_i = __pyx_t_4;
20687 
20688     /* "yt/geometry/_selection_routines/sphere_selector.pxi":140
20689  *         for i in range(3):
20690  *             # Early terminate
20691  *             box_center = (right_edge[i] + left_edge[i])/2.0             # <<<<<<<<<<<<<<
20692  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
20693  *             edge = right_edge[i] - left_edge[i]
20694  */
20695     __pyx_v_box_center = (((__pyx_v_right_edge[__pyx_v_i]) + (__pyx_v_left_edge[__pyx_v_i])) / 2.0);
20696 
20697     /* "yt/geometry/_selection_routines/sphere_selector.pxi":141
20698  *             # Early terminate
20699  *             box_center = (right_edge[i] + left_edge[i])/2.0
20700  *             relcenter = self.periodic_difference(box_center, self.center[i], i)             # <<<<<<<<<<<<<<
20701  *             edge = right_edge[i] - left_edge[i]
20702  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
20703  */
20704     __pyx_v_relcenter = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_box_center, (__pyx_v_self->center[__pyx_v_i]), __pyx_v_i);
20705 
20706     /* "yt/geometry/_selection_routines/sphere_selector.pxi":142
20707  *             box_center = (right_edge[i] + left_edge[i])/2.0
20708  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
20709  *             edge = right_edge[i] - left_edge[i]             # <<<<<<<<<<<<<<
20710  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
20711  *             if relcenter >= 0:
20712  */
20713     __pyx_v_edge = ((__pyx_v_right_edge[__pyx_v_i]) - (__pyx_v_left_edge[__pyx_v_i]));
20714 
20715     /* "yt/geometry/_selection_routines/sphere_selector.pxi":143
20716  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
20717  *             edge = right_edge[i] - left_edge[i]
20718  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)             # <<<<<<<<<<<<<<
20719  *             if relcenter >= 0:
20720  *                 farthest = relcenter + edge/2.0
20721  */
20722     __pyx_v_closest = (__pyx_v_relcenter - __pyx_f_2yt_9utilities_3lib_8fp_utils_fclip(__pyx_v_relcenter, ((-__pyx_v_edge) / 2.0), (__pyx_v_edge / 2.0)));
20723 
20724     /* "yt/geometry/_selection_routines/sphere_selector.pxi":144
20725  *             edge = right_edge[i] - left_edge[i]
20726  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
20727  *             if relcenter >= 0:             # <<<<<<<<<<<<<<
20728  *                 farthest = relcenter + edge/2.0
20729  *             else:
20730  */
20731     __pyx_t_1 = ((__pyx_v_relcenter >= 0.0) != 0);
20732     if (__pyx_t_1) {
20733 
20734       /* "yt/geometry/_selection_routines/sphere_selector.pxi":145
20735  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
20736  *             if relcenter >= 0:
20737  *                 farthest = relcenter + edge/2.0             # <<<<<<<<<<<<<<
20738  *             else:
20739  *                 farthest = relcenter - edge/2.0
20740  */
20741       __pyx_v_farthest = (__pyx_v_relcenter + (__pyx_v_edge / 2.0));
20742 
20743       /* "yt/geometry/_selection_routines/sphere_selector.pxi":144
20744  *             edge = right_edge[i] - left_edge[i]
20745  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
20746  *             if relcenter >= 0:             # <<<<<<<<<<<<<<
20747  *                 farthest = relcenter + edge/2.0
20748  *             else:
20749  */
20750       goto __pyx_L19;
20751     }
20752 
20753     /* "yt/geometry/_selection_routines/sphere_selector.pxi":147
20754  *                 farthest = relcenter + edge/2.0
20755  *             else:
20756  *                 farthest = relcenter - edge/2.0             # <<<<<<<<<<<<<<
20757  *             #farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
20758  *             cdist += closest*closest
20759  */
20760     /*else*/ {
20761       __pyx_v_farthest = (__pyx_v_relcenter - (__pyx_v_edge / 2.0));
20762     }
20763     __pyx_L19:;
20764 
20765     /* "yt/geometry/_selection_routines/sphere_selector.pxi":149
20766  *                 farthest = relcenter - edge/2.0
20767  *             #farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
20768  *             cdist += closest*closest             # <<<<<<<<<<<<<<
20769  *             fdist += farthest*farthest
20770  *             if cdist > self.radius2:
20771  */
20772     __pyx_v_cdist = (__pyx_v_cdist + (__pyx_v_closest * __pyx_v_closest));
20773 
20774     /* "yt/geometry/_selection_routines/sphere_selector.pxi":150
20775  *             #farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
20776  *             cdist += closest*closest
20777  *             fdist += farthest*farthest             # <<<<<<<<<<<<<<
20778  *             if cdist > self.radius2:
20779  *                 return 0  # Box does not overlap sphere
20780  */
20781     __pyx_v_fdist = (__pyx_v_fdist + (__pyx_v_farthest * __pyx_v_farthest));
20782 
20783     /* "yt/geometry/_selection_routines/sphere_selector.pxi":151
20784  *             cdist += closest*closest
20785  *             fdist += farthest*farthest
20786  *             if cdist > self.radius2:             # <<<<<<<<<<<<<<
20787  *                 return 0  # Box does not overlap sphere
20788  *         if fdist < self.radius2:
20789  */
20790     __pyx_t_1 = ((__pyx_v_cdist > __pyx_v_self->radius2) != 0);
20791     if (__pyx_t_1) {
20792 
20793       /* "yt/geometry/_selection_routines/sphere_selector.pxi":152
20794  *             fdist += farthest*farthest
20795  *             if cdist > self.radius2:
20796  *                 return 0  # Box does not overlap sphere             # <<<<<<<<<<<<<<
20797  *         if fdist < self.radius2:
20798  *             return 1  # Sphere extends to entirely contain box
20799  */
20800       __pyx_r = 0;
20801       goto __pyx_L0;
20802 
20803       /* "yt/geometry/_selection_routines/sphere_selector.pxi":151
20804  *             cdist += closest*closest
20805  *             fdist += farthest*farthest
20806  *             if cdist > self.radius2:             # <<<<<<<<<<<<<<
20807  *                 return 0  # Box does not overlap sphere
20808  *         if fdist < self.radius2:
20809  */
20810     }
20811   }
20812 
20813   /* "yt/geometry/_selection_routines/sphere_selector.pxi":153
20814  *             if cdist > self.radius2:
20815  *                 return 0  # Box does not overlap sphere
20816  *         if fdist < self.radius2:             # <<<<<<<<<<<<<<
20817  *             return 1  # Sphere extends to entirely contain box
20818  *         else:
20819  */
20820   __pyx_t_1 = ((__pyx_v_fdist < __pyx_v_self->radius2) != 0);
20821   if (__pyx_t_1) {
20822 
20823     /* "yt/geometry/_selection_routines/sphere_selector.pxi":154
20824  *                 return 0  # Box does not overlap sphere
20825  *         if fdist < self.radius2:
20826  *             return 1  # Sphere extends to entirely contain box             # <<<<<<<<<<<<<<
20827  *         else:
20828  *             return 2  # Sphere only partially overlaps box
20829  */
20830     __pyx_r = 1;
20831     goto __pyx_L0;
20832 
20833     /* "yt/geometry/_selection_routines/sphere_selector.pxi":153
20834  *             if cdist > self.radius2:
20835  *                 return 0  # Box does not overlap sphere
20836  *         if fdist < self.radius2:             # <<<<<<<<<<<<<<
20837  *             return 1  # Sphere extends to entirely contain box
20838  *         else:
20839  */
20840   }
20841 
20842   /* "yt/geometry/_selection_routines/sphere_selector.pxi":156
20843  *             return 1  # Sphere extends to entirely contain box
20844  *         else:
20845  *             return 2  # Sphere only partially overlaps box             # <<<<<<<<<<<<<<
20846  *
20847  *     def _hash_vals(self):
20848  */
20849   /*else*/ {
20850     __pyx_r = 2;
20851     goto __pyx_L0;
20852   }
20853 
20854   /* "yt/geometry/_selection_routines/sphere_selector.pxi":108
20855  *     @cython.wraparound(False)
20856  *     @cython.cdivision(True)
20857  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
20858  *                                np.float64_t right_edge[3]) nogil:
20859  *         cdef np.float64_t box_center, relcenter, closest, farthest, cdist, fdist, edge
20860  */
20861 
20862   /* function exit code */
20863   __pyx_L0:;
20864   return __pyx_r;
20865 }
20866 
20867 /* "yt/geometry/_selection_routines/sphere_selector.pxi":158
20868  *             return 2  # Sphere only partially overlaps box
20869  *
20870  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
20871  *         return (("radius", self.radius),
20872  *                 ("radius2", self.radius2),
20873  */
20874 
20875 /* Python wrapper */
20876 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
20877 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
20878   PyObject *__pyx_r = 0;
20879   __Pyx_RefNannyDeclarations
20880   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
20881   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_4_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self));
20882 
20883   /* function exit code */
20884   __Pyx_RefNannyFinishContext();
20885   return __pyx_r;
20886 }
20887 
20888 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_4_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self) {
20889   PyObject *__pyx_r = NULL;
20890   __Pyx_RefNannyDeclarations
20891   PyObject *__pyx_t_1 = NULL;
20892   PyObject *__pyx_t_2 = NULL;
20893   PyObject *__pyx_t_3 = NULL;
20894   PyObject *__pyx_t_4 = NULL;
20895   PyObject *__pyx_t_5 = NULL;
20896   PyObject *__pyx_t_6 = NULL;
20897   __Pyx_RefNannySetupContext("_hash_vals", 0);
20898 
20899   /* "yt/geometry/_selection_routines/sphere_selector.pxi":159
20900  *
20901  *     def _hash_vals(self):
20902  *         return (("radius", self.radius),             # <<<<<<<<<<<<<<
20903  *                 ("radius2", self.radius2),
20904  *                 ("center[0]", self.center[0]),
20905  */
20906   __Pyx_XDECREF(__pyx_r);
20907   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->radius); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 159, __pyx_L1_error)
20908   __Pyx_GOTREF(__pyx_t_1);
20909   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 159, __pyx_L1_error)
20910   __Pyx_GOTREF(__pyx_t_2);
20911   __Pyx_INCREF(__pyx_n_s_radius);
20912   __Pyx_GIVEREF(__pyx_n_s_radius);
20913   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_radius);
20914   __Pyx_GIVEREF(__pyx_t_1);
20915   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
20916   __pyx_t_1 = 0;
20917 
20918   /* "yt/geometry/_selection_routines/sphere_selector.pxi":160
20919  *     def _hash_vals(self):
20920  *         return (("radius", self.radius),
20921  *                 ("radius2", self.radius2),             # <<<<<<<<<<<<<<
20922  *                 ("center[0]", self.center[0]),
20923  *                 ("center[1]", self.center[1]),
20924  */
20925   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->radius2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 160, __pyx_L1_error)
20926   __Pyx_GOTREF(__pyx_t_1);
20927   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 160, __pyx_L1_error)
20928   __Pyx_GOTREF(__pyx_t_3);
20929   __Pyx_INCREF(__pyx_n_s_radius2);
20930   __Pyx_GIVEREF(__pyx_n_s_radius2);
20931   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_radius2);
20932   __Pyx_GIVEREF(__pyx_t_1);
20933   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
20934   __pyx_t_1 = 0;
20935 
20936   /* "yt/geometry/_selection_routines/sphere_selector.pxi":161
20937  *         return (("radius", self.radius),
20938  *                 ("radius2", self.radius2),
20939  *                 ("center[0]", self.center[0]),             # <<<<<<<<<<<<<<
20940  *                 ("center[1]", self.center[1]),
20941  *                 ("center[2]", self.center[2]))
20942  */
20943   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->center[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 161, __pyx_L1_error)
20944   __Pyx_GOTREF(__pyx_t_1);
20945   __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 161, __pyx_L1_error)
20946   __Pyx_GOTREF(__pyx_t_4);
20947   __Pyx_INCREF(__pyx_kp_s_center_0);
20948   __Pyx_GIVEREF(__pyx_kp_s_center_0);
20949   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_s_center_0);
20950   __Pyx_GIVEREF(__pyx_t_1);
20951   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
20952   __pyx_t_1 = 0;
20953 
20954   /* "yt/geometry/_selection_routines/sphere_selector.pxi":162
20955  *                 ("radius2", self.radius2),
20956  *                 ("center[0]", self.center[0]),
20957  *                 ("center[1]", self.center[1]),             # <<<<<<<<<<<<<<
20958  *                 ("center[2]", self.center[2]))
20959  *
20960  */
20961   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->center[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 162, __pyx_L1_error)
20962   __Pyx_GOTREF(__pyx_t_1);
20963   __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 162, __pyx_L1_error)
20964   __Pyx_GOTREF(__pyx_t_5);
20965   __Pyx_INCREF(__pyx_kp_s_center_1);
20966   __Pyx_GIVEREF(__pyx_kp_s_center_1);
20967   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_s_center_1);
20968   __Pyx_GIVEREF(__pyx_t_1);
20969   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
20970   __pyx_t_1 = 0;
20971 
20972   /* "yt/geometry/_selection_routines/sphere_selector.pxi":163
20973  *                 ("center[0]", self.center[0]),
20974  *                 ("center[1]", self.center[1]),
20975  *                 ("center[2]", self.center[2]))             # <<<<<<<<<<<<<<
20976  *
20977  *     def _get_state_attnames(self):
20978  */
20979   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->center[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 163, __pyx_L1_error)
20980   __Pyx_GOTREF(__pyx_t_1);
20981   __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 163, __pyx_L1_error)
20982   __Pyx_GOTREF(__pyx_t_6);
20983   __Pyx_INCREF(__pyx_kp_s_center_2);
20984   __Pyx_GIVEREF(__pyx_kp_s_center_2);
20985   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_s_center_2);
20986   __Pyx_GIVEREF(__pyx_t_1);
20987   PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
20988   __pyx_t_1 = 0;
20989 
20990   /* "yt/geometry/_selection_routines/sphere_selector.pxi":159
20991  *
20992  *     def _hash_vals(self):
20993  *         return (("radius", self.radius),             # <<<<<<<<<<<<<<
20994  *                 ("radius2", self.radius2),
20995  *                 ("center[0]", self.center[0]),
20996  */
20997   __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 159, __pyx_L1_error)
20998   __Pyx_GOTREF(__pyx_t_1);
20999   __Pyx_GIVEREF(__pyx_t_2);
21000   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
21001   __Pyx_GIVEREF(__pyx_t_3);
21002   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
21003   __Pyx_GIVEREF(__pyx_t_4);
21004   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
21005   __Pyx_GIVEREF(__pyx_t_5);
21006   PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_5);
21007   __Pyx_GIVEREF(__pyx_t_6);
21008   PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_6);
21009   __pyx_t_2 = 0;
21010   __pyx_t_3 = 0;
21011   __pyx_t_4 = 0;
21012   __pyx_t_5 = 0;
21013   __pyx_t_6 = 0;
21014   __pyx_r = __pyx_t_1;
21015   __pyx_t_1 = 0;
21016   goto __pyx_L0;
21017 
21018   /* "yt/geometry/_selection_routines/sphere_selector.pxi":158
21019  *             return 2  # Sphere only partially overlaps box
21020  *
21021  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
21022  *         return (("radius", self.radius),
21023  *                 ("radius2", self.radius2),
21024  */
21025 
21026   /* function exit code */
21027   __pyx_L1_error:;
21028   __Pyx_XDECREF(__pyx_t_1);
21029   __Pyx_XDECREF(__pyx_t_2);
21030   __Pyx_XDECREF(__pyx_t_3);
21031   __Pyx_XDECREF(__pyx_t_4);
21032   __Pyx_XDECREF(__pyx_t_5);
21033   __Pyx_XDECREF(__pyx_t_6);
21034   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
21035   __pyx_r = NULL;
21036   __pyx_L0:;
21037   __Pyx_XGIVEREF(__pyx_r);
21038   __Pyx_RefNannyFinishContext();
21039   return __pyx_r;
21040 }
21041 
21042 /* "yt/geometry/_selection_routines/sphere_selector.pxi":165
21043  *                 ("center[2]", self.center[2]))
21044  *
21045  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
21046  *         return ("radius", "radius2", "center", "check_box")
21047  *
21048  */
21049 
21050 /* Python wrapper */
21051 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_7_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
21052 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_7_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
21053   PyObject *__pyx_r = 0;
21054   __Pyx_RefNannyDeclarations
21055   __Pyx_RefNannySetupContext("_get_state_attnames (wrapper)", 0);
21056   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6_get_state_attnames(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self));
21057 
21058   /* function exit code */
21059   __Pyx_RefNannyFinishContext();
21060   return __pyx_r;
21061 }
21062 
21063 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self) {
21064   PyObject *__pyx_r = NULL;
21065   __Pyx_RefNannyDeclarations
21066   __Pyx_RefNannySetupContext("_get_state_attnames", 0);
21067 
21068   /* "yt/geometry/_selection_routines/sphere_selector.pxi":166
21069  *
21070  *     def _get_state_attnames(self):
21071  *         return ("radius", "radius2", "center", "check_box")             # <<<<<<<<<<<<<<
21072  *
21073  *     def __setstate__(self, hashes):
21074  */
21075   __Pyx_XDECREF(__pyx_r);
21076   __Pyx_INCREF(__pyx_tuple__13);
21077   __pyx_r = __pyx_tuple__13;
21078   goto __pyx_L0;
21079 
21080   /* "yt/geometry/_selection_routines/sphere_selector.pxi":165
21081  *                 ("center[2]", self.center[2]))
21082  *
21083  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
21084  *         return ("radius", "radius2", "center", "check_box")
21085  *
21086  */
21087 
21088   /* function exit code */
21089   __pyx_L0:;
21090   __Pyx_XGIVEREF(__pyx_r);
21091   __Pyx_RefNannyFinishContext();
21092   return __pyx_r;
21093 }
21094 
21095 /* "yt/geometry/_selection_routines/sphere_selector.pxi":168
21096  *         return ("radius", "radius2", "center", "check_box")
21097  *
21098  *     def __setstate__(self, hashes):             # <<<<<<<<<<<<<<
21099  *         super(SphereSelector, self).__setstate__(hashes)
21100  *         self.set_bbox(self.center)
21101  */
21102 
21103 /* Python wrapper */
21104 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_9__setstate__(PyObject *__pyx_v_self, PyObject *__pyx_v_hashes); /*proto*/
21105 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_9__setstate__(PyObject *__pyx_v_self, PyObject *__pyx_v_hashes) {
21106   PyObject *__pyx_r = 0;
21107   __Pyx_RefNannyDeclarations
21108   __Pyx_RefNannySetupContext("__setstate__ (wrapper)", 0);
21109   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_8__setstate__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self), ((PyObject *)__pyx_v_hashes));
21110 
21111   /* function exit code */
21112   __Pyx_RefNannyFinishContext();
21113   return __pyx_r;
21114 }
21115 
21116 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_8__setstate__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_hashes) {
21117   PyObject *__pyx_r = NULL;
21118   __Pyx_RefNannyDeclarations
21119   PyObject *__pyx_t_1 = NULL;
21120   PyObject *__pyx_t_2 = NULL;
21121   PyObject *__pyx_t_3 = NULL;
21122   PyObject *__pyx_t_4 = NULL;
21123   __Pyx_RefNannySetupContext("__setstate__", 0);
21124 
21125   /* "yt/geometry/_selection_routines/sphere_selector.pxi":169
21126  *
21127  *     def __setstate__(self, hashes):
21128  *         super(SphereSelector, self).__setstate__(hashes)             # <<<<<<<<<<<<<<
21129  *         self.set_bbox(self.center)
21130  *
21131  */
21132   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 169, __pyx_L1_error)
21133   __Pyx_GOTREF(__pyx_t_2);
21134   __Pyx_INCREF(((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_SphereSelector));
21135   __Pyx_GIVEREF(((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_SphereSelector));
21136   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_SphereSelector));
21137   __Pyx_INCREF(((PyObject *)__pyx_v_self));
21138   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
21139   PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self));
21140   __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 169, __pyx_L1_error)
21141   __Pyx_GOTREF(__pyx_t_3);
21142   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21143   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_setstate); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 169, __pyx_L1_error)
21144   __Pyx_GOTREF(__pyx_t_2);
21145   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
21146   __pyx_t_3 = NULL;
21147   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
21148     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
21149     if (likely(__pyx_t_3)) {
21150       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
21151       __Pyx_INCREF(__pyx_t_3);
21152       __Pyx_INCREF(function);
21153       __Pyx_DECREF_SET(__pyx_t_2, function);
21154     }
21155   }
21156   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_hashes) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_hashes);
21157   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
21158   if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 169, __pyx_L1_error)
21159   __Pyx_GOTREF(__pyx_t_1);
21160   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21161   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21162 
21163   /* "yt/geometry/_selection_routines/sphere_selector.pxi":170
21164  *     def __setstate__(self, hashes):
21165  *         super(SphereSelector, self).__setstate__(hashes)
21166  *         self.set_bbox(self.center)             # <<<<<<<<<<<<<<
21167  *
21168  *
21169  */
21170   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_bbox); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 170, __pyx_L1_error)
21171   __Pyx_GOTREF(__pyx_t_2);
21172   __pyx_t_3 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->center, 3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 170, __pyx_L1_error)
21173   __Pyx_GOTREF(__pyx_t_3);
21174   __pyx_t_4 = NULL;
21175   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
21176     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
21177     if (likely(__pyx_t_4)) {
21178       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
21179       __Pyx_INCREF(__pyx_t_4);
21180       __Pyx_INCREF(function);
21181       __Pyx_DECREF_SET(__pyx_t_2, function);
21182     }
21183   }
21184   __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
21185   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
21186   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
21187   if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 170, __pyx_L1_error)
21188   __Pyx_GOTREF(__pyx_t_1);
21189   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21190   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21191 
21192   /* "yt/geometry/_selection_routines/sphere_selector.pxi":168
21193  *         return ("radius", "radius2", "center", "check_box")
21194  *
21195  *     def __setstate__(self, hashes):             # <<<<<<<<<<<<<<
21196  *         super(SphereSelector, self).__setstate__(hashes)
21197  *         self.set_bbox(self.center)
21198  */
21199 
21200   /* function exit code */
21201   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
21202   goto __pyx_L0;
21203   __pyx_L1_error:;
21204   __Pyx_XDECREF(__pyx_t_1);
21205   __Pyx_XDECREF(__pyx_t_2);
21206   __Pyx_XDECREF(__pyx_t_3);
21207   __Pyx_XDECREF(__pyx_t_4);
21208   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.__setstate__", __pyx_clineno, __pyx_lineno, __pyx_filename);
21209   __pyx_r = NULL;
21210   __pyx_L0:;
21211   __Pyx_XGIVEREF(__pyx_r);
21212   __Pyx_RefNannyFinishContext();
21213   return __pyx_r;
21214 }
21215 
21216 /* "yt/geometry/_selection_routines/sphere_selector.pxi":2
21217  * cdef class SphereSelector(SelectorObject):
21218  *     cdef public np.float64_t radius             # <<<<<<<<<<<<<<
21219  *     cdef public np.float64_t radius2
21220  *     cdef public np.float64_t center[3]
21221  */
21222 
21223 /* Python wrapper */
21224 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_6radius_1__get__(PyObject *__pyx_v_self); /*proto*/
21225 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_6radius_1__get__(PyObject *__pyx_v_self) {
21226   PyObject *__pyx_r = 0;
21227   __Pyx_RefNannyDeclarations
21228   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
21229   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6radius___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self));
21230 
21231   /* function exit code */
21232   __Pyx_RefNannyFinishContext();
21233   return __pyx_r;
21234 }
21235 
21236 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6radius___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self) {
21237   PyObject *__pyx_r = NULL;
21238   __Pyx_RefNannyDeclarations
21239   PyObject *__pyx_t_1 = NULL;
21240   __Pyx_RefNannySetupContext("__get__", 0);
21241   __Pyx_XDECREF(__pyx_r);
21242   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->radius); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 2, __pyx_L1_error)
21243   __Pyx_GOTREF(__pyx_t_1);
21244   __pyx_r = __pyx_t_1;
21245   __pyx_t_1 = 0;
21246   goto __pyx_L0;
21247 
21248   /* function exit code */
21249   __pyx_L1_error:;
21250   __Pyx_XDECREF(__pyx_t_1);
21251   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.radius.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
21252   __pyx_r = NULL;
21253   __pyx_L0:;
21254   __Pyx_XGIVEREF(__pyx_r);
21255   __Pyx_RefNannyFinishContext();
21256   return __pyx_r;
21257 }
21258 
21259 /* Python wrapper */
21260 static int __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_6radius_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
21261 static int __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_6radius_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
21262   int __pyx_r;
21263   __Pyx_RefNannyDeclarations
21264   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
21265   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6radius_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
21266 
21267   /* function exit code */
21268   __Pyx_RefNannyFinishContext();
21269   return __pyx_r;
21270 }
21271 
21272 static int __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6radius_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_value) {
21273   int __pyx_r;
21274   __Pyx_RefNannyDeclarations
21275   __pyx_t_5numpy_float64_t __pyx_t_1;
21276   __Pyx_RefNannySetupContext("__set__", 0);
21277   __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(2, 2, __pyx_L1_error)
21278   __pyx_v_self->radius = __pyx_t_1;
21279 
21280   /* function exit code */
21281   __pyx_r = 0;
21282   goto __pyx_L0;
21283   __pyx_L1_error:;
21284   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.radius.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
21285   __pyx_r = -1;
21286   __pyx_L0:;
21287   __Pyx_RefNannyFinishContext();
21288   return __pyx_r;
21289 }
21290 
21291 /* "yt/geometry/_selection_routines/sphere_selector.pxi":3
21292  * cdef class SphereSelector(SelectorObject):
21293  *     cdef public np.float64_t radius
21294  *     cdef public np.float64_t radius2             # <<<<<<<<<<<<<<
21295  *     cdef public np.float64_t center[3]
21296  *     cdef np.float64_t bbox[3][2]
21297  */
21298 
21299 /* Python wrapper */
21300 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_7radius2_1__get__(PyObject *__pyx_v_self); /*proto*/
21301 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_7radius2_1__get__(PyObject *__pyx_v_self) {
21302   PyObject *__pyx_r = 0;
21303   __Pyx_RefNannyDeclarations
21304   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
21305   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_7radius2___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self));
21306 
21307   /* function exit code */
21308   __Pyx_RefNannyFinishContext();
21309   return __pyx_r;
21310 }
21311 
21312 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_7radius2___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self) {
21313   PyObject *__pyx_r = NULL;
21314   __Pyx_RefNannyDeclarations
21315   PyObject *__pyx_t_1 = NULL;
21316   __Pyx_RefNannySetupContext("__get__", 0);
21317   __Pyx_XDECREF(__pyx_r);
21318   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->radius2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 3, __pyx_L1_error)
21319   __Pyx_GOTREF(__pyx_t_1);
21320   __pyx_r = __pyx_t_1;
21321   __pyx_t_1 = 0;
21322   goto __pyx_L0;
21323 
21324   /* function exit code */
21325   __pyx_L1_error:;
21326   __Pyx_XDECREF(__pyx_t_1);
21327   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.radius2.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
21328   __pyx_r = NULL;
21329   __pyx_L0:;
21330   __Pyx_XGIVEREF(__pyx_r);
21331   __Pyx_RefNannyFinishContext();
21332   return __pyx_r;
21333 }
21334 
21335 /* Python wrapper */
21336 static int __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_7radius2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
21337 static int __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_7radius2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
21338   int __pyx_r;
21339   __Pyx_RefNannyDeclarations
21340   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
21341   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_7radius2_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
21342 
21343   /* function exit code */
21344   __Pyx_RefNannyFinishContext();
21345   return __pyx_r;
21346 }
21347 
21348 static int __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_7radius2_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_value) {
21349   int __pyx_r;
21350   __Pyx_RefNannyDeclarations
21351   __pyx_t_5numpy_float64_t __pyx_t_1;
21352   __Pyx_RefNannySetupContext("__set__", 0);
21353   __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(2, 3, __pyx_L1_error)
21354   __pyx_v_self->radius2 = __pyx_t_1;
21355 
21356   /* function exit code */
21357   __pyx_r = 0;
21358   goto __pyx_L0;
21359   __pyx_L1_error:;
21360   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.radius2.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
21361   __pyx_r = -1;
21362   __pyx_L0:;
21363   __Pyx_RefNannyFinishContext();
21364   return __pyx_r;
21365 }
21366 
21367 /* "yt/geometry/_selection_routines/sphere_selector.pxi":4
21368  *     cdef public np.float64_t radius
21369  *     cdef public np.float64_t radius2
21370  *     cdef public np.float64_t center[3]             # <<<<<<<<<<<<<<
21371  *     cdef np.float64_t bbox[3][2]
21372  *     cdef public bint check_box[3]
21373  */
21374 
21375 /* Python wrapper */
21376 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_6center_1__get__(PyObject *__pyx_v_self); /*proto*/
21377 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_6center_1__get__(PyObject *__pyx_v_self) {
21378   PyObject *__pyx_r = 0;
21379   __Pyx_RefNannyDeclarations
21380   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
21381   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6center___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self));
21382 
21383   /* function exit code */
21384   __Pyx_RefNannyFinishContext();
21385   return __pyx_r;
21386 }
21387 
21388 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6center___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self) {
21389   PyObject *__pyx_r = NULL;
21390   __Pyx_RefNannyDeclarations
21391   PyObject *__pyx_t_1 = NULL;
21392   __Pyx_RefNannySetupContext("__get__", 0);
21393   __Pyx_XDECREF(__pyx_r);
21394   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->center, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error)
21395   __Pyx_GOTREF(__pyx_t_1);
21396   __pyx_r = __pyx_t_1;
21397   __pyx_t_1 = 0;
21398   goto __pyx_L0;
21399 
21400   /* function exit code */
21401   __pyx_L1_error:;
21402   __Pyx_XDECREF(__pyx_t_1);
21403   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.center.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
21404   __pyx_r = NULL;
21405   __pyx_L0:;
21406   __Pyx_XGIVEREF(__pyx_r);
21407   __Pyx_RefNannyFinishContext();
21408   return __pyx_r;
21409 }
21410 
21411 /* Python wrapper */
21412 static int __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_6center_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
21413 static int __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_6center_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
21414   int __pyx_r;
21415   __Pyx_RefNannyDeclarations
21416   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
21417   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6center_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
21418 
21419   /* function exit code */
21420   __Pyx_RefNannyFinishContext();
21421   return __pyx_r;
21422 }
21423 
21424 static int __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_6center_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_value) {
21425   int __pyx_r;
21426   __Pyx_RefNannyDeclarations
21427   __pyx_t_5numpy_float64_t __pyx_t_1[3];
21428   __Pyx_RefNannySetupContext("__set__", 0);
21429   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(2, 4, __pyx_L1_error)
21430   memcpy(&(__pyx_v_self->center[0]), __pyx_t_1, sizeof(__pyx_v_self->center[0]) * (3));
21431 
21432   /* function exit code */
21433   __pyx_r = 0;
21434   goto __pyx_L0;
21435   __pyx_L1_error:;
21436   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.center.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
21437   __pyx_r = -1;
21438   __pyx_L0:;
21439   __Pyx_RefNannyFinishContext();
21440   return __pyx_r;
21441 }
21442 
21443 /* "yt/geometry/_selection_routines/sphere_selector.pxi":6
21444  *     cdef public np.float64_t center[3]
21445  *     cdef np.float64_t bbox[3][2]
21446  *     cdef public bint check_box[3]             # <<<<<<<<<<<<<<
21447  *
21448  *     def __init__(self, dobj):
21449  */
21450 
21451 /* Python wrapper */
21452 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_9check_box_1__get__(PyObject *__pyx_v_self); /*proto*/
21453 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_9check_box_1__get__(PyObject *__pyx_v_self) {
21454   PyObject *__pyx_r = 0;
21455   __Pyx_RefNannyDeclarations
21456   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
21457   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_9check_box___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self));
21458 
21459   /* function exit code */
21460   __Pyx_RefNannyFinishContext();
21461   return __pyx_r;
21462 }
21463 
21464 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_9check_box___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self) {
21465   PyObject *__pyx_r = NULL;
21466   __Pyx_RefNannyDeclarations
21467   PyObject *__pyx_t_1 = NULL;
21468   __Pyx_RefNannySetupContext("__get__", 0);
21469   __Pyx_XDECREF(__pyx_r);
21470   __pyx_t_1 = __Pyx_carray_to_py_int(__pyx_v_self->check_box, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error)
21471   __Pyx_GOTREF(__pyx_t_1);
21472   __pyx_r = __pyx_t_1;
21473   __pyx_t_1 = 0;
21474   goto __pyx_L0;
21475 
21476   /* function exit code */
21477   __pyx_L1_error:;
21478   __Pyx_XDECREF(__pyx_t_1);
21479   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.check_box.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
21480   __pyx_r = NULL;
21481   __pyx_L0:;
21482   __Pyx_XGIVEREF(__pyx_r);
21483   __Pyx_RefNannyFinishContext();
21484   return __pyx_r;
21485 }
21486 
21487 /* Python wrapper */
21488 static int __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_9check_box_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
21489 static int __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_9check_box_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
21490   int __pyx_r;
21491   __Pyx_RefNannyDeclarations
21492   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
21493   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_9check_box_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
21494 
21495   /* function exit code */
21496   __Pyx_RefNannyFinishContext();
21497   return __pyx_r;
21498 }
21499 
21500 static int __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_9check_box_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, PyObject *__pyx_v_value) {
21501   int __pyx_r;
21502   __Pyx_RefNannyDeclarations
21503   int __pyx_t_1[3];
21504   __Pyx_RefNannySetupContext("__set__", 0);
21505   if (unlikely(__Pyx_carray_from_py_int(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(2, 6, __pyx_L1_error)
21506   memcpy(&(__pyx_v_self->check_box[0]), __pyx_t_1, sizeof(__pyx_v_self->check_box[0]) * (3));
21507 
21508   /* function exit code */
21509   __pyx_r = 0;
21510   goto __pyx_L0;
21511   __pyx_L1_error:;
21512   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.check_box.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
21513   __pyx_r = -1;
21514   __pyx_L0:;
21515   __Pyx_RefNannyFinishContext();
21516   return __pyx_r;
21517 }
21518 
21519 /* "(tree fragment)":1
21520  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
21521  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
21522  * def __setstate_cython__(self, __pyx_state):
21523  */
21524 
21525 /* Python wrapper */
21526 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
21527 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
21528   PyObject *__pyx_r = 0;
21529   __Pyx_RefNannyDeclarations
21530   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
21531   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_10__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self));
21532 
21533   /* function exit code */
21534   __Pyx_RefNannyFinishContext();
21535   return __pyx_r;
21536 }
21537 
21538 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self) {
21539   PyObject *__pyx_r = NULL;
21540   __Pyx_RefNannyDeclarations
21541   PyObject *__pyx_t_1 = NULL;
21542   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
21543 
21544   /* "(tree fragment)":2
21545  * def __reduce_cython__(self):
21546  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
21547  * def __setstate_cython__(self, __pyx_state):
21548  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
21549  */
21550   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
21551   __Pyx_GOTREF(__pyx_t_1);
21552   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
21553   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21554   __PYX_ERR(5, 2, __pyx_L1_error)
21555 
21556   /* "(tree fragment)":1
21557  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
21558  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
21559  * def __setstate_cython__(self, __pyx_state):
21560  */
21561 
21562   /* function exit code */
21563   __pyx_L1_error:;
21564   __Pyx_XDECREF(__pyx_t_1);
21565   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
21566   __pyx_r = NULL;
21567   __Pyx_XGIVEREF(__pyx_r);
21568   __Pyx_RefNannyFinishContext();
21569   return __pyx_r;
21570 }
21571 
21572 /* "(tree fragment)":3
21573  * def __reduce_cython__(self):
21574  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
21575  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
21576  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
21577  */
21578 
21579 /* Python wrapper */
21580 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
21581 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
21582   PyObject *__pyx_r = 0;
21583   __Pyx_RefNannyDeclarations
21584   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
21585   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_12__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
21586 
21587   /* function exit code */
21588   __Pyx_RefNannyFinishContext();
21589   return __pyx_r;
21590 }
21591 
21592 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14SphereSelector_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
21593   PyObject *__pyx_r = NULL;
21594   __Pyx_RefNannyDeclarations
21595   PyObject *__pyx_t_1 = NULL;
21596   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
21597 
21598   /* "(tree fragment)":4
21599  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
21600  * def __setstate_cython__(self, __pyx_state):
21601  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
21602  */
21603   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
21604   __Pyx_GOTREF(__pyx_t_1);
21605   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
21606   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21607   __PYX_ERR(5, 4, __pyx_L1_error)
21608 
21609   /* "(tree fragment)":3
21610  * def __reduce_cython__(self):
21611  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
21612  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
21613  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
21614  */
21615 
21616   /* function exit code */
21617   __pyx_L1_error:;
21618   __Pyx_XDECREF(__pyx_t_1);
21619   __Pyx_AddTraceback("yt.geometry.selection_routines.SphereSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
21620   __pyx_r = NULL;
21621   __Pyx_XGIVEREF(__pyx_r);
21622   __Pyx_RefNannyFinishContext();
21623   return __pyx_r;
21624 }
21625 
21626 /* "yt/geometry/_selection_routines/region_selector.pxi":11
21627  *     @cython.boundscheck(False)
21628  *     @cython.wraparound(False)
21629  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
21630  *         cdef int i
21631  *         # We are modifying dobj.left_edge and dobj.right_edge , so here we will
21632  */
21633 
21634 /* Python wrapper */
21635 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
21636 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
21637   PyObject *__pyx_v_dobj = 0;
21638   int __pyx_r;
21639   __Pyx_RefNannyDeclarations
21640   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
21641   {
21642     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
21643     PyObject* values[1] = {0};
21644     if (unlikely(__pyx_kwds)) {
21645       Py_ssize_t kw_args;
21646       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
21647       switch (pos_args) {
21648         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
21649         CYTHON_FALLTHROUGH;
21650         case  0: break;
21651         default: goto __pyx_L5_argtuple_error;
21652       }
21653       kw_args = PyDict_Size(__pyx_kwds);
21654       switch (pos_args) {
21655         case  0:
21656         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
21657         else goto __pyx_L5_argtuple_error;
21658       }
21659       if (unlikely(kw_args > 0)) {
21660         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(7, 11, __pyx_L3_error)
21661       }
21662     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
21663       goto __pyx_L5_argtuple_error;
21664     } else {
21665       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
21666     }
21667     __pyx_v_dobj = values[0];
21668   }
21669   goto __pyx_L4_argument_unpacking_done;
21670   __pyx_L5_argtuple_error:;
21671   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(7, 11, __pyx_L3_error)
21672   __pyx_L3_error:;
21673   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
21674   __Pyx_RefNannyFinishContext();
21675   return -1;
21676   __pyx_L4_argument_unpacking_done:;
21677   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self), __pyx_v_dobj);
21678 
21679   /* function exit code */
21680   __Pyx_RefNannyFinishContext();
21681   return __pyx_r;
21682 }
21683 
21684 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
21685   int __pyx_v_i;
21686   __Pyx_memviewslice __pyx_v_RE = { 0, 0, { 0 }, { 0 }, { 0 } };
21687   __Pyx_memviewslice __pyx_v_LE = { 0, 0, { 0 }, { 0 }, { 0 } };
21688   __Pyx_memviewslice __pyx_v_DW = { 0, 0, { 0 }, { 0 }, { 0 } };
21689   __Pyx_memviewslice __pyx_v_DLE = { 0, 0, { 0 }, { 0 }, { 0 } };
21690   __Pyx_memviewslice __pyx_v_DRE = { 0, 0, { 0 }, { 0 }, { 0 } };
21691   PyObject *__pyx_v_le_all = NULL;
21692   PyObject *__pyx_v_re_all = NULL;
21693   PyObject *__pyx_v_domain_override = NULL;
21694   __pyx_t_5numpy_float64_t __pyx_v_region_width[3];
21695   int __pyx_v_p[3];
21696   int __pyx_r;
21697   __Pyx_RefNannyDeclarations
21698   PyObject *__pyx_t_1 = NULL;
21699   PyObject *__pyx_t_2 = NULL;
21700   __Pyx_memviewslice __pyx_t_3 = { 0, 0, { 0 }, { 0 }, { 0 } };
21701   PyObject *__pyx_t_4 = NULL;
21702   PyObject *__pyx_t_5 = NULL;
21703   PyObject *__pyx_t_6 = NULL;
21704   int __pyx_t_7;
21705   int __pyx_t_8;
21706   int __pyx_t_9;
21707   int __pyx_t_10;
21708   Py_ssize_t __pyx_t_11;
21709   Py_ssize_t __pyx_t_12;
21710   Py_ssize_t __pyx_t_13;
21711   Py_ssize_t __pyx_t_14;
21712   Py_ssize_t __pyx_t_15;
21713   Py_ssize_t __pyx_t_16;
21714   Py_ssize_t __pyx_t_17;
21715   Py_ssize_t __pyx_t_18;
21716   Py_ssize_t __pyx_t_19;
21717   Py_ssize_t __pyx_t_20;
21718   Py_ssize_t __pyx_t_21;
21719   Py_ssize_t __pyx_t_22;
21720   Py_ssize_t __pyx_t_23;
21721   Py_ssize_t __pyx_t_24;
21722   Py_ssize_t __pyx_t_25;
21723   Py_ssize_t __pyx_t_26;
21724   Py_ssize_t __pyx_t_27;
21725   Py_ssize_t __pyx_t_28;
21726   Py_ssize_t __pyx_t_29;
21727   Py_ssize_t __pyx_t_30;
21728   Py_ssize_t __pyx_t_31;
21729   Py_ssize_t __pyx_t_32;
21730   Py_ssize_t __pyx_t_33;
21731   Py_ssize_t __pyx_t_34;
21732   PyObject *__pyx_t_35 = NULL;
21733   Py_ssize_t __pyx_t_36;
21734   Py_ssize_t __pyx_t_37;
21735   Py_ssize_t __pyx_t_38;
21736   Py_ssize_t __pyx_t_39;
21737   __pyx_t_5numpy_float64_t __pyx_t_40;
21738   __Pyx_RefNannySetupContext("__init__", 0);
21739 
21740   /* "yt/geometry/_selection_routines/region_selector.pxi":15
21741  *         # We are modifying dobj.left_edge and dobj.right_edge , so here we will
21742  *         # do an in-place conversion of those arrays.
21743  *         cdef np.float64_t[:] RE = _ensure_code(dobj.right_edge)             # <<<<<<<<<<<<<<
21744  *         cdef np.float64_t[:] LE = _ensure_code(dobj.left_edge)
21745  *         cdef np.float64_t[:] DW = _ensure_code(dobj.ds.domain_width)
21746  */
21747   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_right_edge); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 15, __pyx_L1_error)
21748   __Pyx_GOTREF(__pyx_t_1);
21749   __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 15, __pyx_L1_error)
21750   __Pyx_GOTREF(__pyx_t_2);
21751   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21752   __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(7, 15, __pyx_L1_error)
21753   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21754   __pyx_v_RE = __pyx_t_3;
21755   __pyx_t_3.memview = NULL;
21756   __pyx_t_3.data = NULL;
21757 
21758   /* "yt/geometry/_selection_routines/region_selector.pxi":16
21759  *         # do an in-place conversion of those arrays.
21760  *         cdef np.float64_t[:] RE = _ensure_code(dobj.right_edge)
21761  *         cdef np.float64_t[:] LE = _ensure_code(dobj.left_edge)             # <<<<<<<<<<<<<<
21762  *         cdef np.float64_t[:] DW = _ensure_code(dobj.ds.domain_width)
21763  *         cdef np.float64_t[:] DLE = _ensure_code(dobj.ds.domain_left_edge)
21764  */
21765   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_left_edge); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 16, __pyx_L1_error)
21766   __Pyx_GOTREF(__pyx_t_2);
21767   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 16, __pyx_L1_error)
21768   __Pyx_GOTREF(__pyx_t_1);
21769   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21770   __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(7, 16, __pyx_L1_error)
21771   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21772   __pyx_v_LE = __pyx_t_3;
21773   __pyx_t_3.memview = NULL;
21774   __pyx_t_3.data = NULL;
21775 
21776   /* "yt/geometry/_selection_routines/region_selector.pxi":17
21777  *         cdef np.float64_t[:] RE = _ensure_code(dobj.right_edge)
21778  *         cdef np.float64_t[:] LE = _ensure_code(dobj.left_edge)
21779  *         cdef np.float64_t[:] DW = _ensure_code(dobj.ds.domain_width)             # <<<<<<<<<<<<<<
21780  *         cdef np.float64_t[:] DLE = _ensure_code(dobj.ds.domain_left_edge)
21781  *         cdef np.float64_t[:] DRE = _ensure_code(dobj.ds.domain_right_edge)
21782  */
21783   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 17, __pyx_L1_error)
21784   __Pyx_GOTREF(__pyx_t_1);
21785   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_domain_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 17, __pyx_L1_error)
21786   __Pyx_GOTREF(__pyx_t_2);
21787   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21788   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 17, __pyx_L1_error)
21789   __Pyx_GOTREF(__pyx_t_1);
21790   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21791   __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(7, 17, __pyx_L1_error)
21792   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21793   __pyx_v_DW = __pyx_t_3;
21794   __pyx_t_3.memview = NULL;
21795   __pyx_t_3.data = NULL;
21796 
21797   /* "yt/geometry/_selection_routines/region_selector.pxi":18
21798  *         cdef np.float64_t[:] LE = _ensure_code(dobj.left_edge)
21799  *         cdef np.float64_t[:] DW = _ensure_code(dobj.ds.domain_width)
21800  *         cdef np.float64_t[:] DLE = _ensure_code(dobj.ds.domain_left_edge)             # <<<<<<<<<<<<<<
21801  *         cdef np.float64_t[:] DRE = _ensure_code(dobj.ds.domain_right_edge)
21802  *         le_all = (np.array(LE) == _ensure_code(dobj.ds.domain_left_edge)).all()
21803  */
21804   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 18, __pyx_L1_error)
21805   __Pyx_GOTREF(__pyx_t_1);
21806   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_domain_left_edge); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 18, __pyx_L1_error)
21807   __Pyx_GOTREF(__pyx_t_2);
21808   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21809   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 18, __pyx_L1_error)
21810   __Pyx_GOTREF(__pyx_t_1);
21811   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21812   __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(7, 18, __pyx_L1_error)
21813   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21814   __pyx_v_DLE = __pyx_t_3;
21815   __pyx_t_3.memview = NULL;
21816   __pyx_t_3.data = NULL;
21817 
21818   /* "yt/geometry/_selection_routines/region_selector.pxi":19
21819  *         cdef np.float64_t[:] DW = _ensure_code(dobj.ds.domain_width)
21820  *         cdef np.float64_t[:] DLE = _ensure_code(dobj.ds.domain_left_edge)
21821  *         cdef np.float64_t[:] DRE = _ensure_code(dobj.ds.domain_right_edge)             # <<<<<<<<<<<<<<
21822  *         le_all = (np.array(LE) == _ensure_code(dobj.ds.domain_left_edge)).all()
21823  *         re_all = (np.array(RE) == _ensure_code(dobj.ds.domain_right_edge)).all()
21824  */
21825   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 19, __pyx_L1_error)
21826   __Pyx_GOTREF(__pyx_t_1);
21827   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_domain_right_edge); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 19, __pyx_L1_error)
21828   __Pyx_GOTREF(__pyx_t_2);
21829   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21830   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 19, __pyx_L1_error)
21831   __Pyx_GOTREF(__pyx_t_1);
21832   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21833   __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(7, 19, __pyx_L1_error)
21834   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21835   __pyx_v_DRE = __pyx_t_3;
21836   __pyx_t_3.memview = NULL;
21837   __pyx_t_3.data = NULL;
21838 
21839   /* "yt/geometry/_selection_routines/region_selector.pxi":20
21840  *         cdef np.float64_t[:] DLE = _ensure_code(dobj.ds.domain_left_edge)
21841  *         cdef np.float64_t[:] DRE = _ensure_code(dobj.ds.domain_right_edge)
21842  *         le_all = (np.array(LE) == _ensure_code(dobj.ds.domain_left_edge)).all()             # <<<<<<<<<<<<<<
21843  *         re_all = (np.array(RE) == _ensure_code(dobj.ds.domain_right_edge)).all()
21844  *         # If we have a bounding box, then we should *not* revert to all data
21845  */
21846   __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 20, __pyx_L1_error)
21847   __Pyx_GOTREF(__pyx_t_4);
21848   __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 20, __pyx_L1_error)
21849   __Pyx_GOTREF(__pyx_t_5);
21850   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
21851   __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_LE, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float64_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float64_t, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 20, __pyx_L1_error)
21852   __Pyx_GOTREF(__pyx_t_4);
21853   __pyx_t_6 = NULL;
21854   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
21855     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
21856     if (likely(__pyx_t_6)) {
21857       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
21858       __Pyx_INCREF(__pyx_t_6);
21859       __Pyx_INCREF(function);
21860       __Pyx_DECREF_SET(__pyx_t_5, function);
21861     }
21862   }
21863   __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4);
21864   __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
21865   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
21866   if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 20, __pyx_L1_error)
21867   __Pyx_GOTREF(__pyx_t_2);
21868   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
21869   __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 20, __pyx_L1_error)
21870   __Pyx_GOTREF(__pyx_t_5);
21871   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_domain_left_edge); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 20, __pyx_L1_error)
21872   __Pyx_GOTREF(__pyx_t_4);
21873   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
21874   __pyx_t_5 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 20, __pyx_L1_error)
21875   __Pyx_GOTREF(__pyx_t_5);
21876   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
21877   __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 20, __pyx_L1_error)
21878   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21879   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
21880   __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_all); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 20, __pyx_L1_error)
21881   __Pyx_GOTREF(__pyx_t_5);
21882   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
21883   __pyx_t_4 = NULL;
21884   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
21885     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
21886     if (likely(__pyx_t_4)) {
21887       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
21888       __Pyx_INCREF(__pyx_t_4);
21889       __Pyx_INCREF(function);
21890       __Pyx_DECREF_SET(__pyx_t_5, function);
21891     }
21892   }
21893   __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
21894   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
21895   if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 20, __pyx_L1_error)
21896   __Pyx_GOTREF(__pyx_t_1);
21897   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
21898   __pyx_v_le_all = __pyx_t_1;
21899   __pyx_t_1 = 0;
21900 
21901   /* "yt/geometry/_selection_routines/region_selector.pxi":21
21902  *         cdef np.float64_t[:] DRE = _ensure_code(dobj.ds.domain_right_edge)
21903  *         le_all = (np.array(LE) == _ensure_code(dobj.ds.domain_left_edge)).all()
21904  *         re_all = (np.array(RE) == _ensure_code(dobj.ds.domain_right_edge)).all()             # <<<<<<<<<<<<<<
21905  *         # If we have a bounding box, then we should *not* revert to all data
21906  *         domain_override = getattr(dobj.ds, '_domain_override', False)
21907  */
21908   __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 21, __pyx_L1_error)
21909   __Pyx_GOTREF(__pyx_t_4);
21910   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 21, __pyx_L1_error)
21911   __Pyx_GOTREF(__pyx_t_2);
21912   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
21913   __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_RE, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn___pyx_t_5numpy_float64_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn___pyx_t_5numpy_float64_t, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 21, __pyx_L1_error)
21914   __Pyx_GOTREF(__pyx_t_4);
21915   __pyx_t_6 = NULL;
21916   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
21917     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
21918     if (likely(__pyx_t_6)) {
21919       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
21920       __Pyx_INCREF(__pyx_t_6);
21921       __Pyx_INCREF(function);
21922       __Pyx_DECREF_SET(__pyx_t_2, function);
21923     }
21924   }
21925   __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_6, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
21926   __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
21927   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
21928   if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 21, __pyx_L1_error)
21929   __Pyx_GOTREF(__pyx_t_5);
21930   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21931   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 21, __pyx_L1_error)
21932   __Pyx_GOTREF(__pyx_t_2);
21933   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_domain_right_edge); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 21, __pyx_L1_error)
21934   __Pyx_GOTREF(__pyx_t_4);
21935   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21936   __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 21, __pyx_L1_error)
21937   __Pyx_GOTREF(__pyx_t_2);
21938   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
21939   __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 21, __pyx_L1_error)
21940   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
21941   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21942   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_all); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 21, __pyx_L1_error)
21943   __Pyx_GOTREF(__pyx_t_2);
21944   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
21945   __pyx_t_4 = NULL;
21946   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
21947     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
21948     if (likely(__pyx_t_4)) {
21949       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
21950       __Pyx_INCREF(__pyx_t_4);
21951       __Pyx_INCREF(function);
21952       __Pyx_DECREF_SET(__pyx_t_2, function);
21953     }
21954   }
21955   __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
21956   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
21957   if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 21, __pyx_L1_error)
21958   __Pyx_GOTREF(__pyx_t_1);
21959   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
21960   __pyx_v_re_all = __pyx_t_1;
21961   __pyx_t_1 = 0;
21962 
21963   /* "yt/geometry/_selection_routines/region_selector.pxi":23
21964  *         re_all = (np.array(RE) == _ensure_code(dobj.ds.domain_right_edge)).all()
21965  *         # If we have a bounding box, then we should *not* revert to all data
21966  *         domain_override = getattr(dobj.ds, '_domain_override', False)             # <<<<<<<<<<<<<<
21967  *         if le_all and re_all and not domain_override:
21968  *             self.is_all_data = True
21969  */
21970   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 23, __pyx_L1_error)
21971   __Pyx_GOTREF(__pyx_t_1);
21972   __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_n_s_domain_override, Py_False); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 23, __pyx_L1_error)
21973   __Pyx_GOTREF(__pyx_t_2);
21974   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
21975   __pyx_v_domain_override = __pyx_t_2;
21976   __pyx_t_2 = 0;
21977 
21978   /* "yt/geometry/_selection_routines/region_selector.pxi":24
21979  *         # If we have a bounding box, then we should *not* revert to all data
21980  *         domain_override = getattr(dobj.ds, '_domain_override', False)
21981  *         if le_all and re_all and not domain_override:             # <<<<<<<<<<<<<<
21982  *             self.is_all_data = True
21983  *         else:
21984  */
21985   __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_le_all); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(7, 24, __pyx_L1_error)
21986   if (__pyx_t_8) {
21987   } else {
21988     __pyx_t_7 = __pyx_t_8;
21989     goto __pyx_L4_bool_binop_done;
21990   }
21991   __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_re_all); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(7, 24, __pyx_L1_error)
21992   if (__pyx_t_8) {
21993   } else {
21994     __pyx_t_7 = __pyx_t_8;
21995     goto __pyx_L4_bool_binop_done;
21996   }
21997   __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_domain_override); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(7, 24, __pyx_L1_error)
21998   __pyx_t_9 = ((!__pyx_t_8) != 0);
21999   __pyx_t_7 = __pyx_t_9;
22000   __pyx_L4_bool_binop_done:;
22001   if (__pyx_t_7) {
22002 
22003     /* "yt/geometry/_selection_routines/region_selector.pxi":25
22004  *         domain_override = getattr(dobj.ds, '_domain_override', False)
22005  *         if le_all and re_all and not domain_override:
22006  *             self.is_all_data = True             # <<<<<<<<<<<<<<
22007  *         else:
22008  *             self.is_all_data = False
22009  */
22010     __pyx_v_self->is_all_data = 1;
22011 
22012     /* "yt/geometry/_selection_routines/region_selector.pxi":24
22013  *         # If we have a bounding box, then we should *not* revert to all data
22014  *         domain_override = getattr(dobj.ds, '_domain_override', False)
22015  *         if le_all and re_all and not domain_override:             # <<<<<<<<<<<<<<
22016  *             self.is_all_data = True
22017  *         else:
22018  */
22019     goto __pyx_L3;
22020   }
22021 
22022   /* "yt/geometry/_selection_routines/region_selector.pxi":27
22023  *             self.is_all_data = True
22024  *         else:
22025  *             self.is_all_data = False             # <<<<<<<<<<<<<<
22026  *         cdef np.float64_t region_width[3]
22027  *         cdef bint p[3]
22028  */
22029   /*else*/ {
22030     __pyx_v_self->is_all_data = 0;
22031   }
22032   __pyx_L3:;
22033 
22034   /* "yt/geometry/_selection_routines/region_selector.pxi":32
22035  *         # This is for if we want to include zones that overlap and whose
22036  *         # centers are not strictly included.
22037  *         self.loose_selection = getattr(dobj, "loose_selection", False)             # <<<<<<<<<<<<<<
22038  *
22039  *         for i in range(3):
22040  */
22041   __pyx_t_2 = __Pyx_GetAttr3(__pyx_v_dobj, __pyx_n_s_loose_selection, Py_False); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 32, __pyx_L1_error)
22042   __Pyx_GOTREF(__pyx_t_2);
22043   __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 32, __pyx_L1_error)
22044   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
22045   __pyx_v_self->loose_selection = __pyx_t_7;
22046 
22047   /* "yt/geometry/_selection_routines/region_selector.pxi":34
22048  *         self.loose_selection = getattr(dobj, "loose_selection", False)
22049  *
22050  *         for i in range(3):             # <<<<<<<<<<<<<<
22051  *             self.check_period[i] = False
22052  *             region_width[i] = RE[i] - LE[i]
22053  */
22054   for (__pyx_t_10 = 0; __pyx_t_10 < 3; __pyx_t_10+=1) {
22055     __pyx_v_i = __pyx_t_10;
22056 
22057     /* "yt/geometry/_selection_routines/region_selector.pxi":35
22058  *
22059  *         for i in range(3):
22060  *             self.check_period[i] = False             # <<<<<<<<<<<<<<
22061  *             region_width[i] = RE[i] - LE[i]
22062  *             p[i] = dobj.ds.periodicity[i]
22063  */
22064     (__pyx_v_self->check_period[__pyx_v_i]) = 0;
22065 
22066     /* "yt/geometry/_selection_routines/region_selector.pxi":36
22067  *         for i in range(3):
22068  *             self.check_period[i] = False
22069  *             region_width[i] = RE[i] - LE[i]             # <<<<<<<<<<<<<<
22070  *             p[i] = dobj.ds.periodicity[i]
22071  *             if region_width[i] <= 0:
22072  */
22073     __pyx_t_11 = __pyx_v_i;
22074     __pyx_t_12 = __pyx_v_i;
22075     (__pyx_v_region_width[__pyx_v_i]) = ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_RE.data + __pyx_t_11 * __pyx_v_RE.strides[0]) ))) - (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_LE.data + __pyx_t_12 * __pyx_v_LE.strides[0]) ))));
22076 
22077     /* "yt/geometry/_selection_routines/region_selector.pxi":37
22078  *             self.check_period[i] = False
22079  *             region_width[i] = RE[i] - LE[i]
22080  *             p[i] = dobj.ds.periodicity[i]             # <<<<<<<<<<<<<<
22081  *             if region_width[i] <= 0:
22082  *                 raise RuntimeError(
22083  */
22084     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 37, __pyx_L1_error)
22085     __Pyx_GOTREF(__pyx_t_2);
22086     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_periodicity); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 37, __pyx_L1_error)
22087     __Pyx_GOTREF(__pyx_t_1);
22088     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
22089     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 37, __pyx_L1_error)
22090     __Pyx_GOTREF(__pyx_t_2);
22091     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
22092     __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 37, __pyx_L1_error)
22093     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
22094     (__pyx_v_p[__pyx_v_i]) = __pyx_t_7;
22095 
22096     /* "yt/geometry/_selection_routines/region_selector.pxi":38
22097  *             region_width[i] = RE[i] - LE[i]
22098  *             p[i] = dobj.ds.periodicity[i]
22099  *             if region_width[i] <= 0:             # <<<<<<<<<<<<<<
22100  *                 raise RuntimeError(
22101  *                     "Region right edge[%s] < left edge: width = %s" % (
22102  */
22103     __pyx_t_7 = (((__pyx_v_region_width[__pyx_v_i]) <= 0.0) != 0);
22104     if (unlikely(__pyx_t_7)) {
22105 
22106       /* "yt/geometry/_selection_routines/region_selector.pxi":41
22107  *                 raise RuntimeError(
22108  *                     "Region right edge[%s] < left edge: width = %s" % (
22109  *                         i, region_width[i]))             # <<<<<<<<<<<<<<
22110  *
22111  *         for i in range(3):
22112  */
22113       __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 41, __pyx_L1_error)
22114       __Pyx_GOTREF(__pyx_t_2);
22115       __pyx_t_1 = PyFloat_FromDouble((__pyx_v_region_width[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 41, __pyx_L1_error)
22116       __Pyx_GOTREF(__pyx_t_1);
22117       __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 41, __pyx_L1_error)
22118       __Pyx_GOTREF(__pyx_t_4);
22119       __Pyx_GIVEREF(__pyx_t_2);
22120       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
22121       __Pyx_GIVEREF(__pyx_t_1);
22122       PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
22123       __pyx_t_2 = 0;
22124       __pyx_t_1 = 0;
22125 
22126       /* "yt/geometry/_selection_routines/region_selector.pxi":40
22127  *             if region_width[i] <= 0:
22128  *                 raise RuntimeError(
22129  *                     "Region right edge[%s] < left edge: width = %s" % (             # <<<<<<<<<<<<<<
22130  *                         i, region_width[i]))
22131  *
22132  */
22133       __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Region_right_edge_s_left_edge_wi, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 40, __pyx_L1_error)
22134       __Pyx_GOTREF(__pyx_t_1);
22135       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
22136 
22137       /* "yt/geometry/_selection_routines/region_selector.pxi":39
22138  *             p[i] = dobj.ds.periodicity[i]
22139  *             if region_width[i] <= 0:
22140  *                 raise RuntimeError(             # <<<<<<<<<<<<<<
22141  *                     "Region right edge[%s] < left edge: width = %s" % (
22142  *                         i, region_width[i]))
22143  */
22144       __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 39, __pyx_L1_error)
22145       __Pyx_GOTREF(__pyx_t_4);
22146       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
22147       __Pyx_Raise(__pyx_t_4, 0, 0, 0);
22148       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
22149       __PYX_ERR(7, 39, __pyx_L1_error)
22150 
22151       /* "yt/geometry/_selection_routines/region_selector.pxi":38
22152  *             region_width[i] = RE[i] - LE[i]
22153  *             p[i] = dobj.ds.periodicity[i]
22154  *             if region_width[i] <= 0:             # <<<<<<<<<<<<<<
22155  *                 raise RuntimeError(
22156  *                     "Region right edge[%s] < left edge: width = %s" % (
22157  */
22158     }
22159   }
22160 
22161   /* "yt/geometry/_selection_routines/region_selector.pxi":43
22162  *                         i, region_width[i]))
22163  *
22164  *         for i in range(3):             # <<<<<<<<<<<<<<
22165  *
22166  *             if p[i]:
22167  */
22168   for (__pyx_t_10 = 0; __pyx_t_10 < 3; __pyx_t_10+=1) {
22169     __pyx_v_i = __pyx_t_10;
22170 
22171     /* "yt/geometry/_selection_routines/region_selector.pxi":45
22172  *         for i in range(3):
22173  *
22174  *             if p[i]:             # <<<<<<<<<<<<<<
22175  *                 # First, we check if any criteria requires a period check,
22176  *                 # without any adjustments.  This is for short-circuiting the
22177  */
22178     __pyx_t_7 = ((__pyx_v_p[__pyx_v_i]) != 0);
22179     if (__pyx_t_7) {
22180 
22181       /* "yt/geometry/_selection_routines/region_selector.pxi":49
22182  *                 # without any adjustments.  This is for short-circuiting the
22183  *                 # short-circuit of the loop down below in mask filling.
22184  *                 if LE[i] < DLE[i] or LE[i] > DRE[i] or RE[i] > DRE[i]:             # <<<<<<<<<<<<<<
22185  *                     self.check_period[i] = True
22186  *                 # shift so left_edge guaranteed in domain
22187  */
22188       __pyx_t_13 = __pyx_v_i;
22189       __pyx_t_14 = __pyx_v_i;
22190       __pyx_t_9 = (((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_LE.data + __pyx_t_13 * __pyx_v_LE.strides[0]) ))) < (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DLE.data + __pyx_t_14 * __pyx_v_DLE.strides[0]) )))) != 0);
22191       if (!__pyx_t_9) {
22192       } else {
22193         __pyx_t_7 = __pyx_t_9;
22194         goto __pyx_L14_bool_binop_done;
22195       }
22196       __pyx_t_15 = __pyx_v_i;
22197       __pyx_t_16 = __pyx_v_i;
22198       __pyx_t_9 = (((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_LE.data + __pyx_t_15 * __pyx_v_LE.strides[0]) ))) > (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DRE.data + __pyx_t_16 * __pyx_v_DRE.strides[0]) )))) != 0);
22199       if (!__pyx_t_9) {
22200       } else {
22201         __pyx_t_7 = __pyx_t_9;
22202         goto __pyx_L14_bool_binop_done;
22203       }
22204       __pyx_t_17 = __pyx_v_i;
22205       __pyx_t_18 = __pyx_v_i;
22206       __pyx_t_9 = (((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_RE.data + __pyx_t_17 * __pyx_v_RE.strides[0]) ))) > (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DRE.data + __pyx_t_18 * __pyx_v_DRE.strides[0]) )))) != 0);
22207       __pyx_t_7 = __pyx_t_9;
22208       __pyx_L14_bool_binop_done:;
22209       if (__pyx_t_7) {
22210 
22211         /* "yt/geometry/_selection_routines/region_selector.pxi":50
22212  *                 # short-circuit of the loop down below in mask filling.
22213  *                 if LE[i] < DLE[i] or LE[i] > DRE[i] or RE[i] > DRE[i]:
22214  *                     self.check_period[i] = True             # <<<<<<<<<<<<<<
22215  *                 # shift so left_edge guaranteed in domain
22216  *                 if LE[i] < DLE[i]:
22217  */
22218         (__pyx_v_self->check_period[__pyx_v_i]) = 1;
22219 
22220         /* "yt/geometry/_selection_routines/region_selector.pxi":49
22221  *                 # without any adjustments.  This is for short-circuiting the
22222  *                 # short-circuit of the loop down below in mask filling.
22223  *                 if LE[i] < DLE[i] or LE[i] > DRE[i] or RE[i] > DRE[i]:             # <<<<<<<<<<<<<<
22224  *                     self.check_period[i] = True
22225  *                 # shift so left_edge guaranteed in domain
22226  */
22227       }
22228 
22229       /* "yt/geometry/_selection_routines/region_selector.pxi":52
22230  *                     self.check_period[i] = True
22231  *                 # shift so left_edge guaranteed in domain
22232  *                 if LE[i] < DLE[i]:             # <<<<<<<<<<<<<<
22233  *                     LE[i] += DW[i]
22234  *                     RE[i] += DW[i]
22235  */
22236       __pyx_t_19 = __pyx_v_i;
22237       __pyx_t_20 = __pyx_v_i;
22238       __pyx_t_7 = (((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_LE.data + __pyx_t_19 * __pyx_v_LE.strides[0]) ))) < (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DLE.data + __pyx_t_20 * __pyx_v_DLE.strides[0]) )))) != 0);
22239       if (__pyx_t_7) {
22240 
22241         /* "yt/geometry/_selection_routines/region_selector.pxi":53
22242  *                 # shift so left_edge guaranteed in domain
22243  *                 if LE[i] < DLE[i]:
22244  *                     LE[i] += DW[i]             # <<<<<<<<<<<<<<
22245  *                     RE[i] += DW[i]
22246  *                 elif LE[i] > DRE[i]:
22247  */
22248         __pyx_t_21 = __pyx_v_i;
22249         __pyx_t_22 = __pyx_v_i;
22250         *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_LE.data + __pyx_t_22 * __pyx_v_LE.strides[0]) )) += (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DW.data + __pyx_t_21 * __pyx_v_DW.strides[0]) )));
22251 
22252         /* "yt/geometry/_selection_routines/region_selector.pxi":54
22253  *                 if LE[i] < DLE[i]:
22254  *                     LE[i] += DW[i]
22255  *                     RE[i] += DW[i]             # <<<<<<<<<<<<<<
22256  *                 elif LE[i] > DRE[i]:
22257  *                     LE[i] -= DW[i]
22258  */
22259         __pyx_t_23 = __pyx_v_i;
22260         __pyx_t_24 = __pyx_v_i;
22261         *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_RE.data + __pyx_t_24 * __pyx_v_RE.strides[0]) )) += (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DW.data + __pyx_t_23 * __pyx_v_DW.strides[0]) )));
22262 
22263         /* "yt/geometry/_selection_routines/region_selector.pxi":52
22264  *                     self.check_period[i] = True
22265  *                 # shift so left_edge guaranteed in domain
22266  *                 if LE[i] < DLE[i]:             # <<<<<<<<<<<<<<
22267  *                     LE[i] += DW[i]
22268  *                     RE[i] += DW[i]
22269  */
22270         goto __pyx_L17;
22271       }
22272 
22273       /* "yt/geometry/_selection_routines/region_selector.pxi":55
22274  *                     LE[i] += DW[i]
22275  *                     RE[i] += DW[i]
22276  *                 elif LE[i] > DRE[i]:             # <<<<<<<<<<<<<<
22277  *                     LE[i] -= DW[i]
22278  *                     RE[i] -= DW[i]
22279  */
22280       __pyx_t_25 = __pyx_v_i;
22281       __pyx_t_26 = __pyx_v_i;
22282       __pyx_t_7 = (((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_LE.data + __pyx_t_25 * __pyx_v_LE.strides[0]) ))) > (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DRE.data + __pyx_t_26 * __pyx_v_DRE.strides[0]) )))) != 0);
22283       if (__pyx_t_7) {
22284 
22285         /* "yt/geometry/_selection_routines/region_selector.pxi":56
22286  *                     RE[i] += DW[i]
22287  *                 elif LE[i] > DRE[i]:
22288  *                     LE[i] -= DW[i]             # <<<<<<<<<<<<<<
22289  *                     RE[i] -= DW[i]
22290  *             else:
22291  */
22292         __pyx_t_27 = __pyx_v_i;
22293         __pyx_t_28 = __pyx_v_i;
22294         *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_LE.data + __pyx_t_28 * __pyx_v_LE.strides[0]) )) -= (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DW.data + __pyx_t_27 * __pyx_v_DW.strides[0]) )));
22295 
22296         /* "yt/geometry/_selection_routines/region_selector.pxi":57
22297  *                 elif LE[i] > DRE[i]:
22298  *                     LE[i] -= DW[i]
22299  *                     RE[i] -= DW[i]             # <<<<<<<<<<<<<<
22300  *             else:
22301  *                 if LE[i] < DLE[i] or RE[i] > DRE[i]:
22302  */
22303         __pyx_t_29 = __pyx_v_i;
22304         __pyx_t_30 = __pyx_v_i;
22305         *((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_RE.data + __pyx_t_30 * __pyx_v_RE.strides[0]) )) -= (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DW.data + __pyx_t_29 * __pyx_v_DW.strides[0]) )));
22306 
22307         /* "yt/geometry/_selection_routines/region_selector.pxi":55
22308  *                     LE[i] += DW[i]
22309  *                     RE[i] += DW[i]
22310  *                 elif LE[i] > DRE[i]:             # <<<<<<<<<<<<<<
22311  *                     LE[i] -= DW[i]
22312  *                     RE[i] -= DW[i]
22313  */
22314       }
22315       __pyx_L17:;
22316 
22317       /* "yt/geometry/_selection_routines/region_selector.pxi":45
22318  *         for i in range(3):
22319  *
22320  *             if p[i]:             # <<<<<<<<<<<<<<
22321  *                 # First, we check if any criteria requires a period check,
22322  *                 # without any adjustments.  This is for short-circuiting the
22323  */
22324       goto __pyx_L12;
22325     }
22326 
22327     /* "yt/geometry/_selection_routines/region_selector.pxi":59
22328  *                     RE[i] -= DW[i]
22329  *             else:
22330  *                 if LE[i] < DLE[i] or RE[i] > DRE[i]:             # <<<<<<<<<<<<<<
22331  *                     raise RuntimeError(
22332  *                         "yt attempted to read outside the boundaries of "
22333  */
22334     /*else*/ {
22335       __pyx_t_31 = __pyx_v_i;
22336       __pyx_t_32 = __pyx_v_i;
22337       __pyx_t_9 = (((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_LE.data + __pyx_t_31 * __pyx_v_LE.strides[0]) ))) < (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DLE.data + __pyx_t_32 * __pyx_v_DLE.strides[0]) )))) != 0);
22338       if (!__pyx_t_9) {
22339       } else {
22340         __pyx_t_7 = __pyx_t_9;
22341         goto __pyx_L19_bool_binop_done;
22342       }
22343       __pyx_t_33 = __pyx_v_i;
22344       __pyx_t_34 = __pyx_v_i;
22345       __pyx_t_9 = (((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_RE.data + __pyx_t_33 * __pyx_v_RE.strides[0]) ))) > (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DRE.data + __pyx_t_34 * __pyx_v_DRE.strides[0]) )))) != 0);
22346       __pyx_t_7 = __pyx_t_9;
22347       __pyx_L19_bool_binop_done:;
22348       if (unlikely(__pyx_t_7)) {
22349 
22350         /* "yt/geometry/_selection_routines/region_selector.pxi":71
22351  *                         "or override the periodicity with\n"
22352  *                         "ds.force_periodicity()" % \
22353  *                         (i, dobj.left_edge[i], dobj.right_edge[i],             # <<<<<<<<<<<<<<
22354  *                          dobj.ds.domain_left_edge[i], dobj.ds.domain_right_edge[i])
22355  *                     )
22356  */
22357         __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 71, __pyx_L1_error)
22358         __Pyx_GOTREF(__pyx_t_4);
22359         __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_left_edge); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 71, __pyx_L1_error)
22360         __Pyx_GOTREF(__pyx_t_1);
22361         __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 71, __pyx_L1_error)
22362         __Pyx_GOTREF(__pyx_t_2);
22363         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
22364         __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_right_edge); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 71, __pyx_L1_error)
22365         __Pyx_GOTREF(__pyx_t_1);
22366         __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 71, __pyx_L1_error)
22367         __Pyx_GOTREF(__pyx_t_5);
22368         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
22369 
22370         /* "yt/geometry/_selection_routines/region_selector.pxi":72
22371  *                         "ds.force_periodicity()" % \
22372  *                         (i, dobj.left_edge[i], dobj.right_edge[i],
22373  *                          dobj.ds.domain_left_edge[i], dobj.ds.domain_right_edge[i])             # <<<<<<<<<<<<<<
22374  *                     )
22375  *             # Already ensured in code
22376  */
22377         __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 72, __pyx_L1_error)
22378         __Pyx_GOTREF(__pyx_t_1);
22379         __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_domain_left_edge); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 72, __pyx_L1_error)
22380         __Pyx_GOTREF(__pyx_t_6);
22381         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
22382         __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_6, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 72, __pyx_L1_error)
22383         __Pyx_GOTREF(__pyx_t_1);
22384         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
22385         __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 72, __pyx_L1_error)
22386         __Pyx_GOTREF(__pyx_t_6);
22387         __pyx_t_35 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_domain_right_edge); if (unlikely(!__pyx_t_35)) __PYX_ERR(7, 72, __pyx_L1_error)
22388         __Pyx_GOTREF(__pyx_t_35);
22389         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
22390         __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_35, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 72, __pyx_L1_error)
22391         __Pyx_GOTREF(__pyx_t_6);
22392         __Pyx_DECREF(__pyx_t_35); __pyx_t_35 = 0;
22393 
22394         /* "yt/geometry/_selection_routines/region_selector.pxi":71
22395  *                         "or override the periodicity with\n"
22396  *                         "ds.force_periodicity()" % \
22397  *                         (i, dobj.left_edge[i], dobj.right_edge[i],             # <<<<<<<<<<<<<<
22398  *                          dobj.ds.domain_left_edge[i], dobj.ds.domain_right_edge[i])
22399  *                     )
22400  */
22401         __pyx_t_35 = PyTuple_New(5); if (unlikely(!__pyx_t_35)) __PYX_ERR(7, 71, __pyx_L1_error)
22402         __Pyx_GOTREF(__pyx_t_35);
22403         __Pyx_GIVEREF(__pyx_t_4);
22404         PyTuple_SET_ITEM(__pyx_t_35, 0, __pyx_t_4);
22405         __Pyx_GIVEREF(__pyx_t_2);
22406         PyTuple_SET_ITEM(__pyx_t_35, 1, __pyx_t_2);
22407         __Pyx_GIVEREF(__pyx_t_5);
22408         PyTuple_SET_ITEM(__pyx_t_35, 2, __pyx_t_5);
22409         __Pyx_GIVEREF(__pyx_t_1);
22410         PyTuple_SET_ITEM(__pyx_t_35, 3, __pyx_t_1);
22411         __Pyx_GIVEREF(__pyx_t_6);
22412         PyTuple_SET_ITEM(__pyx_t_35, 4, __pyx_t_6);
22413         __pyx_t_4 = 0;
22414         __pyx_t_2 = 0;
22415         __pyx_t_5 = 0;
22416         __pyx_t_1 = 0;
22417         __pyx_t_6 = 0;
22418 
22419         /* "yt/geometry/_selection_routines/region_selector.pxi":70
22420  *                         "(see https://yt-project.org/docs/analyzing/objects.html?highlight=region)\n"
22421  *                         "or override the periodicity with\n"
22422  *                         "ds.force_periodicity()" % \             # <<<<<<<<<<<<<<
22423  *                         (i, dobj.left_edge[i], dobj.right_edge[i],
22424  *                          dobj.ds.domain_left_edge[i], dobj.ds.domain_right_edge[i])
22425  */
22426         __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_yt_attempted_to_read_outside_the, __pyx_t_35); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 70, __pyx_L1_error)
22427         __Pyx_GOTREF(__pyx_t_6);
22428         __Pyx_DECREF(__pyx_t_35); __pyx_t_35 = 0;
22429 
22430         /* "yt/geometry/_selection_routines/region_selector.pxi":60
22431  *             else:
22432  *                 if LE[i] < DLE[i] or RE[i] > DRE[i]:
22433  *                     raise RuntimeError(             # <<<<<<<<<<<<<<
22434  *                         "yt attempted to read outside the boundaries of "
22435  *                         "a non-periodic domain along dimension %s.\n"
22436  */
22437         __pyx_t_35 = __Pyx_PyObject_CallOneArg(__pyx_builtin_RuntimeError, __pyx_t_6); if (unlikely(!__pyx_t_35)) __PYX_ERR(7, 60, __pyx_L1_error)
22438         __Pyx_GOTREF(__pyx_t_35);
22439         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
22440         __Pyx_Raise(__pyx_t_35, 0, 0, 0);
22441         __Pyx_DECREF(__pyx_t_35); __pyx_t_35 = 0;
22442         __PYX_ERR(7, 60, __pyx_L1_error)
22443 
22444         /* "yt/geometry/_selection_routines/region_selector.pxi":59
22445  *                     RE[i] -= DW[i]
22446  *             else:
22447  *                 if LE[i] < DLE[i] or RE[i] > DRE[i]:             # <<<<<<<<<<<<<<
22448  *                     raise RuntimeError(
22449  *                         "yt attempted to read outside the boundaries of "
22450  */
22451       }
22452     }
22453     __pyx_L12:;
22454 
22455     /* "yt/geometry/_selection_routines/region_selector.pxi":75
22456  *                     )
22457  *             # Already ensured in code
22458  *             self.left_edge[i] = LE[i]             # <<<<<<<<<<<<<<
22459  *             self.right_edge[i] = RE[i]
22460  *             self.right_edge_shift[i] = RE[i] - DW[i]
22461  */
22462     __pyx_t_36 = __pyx_v_i;
22463     (__pyx_v_self->left_edge[__pyx_v_i]) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_LE.data + __pyx_t_36 * __pyx_v_LE.strides[0]) )));
22464 
22465     /* "yt/geometry/_selection_routines/region_selector.pxi":76
22466  *             # Already ensured in code
22467  *             self.left_edge[i] = LE[i]
22468  *             self.right_edge[i] = RE[i]             # <<<<<<<<<<<<<<
22469  *             self.right_edge_shift[i] = RE[i] - DW[i]
22470  *             if not self.periodicity[i]:
22471  */
22472     __pyx_t_37 = __pyx_v_i;
22473     (__pyx_v_self->right_edge[__pyx_v_i]) = (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_RE.data + __pyx_t_37 * __pyx_v_RE.strides[0]) )));
22474 
22475     /* "yt/geometry/_selection_routines/region_selector.pxi":77
22476  *             self.left_edge[i] = LE[i]
22477  *             self.right_edge[i] = RE[i]
22478  *             self.right_edge_shift[i] = RE[i] - DW[i]             # <<<<<<<<<<<<<<
22479  *             if not self.periodicity[i]:
22480  *                 self.right_edge_shift[i] = -np.inf
22481  */
22482     __pyx_t_38 = __pyx_v_i;
22483     __pyx_t_39 = __pyx_v_i;
22484     (__pyx_v_self->right_edge_shift[__pyx_v_i]) = ((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_RE.data + __pyx_t_38 * __pyx_v_RE.strides[0]) ))) - (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_DW.data + __pyx_t_39 * __pyx_v_DW.strides[0]) ))));
22485 
22486     /* "yt/geometry/_selection_routines/region_selector.pxi":78
22487  *             self.right_edge[i] = RE[i]
22488  *             self.right_edge_shift[i] = RE[i] - DW[i]
22489  *             if not self.periodicity[i]:             # <<<<<<<<<<<<<<
22490  *                 self.right_edge_shift[i] = -np.inf
22491  *
22492  */
22493     __pyx_t_7 = ((!((__pyx_v_self->__pyx_base.periodicity[__pyx_v_i]) != 0)) != 0);
22494     if (__pyx_t_7) {
22495 
22496       /* "yt/geometry/_selection_routines/region_selector.pxi":79
22497  *             self.right_edge_shift[i] = RE[i] - DW[i]
22498  *             if not self.periodicity[i]:
22499  *                 self.right_edge_shift[i] = -np.inf             # <<<<<<<<<<<<<<
22500  *
22501  *     @cython.boundscheck(False)
22502  */
22503       __Pyx_GetModuleGlobalName(__pyx_t_35, __pyx_n_s_np); if (unlikely(!__pyx_t_35)) __PYX_ERR(7, 79, __pyx_L1_error)
22504       __Pyx_GOTREF(__pyx_t_35);
22505       __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_35, __pyx_n_s_inf); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 79, __pyx_L1_error)
22506       __Pyx_GOTREF(__pyx_t_6);
22507       __Pyx_DECREF(__pyx_t_35); __pyx_t_35 = 0;
22508       __pyx_t_35 = PyNumber_Negative(__pyx_t_6); if (unlikely(!__pyx_t_35)) __PYX_ERR(7, 79, __pyx_L1_error)
22509       __Pyx_GOTREF(__pyx_t_35);
22510       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
22511       __pyx_t_40 = __pyx_PyFloat_AsDouble(__pyx_t_35); if (unlikely((__pyx_t_40 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(7, 79, __pyx_L1_error)
22512       __Pyx_DECREF(__pyx_t_35); __pyx_t_35 = 0;
22513       (__pyx_v_self->right_edge_shift[__pyx_v_i]) = __pyx_t_40;
22514 
22515       /* "yt/geometry/_selection_routines/region_selector.pxi":78
22516  *             self.right_edge[i] = RE[i]
22517  *             self.right_edge_shift[i] = RE[i] - DW[i]
22518  *             if not self.periodicity[i]:             # <<<<<<<<<<<<<<
22519  *                 self.right_edge_shift[i] = -np.inf
22520  *
22521  */
22522     }
22523   }
22524 
22525   /* "yt/geometry/_selection_routines/region_selector.pxi":11
22526  *     @cython.boundscheck(False)
22527  *     @cython.wraparound(False)
22528  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
22529  *         cdef int i
22530  *         # We are modifying dobj.left_edge and dobj.right_edge , so here we will
22531  */
22532 
22533   /* function exit code */
22534   __pyx_r = 0;
22535   goto __pyx_L0;
22536   __pyx_L1_error:;
22537   __Pyx_XDECREF(__pyx_t_1);
22538   __Pyx_XDECREF(__pyx_t_2);
22539   __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
22540   __Pyx_XDECREF(__pyx_t_4);
22541   __Pyx_XDECREF(__pyx_t_5);
22542   __Pyx_XDECREF(__pyx_t_6);
22543   __Pyx_XDECREF(__pyx_t_35);
22544   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
22545   __pyx_r = -1;
22546   __pyx_L0:;
22547   __PYX_XDEC_MEMVIEW(&__pyx_v_RE, 1);
22548   __PYX_XDEC_MEMVIEW(&__pyx_v_LE, 1);
22549   __PYX_XDEC_MEMVIEW(&__pyx_v_DW, 1);
22550   __PYX_XDEC_MEMVIEW(&__pyx_v_DLE, 1);
22551   __PYX_XDEC_MEMVIEW(&__pyx_v_DRE, 1);
22552   __Pyx_XDECREF(__pyx_v_le_all);
22553   __Pyx_XDECREF(__pyx_v_re_all);
22554   __Pyx_XDECREF(__pyx_v_domain_override);
22555   __Pyx_RefNannyFinishContext();
22556   return __pyx_r;
22557 }
22558 
22559 /* "yt/geometry/_selection_routines/region_selector.pxi":84
22560  *     @cython.wraparound(False)
22561  *     @cython.cdivision(True)
22562  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
22563  *                                np.float64_t right_edge[3]) nogil:
22564  *         cdef int i
22565  */
22566 
22567 static int __pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
22568   int __pyx_v_i;
22569   int __pyx_r;
22570   int __pyx_t_1;
22571   int __pyx_t_2;
22572   int __pyx_t_3;
22573 
22574   /* "yt/geometry/_selection_routines/region_selector.pxi":87
22575  *                                np.float64_t right_edge[3]) nogil:
22576  *         cdef int i
22577  *         for i in range(3):             # <<<<<<<<<<<<<<
22578  *             if (right_edge[i] < self.left_edge[i] and \
22579  *                 left_edge[i] >= self.right_edge_shift[i]) or \
22580  */
22581   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
22582     __pyx_v_i = __pyx_t_1;
22583 
22584     /* "yt/geometry/_selection_routines/region_selector.pxi":88
22585  *         cdef int i
22586  *         for i in range(3):
22587  *             if (right_edge[i] < self.left_edge[i] and \             # <<<<<<<<<<<<<<
22588  *                 left_edge[i] >= self.right_edge_shift[i]) or \
22589  *                 left_edge[i] >= self.right_edge[i]:
22590  */
22591     __pyx_t_3 = (((__pyx_v_right_edge[__pyx_v_i]) < (__pyx_v_self->left_edge[__pyx_v_i])) != 0);
22592     if (!__pyx_t_3) {
22593       goto __pyx_L7_next_or;
22594     } else {
22595     }
22596 
22597     /* "yt/geometry/_selection_routines/region_selector.pxi":89
22598  *         for i in range(3):
22599  *             if (right_edge[i] < self.left_edge[i] and \
22600  *                 left_edge[i] >= self.right_edge_shift[i]) or \             # <<<<<<<<<<<<<<
22601  *                 left_edge[i] >= self.right_edge[i]:
22602  *                 return 0
22603  */
22604     __pyx_t_3 = (((__pyx_v_left_edge[__pyx_v_i]) >= (__pyx_v_self->right_edge_shift[__pyx_v_i])) != 0);
22605     if (!__pyx_t_3) {
22606     } else {
22607       __pyx_t_2 = __pyx_t_3;
22608       goto __pyx_L6_bool_binop_done;
22609     }
22610     __pyx_L7_next_or:;
22611 
22612     /* "yt/geometry/_selection_routines/region_selector.pxi":90
22613  *             if (right_edge[i] < self.left_edge[i] and \
22614  *                 left_edge[i] >= self.right_edge_shift[i]) or \
22615  *                 left_edge[i] >= self.right_edge[i]:             # <<<<<<<<<<<<<<
22616  *                 return 0
22617  *         return 1
22618  */
22619     __pyx_t_3 = (((__pyx_v_left_edge[__pyx_v_i]) >= (__pyx_v_self->right_edge[__pyx_v_i])) != 0);
22620     __pyx_t_2 = __pyx_t_3;
22621     __pyx_L6_bool_binop_done:;
22622 
22623     /* "yt/geometry/_selection_routines/region_selector.pxi":88
22624  *         cdef int i
22625  *         for i in range(3):
22626  *             if (right_edge[i] < self.left_edge[i] and \             # <<<<<<<<<<<<<<
22627  *                 left_edge[i] >= self.right_edge_shift[i]) or \
22628  *                 left_edge[i] >= self.right_edge[i]:
22629  */
22630     if (__pyx_t_2) {
22631 
22632       /* "yt/geometry/_selection_routines/region_selector.pxi":91
22633  *                 left_edge[i] >= self.right_edge_shift[i]) or \
22634  *                 left_edge[i] >= self.right_edge[i]:
22635  *                 return 0             # <<<<<<<<<<<<<<
22636  *         return 1
22637  *
22638  */
22639       __pyx_r = 0;
22640       goto __pyx_L0;
22641 
22642       /* "yt/geometry/_selection_routines/region_selector.pxi":88
22643  *         cdef int i
22644  *         for i in range(3):
22645  *             if (right_edge[i] < self.left_edge[i] and \             # <<<<<<<<<<<<<<
22646  *                 left_edge[i] >= self.right_edge_shift[i]) or \
22647  *                 left_edge[i] >= self.right_edge[i]:
22648  */
22649     }
22650   }
22651 
22652   /* "yt/geometry/_selection_routines/region_selector.pxi":92
22653  *                 left_edge[i] >= self.right_edge[i]:
22654  *                 return 0
22655  *         return 1             # <<<<<<<<<<<<<<
22656  *
22657  *     @cython.boundscheck(False)
22658  */
22659   __pyx_r = 1;
22660   goto __pyx_L0;
22661 
22662   /* "yt/geometry/_selection_routines/region_selector.pxi":84
22663  *     @cython.wraparound(False)
22664  *     @cython.cdivision(True)
22665  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
22666  *                                np.float64_t right_edge[3]) nogil:
22667  *         cdef int i
22668  */
22669 
22670   /* function exit code */
22671   __pyx_L0:;
22672   return __pyx_r;
22673 }
22674 
22675 /* "yt/geometry/_selection_routines/region_selector.pxi":97
22676  *     @cython.wraparound(False)
22677  *     @cython.cdivision(True)
22678  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
22679  *                                np.float64_t right_edge[3]) nogil:
22680  *         cdef int i
22681  */
22682 
22683 static int __pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
22684   int __pyx_v_i;
22685   int __pyx_r;
22686   int __pyx_t_1;
22687   int __pyx_t_2;
22688   int __pyx_t_3;
22689 
22690   /* "yt/geometry/_selection_routines/region_selector.pxi":100
22691  *                                np.float64_t right_edge[3]) nogil:
22692  *         cdef int i
22693  *         for i in range(3):             # <<<<<<<<<<<<<<
22694  *             if (right_edge[i] < self.left_edge[i] and \
22695  *                 left_edge[i] >= self.right_edge_shift[i]) or \
22696  */
22697   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
22698     __pyx_v_i = __pyx_t_1;
22699 
22700     /* "yt/geometry/_selection_routines/region_selector.pxi":101
22701  *         cdef int i
22702  *         for i in range(3):
22703  *             if (right_edge[i] < self.left_edge[i] and \             # <<<<<<<<<<<<<<
22704  *                 left_edge[i] >= self.right_edge_shift[i]) or \
22705  *                 left_edge[i] >= self.right_edge[i]:
22706  */
22707     __pyx_t_3 = (((__pyx_v_right_edge[__pyx_v_i]) < (__pyx_v_self->left_edge[__pyx_v_i])) != 0);
22708     if (!__pyx_t_3) {
22709       goto __pyx_L7_next_or;
22710     } else {
22711     }
22712 
22713     /* "yt/geometry/_selection_routines/region_selector.pxi":102
22714  *         for i in range(3):
22715  *             if (right_edge[i] < self.left_edge[i] and \
22716  *                 left_edge[i] >= self.right_edge_shift[i]) or \             # <<<<<<<<<<<<<<
22717  *                 left_edge[i] >= self.right_edge[i]:
22718  *                 return 0
22719  */
22720     __pyx_t_3 = (((__pyx_v_left_edge[__pyx_v_i]) >= (__pyx_v_self->right_edge_shift[__pyx_v_i])) != 0);
22721     if (!__pyx_t_3) {
22722     } else {
22723       __pyx_t_2 = __pyx_t_3;
22724       goto __pyx_L6_bool_binop_done;
22725     }
22726     __pyx_L7_next_or:;
22727 
22728     /* "yt/geometry/_selection_routines/region_selector.pxi":103
22729  *             if (right_edge[i] < self.left_edge[i] and \
22730  *                 left_edge[i] >= self.right_edge_shift[i]) or \
22731  *                 left_edge[i] >= self.right_edge[i]:             # <<<<<<<<<<<<<<
22732  *                 return 0
22733  *         for i in range(3):
22734  */
22735     __pyx_t_3 = (((__pyx_v_left_edge[__pyx_v_i]) >= (__pyx_v_self->right_edge[__pyx_v_i])) != 0);
22736     __pyx_t_2 = __pyx_t_3;
22737     __pyx_L6_bool_binop_done:;
22738 
22739     /* "yt/geometry/_selection_routines/region_selector.pxi":101
22740  *         cdef int i
22741  *         for i in range(3):
22742  *             if (right_edge[i] < self.left_edge[i] and \             # <<<<<<<<<<<<<<
22743  *                 left_edge[i] >= self.right_edge_shift[i]) or \
22744  *                 left_edge[i] >= self.right_edge[i]:
22745  */
22746     if (__pyx_t_2) {
22747 
22748       /* "yt/geometry/_selection_routines/region_selector.pxi":104
22749  *                 left_edge[i] >= self.right_edge_shift[i]) or \
22750  *                 left_edge[i] >= self.right_edge[i]:
22751  *                 return 0             # <<<<<<<<<<<<<<
22752  *         for i in range(3):
22753  *             if left_edge[i] < self.right_edge_shift[i]:
22754  */
22755       __pyx_r = 0;
22756       goto __pyx_L0;
22757 
22758       /* "yt/geometry/_selection_routines/region_selector.pxi":101
22759  *         cdef int i
22760  *         for i in range(3):
22761  *             if (right_edge[i] < self.left_edge[i] and \             # <<<<<<<<<<<<<<
22762  *                 left_edge[i] >= self.right_edge_shift[i]) or \
22763  *                 left_edge[i] >= self.right_edge[i]:
22764  */
22765     }
22766   }
22767 
22768   /* "yt/geometry/_selection_routines/region_selector.pxi":105
22769  *                 left_edge[i] >= self.right_edge[i]:
22770  *                 return 0
22771  *         for i in range(3):             # <<<<<<<<<<<<<<
22772  *             if left_edge[i] < self.right_edge_shift[i]:
22773  *                 if right_edge[i] >= self.right_edge_shift[i]:
22774  */
22775   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
22776     __pyx_v_i = __pyx_t_1;
22777 
22778     /* "yt/geometry/_selection_routines/region_selector.pxi":106
22779  *                 return 0
22780  *         for i in range(3):
22781  *             if left_edge[i] < self.right_edge_shift[i]:             # <<<<<<<<<<<<<<
22782  *                 if right_edge[i] >= self.right_edge_shift[i]:
22783  *                     return 2
22784  */
22785     __pyx_t_2 = (((__pyx_v_left_edge[__pyx_v_i]) < (__pyx_v_self->right_edge_shift[__pyx_v_i])) != 0);
22786     if (__pyx_t_2) {
22787 
22788       /* "yt/geometry/_selection_routines/region_selector.pxi":107
22789  *         for i in range(3):
22790  *             if left_edge[i] < self.right_edge_shift[i]:
22791  *                 if right_edge[i] >= self.right_edge_shift[i]:             # <<<<<<<<<<<<<<
22792  *                     return 2
22793  *             elif left_edge[i] < self.left_edge[i] or \
22794  */
22795       __pyx_t_2 = (((__pyx_v_right_edge[__pyx_v_i]) >= (__pyx_v_self->right_edge_shift[__pyx_v_i])) != 0);
22796       if (__pyx_t_2) {
22797 
22798         /* "yt/geometry/_selection_routines/region_selector.pxi":108
22799  *             if left_edge[i] < self.right_edge_shift[i]:
22800  *                 if right_edge[i] >= self.right_edge_shift[i]:
22801  *                     return 2             # <<<<<<<<<<<<<<
22802  *             elif left_edge[i] < self.left_edge[i] or \
22803  *                  right_edge[i] >= self.right_edge[i]:
22804  */
22805         __pyx_r = 2;
22806         goto __pyx_L0;
22807 
22808         /* "yt/geometry/_selection_routines/region_selector.pxi":107
22809  *         for i in range(3):
22810  *             if left_edge[i] < self.right_edge_shift[i]:
22811  *                 if right_edge[i] >= self.right_edge_shift[i]:             # <<<<<<<<<<<<<<
22812  *                     return 2
22813  *             elif left_edge[i] < self.left_edge[i] or \
22814  */
22815       }
22816 
22817       /* "yt/geometry/_selection_routines/region_selector.pxi":106
22818  *                 return 0
22819  *         for i in range(3):
22820  *             if left_edge[i] < self.right_edge_shift[i]:             # <<<<<<<<<<<<<<
22821  *                 if right_edge[i] >= self.right_edge_shift[i]:
22822  *                     return 2
22823  */
22824       goto __pyx_L11;
22825     }
22826 
22827     /* "yt/geometry/_selection_routines/region_selector.pxi":109
22828  *                 if right_edge[i] >= self.right_edge_shift[i]:
22829  *                     return 2
22830  *             elif left_edge[i] < self.left_edge[i] or \             # <<<<<<<<<<<<<<
22831  *                  right_edge[i] >= self.right_edge[i]:
22832  *                 return 2
22833  */
22834     __pyx_t_3 = (((__pyx_v_left_edge[__pyx_v_i]) < (__pyx_v_self->left_edge[__pyx_v_i])) != 0);
22835     if (!__pyx_t_3) {
22836     } else {
22837       __pyx_t_2 = __pyx_t_3;
22838       goto __pyx_L13_bool_binop_done;
22839     }
22840 
22841     /* "yt/geometry/_selection_routines/region_selector.pxi":110
22842  *                     return 2
22843  *             elif left_edge[i] < self.left_edge[i] or \
22844  *                  right_edge[i] >= self.right_edge[i]:             # <<<<<<<<<<<<<<
22845  *                 return 2
22846  *         return 1
22847  */
22848     __pyx_t_3 = (((__pyx_v_right_edge[__pyx_v_i]) >= (__pyx_v_self->right_edge[__pyx_v_i])) != 0);
22849     __pyx_t_2 = __pyx_t_3;
22850     __pyx_L13_bool_binop_done:;
22851 
22852     /* "yt/geometry/_selection_routines/region_selector.pxi":109
22853  *                 if right_edge[i] >= self.right_edge_shift[i]:
22854  *                     return 2
22855  *             elif left_edge[i] < self.left_edge[i] or \             # <<<<<<<<<<<<<<
22856  *                  right_edge[i] >= self.right_edge[i]:
22857  *                 return 2
22858  */
22859     if (__pyx_t_2) {
22860 
22861       /* "yt/geometry/_selection_routines/region_selector.pxi":111
22862  *             elif left_edge[i] < self.left_edge[i] or \
22863  *                  right_edge[i] >= self.right_edge[i]:
22864  *                 return 2             # <<<<<<<<<<<<<<
22865  *         return 1
22866  *
22867  */
22868       __pyx_r = 2;
22869       goto __pyx_L0;
22870 
22871       /* "yt/geometry/_selection_routines/region_selector.pxi":109
22872  *                 if right_edge[i] >= self.right_edge_shift[i]:
22873  *                     return 2
22874  *             elif left_edge[i] < self.left_edge[i] or \             # <<<<<<<<<<<<<<
22875  *                  right_edge[i] >= self.right_edge[i]:
22876  *                 return 2
22877  */
22878     }
22879     __pyx_L11:;
22880   }
22881 
22882   /* "yt/geometry/_selection_routines/region_selector.pxi":112
22883  *                  right_edge[i] >= self.right_edge[i]:
22884  *                 return 2
22885  *         return 1             # <<<<<<<<<<<<<<
22886  *
22887  *     @cython.boundscheck(False)
22888  */
22889   __pyx_r = 1;
22890   goto __pyx_L0;
22891 
22892   /* "yt/geometry/_selection_routines/region_selector.pxi":97
22893  *     @cython.wraparound(False)
22894  *     @cython.cdivision(True)
22895  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
22896  *                                np.float64_t right_edge[3]) nogil:
22897  *         cdef int i
22898  */
22899 
22900   /* function exit code */
22901   __pyx_L0:;
22902   return __pyx_r;
22903 }
22904 
22905 /* "yt/geometry/_selection_routines/region_selector.pxi":117
22906  *     @cython.wraparound(False)
22907  *     @cython.cdivision(True)
22908  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
22909  *         cdef np.float64_t left_edge[3]
22910  *         cdef np.float64_t right_edge[3]
22911  */
22912 
22913 static int __pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
22914   __pyx_t_5numpy_float64_t __pyx_v_left_edge[3];
22915   __pyx_t_5numpy_float64_t __pyx_v_right_edge[3];
22916   int __pyx_v_i;
22917   int __pyx_r;
22918   int __pyx_t_1;
22919   int __pyx_t_2;
22920 
22921   /* "yt/geometry/_selection_routines/region_selector.pxi":121
22922  *         cdef np.float64_t right_edge[3]
22923  *         cdef int i
22924  *         if self.loose_selection:             # <<<<<<<<<<<<<<
22925  *             for i in range(3):
22926  *                 left_edge[i] = pos[i] - dds[i]*0.5
22927  */
22928   __pyx_t_1 = (__pyx_v_self->loose_selection != 0);
22929   if (__pyx_t_1) {
22930 
22931     /* "yt/geometry/_selection_routines/region_selector.pxi":122
22932  *         cdef int i
22933  *         if self.loose_selection:
22934  *             for i in range(3):             # <<<<<<<<<<<<<<
22935  *                 left_edge[i] = pos[i] - dds[i]*0.5
22936  *                 right_edge[i] = pos[i] + dds[i]*0.5
22937  */
22938     for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
22939       __pyx_v_i = __pyx_t_2;
22940 
22941       /* "yt/geometry/_selection_routines/region_selector.pxi":123
22942  *         if self.loose_selection:
22943  *             for i in range(3):
22944  *                 left_edge[i] = pos[i] - dds[i]*0.5             # <<<<<<<<<<<<<<
22945  *                 right_edge[i] = pos[i] + dds[i]*0.5
22946  *             return self.select_bbox(left_edge, right_edge)
22947  */
22948       (__pyx_v_left_edge[__pyx_v_i]) = ((__pyx_v_pos[__pyx_v_i]) - ((__pyx_v_dds[__pyx_v_i]) * 0.5));
22949 
22950       /* "yt/geometry/_selection_routines/region_selector.pxi":124
22951  *             for i in range(3):
22952  *                 left_edge[i] = pos[i] - dds[i]*0.5
22953  *                 right_edge[i] = pos[i] + dds[i]*0.5             # <<<<<<<<<<<<<<
22954  *             return self.select_bbox(left_edge, right_edge)
22955  *         return self.select_point(pos)
22956  */
22957       (__pyx_v_right_edge[__pyx_v_i]) = ((__pyx_v_pos[__pyx_v_i]) + ((__pyx_v_dds[__pyx_v_i]) * 0.5));
22958     }
22959 
22960     /* "yt/geometry/_selection_routines/region_selector.pxi":125
22961  *                 left_edge[i] = pos[i] - dds[i]*0.5
22962  *                 right_edge[i] = pos[i] + dds[i]*0.5
22963  *             return self.select_bbox(left_edge, right_edge)             # <<<<<<<<<<<<<<
22964  *         return self.select_point(pos)
22965  *
22966  */
22967     __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.select_bbox(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_left_edge, __pyx_v_right_edge);
22968     goto __pyx_L0;
22969 
22970     /* "yt/geometry/_selection_routines/region_selector.pxi":121
22971  *         cdef np.float64_t right_edge[3]
22972  *         cdef int i
22973  *         if self.loose_selection:             # <<<<<<<<<<<<<<
22974  *             for i in range(3):
22975  *                 left_edge[i] = pos[i] - dds[i]*0.5
22976  */
22977   }
22978 
22979   /* "yt/geometry/_selection_routines/region_selector.pxi":126
22980  *                 right_edge[i] = pos[i] + dds[i]*0.5
22981  *             return self.select_bbox(left_edge, right_edge)
22982  *         return self.select_point(pos)             # <<<<<<<<<<<<<<
22983  *
22984  *     @cython.boundscheck(False)
22985  */
22986   __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.select_point(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_pos);
22987   goto __pyx_L0;
22988 
22989   /* "yt/geometry/_selection_routines/region_selector.pxi":117
22990  *     @cython.wraparound(False)
22991  *     @cython.cdivision(True)
22992  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
22993  *         cdef np.float64_t left_edge[3]
22994  *         cdef np.float64_t right_edge[3]
22995  */
22996 
22997   /* function exit code */
22998   __pyx_L0:;
22999   return __pyx_r;
23000 }
23001 
23002 /* "yt/geometry/_selection_routines/region_selector.pxi":131
23003  *     @cython.wraparound(False)
23004  *     @cython.cdivision(True)
23005  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
23006  *         cdef int i
23007  *         for i in range(3):
23008  */
23009 
23010 static int __pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
23011   int __pyx_v_i;
23012   int __pyx_r;
23013   int __pyx_t_1;
23014   int __pyx_t_2;
23015   int __pyx_t_3;
23016   int __pyx_t_4;
23017 
23018   /* "yt/geometry/_selection_routines/region_selector.pxi":133
23019  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
23020  *         cdef int i
23021  *         for i in range(3):             # <<<<<<<<<<<<<<
23022  *             if (self.right_edge_shift[i] <= pos[i] < self.left_edge[i]) or \
23023  *                pos[i] >= self.right_edge[i]:
23024  */
23025   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
23026     __pyx_v_i = __pyx_t_1;
23027 
23028     /* "yt/geometry/_selection_routines/region_selector.pxi":134
23029  *         cdef int i
23030  *         for i in range(3):
23031  *             if (self.right_edge_shift[i] <= pos[i] < self.left_edge[i]) or \             # <<<<<<<<<<<<<<
23032  *                pos[i] >= self.right_edge[i]:
23033  *                 return 0
23034  */
23035     __pyx_t_3 = ((__pyx_v_self->right_edge_shift[__pyx_v_i]) <= (__pyx_v_pos[__pyx_v_i]));
23036     if (__pyx_t_3) {
23037       __pyx_t_3 = ((__pyx_v_pos[__pyx_v_i]) < (__pyx_v_self->left_edge[__pyx_v_i]));
23038     }
23039     __pyx_t_4 = (__pyx_t_3 != 0);
23040     if (!__pyx_t_4) {
23041     } else {
23042       __pyx_t_2 = __pyx_t_4;
23043       goto __pyx_L6_bool_binop_done;
23044     }
23045 
23046     /* "yt/geometry/_selection_routines/region_selector.pxi":135
23047  *         for i in range(3):
23048  *             if (self.right_edge_shift[i] <= pos[i] < self.left_edge[i]) or \
23049  *                pos[i] >= self.right_edge[i]:             # <<<<<<<<<<<<<<
23050  *                 return 0
23051  *         return 1
23052  */
23053     __pyx_t_4 = (((__pyx_v_pos[__pyx_v_i]) >= (__pyx_v_self->right_edge[__pyx_v_i])) != 0);
23054     __pyx_t_2 = __pyx_t_4;
23055     __pyx_L6_bool_binop_done:;
23056 
23057     /* "yt/geometry/_selection_routines/region_selector.pxi":134
23058  *         cdef int i
23059  *         for i in range(3):
23060  *             if (self.right_edge_shift[i] <= pos[i] < self.left_edge[i]) or \             # <<<<<<<<<<<<<<
23061  *                pos[i] >= self.right_edge[i]:
23062  *                 return 0
23063  */
23064     if (__pyx_t_2) {
23065 
23066       /* "yt/geometry/_selection_routines/region_selector.pxi":136
23067  *             if (self.right_edge_shift[i] <= pos[i] < self.left_edge[i]) or \
23068  *                pos[i] >= self.right_edge[i]:
23069  *                 return 0             # <<<<<<<<<<<<<<
23070  *         return 1
23071  *
23072  */
23073       __pyx_r = 0;
23074       goto __pyx_L0;
23075 
23076       /* "yt/geometry/_selection_routines/region_selector.pxi":134
23077  *         cdef int i
23078  *         for i in range(3):
23079  *             if (self.right_edge_shift[i] <= pos[i] < self.left_edge[i]) or \             # <<<<<<<<<<<<<<
23080  *                pos[i] >= self.right_edge[i]:
23081  *                 return 0
23082  */
23083     }
23084   }
23085 
23086   /* "yt/geometry/_selection_routines/region_selector.pxi":137
23087  *                pos[i] >= self.right_edge[i]:
23088  *                 return 0
23089  *         return 1             # <<<<<<<<<<<<<<
23090  *
23091  *     @cython.boundscheck(False)
23092  */
23093   __pyx_r = 1;
23094   goto __pyx_L0;
23095 
23096   /* "yt/geometry/_selection_routines/region_selector.pxi":131
23097  *     @cython.wraparound(False)
23098  *     @cython.cdivision(True)
23099  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
23100  *         cdef int i
23101  *         for i in range(3):
23102  */
23103 
23104   /* function exit code */
23105   __pyx_L0:;
23106   return __pyx_r;
23107 }
23108 
23109 /* "yt/geometry/_selection_routines/region_selector.pxi":142
23110  *     @cython.wraparound(False)
23111  *     @cython.cdivision(True)
23112  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
23113  *         # adapted from http://stackoverflow.com/a/4579192/1382869
23114  *         cdef int i
23115  */
23116 
23117 static int __pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
23118   int __pyx_v_i;
23119   __pyx_t_5numpy_float64_t __pyx_v_p;
23120   __pyx_t_5numpy_float64_t __pyx_v_r2;
23121   __pyx_t_5numpy_float64_t __pyx_v_dmin;
23122   int __pyx_r;
23123   int __pyx_t_1;
23124   int __pyx_t_2;
23125   int __pyx_t_3;
23126 
23127   /* "yt/geometry/_selection_routines/region_selector.pxi":146
23128  *         cdef int i
23129  *         cdef np.float64_t p
23130  *         cdef np.float64_t r2 = radius**2             # <<<<<<<<<<<<<<
23131  *         cdef np.float64_t dmin = 0
23132  *         for i in range(3):
23133  */
23134   __pyx_v_r2 = pow(__pyx_v_radius, 2.0);
23135 
23136   /* "yt/geometry/_selection_routines/region_selector.pxi":147
23137  *         cdef np.float64_t p
23138  *         cdef np.float64_t r2 = radius**2
23139  *         cdef np.float64_t dmin = 0             # <<<<<<<<<<<<<<
23140  *         for i in range(3):
23141  *             if self.periodicity[i] and self.check_period[i]:
23142  */
23143   __pyx_v_dmin = 0.0;
23144 
23145   /* "yt/geometry/_selection_routines/region_selector.pxi":148
23146  *         cdef np.float64_t r2 = radius**2
23147  *         cdef np.float64_t dmin = 0
23148  *         for i in range(3):             # <<<<<<<<<<<<<<
23149  *             if self.periodicity[i] and self.check_period[i]:
23150  *                 p = pos[i] + self.right_edge_shift[i]
23151  */
23152   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
23153     __pyx_v_i = __pyx_t_1;
23154 
23155     /* "yt/geometry/_selection_routines/region_selector.pxi":149
23156  *         cdef np.float64_t dmin = 0
23157  *         for i in range(3):
23158  *             if self.periodicity[i] and self.check_period[i]:             # <<<<<<<<<<<<<<
23159  *                 p = pos[i] + self.right_edge_shift[i]
23160  *             else:
23161  */
23162     __pyx_t_3 = ((__pyx_v_self->__pyx_base.periodicity[__pyx_v_i]) != 0);
23163     if (__pyx_t_3) {
23164     } else {
23165       __pyx_t_2 = __pyx_t_3;
23166       goto __pyx_L6_bool_binop_done;
23167     }
23168     __pyx_t_3 = ((__pyx_v_self->check_period[__pyx_v_i]) != 0);
23169     __pyx_t_2 = __pyx_t_3;
23170     __pyx_L6_bool_binop_done:;
23171     if (__pyx_t_2) {
23172 
23173       /* "yt/geometry/_selection_routines/region_selector.pxi":150
23174  *         for i in range(3):
23175  *             if self.periodicity[i] and self.check_period[i]:
23176  *                 p = pos[i] + self.right_edge_shift[i]             # <<<<<<<<<<<<<<
23177  *             else:
23178  *                 p = pos[i]
23179  */
23180       __pyx_v_p = ((__pyx_v_pos[__pyx_v_i]) + (__pyx_v_self->right_edge_shift[__pyx_v_i]));
23181 
23182       /* "yt/geometry/_selection_routines/region_selector.pxi":149
23183  *         cdef np.float64_t dmin = 0
23184  *         for i in range(3):
23185  *             if self.periodicity[i] and self.check_period[i]:             # <<<<<<<<<<<<<<
23186  *                 p = pos[i] + self.right_edge_shift[i]
23187  *             else:
23188  */
23189       goto __pyx_L5;
23190     }
23191 
23192     /* "yt/geometry/_selection_routines/region_selector.pxi":152
23193  *                 p = pos[i] + self.right_edge_shift[i]
23194  *             else:
23195  *                 p = pos[i]             # <<<<<<<<<<<<<<
23196  *             if p < self.left_edge[i]:
23197  *                 dmin += (p - self.left_edge[i])**2
23198  */
23199     /*else*/ {
23200       __pyx_v_p = (__pyx_v_pos[__pyx_v_i]);
23201     }
23202     __pyx_L5:;
23203 
23204     /* "yt/geometry/_selection_routines/region_selector.pxi":153
23205  *             else:
23206  *                 p = pos[i]
23207  *             if p < self.left_edge[i]:             # <<<<<<<<<<<<<<
23208  *                 dmin += (p - self.left_edge[i])**2
23209  *             elif pos[i] > self.right_edge[i]:
23210  */
23211     __pyx_t_2 = ((__pyx_v_p < (__pyx_v_self->left_edge[__pyx_v_i])) != 0);
23212     if (__pyx_t_2) {
23213 
23214       /* "yt/geometry/_selection_routines/region_selector.pxi":154
23215  *                 p = pos[i]
23216  *             if p < self.left_edge[i]:
23217  *                 dmin += (p - self.left_edge[i])**2             # <<<<<<<<<<<<<<
23218  *             elif pos[i] > self.right_edge[i]:
23219  *                 dmin += (p - self.right_edge[i])**2
23220  */
23221       __pyx_v_dmin = (__pyx_v_dmin + pow((__pyx_v_p - (__pyx_v_self->left_edge[__pyx_v_i])), 2.0));
23222 
23223       /* "yt/geometry/_selection_routines/region_selector.pxi":153
23224  *             else:
23225  *                 p = pos[i]
23226  *             if p < self.left_edge[i]:             # <<<<<<<<<<<<<<
23227  *                 dmin += (p - self.left_edge[i])**2
23228  *             elif pos[i] > self.right_edge[i]:
23229  */
23230       goto __pyx_L8;
23231     }
23232 
23233     /* "yt/geometry/_selection_routines/region_selector.pxi":155
23234  *             if p < self.left_edge[i]:
23235  *                 dmin += (p - self.left_edge[i])**2
23236  *             elif pos[i] > self.right_edge[i]:             # <<<<<<<<<<<<<<
23237  *                 dmin += (p - self.right_edge[i])**2
23238  *         return int(dmin <= r2)
23239  */
23240     __pyx_t_2 = (((__pyx_v_pos[__pyx_v_i]) > (__pyx_v_self->right_edge[__pyx_v_i])) != 0);
23241     if (__pyx_t_2) {
23242 
23243       /* "yt/geometry/_selection_routines/region_selector.pxi":156
23244  *                 dmin += (p - self.left_edge[i])**2
23245  *             elif pos[i] > self.right_edge[i]:
23246  *                 dmin += (p - self.right_edge[i])**2             # <<<<<<<<<<<<<<
23247  *         return int(dmin <= r2)
23248  *
23249  */
23250       __pyx_v_dmin = (__pyx_v_dmin + pow((__pyx_v_p - (__pyx_v_self->right_edge[__pyx_v_i])), 2.0));
23251 
23252       /* "yt/geometry/_selection_routines/region_selector.pxi":155
23253  *             if p < self.left_edge[i]:
23254  *                 dmin += (p - self.left_edge[i])**2
23255  *             elif pos[i] > self.right_edge[i]:             # <<<<<<<<<<<<<<
23256  *                 dmin += (p - self.right_edge[i])**2
23257  *         return int(dmin <= r2)
23258  */
23259     }
23260     __pyx_L8:;
23261   }
23262 
23263   /* "yt/geometry/_selection_routines/region_selector.pxi":157
23264  *             elif pos[i] > self.right_edge[i]:
23265  *                 dmin += (p - self.right_edge[i])**2
23266  *         return int(dmin <= r2)             # <<<<<<<<<<<<<<
23267  *
23268  *     @cython.boundscheck(False)
23269  */
23270   __pyx_r = ((int)(__pyx_v_dmin <= __pyx_v_r2));
23271   goto __pyx_L0;
23272 
23273   /* "yt/geometry/_selection_routines/region_selector.pxi":142
23274  *     @cython.wraparound(False)
23275  *     @cython.cdivision(True)
23276  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
23277  *         # adapted from http://stackoverflow.com/a/4579192/1382869
23278  *         cdef int i
23279  */
23280 
23281   /* function exit code */
23282   __pyx_L0:;
23283   return __pyx_r;
23284 }
23285 
23286 /* "yt/geometry/_selection_routines/region_selector.pxi":162
23287  *     @cython.wraparound(False)
23288  *     @cython.cdivision(True)
23289  *     cdef int fill_mask_selector(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
23290  *                                 np.float64_t right_edge[3],
23291  *                                 np.float64_t dds[3], int dim[3],
23292  */
23293 
23294 static int __pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_fill_mask_selector(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_float64_t *__pyx_v_dds, int *__pyx_v_dim, PyArrayObject *__pyx_v_child_mask, PyArrayObject *__pyx_v_mask, int __pyx_v_level) {
23295   int __pyx_v_i;
23296   int __pyx_v_j;
23297   int __pyx_v_k;
23298   int __pyx_v_total;
23299   int __pyx_v_this_level;
23300   __pyx_t_5numpy_float64_t __pyx_v_pos[3];
23301   __pyx_t_5numpy_int64_t __pyx_v_si[3];
23302   __pyx_t_5numpy_int64_t __pyx_v_ei[3];
23303   __Pyx_LocalBuf_ND __pyx_pybuffernd_child_mask;
23304   __Pyx_Buffer __pyx_pybuffer_child_mask;
23305   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
23306   __Pyx_Buffer __pyx_pybuffer_mask;
23307   int __pyx_r;
23308   __Pyx_RefNannyDeclarations
23309   int __pyx_t_1;
23310   int __pyx_t_2;
23311   int __pyx_t_3;
23312   __pyx_t_5numpy_int64_t __pyx_t_4;
23313   __pyx_t_5numpy_int64_t __pyx_t_5;
23314   __pyx_t_5numpy_int64_t __pyx_t_6;
23315   __pyx_t_5numpy_int64_t __pyx_t_7;
23316   int __pyx_t_8;
23317   __pyx_t_5numpy_int64_t __pyx_t_9;
23318   __pyx_t_5numpy_int64_t __pyx_t_10;
23319   int __pyx_t_11;
23320   Py_ssize_t __pyx_t_12;
23321   Py_ssize_t __pyx_t_13;
23322   Py_ssize_t __pyx_t_14;
23323   Py_ssize_t __pyx_t_15;
23324   Py_ssize_t __pyx_t_16;
23325   Py_ssize_t __pyx_t_17;
23326   Py_ssize_t __pyx_t_18;
23327   Py_ssize_t __pyx_t_19;
23328   Py_ssize_t __pyx_t_20;
23329   __Pyx_RefNannySetupContext("fill_mask_selector", 0);
23330   __pyx_pybuffer_child_mask.pybuffer.buf = NULL;
23331   __pyx_pybuffer_child_mask.refcount = 0;
23332   __pyx_pybuffernd_child_mask.data = NULL;
23333   __pyx_pybuffernd_child_mask.rcbuffer = &__pyx_pybuffer_child_mask;
23334   __pyx_pybuffer_mask.pybuffer.buf = NULL;
23335   __pyx_pybuffer_mask.refcount = 0;
23336   __pyx_pybuffernd_mask.data = NULL;
23337   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
23338   {
23339     __Pyx_BufFmt_StackElem __pyx_stack[1];
23340     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_child_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack) == -1)) __PYX_ERR(7, 162, __pyx_L1_error)
23341   }
23342   __pyx_pybuffernd_child_mask.diminfo[0].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_child_mask.diminfo[0].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_child_mask.diminfo[1].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_child_mask.diminfo[1].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_child_mask.diminfo[2].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_child_mask.diminfo[2].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[2];
23343   {
23344     __Pyx_BufFmt_StackElem __pyx_stack[1];
23345     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) __PYX_ERR(7, 162, __pyx_L1_error)
23346   }
23347   __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_mask.diminfo[2].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_mask.diminfo[2].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[2];
23348 
23349   /* "yt/geometry/_selection_routines/region_selector.pxi":169
23350  *                                 int level):
23351  *         cdef int i, j, k
23352  *         cdef int total = 0, this_level = 0             # <<<<<<<<<<<<<<
23353  *         cdef np.float64_t pos[3]
23354  *         if level < self.min_level or level > self.max_level:
23355  */
23356   __pyx_v_total = 0;
23357   __pyx_v_this_level = 0;
23358 
23359   /* "yt/geometry/_selection_routines/region_selector.pxi":171
23360  *         cdef int total = 0, this_level = 0
23361  *         cdef np.float64_t pos[3]
23362  *         if level < self.min_level or level > self.max_level:             # <<<<<<<<<<<<<<
23363  *             return 0
23364  *         if level == self.max_level:
23365  */
23366   __pyx_t_2 = ((__pyx_v_level < __pyx_v_self->__pyx_base.min_level) != 0);
23367   if (!__pyx_t_2) {
23368   } else {
23369     __pyx_t_1 = __pyx_t_2;
23370     goto __pyx_L4_bool_binop_done;
23371   }
23372   __pyx_t_2 = ((__pyx_v_level > __pyx_v_self->__pyx_base.max_level) != 0);
23373   __pyx_t_1 = __pyx_t_2;
23374   __pyx_L4_bool_binop_done:;
23375   if (__pyx_t_1) {
23376 
23377     /* "yt/geometry/_selection_routines/region_selector.pxi":172
23378  *         cdef np.float64_t pos[3]
23379  *         if level < self.min_level or level > self.max_level:
23380  *             return 0             # <<<<<<<<<<<<<<
23381  *         if level == self.max_level:
23382  *             this_level = 1
23383  */
23384     __pyx_r = 0;
23385     goto __pyx_L0;
23386 
23387     /* "yt/geometry/_selection_routines/region_selector.pxi":171
23388  *         cdef int total = 0, this_level = 0
23389  *         cdef np.float64_t pos[3]
23390  *         if level < self.min_level or level > self.max_level:             # <<<<<<<<<<<<<<
23391  *             return 0
23392  *         if level == self.max_level:
23393  */
23394   }
23395 
23396   /* "yt/geometry/_selection_routines/region_selector.pxi":173
23397  *         if level < self.min_level or level > self.max_level:
23398  *             return 0
23399  *         if level == self.max_level:             # <<<<<<<<<<<<<<
23400  *             this_level = 1
23401  *         cdef np.int64_t si[3]
23402  */
23403   __pyx_t_1 = ((__pyx_v_level == __pyx_v_self->__pyx_base.max_level) != 0);
23404   if (__pyx_t_1) {
23405 
23406     /* "yt/geometry/_selection_routines/region_selector.pxi":174
23407  *             return 0
23408  *         if level == self.max_level:
23409  *             this_level = 1             # <<<<<<<<<<<<<<
23410  *         cdef np.int64_t si[3]
23411  *         cdef np.int64_t ei[3]
23412  */
23413     __pyx_v_this_level = 1;
23414 
23415     /* "yt/geometry/_selection_routines/region_selector.pxi":173
23416  *         if level < self.min_level or level > self.max_level:
23417  *             return 0
23418  *         if level == self.max_level:             # <<<<<<<<<<<<<<
23419  *             this_level = 1
23420  *         cdef np.int64_t si[3]
23421  */
23422   }
23423 
23424   /* "yt/geometry/_selection_routines/region_selector.pxi":177
23425  *         cdef np.int64_t si[3]
23426  *         cdef np.int64_t ei[3]
23427  *         for i in range(3):             # <<<<<<<<<<<<<<
23428  *             if not self.check_period[i]:
23429  *                 si[i] = <np.int64_t> ((self.left_edge[i] - left_edge[i])/dds[i])
23430  */
23431   for (__pyx_t_3 = 0; __pyx_t_3 < 3; __pyx_t_3+=1) {
23432     __pyx_v_i = __pyx_t_3;
23433 
23434     /* "yt/geometry/_selection_routines/region_selector.pxi":178
23435  *         cdef np.int64_t ei[3]
23436  *         for i in range(3):
23437  *             if not self.check_period[i]:             # <<<<<<<<<<<<<<
23438  *                 si[i] = <np.int64_t> ((self.left_edge[i] - left_edge[i])/dds[i])
23439  *                 ei[i] = <np.int64_t> ((self.right_edge[i] - left_edge[i])/dds[i])
23440  */
23441     __pyx_t_1 = ((!((__pyx_v_self->check_period[__pyx_v_i]) != 0)) != 0);
23442     if (__pyx_t_1) {
23443 
23444       /* "yt/geometry/_selection_routines/region_selector.pxi":179
23445  *         for i in range(3):
23446  *             if not self.check_period[i]:
23447  *                 si[i] = <np.int64_t> ((self.left_edge[i] - left_edge[i])/dds[i])             # <<<<<<<<<<<<<<
23448  *                 ei[i] = <np.int64_t> ((self.right_edge[i] - left_edge[i])/dds[i])
23449  *                 si[i] = iclip(si[i] - 1, 0, dim[i])
23450  */
23451       (__pyx_v_si[__pyx_v_i]) = ((__pyx_t_5numpy_int64_t)(((__pyx_v_self->left_edge[__pyx_v_i]) - (__pyx_v_left_edge[__pyx_v_i])) / (__pyx_v_dds[__pyx_v_i])));
23452 
23453       /* "yt/geometry/_selection_routines/region_selector.pxi":180
23454  *             if not self.check_period[i]:
23455  *                 si[i] = <np.int64_t> ((self.left_edge[i] - left_edge[i])/dds[i])
23456  *                 ei[i] = <np.int64_t> ((self.right_edge[i] - left_edge[i])/dds[i])             # <<<<<<<<<<<<<<
23457  *                 si[i] = iclip(si[i] - 1, 0, dim[i])
23458  *                 ei[i] = iclip(ei[i] + 1, 0, dim[i])
23459  */
23460       (__pyx_v_ei[__pyx_v_i]) = ((__pyx_t_5numpy_int64_t)(((__pyx_v_self->right_edge[__pyx_v_i]) - (__pyx_v_left_edge[__pyx_v_i])) / (__pyx_v_dds[__pyx_v_i])));
23461 
23462       /* "yt/geometry/_selection_routines/region_selector.pxi":181
23463  *                 si[i] = <np.int64_t> ((self.left_edge[i] - left_edge[i])/dds[i])
23464  *                 ei[i] = <np.int64_t> ((self.right_edge[i] - left_edge[i])/dds[i])
23465  *                 si[i] = iclip(si[i] - 1, 0, dim[i])             # <<<<<<<<<<<<<<
23466  *                 ei[i] = iclip(ei[i] + 1, 0, dim[i])
23467  *             else:
23468  */
23469       (__pyx_v_si[__pyx_v_i]) = __pyx_f_2yt_9utilities_3lib_8fp_utils_iclip(((__pyx_v_si[__pyx_v_i]) - 1), 0, (__pyx_v_dim[__pyx_v_i]));
23470 
23471       /* "yt/geometry/_selection_routines/region_selector.pxi":182
23472  *                 ei[i] = <np.int64_t> ((self.right_edge[i] - left_edge[i])/dds[i])
23473  *                 si[i] = iclip(si[i] - 1, 0, dim[i])
23474  *                 ei[i] = iclip(ei[i] + 1, 0, dim[i])             # <<<<<<<<<<<<<<
23475  *             else:
23476  *                 si[i] = 0
23477  */
23478       (__pyx_v_ei[__pyx_v_i]) = __pyx_f_2yt_9utilities_3lib_8fp_utils_iclip(((__pyx_v_ei[__pyx_v_i]) + 1), 0, (__pyx_v_dim[__pyx_v_i]));
23479 
23480       /* "yt/geometry/_selection_routines/region_selector.pxi":178
23481  *         cdef np.int64_t ei[3]
23482  *         for i in range(3):
23483  *             if not self.check_period[i]:             # <<<<<<<<<<<<<<
23484  *                 si[i] = <np.int64_t> ((self.left_edge[i] - left_edge[i])/dds[i])
23485  *                 ei[i] = <np.int64_t> ((self.right_edge[i] - left_edge[i])/dds[i])
23486  */
23487       goto __pyx_L9;
23488     }
23489 
23490     /* "yt/geometry/_selection_routines/region_selector.pxi":184
23491  *                 ei[i] = iclip(ei[i] + 1, 0, dim[i])
23492  *             else:
23493  *                 si[i] = 0             # <<<<<<<<<<<<<<
23494  *                 ei[i] = dim[i]
23495  *         with nogil:
23496  */
23497     /*else*/ {
23498       (__pyx_v_si[__pyx_v_i]) = 0;
23499 
23500       /* "yt/geometry/_selection_routines/region_selector.pxi":185
23501  *             else:
23502  *                 si[i] = 0
23503  *                 ei[i] = dim[i]             # <<<<<<<<<<<<<<
23504  *         with nogil:
23505  *
23506  */
23507       (__pyx_v_ei[__pyx_v_i]) = (__pyx_v_dim[__pyx_v_i]);
23508     }
23509     __pyx_L9:;
23510   }
23511 
23512   /* "yt/geometry/_selection_routines/region_selector.pxi":186
23513  *                 si[i] = 0
23514  *                 ei[i] = dim[i]
23515  *         with nogil:             # <<<<<<<<<<<<<<
23516  *
23517  *             for i in range(si[0], ei[0]):
23518  */
23519   {
23520       #ifdef WITH_THREAD
23521       PyThreadState *_save;
23522       Py_UNBLOCK_THREADS
23523       __Pyx_FastGIL_Remember();
23524       #endif
23525       /*try:*/ {
23526 
23527         /* "yt/geometry/_selection_routines/region_selector.pxi":188
23528  *         with nogil:
23529  *
23530  *             for i in range(si[0], ei[0]):             # <<<<<<<<<<<<<<
23531  *                 pos[0] = left_edge[0] + (i + 0.5) * dds[0]
23532  *                 for j in range(si[1], ei[1]):
23533  */
23534         __pyx_t_4 = (__pyx_v_ei[0]);
23535         __pyx_t_5 = __pyx_t_4;
23536         for (__pyx_t_3 = (__pyx_v_si[0]); __pyx_t_3 < __pyx_t_5; __pyx_t_3+=1) {
23537           __pyx_v_i = __pyx_t_3;
23538 
23539           /* "yt/geometry/_selection_routines/region_selector.pxi":189
23540  *
23541  *             for i in range(si[0], ei[0]):
23542  *                 pos[0] = left_edge[0] + (i + 0.5) * dds[0]             # <<<<<<<<<<<<<<
23543  *                 for j in range(si[1], ei[1]):
23544  *                     pos[1] = left_edge[1] + (j + 0.5) * dds[1]
23545  */
23546           (__pyx_v_pos[0]) = ((__pyx_v_left_edge[0]) + ((__pyx_v_i + 0.5) * (__pyx_v_dds[0])));
23547 
23548           /* "yt/geometry/_selection_routines/region_selector.pxi":190
23549  *             for i in range(si[0], ei[0]):
23550  *                 pos[0] = left_edge[0] + (i + 0.5) * dds[0]
23551  *                 for j in range(si[1], ei[1]):             # <<<<<<<<<<<<<<
23552  *                     pos[1] = left_edge[1] + (j + 0.5) * dds[1]
23553  *                     for k in range(si[2], ei[2]):
23554  */
23555           __pyx_t_6 = (__pyx_v_ei[1]);
23556           __pyx_t_7 = __pyx_t_6;
23557           for (__pyx_t_8 = (__pyx_v_si[1]); __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
23558             __pyx_v_j = __pyx_t_8;
23559 
23560             /* "yt/geometry/_selection_routines/region_selector.pxi":191
23561  *                 pos[0] = left_edge[0] + (i + 0.5) * dds[0]
23562  *                 for j in range(si[1], ei[1]):
23563  *                     pos[1] = left_edge[1] + (j + 0.5) * dds[1]             # <<<<<<<<<<<<<<
23564  *                     for k in range(si[2], ei[2]):
23565  *                         pos[2] = left_edge[2] + (k + 0.5) * dds[2]
23566  */
23567             (__pyx_v_pos[1]) = ((__pyx_v_left_edge[1]) + ((__pyx_v_j + 0.5) * (__pyx_v_dds[1])));
23568 
23569             /* "yt/geometry/_selection_routines/region_selector.pxi":192
23570  *                 for j in range(si[1], ei[1]):
23571  *                     pos[1] = left_edge[1] + (j + 0.5) * dds[1]
23572  *                     for k in range(si[2], ei[2]):             # <<<<<<<<<<<<<<
23573  *                         pos[2] = left_edge[2] + (k + 0.5) * dds[2]
23574  *                         if child_mask[i, j, k] == 1 or this_level == 1:
23575  */
23576             __pyx_t_9 = (__pyx_v_ei[2]);
23577             __pyx_t_10 = __pyx_t_9;
23578             for (__pyx_t_11 = (__pyx_v_si[2]); __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
23579               __pyx_v_k = __pyx_t_11;
23580 
23581               /* "yt/geometry/_selection_routines/region_selector.pxi":193
23582  *                     pos[1] = left_edge[1] + (j + 0.5) * dds[1]
23583  *                     for k in range(si[2], ei[2]):
23584  *                         pos[2] = left_edge[2] + (k + 0.5) * dds[2]             # <<<<<<<<<<<<<<
23585  *                         if child_mask[i, j, k] == 1 or this_level == 1:
23586  *                             mask[i, j, k] = self.select_cell(pos, dds)
23587  */
23588               (__pyx_v_pos[2]) = ((__pyx_v_left_edge[2]) + ((__pyx_v_k + 0.5) * (__pyx_v_dds[2])));
23589 
23590               /* "yt/geometry/_selection_routines/region_selector.pxi":194
23591  *                     for k in range(si[2], ei[2]):
23592  *                         pos[2] = left_edge[2] + (k + 0.5) * dds[2]
23593  *                         if child_mask[i, j, k] == 1 or this_level == 1:             # <<<<<<<<<<<<<<
23594  *                             mask[i, j, k] = self.select_cell(pos, dds)
23595  *                             total += mask[i, j, k]
23596  */
23597               __pyx_t_12 = __pyx_v_i;
23598               __pyx_t_13 = __pyx_v_j;
23599               __pyx_t_14 = __pyx_v_k;
23600               __pyx_t_2 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_child_mask.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_child_mask.diminfo[1].strides, __pyx_t_14, __pyx_pybuffernd_child_mask.diminfo[2].strides)) == 1) != 0);
23601               if (!__pyx_t_2) {
23602               } else {
23603                 __pyx_t_1 = __pyx_t_2;
23604                 goto __pyx_L20_bool_binop_done;
23605               }
23606               __pyx_t_2 = ((__pyx_v_this_level == 1) != 0);
23607               __pyx_t_1 = __pyx_t_2;
23608               __pyx_L20_bool_binop_done:;
23609               if (__pyx_t_1) {
23610 
23611                 /* "yt/geometry/_selection_routines/region_selector.pxi":195
23612  *                         pos[2] = left_edge[2] + (k + 0.5) * dds[2]
23613  *                         if child_mask[i, j, k] == 1 or this_level == 1:
23614  *                             mask[i, j, k] = self.select_cell(pos, dds)             # <<<<<<<<<<<<<<
23615  *                             total += mask[i, j, k]
23616  *         return total
23617  */
23618                 __pyx_t_15 = __pyx_v_i;
23619                 __pyx_t_16 = __pyx_v_j;
23620                 __pyx_t_17 = __pyx_v_k;
23621                 *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_15, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_16, __pyx_pybuffernd_mask.diminfo[1].strides, __pyx_t_17, __pyx_pybuffernd_mask.diminfo[2].strides) = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.select_cell(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_pos, __pyx_v_dds);
23622 
23623                 /* "yt/geometry/_selection_routines/region_selector.pxi":196
23624  *                         if child_mask[i, j, k] == 1 or this_level == 1:
23625  *                             mask[i, j, k] = self.select_cell(pos, dds)
23626  *                             total += mask[i, j, k]             # <<<<<<<<<<<<<<
23627  *         return total
23628  *
23629  */
23630                 __pyx_t_18 = __pyx_v_i;
23631                 __pyx_t_19 = __pyx_v_j;
23632                 __pyx_t_20 = __pyx_v_k;
23633                 __pyx_v_total = (__pyx_v_total + (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_18, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_19, __pyx_pybuffernd_mask.diminfo[1].strides, __pyx_t_20, __pyx_pybuffernd_mask.diminfo[2].strides)));
23634 
23635                 /* "yt/geometry/_selection_routines/region_selector.pxi":194
23636  *                     for k in range(si[2], ei[2]):
23637  *                         pos[2] = left_edge[2] + (k + 0.5) * dds[2]
23638  *                         if child_mask[i, j, k] == 1 or this_level == 1:             # <<<<<<<<<<<<<<
23639  *                             mask[i, j, k] = self.select_cell(pos, dds)
23640  *                             total += mask[i, j, k]
23641  */
23642               }
23643             }
23644           }
23645         }
23646       }
23647 
23648       /* "yt/geometry/_selection_routines/region_selector.pxi":186
23649  *                 si[i] = 0
23650  *                 ei[i] = dim[i]
23651  *         with nogil:             # <<<<<<<<<<<<<<
23652  *
23653  *             for i in range(si[0], ei[0]):
23654  */
23655       /*finally:*/ {
23656         /*normal exit:*/{
23657           #ifdef WITH_THREAD
23658           __Pyx_FastGIL_Forget();
23659           Py_BLOCK_THREADS
23660           #endif
23661           goto __pyx_L12;
23662         }
23663         __pyx_L12:;
23664       }
23665   }
23666 
23667   /* "yt/geometry/_selection_routines/region_selector.pxi":197
23668  *                             mask[i, j, k] = self.select_cell(pos, dds)
23669  *                             total += mask[i, j, k]
23670  *         return total             # <<<<<<<<<<<<<<
23671  *
23672  *     def _hash_vals(self):
23673  */
23674   __pyx_r = __pyx_v_total;
23675   goto __pyx_L0;
23676 
23677   /* "yt/geometry/_selection_routines/region_selector.pxi":162
23678  *     @cython.wraparound(False)
23679  *     @cython.cdivision(True)
23680  *     cdef int fill_mask_selector(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
23681  *                                 np.float64_t right_edge[3],
23682  *                                 np.float64_t dds[3], int dim[3],
23683  */
23684 
23685   /* function exit code */
23686   __pyx_L1_error:;
23687   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
23688     __Pyx_PyThreadState_declare
23689     __Pyx_PyThreadState_assign
23690     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
23691     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
23692     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
23693   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
23694   __Pyx_WriteUnraisable("yt.geometry.selection_routines.RegionSelector.fill_mask_selector", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
23695   __pyx_r = 0;
23696   goto __pyx_L2;
23697   __pyx_L0:;
23698   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
23699   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
23700   __pyx_L2:;
23701   __Pyx_RefNannyFinishContext();
23702   return __pyx_r;
23703 }
23704 
23705 /* "yt/geometry/_selection_routines/region_selector.pxi":199
23706  *         return total
23707  *
23708  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
23709  *         return (("left_edge[0]", self.left_edge[0]),
23710  *                 ("left_edge[1]", self.left_edge[1]),
23711  */
23712 
23713 /* Python wrapper */
23714 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
23715 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
23716   PyObject *__pyx_r = 0;
23717   __Pyx_RefNannyDeclarations
23718   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
23719   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_2_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self));
23720 
23721   /* function exit code */
23722   __Pyx_RefNannyFinishContext();
23723   return __pyx_r;
23724 }
23725 
23726 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self) {
23727   PyObject *__pyx_r = NULL;
23728   __Pyx_RefNannyDeclarations
23729   PyObject *__pyx_t_1 = NULL;
23730   PyObject *__pyx_t_2 = NULL;
23731   PyObject *__pyx_t_3 = NULL;
23732   PyObject *__pyx_t_4 = NULL;
23733   PyObject *__pyx_t_5 = NULL;
23734   PyObject *__pyx_t_6 = NULL;
23735   PyObject *__pyx_t_7 = NULL;
23736   __Pyx_RefNannySetupContext("_hash_vals", 0);
23737 
23738   /* "yt/geometry/_selection_routines/region_selector.pxi":200
23739  *
23740  *     def _hash_vals(self):
23741  *         return (("left_edge[0]", self.left_edge[0]),             # <<<<<<<<<<<<<<
23742  *                 ("left_edge[1]", self.left_edge[1]),
23743  *                 ("left_edge[2]", self.left_edge[2]),
23744  */
23745   __Pyx_XDECREF(__pyx_r);
23746   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->left_edge[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 200, __pyx_L1_error)
23747   __Pyx_GOTREF(__pyx_t_1);
23748   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 200, __pyx_L1_error)
23749   __Pyx_GOTREF(__pyx_t_2);
23750   __Pyx_INCREF(__pyx_kp_s_left_edge_0);
23751   __Pyx_GIVEREF(__pyx_kp_s_left_edge_0);
23752   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_s_left_edge_0);
23753   __Pyx_GIVEREF(__pyx_t_1);
23754   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
23755   __pyx_t_1 = 0;
23756 
23757   /* "yt/geometry/_selection_routines/region_selector.pxi":201
23758  *     def _hash_vals(self):
23759  *         return (("left_edge[0]", self.left_edge[0]),
23760  *                 ("left_edge[1]", self.left_edge[1]),             # <<<<<<<<<<<<<<
23761  *                 ("left_edge[2]", self.left_edge[2]),
23762  *                 ("right_edge[0]", self.right_edge[0]),
23763  */
23764   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->left_edge[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 201, __pyx_L1_error)
23765   __Pyx_GOTREF(__pyx_t_1);
23766   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 201, __pyx_L1_error)
23767   __Pyx_GOTREF(__pyx_t_3);
23768   __Pyx_INCREF(__pyx_kp_s_left_edge_1);
23769   __Pyx_GIVEREF(__pyx_kp_s_left_edge_1);
23770   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_left_edge_1);
23771   __Pyx_GIVEREF(__pyx_t_1);
23772   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
23773   __pyx_t_1 = 0;
23774 
23775   /* "yt/geometry/_selection_routines/region_selector.pxi":202
23776  *         return (("left_edge[0]", self.left_edge[0]),
23777  *                 ("left_edge[1]", self.left_edge[1]),
23778  *                 ("left_edge[2]", self.left_edge[2]),             # <<<<<<<<<<<<<<
23779  *                 ("right_edge[0]", self.right_edge[0]),
23780  *                 ("right_edge[1]", self.right_edge[1]),
23781  */
23782   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->left_edge[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 202, __pyx_L1_error)
23783   __Pyx_GOTREF(__pyx_t_1);
23784   __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 202, __pyx_L1_error)
23785   __Pyx_GOTREF(__pyx_t_4);
23786   __Pyx_INCREF(__pyx_kp_s_left_edge_2);
23787   __Pyx_GIVEREF(__pyx_kp_s_left_edge_2);
23788   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_s_left_edge_2);
23789   __Pyx_GIVEREF(__pyx_t_1);
23790   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
23791   __pyx_t_1 = 0;
23792 
23793   /* "yt/geometry/_selection_routines/region_selector.pxi":203
23794  *                 ("left_edge[1]", self.left_edge[1]),
23795  *                 ("left_edge[2]", self.left_edge[2]),
23796  *                 ("right_edge[0]", self.right_edge[0]),             # <<<<<<<<<<<<<<
23797  *                 ("right_edge[1]", self.right_edge[1]),
23798  *                 ("right_edge[2]", self.right_edge[2]))
23799  */
23800   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->right_edge[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 203, __pyx_L1_error)
23801   __Pyx_GOTREF(__pyx_t_1);
23802   __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 203, __pyx_L1_error)
23803   __Pyx_GOTREF(__pyx_t_5);
23804   __Pyx_INCREF(__pyx_kp_s_right_edge_0);
23805   __Pyx_GIVEREF(__pyx_kp_s_right_edge_0);
23806   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_s_right_edge_0);
23807   __Pyx_GIVEREF(__pyx_t_1);
23808   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
23809   __pyx_t_1 = 0;
23810 
23811   /* "yt/geometry/_selection_routines/region_selector.pxi":204
23812  *                 ("left_edge[2]", self.left_edge[2]),
23813  *                 ("right_edge[0]", self.right_edge[0]),
23814  *                 ("right_edge[1]", self.right_edge[1]),             # <<<<<<<<<<<<<<
23815  *                 ("right_edge[2]", self.right_edge[2]))
23816  *
23817  */
23818   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->right_edge[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 204, __pyx_L1_error)
23819   __Pyx_GOTREF(__pyx_t_1);
23820   __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 204, __pyx_L1_error)
23821   __Pyx_GOTREF(__pyx_t_6);
23822   __Pyx_INCREF(__pyx_kp_s_right_edge_1);
23823   __Pyx_GIVEREF(__pyx_kp_s_right_edge_1);
23824   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_s_right_edge_1);
23825   __Pyx_GIVEREF(__pyx_t_1);
23826   PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
23827   __pyx_t_1 = 0;
23828 
23829   /* "yt/geometry/_selection_routines/region_selector.pxi":205
23830  *                 ("right_edge[0]", self.right_edge[0]),
23831  *                 ("right_edge[1]", self.right_edge[1]),
23832  *                 ("right_edge[2]", self.right_edge[2]))             # <<<<<<<<<<<<<<
23833  *
23834  *     def _get_state_attnames(self):
23835  */
23836   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->right_edge[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 205, __pyx_L1_error)
23837   __Pyx_GOTREF(__pyx_t_1);
23838   __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 205, __pyx_L1_error)
23839   __Pyx_GOTREF(__pyx_t_7);
23840   __Pyx_INCREF(__pyx_kp_s_right_edge_2);
23841   __Pyx_GIVEREF(__pyx_kp_s_right_edge_2);
23842   PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_s_right_edge_2);
23843   __Pyx_GIVEREF(__pyx_t_1);
23844   PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
23845   __pyx_t_1 = 0;
23846 
23847   /* "yt/geometry/_selection_routines/region_selector.pxi":200
23848  *
23849  *     def _hash_vals(self):
23850  *         return (("left_edge[0]", self.left_edge[0]),             # <<<<<<<<<<<<<<
23851  *                 ("left_edge[1]", self.left_edge[1]),
23852  *                 ("left_edge[2]", self.left_edge[2]),
23853  */
23854   __pyx_t_1 = PyTuple_New(6); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 200, __pyx_L1_error)
23855   __Pyx_GOTREF(__pyx_t_1);
23856   __Pyx_GIVEREF(__pyx_t_2);
23857   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
23858   __Pyx_GIVEREF(__pyx_t_3);
23859   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
23860   __Pyx_GIVEREF(__pyx_t_4);
23861   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
23862   __Pyx_GIVEREF(__pyx_t_5);
23863   PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_5);
23864   __Pyx_GIVEREF(__pyx_t_6);
23865   PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_6);
23866   __Pyx_GIVEREF(__pyx_t_7);
23867   PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_7);
23868   __pyx_t_2 = 0;
23869   __pyx_t_3 = 0;
23870   __pyx_t_4 = 0;
23871   __pyx_t_5 = 0;
23872   __pyx_t_6 = 0;
23873   __pyx_t_7 = 0;
23874   __pyx_r = __pyx_t_1;
23875   __pyx_t_1 = 0;
23876   goto __pyx_L0;
23877 
23878   /* "yt/geometry/_selection_routines/region_selector.pxi":199
23879  *         return total
23880  *
23881  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
23882  *         return (("left_edge[0]", self.left_edge[0]),
23883  *                 ("left_edge[1]", self.left_edge[1]),
23884  */
23885 
23886   /* function exit code */
23887   __pyx_L1_error:;
23888   __Pyx_XDECREF(__pyx_t_1);
23889   __Pyx_XDECREF(__pyx_t_2);
23890   __Pyx_XDECREF(__pyx_t_3);
23891   __Pyx_XDECREF(__pyx_t_4);
23892   __Pyx_XDECREF(__pyx_t_5);
23893   __Pyx_XDECREF(__pyx_t_6);
23894   __Pyx_XDECREF(__pyx_t_7);
23895   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
23896   __pyx_r = NULL;
23897   __pyx_L0:;
23898   __Pyx_XGIVEREF(__pyx_r);
23899   __Pyx_RefNannyFinishContext();
23900   return __pyx_r;
23901 }
23902 
23903 /* "yt/geometry/_selection_routines/region_selector.pxi":207
23904  *                 ("right_edge[2]", self.right_edge[2]))
23905  *
23906  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
23907  *         return ('left_edge', 'right_edge', 'right_edge_shift', 'check_period',
23908  *                 'is_all_data', 'loose_selection')
23909  */
23910 
23911 /* Python wrapper */
23912 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_5_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
23913 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_5_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
23914   PyObject *__pyx_r = 0;
23915   __Pyx_RefNannyDeclarations
23916   __Pyx_RefNannySetupContext("_get_state_attnames (wrapper)", 0);
23917   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_4_get_state_attnames(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self));
23918 
23919   /* function exit code */
23920   __Pyx_RefNannyFinishContext();
23921   return __pyx_r;
23922 }
23923 
23924 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_4_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self) {
23925   PyObject *__pyx_r = NULL;
23926   __Pyx_RefNannyDeclarations
23927   __Pyx_RefNannySetupContext("_get_state_attnames", 0);
23928 
23929   /* "yt/geometry/_selection_routines/region_selector.pxi":208
23930  *
23931  *     def _get_state_attnames(self):
23932  *         return ('left_edge', 'right_edge', 'right_edge_shift', 'check_period',             # <<<<<<<<<<<<<<
23933  *                 'is_all_data', 'loose_selection')
23934  *
23935  */
23936   __Pyx_XDECREF(__pyx_r);
23937   __Pyx_INCREF(__pyx_tuple__16);
23938   __pyx_r = __pyx_tuple__16;
23939   goto __pyx_L0;
23940 
23941   /* "yt/geometry/_selection_routines/region_selector.pxi":207
23942  *                 ("right_edge[2]", self.right_edge[2]))
23943  *
23944  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
23945  *         return ('left_edge', 'right_edge', 'right_edge_shift', 'check_period',
23946  *                 'is_all_data', 'loose_selection')
23947  */
23948 
23949   /* function exit code */
23950   __pyx_L0:;
23951   __Pyx_XGIVEREF(__pyx_r);
23952   __Pyx_RefNannyFinishContext();
23953   return __pyx_r;
23954 }
23955 
23956 /* "yt/geometry/_selection_routines/region_selector.pxi":2
23957  * cdef class RegionSelector(SelectorObject):
23958  *     cdef public np.float64_t left_edge[3]             # <<<<<<<<<<<<<<
23959  *     cdef public np.float64_t right_edge[3]
23960  *     cdef public np.float64_t right_edge_shift[3]
23961  */
23962 
23963 /* Python wrapper */
23964 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_9left_edge_1__get__(PyObject *__pyx_v_self); /*proto*/
23965 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_9left_edge_1__get__(PyObject *__pyx_v_self) {
23966   PyObject *__pyx_r = 0;
23967   __Pyx_RefNannyDeclarations
23968   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
23969   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_9left_edge___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self));
23970 
23971   /* function exit code */
23972   __Pyx_RefNannyFinishContext();
23973   return __pyx_r;
23974 }
23975 
23976 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_9left_edge___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self) {
23977   PyObject *__pyx_r = NULL;
23978   __Pyx_RefNannyDeclarations
23979   PyObject *__pyx_t_1 = NULL;
23980   __Pyx_RefNannySetupContext("__get__", 0);
23981   __Pyx_XDECREF(__pyx_r);
23982   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->left_edge, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 2, __pyx_L1_error)
23983   __Pyx_GOTREF(__pyx_t_1);
23984   __pyx_r = __pyx_t_1;
23985   __pyx_t_1 = 0;
23986   goto __pyx_L0;
23987 
23988   /* function exit code */
23989   __pyx_L1_error:;
23990   __Pyx_XDECREF(__pyx_t_1);
23991   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.left_edge.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
23992   __pyx_r = NULL;
23993   __pyx_L0:;
23994   __Pyx_XGIVEREF(__pyx_r);
23995   __Pyx_RefNannyFinishContext();
23996   return __pyx_r;
23997 }
23998 
23999 /* Python wrapper */
24000 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_9left_edge_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
24001 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_9left_edge_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
24002   int __pyx_r;
24003   __Pyx_RefNannyDeclarations
24004   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
24005   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_9left_edge_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
24006 
24007   /* function exit code */
24008   __Pyx_RefNannyFinishContext();
24009   return __pyx_r;
24010 }
24011 
24012 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_9left_edge_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_value) {
24013   int __pyx_r;
24014   __Pyx_RefNannyDeclarations
24015   __pyx_t_5numpy_float64_t __pyx_t_1[3];
24016   __Pyx_RefNannySetupContext("__set__", 0);
24017   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(7, 2, __pyx_L1_error)
24018   memcpy(&(__pyx_v_self->left_edge[0]), __pyx_t_1, sizeof(__pyx_v_self->left_edge[0]) * (3));
24019 
24020   /* function exit code */
24021   __pyx_r = 0;
24022   goto __pyx_L0;
24023   __pyx_L1_error:;
24024   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.left_edge.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24025   __pyx_r = -1;
24026   __pyx_L0:;
24027   __Pyx_RefNannyFinishContext();
24028   return __pyx_r;
24029 }
24030 
24031 /* "yt/geometry/_selection_routines/region_selector.pxi":3
24032  * cdef class RegionSelector(SelectorObject):
24033  *     cdef public np.float64_t left_edge[3]
24034  *     cdef public np.float64_t right_edge[3]             # <<<<<<<<<<<<<<
24035  *     cdef public np.float64_t right_edge_shift[3]
24036  *     cdef public bint is_all_data
24037  */
24038 
24039 /* Python wrapper */
24040 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_10right_edge_1__get__(PyObject *__pyx_v_self); /*proto*/
24041 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_10right_edge_1__get__(PyObject *__pyx_v_self) {
24042   PyObject *__pyx_r = 0;
24043   __Pyx_RefNannyDeclarations
24044   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
24045   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_10right_edge___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self));
24046 
24047   /* function exit code */
24048   __Pyx_RefNannyFinishContext();
24049   return __pyx_r;
24050 }
24051 
24052 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_10right_edge___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self) {
24053   PyObject *__pyx_r = NULL;
24054   __Pyx_RefNannyDeclarations
24055   PyObject *__pyx_t_1 = NULL;
24056   __Pyx_RefNannySetupContext("__get__", 0);
24057   __Pyx_XDECREF(__pyx_r);
24058   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->right_edge, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 3, __pyx_L1_error)
24059   __Pyx_GOTREF(__pyx_t_1);
24060   __pyx_r = __pyx_t_1;
24061   __pyx_t_1 = 0;
24062   goto __pyx_L0;
24063 
24064   /* function exit code */
24065   __pyx_L1_error:;
24066   __Pyx_XDECREF(__pyx_t_1);
24067   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.right_edge.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24068   __pyx_r = NULL;
24069   __pyx_L0:;
24070   __Pyx_XGIVEREF(__pyx_r);
24071   __Pyx_RefNannyFinishContext();
24072   return __pyx_r;
24073 }
24074 
24075 /* Python wrapper */
24076 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_10right_edge_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
24077 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_10right_edge_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
24078   int __pyx_r;
24079   __Pyx_RefNannyDeclarations
24080   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
24081   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_10right_edge_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
24082 
24083   /* function exit code */
24084   __Pyx_RefNannyFinishContext();
24085   return __pyx_r;
24086 }
24087 
24088 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_10right_edge_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_value) {
24089   int __pyx_r;
24090   __Pyx_RefNannyDeclarations
24091   __pyx_t_5numpy_float64_t __pyx_t_1[3];
24092   __Pyx_RefNannySetupContext("__set__", 0);
24093   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(7, 3, __pyx_L1_error)
24094   memcpy(&(__pyx_v_self->right_edge[0]), __pyx_t_1, sizeof(__pyx_v_self->right_edge[0]) * (3));
24095 
24096   /* function exit code */
24097   __pyx_r = 0;
24098   goto __pyx_L0;
24099   __pyx_L1_error:;
24100   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.right_edge.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24101   __pyx_r = -1;
24102   __pyx_L0:;
24103   __Pyx_RefNannyFinishContext();
24104   return __pyx_r;
24105 }
24106 
24107 /* "yt/geometry/_selection_routines/region_selector.pxi":4
24108  *     cdef public np.float64_t left_edge[3]
24109  *     cdef public np.float64_t right_edge[3]
24110  *     cdef public np.float64_t right_edge_shift[3]             # <<<<<<<<<<<<<<
24111  *     cdef public bint is_all_data
24112  *     cdef public bint loose_selection
24113  */
24114 
24115 /* Python wrapper */
24116 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_16right_edge_shift_1__get__(PyObject *__pyx_v_self); /*proto*/
24117 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_16right_edge_shift_1__get__(PyObject *__pyx_v_self) {
24118   PyObject *__pyx_r = 0;
24119   __Pyx_RefNannyDeclarations
24120   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
24121   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_16right_edge_shift___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self));
24122 
24123   /* function exit code */
24124   __Pyx_RefNannyFinishContext();
24125   return __pyx_r;
24126 }
24127 
24128 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_16right_edge_shift___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self) {
24129   PyObject *__pyx_r = NULL;
24130   __Pyx_RefNannyDeclarations
24131   PyObject *__pyx_t_1 = NULL;
24132   __Pyx_RefNannySetupContext("__get__", 0);
24133   __Pyx_XDECREF(__pyx_r);
24134   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->right_edge_shift, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 4, __pyx_L1_error)
24135   __Pyx_GOTREF(__pyx_t_1);
24136   __pyx_r = __pyx_t_1;
24137   __pyx_t_1 = 0;
24138   goto __pyx_L0;
24139 
24140   /* function exit code */
24141   __pyx_L1_error:;
24142   __Pyx_XDECREF(__pyx_t_1);
24143   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.right_edge_shift.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24144   __pyx_r = NULL;
24145   __pyx_L0:;
24146   __Pyx_XGIVEREF(__pyx_r);
24147   __Pyx_RefNannyFinishContext();
24148   return __pyx_r;
24149 }
24150 
24151 /* Python wrapper */
24152 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_16right_edge_shift_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
24153 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_16right_edge_shift_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
24154   int __pyx_r;
24155   __Pyx_RefNannyDeclarations
24156   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
24157   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_16right_edge_shift_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
24158 
24159   /* function exit code */
24160   __Pyx_RefNannyFinishContext();
24161   return __pyx_r;
24162 }
24163 
24164 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_16right_edge_shift_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_value) {
24165   int __pyx_r;
24166   __Pyx_RefNannyDeclarations
24167   __pyx_t_5numpy_float64_t __pyx_t_1[3];
24168   __Pyx_RefNannySetupContext("__set__", 0);
24169   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(7, 4, __pyx_L1_error)
24170   memcpy(&(__pyx_v_self->right_edge_shift[0]), __pyx_t_1, sizeof(__pyx_v_self->right_edge_shift[0]) * (3));
24171 
24172   /* function exit code */
24173   __pyx_r = 0;
24174   goto __pyx_L0;
24175   __pyx_L1_error:;
24176   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.right_edge_shift.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24177   __pyx_r = -1;
24178   __pyx_L0:;
24179   __Pyx_RefNannyFinishContext();
24180   return __pyx_r;
24181 }
24182 
24183 /* "yt/geometry/_selection_routines/region_selector.pxi":5
24184  *     cdef public np.float64_t right_edge[3]
24185  *     cdef public np.float64_t right_edge_shift[3]
24186  *     cdef public bint is_all_data             # <<<<<<<<<<<<<<
24187  *     cdef public bint loose_selection
24188  *     cdef public bint check_period[3]
24189  */
24190 
24191 /* Python wrapper */
24192 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_11is_all_data_1__get__(PyObject *__pyx_v_self); /*proto*/
24193 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_11is_all_data_1__get__(PyObject *__pyx_v_self) {
24194   PyObject *__pyx_r = 0;
24195   __Pyx_RefNannyDeclarations
24196   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
24197   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_11is_all_data___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self));
24198 
24199   /* function exit code */
24200   __Pyx_RefNannyFinishContext();
24201   return __pyx_r;
24202 }
24203 
24204 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_11is_all_data___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self) {
24205   PyObject *__pyx_r = NULL;
24206   __Pyx_RefNannyDeclarations
24207   PyObject *__pyx_t_1 = NULL;
24208   __Pyx_RefNannySetupContext("__get__", 0);
24209   __Pyx_XDECREF(__pyx_r);
24210   __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->is_all_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 5, __pyx_L1_error)
24211   __Pyx_GOTREF(__pyx_t_1);
24212   __pyx_r = __pyx_t_1;
24213   __pyx_t_1 = 0;
24214   goto __pyx_L0;
24215 
24216   /* function exit code */
24217   __pyx_L1_error:;
24218   __Pyx_XDECREF(__pyx_t_1);
24219   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.is_all_data.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24220   __pyx_r = NULL;
24221   __pyx_L0:;
24222   __Pyx_XGIVEREF(__pyx_r);
24223   __Pyx_RefNannyFinishContext();
24224   return __pyx_r;
24225 }
24226 
24227 /* Python wrapper */
24228 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_11is_all_data_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
24229 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_11is_all_data_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
24230   int __pyx_r;
24231   __Pyx_RefNannyDeclarations
24232   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
24233   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_11is_all_data_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
24234 
24235   /* function exit code */
24236   __Pyx_RefNannyFinishContext();
24237   return __pyx_r;
24238 }
24239 
24240 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_11is_all_data_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_value) {
24241   int __pyx_r;
24242   __Pyx_RefNannyDeclarations
24243   int __pyx_t_1;
24244   __Pyx_RefNannySetupContext("__set__", 0);
24245   __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 5, __pyx_L1_error)
24246   __pyx_v_self->is_all_data = __pyx_t_1;
24247 
24248   /* function exit code */
24249   __pyx_r = 0;
24250   goto __pyx_L0;
24251   __pyx_L1_error:;
24252   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.is_all_data.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24253   __pyx_r = -1;
24254   __pyx_L0:;
24255   __Pyx_RefNannyFinishContext();
24256   return __pyx_r;
24257 }
24258 
24259 /* "yt/geometry/_selection_routines/region_selector.pxi":6
24260  *     cdef public np.float64_t right_edge_shift[3]
24261  *     cdef public bint is_all_data
24262  *     cdef public bint loose_selection             # <<<<<<<<<<<<<<
24263  *     cdef public bint check_period[3]
24264  *
24265  */
24266 
24267 /* Python wrapper */
24268 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_15loose_selection_1__get__(PyObject *__pyx_v_self); /*proto*/
24269 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_15loose_selection_1__get__(PyObject *__pyx_v_self) {
24270   PyObject *__pyx_r = 0;
24271   __Pyx_RefNannyDeclarations
24272   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
24273   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_15loose_selection___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self));
24274 
24275   /* function exit code */
24276   __Pyx_RefNannyFinishContext();
24277   return __pyx_r;
24278 }
24279 
24280 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_15loose_selection___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self) {
24281   PyObject *__pyx_r = NULL;
24282   __Pyx_RefNannyDeclarations
24283   PyObject *__pyx_t_1 = NULL;
24284   __Pyx_RefNannySetupContext("__get__", 0);
24285   __Pyx_XDECREF(__pyx_r);
24286   __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->loose_selection); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 6, __pyx_L1_error)
24287   __Pyx_GOTREF(__pyx_t_1);
24288   __pyx_r = __pyx_t_1;
24289   __pyx_t_1 = 0;
24290   goto __pyx_L0;
24291 
24292   /* function exit code */
24293   __pyx_L1_error:;
24294   __Pyx_XDECREF(__pyx_t_1);
24295   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.loose_selection.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24296   __pyx_r = NULL;
24297   __pyx_L0:;
24298   __Pyx_XGIVEREF(__pyx_r);
24299   __Pyx_RefNannyFinishContext();
24300   return __pyx_r;
24301 }
24302 
24303 /* Python wrapper */
24304 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_15loose_selection_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
24305 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_15loose_selection_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
24306   int __pyx_r;
24307   __Pyx_RefNannyDeclarations
24308   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
24309   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_15loose_selection_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
24310 
24311   /* function exit code */
24312   __Pyx_RefNannyFinishContext();
24313   return __pyx_r;
24314 }
24315 
24316 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_15loose_selection_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_value) {
24317   int __pyx_r;
24318   __Pyx_RefNannyDeclarations
24319   int __pyx_t_1;
24320   __Pyx_RefNannySetupContext("__set__", 0);
24321   __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 6, __pyx_L1_error)
24322   __pyx_v_self->loose_selection = __pyx_t_1;
24323 
24324   /* function exit code */
24325   __pyx_r = 0;
24326   goto __pyx_L0;
24327   __pyx_L1_error:;
24328   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.loose_selection.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24329   __pyx_r = -1;
24330   __pyx_L0:;
24331   __Pyx_RefNannyFinishContext();
24332   return __pyx_r;
24333 }
24334 
24335 /* "yt/geometry/_selection_routines/region_selector.pxi":7
24336  *     cdef public bint is_all_data
24337  *     cdef public bint loose_selection
24338  *     cdef public bint check_period[3]             # <<<<<<<<<<<<<<
24339  *
24340  *     @cython.boundscheck(False)
24341  */
24342 
24343 /* Python wrapper */
24344 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_12check_period_1__get__(PyObject *__pyx_v_self); /*proto*/
24345 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_12check_period_1__get__(PyObject *__pyx_v_self) {
24346   PyObject *__pyx_r = 0;
24347   __Pyx_RefNannyDeclarations
24348   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
24349   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_12check_period___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self));
24350 
24351   /* function exit code */
24352   __Pyx_RefNannyFinishContext();
24353   return __pyx_r;
24354 }
24355 
24356 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_12check_period___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self) {
24357   PyObject *__pyx_r = NULL;
24358   __Pyx_RefNannyDeclarations
24359   PyObject *__pyx_t_1 = NULL;
24360   __Pyx_RefNannySetupContext("__get__", 0);
24361   __Pyx_XDECREF(__pyx_r);
24362   __pyx_t_1 = __Pyx_carray_to_py_int(__pyx_v_self->check_period, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 7, __pyx_L1_error)
24363   __Pyx_GOTREF(__pyx_t_1);
24364   __pyx_r = __pyx_t_1;
24365   __pyx_t_1 = 0;
24366   goto __pyx_L0;
24367 
24368   /* function exit code */
24369   __pyx_L1_error:;
24370   __Pyx_XDECREF(__pyx_t_1);
24371   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.check_period.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24372   __pyx_r = NULL;
24373   __pyx_L0:;
24374   __Pyx_XGIVEREF(__pyx_r);
24375   __Pyx_RefNannyFinishContext();
24376   return __pyx_r;
24377 }
24378 
24379 /* Python wrapper */
24380 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_12check_period_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
24381 static int __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_12check_period_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
24382   int __pyx_r;
24383   __Pyx_RefNannyDeclarations
24384   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
24385   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_12check_period_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
24386 
24387   /* function exit code */
24388   __Pyx_RefNannyFinishContext();
24389   return __pyx_r;
24390 }
24391 
24392 static int __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_12check_period_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, PyObject *__pyx_v_value) {
24393   int __pyx_r;
24394   __Pyx_RefNannyDeclarations
24395   int __pyx_t_1[3];
24396   __Pyx_RefNannySetupContext("__set__", 0);
24397   if (unlikely(__Pyx_carray_from_py_int(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(7, 7, __pyx_L1_error)
24398   memcpy(&(__pyx_v_self->check_period[0]), __pyx_t_1, sizeof(__pyx_v_self->check_period[0]) * (3));
24399 
24400   /* function exit code */
24401   __pyx_r = 0;
24402   goto __pyx_L0;
24403   __pyx_L1_error:;
24404   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.check_period.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24405   __pyx_r = -1;
24406   __pyx_L0:;
24407   __Pyx_RefNannyFinishContext();
24408   return __pyx_r;
24409 }
24410 
24411 /* "(tree fragment)":1
24412  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
24413  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
24414  * def __setstate_cython__(self, __pyx_state):
24415  */
24416 
24417 /* Python wrapper */
24418 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
24419 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
24420   PyObject *__pyx_r = 0;
24421   __Pyx_RefNannyDeclarations
24422   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
24423   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_6__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self));
24424 
24425   /* function exit code */
24426   __Pyx_RefNannyFinishContext();
24427   return __pyx_r;
24428 }
24429 
24430 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self) {
24431   PyObject *__pyx_r = NULL;
24432   __Pyx_RefNannyDeclarations
24433   PyObject *__pyx_t_1 = NULL;
24434   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
24435 
24436   /* "(tree fragment)":2
24437  * def __reduce_cython__(self):
24438  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
24439  * def __setstate_cython__(self, __pyx_state):
24440  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
24441  */
24442   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
24443   __Pyx_GOTREF(__pyx_t_1);
24444   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
24445   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
24446   __PYX_ERR(5, 2, __pyx_L1_error)
24447 
24448   /* "(tree fragment)":1
24449  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
24450  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
24451  * def __setstate_cython__(self, __pyx_state):
24452  */
24453 
24454   /* function exit code */
24455   __pyx_L1_error:;
24456   __Pyx_XDECREF(__pyx_t_1);
24457   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24458   __pyx_r = NULL;
24459   __Pyx_XGIVEREF(__pyx_r);
24460   __Pyx_RefNannyFinishContext();
24461   return __pyx_r;
24462 }
24463 
24464 /* "(tree fragment)":3
24465  * def __reduce_cython__(self):
24466  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
24467  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
24468  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
24469  */
24470 
24471 /* Python wrapper */
24472 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
24473 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
24474   PyObject *__pyx_r = 0;
24475   __Pyx_RefNannyDeclarations
24476   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
24477   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_8__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
24478 
24479   /* function exit code */
24480   __Pyx_RefNannyFinishContext();
24481   return __pyx_r;
24482 }
24483 
24484 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14RegionSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
24485   PyObject *__pyx_r = NULL;
24486   __Pyx_RefNannyDeclarations
24487   PyObject *__pyx_t_1 = NULL;
24488   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
24489 
24490   /* "(tree fragment)":4
24491  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
24492  * def __setstate_cython__(self, __pyx_state):
24493  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
24494  */
24495   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
24496   __Pyx_GOTREF(__pyx_t_1);
24497   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
24498   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
24499   __PYX_ERR(5, 4, __pyx_L1_error)
24500 
24501   /* "(tree fragment)":3
24502  * def __reduce_cython__(self):
24503  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
24504  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
24505  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
24506  */
24507 
24508   /* function exit code */
24509   __pyx_L1_error:;
24510   __Pyx_XDECREF(__pyx_t_1);
24511   __Pyx_AddTraceback("yt.geometry.selection_routines.RegionSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24512   __pyx_r = NULL;
24513   __Pyx_XGIVEREF(__pyx_r);
24514   __Pyx_RefNannyFinishContext();
24515   return __pyx_r;
24516 }
24517 
24518 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":5
24519  *     cdef tuple _conditionals
24520  *
24521  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
24522  *         axis_name = dobj.ds.coordinates.axis_name
24523  *         positions = np.array([dobj['index', axis_name[0]],
24524  */
24525 
24526 /* Python wrapper */
24527 static int __pyx_pw_2yt_8geometry_18selection_routines_17CutRegionSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
24528 static int __pyx_pw_2yt_8geometry_18selection_routines_17CutRegionSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
24529   PyObject *__pyx_v_dobj = 0;
24530   int __pyx_r;
24531   __Pyx_RefNannyDeclarations
24532   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
24533   {
24534     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
24535     PyObject* values[1] = {0};
24536     if (unlikely(__pyx_kwds)) {
24537       Py_ssize_t kw_args;
24538       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
24539       switch (pos_args) {
24540         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
24541         CYTHON_FALLTHROUGH;
24542         case  0: break;
24543         default: goto __pyx_L5_argtuple_error;
24544       }
24545       kw_args = PyDict_Size(__pyx_kwds);
24546       switch (pos_args) {
24547         case  0:
24548         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
24549         else goto __pyx_L5_argtuple_error;
24550       }
24551       if (unlikely(kw_args > 0)) {
24552         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(3, 5, __pyx_L3_error)
24553       }
24554     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
24555       goto __pyx_L5_argtuple_error;
24556     } else {
24557       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
24558     }
24559     __pyx_v_dobj = values[0];
24560   }
24561   goto __pyx_L4_argument_unpacking_done;
24562   __pyx_L5_argtuple_error:;
24563   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(3, 5, __pyx_L3_error)
24564   __pyx_L3_error:;
24565   __Pyx_AddTraceback("yt.geometry.selection_routines.CutRegionSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24566   __Pyx_RefNannyFinishContext();
24567   return -1;
24568   __pyx_L4_argument_unpacking_done:;
24569   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *)__pyx_v_self), __pyx_v_dobj);
24570 
24571   /* function exit code */
24572   __Pyx_RefNannyFinishContext();
24573   return __pyx_r;
24574 }
24575 static PyObject *__pyx_gb_2yt_8geometry_18selection_routines_17CutRegionSelector_8__init___2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
24576 
24577 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":11
24578  *                               dobj['index', axis_name[2]]]).T
24579  *         self._conditionals = tuple(dobj.conditionals)
24580  *         self._positions = set(tuple(position) for position in positions)             # <<<<<<<<<<<<<<
24581  *
24582  *     cdef int select_bbox(self,  np.float64_t left_edge[3],
24583  */
24584 
24585 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector_8__init___genexpr(PyObject *__pyx_self) {
24586   struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr *__pyx_cur_scope;
24587   PyObject *__pyx_r = NULL;
24588   __Pyx_RefNannyDeclarations
24589   __Pyx_RefNannySetupContext("genexpr", 0);
24590   __pyx_cur_scope = (struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr *)__pyx_tp_new_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr(__pyx_ptype_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr, __pyx_empty_tuple, NULL);
24591   if (unlikely(!__pyx_cur_scope)) {
24592     __pyx_cur_scope = ((struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr *)Py_None);
24593     __Pyx_INCREF(Py_None);
24594     __PYX_ERR(3, 11, __pyx_L1_error)
24595   } else {
24596     __Pyx_GOTREF(__pyx_cur_scope);
24597   }
24598   __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *) __pyx_self;
24599   __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
24600   __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
24601   {
24602     __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_2yt_8geometry_18selection_routines_17CutRegionSelector_8__init___2generator, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_init___locals_genexpr, __pyx_n_s_yt_geometry_selection_routines); if (unlikely(!gen)) __PYX_ERR(3, 11, __pyx_L1_error)
24603     __Pyx_DECREF(__pyx_cur_scope);
24604     __Pyx_RefNannyFinishContext();
24605     return (PyObject *) gen;
24606   }
24607 
24608   /* function exit code */
24609   __pyx_L1_error:;
24610   __Pyx_AddTraceback("yt.geometry.selection_routines.CutRegionSelector.__init__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
24611   __pyx_r = NULL;
24612   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
24613   __Pyx_XGIVEREF(__pyx_r);
24614   __Pyx_RefNannyFinishContext();
24615   return __pyx_r;
24616 }
24617 
24618 static PyObject *__pyx_gb_2yt_8geometry_18selection_routines_17CutRegionSelector_8__init___2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
24619 {
24620   struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr *__pyx_cur_scope = ((struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr *)__pyx_generator->closure);
24621   PyObject *__pyx_r = NULL;
24622   PyObject *__pyx_t_1 = NULL;
24623   Py_ssize_t __pyx_t_2;
24624   PyObject *(*__pyx_t_3)(PyObject *);
24625   PyObject *__pyx_t_4 = NULL;
24626   __Pyx_RefNannyDeclarations
24627   __Pyx_RefNannySetupContext("genexpr", 0);
24628   switch (__pyx_generator->resume_label) {
24629     case 0: goto __pyx_L3_first_run;
24630     default: /* CPython raises the right error here */
24631     __Pyx_RefNannyFinishContext();
24632     return NULL;
24633   }
24634   __pyx_L3_first_run:;
24635   if (unlikely(!__pyx_sent_value)) __PYX_ERR(3, 11, __pyx_L1_error)
24636   __pyx_r = PySet_New(NULL); if (unlikely(!__pyx_r)) __PYX_ERR(3, 11, __pyx_L1_error)
24637   __Pyx_GOTREF(__pyx_r);
24638   if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_positions)) { __Pyx_RaiseClosureNameError("positions"); __PYX_ERR(3, 11, __pyx_L1_error) }
24639   if (likely(PyList_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_positions)) || PyTuple_CheckExact(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_positions)) {
24640     __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_positions; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
24641     __pyx_t_3 = NULL;
24642   } else {
24643     __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_positions); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 11, __pyx_L1_error)
24644     __Pyx_GOTREF(__pyx_t_1);
24645     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 11, __pyx_L1_error)
24646   }
24647   for (;;) {
24648     if (likely(!__pyx_t_3)) {
24649       if (likely(PyList_CheckExact(__pyx_t_1))) {
24650         if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
24651         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
24652         __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(3, 11, __pyx_L1_error)
24653         #else
24654         __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 11, __pyx_L1_error)
24655         __Pyx_GOTREF(__pyx_t_4);
24656         #endif
24657       } else {
24658         if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
24659         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
24660         __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(3, 11, __pyx_L1_error)
24661         #else
24662         __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 11, __pyx_L1_error)
24663         __Pyx_GOTREF(__pyx_t_4);
24664         #endif
24665       }
24666     } else {
24667       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
24668       if (unlikely(!__pyx_t_4)) {
24669         PyObject* exc_type = PyErr_Occurred();
24670         if (exc_type) {
24671           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
24672           else __PYX_ERR(3, 11, __pyx_L1_error)
24673         }
24674         break;
24675       }
24676       __Pyx_GOTREF(__pyx_t_4);
24677     }
24678     __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_position);
24679     __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_position, __pyx_t_4);
24680     __Pyx_GIVEREF(__pyx_t_4);
24681     __pyx_t_4 = 0;
24682     __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_cur_scope->__pyx_v_position); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 11, __pyx_L1_error)
24683     __Pyx_GOTREF(__pyx_t_4);
24684     if (unlikely(PySet_Add(__pyx_r, (PyObject*)__pyx_t_4))) __PYX_ERR(3, 11, __pyx_L1_error)
24685     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
24686   }
24687   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
24688   CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
24689 
24690   /* function exit code */
24691   goto __pyx_L0;
24692   __pyx_L1_error:;
24693   __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
24694   __Pyx_XDECREF(__pyx_t_1);
24695   __Pyx_XDECREF(__pyx_t_4);
24696   __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
24697   __pyx_L0:;
24698   __Pyx_XGIVEREF(__pyx_r);
24699   #if !CYTHON_USE_EXC_INFO_STACK
24700   __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
24701   #endif
24702   __pyx_generator->resume_label = -1;
24703   __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
24704   __Pyx_RefNannyFinishContext();
24705   return __pyx_r;
24706 }
24707 
24708 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":5
24709  *     cdef tuple _conditionals
24710  *
24711  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
24712  *         axis_name = dobj.ds.coordinates.axis_name
24713  *         positions = np.array([dobj['index', axis_name[0]],
24714  */
24715 
24716 static int __pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
24717   struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *__pyx_cur_scope;
24718   PyObject *__pyx_v_axis_name = NULL;
24719   int __pyx_r;
24720   __Pyx_RefNannyDeclarations
24721   PyObject *__pyx_t_1 = NULL;
24722   PyObject *__pyx_t_2 = NULL;
24723   PyObject *__pyx_t_3 = NULL;
24724   PyObject *__pyx_t_4 = NULL;
24725   PyObject *__pyx_t_5 = NULL;
24726   PyObject *__pyx_t_6 = NULL;
24727   __Pyx_RefNannySetupContext("__init__", 0);
24728   __pyx_cur_scope = (struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *)__pyx_tp_new_2yt_8geometry_18selection_routines___pyx_scope_struct____init__(__pyx_ptype_2yt_8geometry_18selection_routines___pyx_scope_struct____init__, __pyx_empty_tuple, NULL);
24729   if (unlikely(!__pyx_cur_scope)) {
24730     __pyx_cur_scope = ((struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *)Py_None);
24731     __Pyx_INCREF(Py_None);
24732     __PYX_ERR(3, 5, __pyx_L1_error)
24733   } else {
24734     __Pyx_GOTREF(__pyx_cur_scope);
24735   }
24736 
24737   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":6
24738  *
24739  *     def __init__(self, dobj):
24740  *         axis_name = dobj.ds.coordinates.axis_name             # <<<<<<<<<<<<<<
24741  *         positions = np.array([dobj['index', axis_name[0]],
24742  *                               dobj['index', axis_name[1]],
24743  */
24744   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 6, __pyx_L1_error)
24745   __Pyx_GOTREF(__pyx_t_1);
24746   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_coordinates); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 6, __pyx_L1_error)
24747   __Pyx_GOTREF(__pyx_t_2);
24748   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
24749   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_axis_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 6, __pyx_L1_error)
24750   __Pyx_GOTREF(__pyx_t_1);
24751   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
24752   __pyx_v_axis_name = __pyx_t_1;
24753   __pyx_t_1 = 0;
24754 
24755   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":7
24756  *     def __init__(self, dobj):
24757  *         axis_name = dobj.ds.coordinates.axis_name
24758  *         positions = np.array([dobj['index', axis_name[0]],             # <<<<<<<<<<<<<<
24759  *                               dobj['index', axis_name[1]],
24760  *                               dobj['index', axis_name[2]]]).T
24761  */
24762   __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 7, __pyx_L1_error)
24763   __Pyx_GOTREF(__pyx_t_2);
24764   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_array); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 7, __pyx_L1_error)
24765   __Pyx_GOTREF(__pyx_t_3);
24766   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
24767   __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_axis_name, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 7, __pyx_L1_error)
24768   __Pyx_GOTREF(__pyx_t_2);
24769   __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 7, __pyx_L1_error)
24770   __Pyx_GOTREF(__pyx_t_4);
24771   __Pyx_INCREF(__pyx_n_s_index);
24772   __Pyx_GIVEREF(__pyx_n_s_index);
24773   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_index);
24774   __Pyx_GIVEREF(__pyx_t_2);
24775   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
24776   __pyx_t_2 = 0;
24777   __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_v_dobj, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 7, __pyx_L1_error)
24778   __Pyx_GOTREF(__pyx_t_2);
24779   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
24780 
24781   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":8
24782  *         axis_name = dobj.ds.coordinates.axis_name
24783  *         positions = np.array([dobj['index', axis_name[0]],
24784  *                               dobj['index', axis_name[1]],             # <<<<<<<<<<<<<<
24785  *                               dobj['index', axis_name[2]]]).T
24786  *         self._conditionals = tuple(dobj.conditionals)
24787  */
24788   __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_axis_name, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 8, __pyx_L1_error)
24789   __Pyx_GOTREF(__pyx_t_4);
24790   __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 8, __pyx_L1_error)
24791   __Pyx_GOTREF(__pyx_t_5);
24792   __Pyx_INCREF(__pyx_n_s_index);
24793   __Pyx_GIVEREF(__pyx_n_s_index);
24794   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_index);
24795   __Pyx_GIVEREF(__pyx_t_4);
24796   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
24797   __pyx_t_4 = 0;
24798   __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_v_dobj, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 8, __pyx_L1_error)
24799   __Pyx_GOTREF(__pyx_t_4);
24800   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
24801 
24802   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":9
24803  *         positions = np.array([dobj['index', axis_name[0]],
24804  *                               dobj['index', axis_name[1]],
24805  *                               dobj['index', axis_name[2]]]).T             # <<<<<<<<<<<<<<
24806  *         self._conditionals = tuple(dobj.conditionals)
24807  *         self._positions = set(tuple(position) for position in positions)
24808  */
24809   __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_axis_name, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 9, __pyx_L1_error)
24810   __Pyx_GOTREF(__pyx_t_5);
24811   __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 9, __pyx_L1_error)
24812   __Pyx_GOTREF(__pyx_t_6);
24813   __Pyx_INCREF(__pyx_n_s_index);
24814   __Pyx_GIVEREF(__pyx_n_s_index);
24815   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_index);
24816   __Pyx_GIVEREF(__pyx_t_5);
24817   PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
24818   __pyx_t_5 = 0;
24819   __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_dobj, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 9, __pyx_L1_error)
24820   __Pyx_GOTREF(__pyx_t_5);
24821   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
24822 
24823   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":7
24824  *     def __init__(self, dobj):
24825  *         axis_name = dobj.ds.coordinates.axis_name
24826  *         positions = np.array([dobj['index', axis_name[0]],             # <<<<<<<<<<<<<<
24827  *                               dobj['index', axis_name[1]],
24828  *                               dobj['index', axis_name[2]]]).T
24829  */
24830   __pyx_t_6 = PyList_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 7, __pyx_L1_error)
24831   __Pyx_GOTREF(__pyx_t_6);
24832   __Pyx_GIVEREF(__pyx_t_2);
24833   PyList_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
24834   __Pyx_GIVEREF(__pyx_t_4);
24835   PyList_SET_ITEM(__pyx_t_6, 1, __pyx_t_4);
24836   __Pyx_GIVEREF(__pyx_t_5);
24837   PyList_SET_ITEM(__pyx_t_6, 2, __pyx_t_5);
24838   __pyx_t_2 = 0;
24839   __pyx_t_4 = 0;
24840   __pyx_t_5 = 0;
24841   __pyx_t_5 = NULL;
24842   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
24843     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
24844     if (likely(__pyx_t_5)) {
24845       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
24846       __Pyx_INCREF(__pyx_t_5);
24847       __Pyx_INCREF(function);
24848       __Pyx_DECREF_SET(__pyx_t_3, function);
24849     }
24850   }
24851   __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6);
24852   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
24853   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
24854   if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 7, __pyx_L1_error)
24855   __Pyx_GOTREF(__pyx_t_1);
24856   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
24857 
24858   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":9
24859  *         positions = np.array([dobj['index', axis_name[0]],
24860  *                               dobj['index', axis_name[1]],
24861  *                               dobj['index', axis_name[2]]]).T             # <<<<<<<<<<<<<<
24862  *         self._conditionals = tuple(dobj.conditionals)
24863  *         self._positions = set(tuple(position) for position in positions)
24864  */
24865   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_T); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 9, __pyx_L1_error)
24866   __Pyx_GOTREF(__pyx_t_3);
24867   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
24868   __Pyx_GIVEREF(__pyx_t_3);
24869   __pyx_cur_scope->__pyx_v_positions = __pyx_t_3;
24870   __pyx_t_3 = 0;
24871 
24872   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":10
24873  *                               dobj['index', axis_name[1]],
24874  *                               dobj['index', axis_name[2]]]).T
24875  *         self._conditionals = tuple(dobj.conditionals)             # <<<<<<<<<<<<<<
24876  *         self._positions = set(tuple(position) for position in positions)
24877  *
24878  */
24879   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_conditionals); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 10, __pyx_L1_error)
24880   __Pyx_GOTREF(__pyx_t_3);
24881   __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 10, __pyx_L1_error)
24882   __Pyx_GOTREF(__pyx_t_1);
24883   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
24884   __Pyx_GIVEREF(__pyx_t_1);
24885   __Pyx_GOTREF(__pyx_v_self->_conditionals);
24886   __Pyx_DECREF(__pyx_v_self->_conditionals);
24887   __pyx_v_self->_conditionals = ((PyObject*)__pyx_t_1);
24888   __pyx_t_1 = 0;
24889 
24890   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":11
24891  *                               dobj['index', axis_name[2]]]).T
24892  *         self._conditionals = tuple(dobj.conditionals)
24893  *         self._positions = set(tuple(position) for position in positions)             # <<<<<<<<<<<<<<
24894  *
24895  *     cdef int select_bbox(self,  np.float64_t left_edge[3],
24896  */
24897   __pyx_t_1 = __pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector_8__init___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 11, __pyx_L1_error)
24898   __Pyx_GOTREF(__pyx_t_1);
24899   __pyx_t_3 = __Pyx_Generator_Next(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 11, __pyx_L1_error)
24900   __Pyx_GOTREF(__pyx_t_3);
24901   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
24902   __Pyx_GIVEREF(__pyx_t_3);
24903   __Pyx_GOTREF(__pyx_v_self->_positions);
24904   __Pyx_DECREF(__pyx_v_self->_positions);
24905   __pyx_v_self->_positions = ((PyObject*)__pyx_t_3);
24906   __pyx_t_3 = 0;
24907 
24908   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":5
24909  *     cdef tuple _conditionals
24910  *
24911  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
24912  *         axis_name = dobj.ds.coordinates.axis_name
24913  *         positions = np.array([dobj['index', axis_name[0]],
24914  */
24915 
24916   /* function exit code */
24917   __pyx_r = 0;
24918   goto __pyx_L0;
24919   __pyx_L1_error:;
24920   __Pyx_XDECREF(__pyx_t_1);
24921   __Pyx_XDECREF(__pyx_t_2);
24922   __Pyx_XDECREF(__pyx_t_3);
24923   __Pyx_XDECREF(__pyx_t_4);
24924   __Pyx_XDECREF(__pyx_t_5);
24925   __Pyx_XDECREF(__pyx_t_6);
24926   __Pyx_AddTraceback("yt.geometry.selection_routines.CutRegionSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
24927   __pyx_r = -1;
24928   __pyx_L0:;
24929   __Pyx_XDECREF(__pyx_v_axis_name);
24930   __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
24931   __Pyx_RefNannyFinishContext();
24932   return __pyx_r;
24933 }
24934 
24935 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":13
24936  *         self._positions = set(tuple(position) for position in positions)
24937  *
24938  *     cdef int select_bbox(self,  np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
24939  *                      np.float64_t right_edge[3]) nogil:
24940  *         return 1
24941  */
24942 
24943 static int __pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_bbox(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
24944   int __pyx_r;
24945 
24946   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":15
24947  *     cdef int select_bbox(self,  np.float64_t left_edge[3],
24948  *                      np.float64_t right_edge[3]) nogil:
24949  *         return 1             # <<<<<<<<<<<<<<
24950  *
24951  *     cdef int select_bbox_dge(self,  np.float64_t left_edge[3],
24952  */
24953   __pyx_r = 1;
24954   goto __pyx_L0;
24955 
24956   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":13
24957  *         self._positions = set(tuple(position) for position in positions)
24958  *
24959  *     cdef int select_bbox(self,  np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
24960  *                      np.float64_t right_edge[3]) nogil:
24961  *         return 1
24962  */
24963 
24964   /* function exit code */
24965   __pyx_L0:;
24966   return __pyx_r;
24967 }
24968 
24969 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":17
24970  *         return 1
24971  *
24972  *     cdef int select_bbox_dge(self,  np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
24973  *                      np.float64_t right_edge[3]) nogil:
24974  *         return 1
24975  */
24976 
24977 static int __pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_bbox_dge(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
24978   int __pyx_r;
24979 
24980   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":19
24981  *     cdef int select_bbox_dge(self,  np.float64_t left_edge[3],
24982  *                      np.float64_t right_edge[3]) nogil:
24983  *         return 1             # <<<<<<<<<<<<<<
24984  *
24985  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
24986  */
24987   __pyx_r = 1;
24988   goto __pyx_L0;
24989 
24990   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":17
24991  *         return 1
24992  *
24993  *     cdef int select_bbox_dge(self,  np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
24994  *                      np.float64_t right_edge[3]) nogil:
24995  *         return 1
24996  */
24997 
24998   /* function exit code */
24999   __pyx_L0:;
25000   return __pyx_r;
25001 }
25002 
25003 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":21
25004  *         return 1
25005  *
25006  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
25007  *         with gil:
25008  *             if (pos[0], pos[1], pos[2]) in self._positions:
25009  */
25010 
25011 static int __pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds) {
25012   int __pyx_r;
25013   __Pyx_RefNannyDeclarations
25014   PyObject *__pyx_t_1 = NULL;
25015   PyObject *__pyx_t_2 = NULL;
25016   PyObject *__pyx_t_3 = NULL;
25017   PyObject *__pyx_t_4 = NULL;
25018   int __pyx_t_5;
25019   int __pyx_t_6;
25020   #ifdef WITH_THREAD
25021   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
25022   #endif
25023   __Pyx_RefNannySetupContext("select_cell", 0);
25024   #ifdef WITH_THREAD
25025   __Pyx_PyGILState_Release(__pyx_gilstate_save);
25026   #endif
25027 
25028   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":22
25029  *
25030  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
25031  *         with gil:             # <<<<<<<<<<<<<<
25032  *             if (pos[0], pos[1], pos[2]) in self._positions:
25033  *                 return 1
25034  */
25035   /*try:*/ {
25036     {
25037         #ifdef WITH_THREAD
25038         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
25039         #endif
25040         /*try:*/ {
25041 
25042           /* "yt/geometry/_selection_routines/cut_region_selector.pxi":23
25043  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
25044  *         with gil:
25045  *             if (pos[0], pos[1], pos[2]) in self._positions:             # <<<<<<<<<<<<<<
25046  *                 return 1
25047  *             else:
25048  */
25049           __pyx_t_1 = PyFloat_FromDouble((__pyx_v_pos[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 23, __pyx_L7_error)
25050           __Pyx_GOTREF(__pyx_t_1);
25051           __pyx_t_2 = PyFloat_FromDouble((__pyx_v_pos[1])); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 23, __pyx_L7_error)
25052           __Pyx_GOTREF(__pyx_t_2);
25053           __pyx_t_3 = PyFloat_FromDouble((__pyx_v_pos[2])); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 23, __pyx_L7_error)
25054           __Pyx_GOTREF(__pyx_t_3);
25055           __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 23, __pyx_L7_error)
25056           __Pyx_GOTREF(__pyx_t_4);
25057           __Pyx_GIVEREF(__pyx_t_1);
25058           PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
25059           __Pyx_GIVEREF(__pyx_t_2);
25060           PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
25061           __Pyx_GIVEREF(__pyx_t_3);
25062           PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
25063           __pyx_t_1 = 0;
25064           __pyx_t_2 = 0;
25065           __pyx_t_3 = 0;
25066           if (unlikely(__pyx_v_self->_positions == Py_None)) {
25067             PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
25068             __PYX_ERR(3, 23, __pyx_L7_error)
25069           }
25070           __pyx_t_5 = (__Pyx_PySet_ContainsTF(__pyx_t_4, __pyx_v_self->_positions, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(3, 23, __pyx_L7_error)
25071           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
25072           __pyx_t_6 = (__pyx_t_5 != 0);
25073           if (__pyx_t_6) {
25074 
25075             /* "yt/geometry/_selection_routines/cut_region_selector.pxi":24
25076  *         with gil:
25077  *             if (pos[0], pos[1], pos[2]) in self._positions:
25078  *                 return 1             # <<<<<<<<<<<<<<
25079  *             else:
25080  *                 return 0
25081  */
25082             __pyx_r = 1;
25083             goto __pyx_L6_return;
25084 
25085             /* "yt/geometry/_selection_routines/cut_region_selector.pxi":23
25086  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
25087  *         with gil:
25088  *             if (pos[0], pos[1], pos[2]) in self._positions:             # <<<<<<<<<<<<<<
25089  *                 return 1
25090  *             else:
25091  */
25092           }
25093 
25094           /* "yt/geometry/_selection_routines/cut_region_selector.pxi":26
25095  *                 return 1
25096  *             else:
25097  *                 return 0             # <<<<<<<<<<<<<<
25098  *
25099  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
25100  */
25101           /*else*/ {
25102             __pyx_r = 0;
25103             goto __pyx_L6_return;
25104           }
25105         }
25106 
25107         /* "yt/geometry/_selection_routines/cut_region_selector.pxi":22
25108  *
25109  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
25110  *         with gil:             # <<<<<<<<<<<<<<
25111  *             if (pos[0], pos[1], pos[2]) in self._positions:
25112  *                 return 1
25113  */
25114         /*finally:*/ {
25115           __pyx_L6_return: {
25116             #ifdef WITH_THREAD
25117             __Pyx_PyGILState_Release(__pyx_gilstate_save);
25118             #endif
25119             goto __pyx_L3_return;
25120           }
25121           __pyx_L7_error: {
25122             #ifdef WITH_THREAD
25123             __Pyx_PyGILState_Release(__pyx_gilstate_save);
25124             #endif
25125             goto __pyx_L4_error;
25126           }
25127         }
25128     }
25129   }
25130   /*finally:*/ {
25131     __pyx_L3_return: {
25132       #ifdef WITH_THREAD
25133       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
25134       #endif
25135       goto __pyx_L0;
25136     }
25137     __pyx_L4_error: {
25138       #ifdef WITH_THREAD
25139       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
25140       #endif
25141       goto __pyx_L1_error;
25142     }
25143   }
25144 
25145   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":21
25146  *         return 1
25147  *
25148  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
25149  *         with gil:
25150  *             if (pos[0], pos[1], pos[2]) in self._positions:
25151  */
25152 
25153   /* function exit code */
25154   __pyx_r = 0;
25155   goto __pyx_L0;
25156   __pyx_L1_error:;
25157   __Pyx_XDECREF(__pyx_t_1);
25158   __Pyx_XDECREF(__pyx_t_2);
25159   __Pyx_XDECREF(__pyx_t_3);
25160   __Pyx_XDECREF(__pyx_t_4);
25161   __Pyx_WriteUnraisable("yt.geometry.selection_routines.CutRegionSelector.select_cell", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
25162   __pyx_r = 0;
25163   __pyx_L0:;
25164   #ifdef WITH_THREAD
25165   __Pyx_PyGILState_Release(__pyx_gilstate_save);
25166   #endif
25167   return __pyx_r;
25168 }
25169 
25170 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":28
25171  *                 return 0
25172  *
25173  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
25174  *         return 1
25175  *
25176  */
25177 
25178 static int __pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos) {
25179   int __pyx_r;
25180 
25181   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":29
25182  *
25183  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
25184  *         return 1             # <<<<<<<<<<<<<<
25185  *
25186  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
25187  */
25188   __pyx_r = 1;
25189   goto __pyx_L0;
25190 
25191   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":28
25192  *                 return 0
25193  *
25194  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
25195  *         return 1
25196  *
25197  */
25198 
25199   /* function exit code */
25200   __pyx_L0:;
25201   return __pyx_r;
25202 }
25203 
25204 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":31
25205  *         return 1
25206  *
25207  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
25208  *         return 1
25209  *
25210  */
25211 
25212 static int __pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_sphere(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t __pyx_v_radius) {
25213   int __pyx_r;
25214 
25215   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":32
25216  *
25217  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
25218  *         return 1             # <<<<<<<<<<<<<<
25219  *
25220  *     def _hash_vals(self):
25221  */
25222   __pyx_r = 1;
25223   goto __pyx_L0;
25224 
25225   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":31
25226  *         return 1
25227  *
25228  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
25229  *         return 1
25230  *
25231  */
25232 
25233   /* function exit code */
25234   __pyx_L0:;
25235   return __pyx_r;
25236 }
25237 
25238 /* "yt/geometry/_selection_routines/cut_region_selector.pxi":34
25239  *         return 1
25240  *
25241  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
25242  *         t = ()
25243  *         for i, c in enumerate(self._conditionals):
25244  */
25245 
25246 /* Python wrapper */
25247 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17CutRegionSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
25248 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17CutRegionSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
25249   PyObject *__pyx_r = 0;
25250   __Pyx_RefNannyDeclarations
25251   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
25252   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector_2_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *)__pyx_v_self));
25253 
25254   /* function exit code */
25255   __Pyx_RefNannyFinishContext();
25256   return __pyx_r;
25257 }
25258 
25259 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self) {
25260   PyObject *__pyx_v_t = NULL;
25261   PyObject *__pyx_v_i = NULL;
25262   PyObject *__pyx_v_c = NULL;
25263   PyObject *__pyx_r = NULL;
25264   __Pyx_RefNannyDeclarations
25265   PyObject *__pyx_t_1 = NULL;
25266   PyObject *__pyx_t_2 = NULL;
25267   Py_ssize_t __pyx_t_3;
25268   PyObject *__pyx_t_4 = NULL;
25269   PyObject *__pyx_t_5 = NULL;
25270   __Pyx_RefNannySetupContext("_hash_vals", 0);
25271 
25272   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":35
25273  *
25274  *     def _hash_vals(self):
25275  *         t = ()             # <<<<<<<<<<<<<<
25276  *         for i, c in enumerate(self._conditionals):
25277  *             t += ("conditional[%s]" % i, c)
25278  */
25279   __Pyx_INCREF(__pyx_empty_tuple);
25280   __pyx_v_t = __pyx_empty_tuple;
25281 
25282   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":36
25283  *     def _hash_vals(self):
25284  *         t = ()
25285  *         for i, c in enumerate(self._conditionals):             # <<<<<<<<<<<<<<
25286  *             t += ("conditional[%s]" % i, c)
25287  *         return ("conditionals", t)
25288  */
25289   __Pyx_INCREF(__pyx_int_0);
25290   __pyx_t_1 = __pyx_int_0;
25291   __pyx_t_2 = __pyx_v_self->_conditionals; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
25292   for (;;) {
25293     if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
25294     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
25295     __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_4); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(3, 36, __pyx_L1_error)
25296     #else
25297     __pyx_t_4 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 36, __pyx_L1_error)
25298     __Pyx_GOTREF(__pyx_t_4);
25299     #endif
25300     __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_4);
25301     __pyx_t_4 = 0;
25302     __Pyx_INCREF(__pyx_t_1);
25303     __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
25304     __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 36, __pyx_L1_error)
25305     __Pyx_GOTREF(__pyx_t_4);
25306     __Pyx_DECREF(__pyx_t_1);
25307     __pyx_t_1 = __pyx_t_4;
25308     __pyx_t_4 = 0;
25309 
25310     /* "yt/geometry/_selection_routines/cut_region_selector.pxi":37
25311  *         t = ()
25312  *         for i, c in enumerate(self._conditionals):
25313  *             t += ("conditional[%s]" % i, c)             # <<<<<<<<<<<<<<
25314  *         return ("conditionals", t)
25315  *
25316  */
25317     __pyx_t_4 = __Pyx_PyString_FormatSafe(__pyx_kp_s_conditional_s, __pyx_v_i); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 37, __pyx_L1_error)
25318     __Pyx_GOTREF(__pyx_t_4);
25319     __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 37, __pyx_L1_error)
25320     __Pyx_GOTREF(__pyx_t_5);
25321     __Pyx_GIVEREF(__pyx_t_4);
25322     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
25323     __Pyx_INCREF(__pyx_v_c);
25324     __Pyx_GIVEREF(__pyx_v_c);
25325     PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_c);
25326     __pyx_t_4 = 0;
25327     __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_t, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 37, __pyx_L1_error)
25328     __Pyx_GOTREF(__pyx_t_4);
25329     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
25330     __Pyx_DECREF_SET(__pyx_v_t, ((PyObject*)__pyx_t_4));
25331     __pyx_t_4 = 0;
25332 
25333     /* "yt/geometry/_selection_routines/cut_region_selector.pxi":36
25334  *     def _hash_vals(self):
25335  *         t = ()
25336  *         for i, c in enumerate(self._conditionals):             # <<<<<<<<<<<<<<
25337  *             t += ("conditional[%s]" % i, c)
25338  *         return ("conditionals", t)
25339  */
25340   }
25341   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
25342   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
25343 
25344   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":38
25345  *         for i, c in enumerate(self._conditionals):
25346  *             t += ("conditional[%s]" % i, c)
25347  *         return ("conditionals", t)             # <<<<<<<<<<<<<<
25348  *
25349  * cut_region_selector = CutRegionSelector
25350  */
25351   __Pyx_XDECREF(__pyx_r);
25352   __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 38, __pyx_L1_error)
25353   __Pyx_GOTREF(__pyx_t_1);
25354   __Pyx_INCREF(__pyx_n_s_conditionals);
25355   __Pyx_GIVEREF(__pyx_n_s_conditionals);
25356   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_conditionals);
25357   __Pyx_INCREF(__pyx_v_t);
25358   __Pyx_GIVEREF(__pyx_v_t);
25359   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_t);
25360   __pyx_r = __pyx_t_1;
25361   __pyx_t_1 = 0;
25362   goto __pyx_L0;
25363 
25364   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":34
25365  *         return 1
25366  *
25367  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
25368  *         t = ()
25369  *         for i, c in enumerate(self._conditionals):
25370  */
25371 
25372   /* function exit code */
25373   __pyx_L1_error:;
25374   __Pyx_XDECREF(__pyx_t_1);
25375   __Pyx_XDECREF(__pyx_t_2);
25376   __Pyx_XDECREF(__pyx_t_4);
25377   __Pyx_XDECREF(__pyx_t_5);
25378   __Pyx_AddTraceback("yt.geometry.selection_routines.CutRegionSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
25379   __pyx_r = NULL;
25380   __pyx_L0:;
25381   __Pyx_XDECREF(__pyx_v_t);
25382   __Pyx_XDECREF(__pyx_v_i);
25383   __Pyx_XDECREF(__pyx_v_c);
25384   __Pyx_XGIVEREF(__pyx_r);
25385   __Pyx_RefNannyFinishContext();
25386   return __pyx_r;
25387 }
25388 
25389 /* "(tree fragment)":1
25390  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
25391  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
25392  * def __setstate_cython__(self, __pyx_state):
25393  */
25394 
25395 /* Python wrapper */
25396 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17CutRegionSelector_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
25397 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17CutRegionSelector_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
25398   PyObject *__pyx_r = 0;
25399   __Pyx_RefNannyDeclarations
25400   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
25401   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector_4__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *)__pyx_v_self));
25402 
25403   /* function exit code */
25404   __Pyx_RefNannyFinishContext();
25405   return __pyx_r;
25406 }
25407 
25408 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self) {
25409   PyObject *__pyx_r = NULL;
25410   __Pyx_RefNannyDeclarations
25411   PyObject *__pyx_t_1 = NULL;
25412   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
25413 
25414   /* "(tree fragment)":2
25415  * def __reduce_cython__(self):
25416  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
25417  * def __setstate_cython__(self, __pyx_state):
25418  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
25419  */
25420   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
25421   __Pyx_GOTREF(__pyx_t_1);
25422   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
25423   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
25424   __PYX_ERR(5, 2, __pyx_L1_error)
25425 
25426   /* "(tree fragment)":1
25427  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
25428  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
25429  * def __setstate_cython__(self, __pyx_state):
25430  */
25431 
25432   /* function exit code */
25433   __pyx_L1_error:;
25434   __Pyx_XDECREF(__pyx_t_1);
25435   __Pyx_AddTraceback("yt.geometry.selection_routines.CutRegionSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
25436   __pyx_r = NULL;
25437   __Pyx_XGIVEREF(__pyx_r);
25438   __Pyx_RefNannyFinishContext();
25439   return __pyx_r;
25440 }
25441 
25442 /* "(tree fragment)":3
25443  * def __reduce_cython__(self):
25444  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
25445  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
25446  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
25447  */
25448 
25449 /* Python wrapper */
25450 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17CutRegionSelector_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
25451 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17CutRegionSelector_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
25452   PyObject *__pyx_r = 0;
25453   __Pyx_RefNannyDeclarations
25454   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
25455   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector_6__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
25456 
25457   /* function exit code */
25458   __Pyx_RefNannyFinishContext();
25459   return __pyx_r;
25460 }
25461 
25462 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17CutRegionSelector_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
25463   PyObject *__pyx_r = NULL;
25464   __Pyx_RefNannyDeclarations
25465   PyObject *__pyx_t_1 = NULL;
25466   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
25467 
25468   /* "(tree fragment)":4
25469  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
25470  * def __setstate_cython__(self, __pyx_state):
25471  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
25472  */
25473   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
25474   __Pyx_GOTREF(__pyx_t_1);
25475   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
25476   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
25477   __PYX_ERR(5, 4, __pyx_L1_error)
25478 
25479   /* "(tree fragment)":3
25480  * def __reduce_cython__(self):
25481  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
25482  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
25483  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
25484  */
25485 
25486   /* function exit code */
25487   __pyx_L1_error:;
25488   __Pyx_XDECREF(__pyx_t_1);
25489   __Pyx_AddTraceback("yt.geometry.selection_routines.CutRegionSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
25490   __pyx_r = NULL;
25491   __Pyx_XGIVEREF(__pyx_r);
25492   __Pyx_RefNannyFinishContext();
25493   return __pyx_r;
25494 }
25495 
25496 /* "yt/geometry/_selection_routines/disk_selector.pxi":7
25497  *     cdef public np.float64_t height
25498  *
25499  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
25500  *         cdef int i
25501  *         for i in range(3):
25502  */
25503 
25504 /* Python wrapper */
25505 static int __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
25506 static int __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
25507   PyObject *__pyx_v_dobj = 0;
25508   int __pyx_r;
25509   __Pyx_RefNannyDeclarations
25510   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
25511   {
25512     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
25513     PyObject* values[1] = {0};
25514     if (unlikely(__pyx_kwds)) {
25515       Py_ssize_t kw_args;
25516       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
25517       switch (pos_args) {
25518         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
25519         CYTHON_FALLTHROUGH;
25520         case  0: break;
25521         default: goto __pyx_L5_argtuple_error;
25522       }
25523       kw_args = PyDict_Size(__pyx_kwds);
25524       switch (pos_args) {
25525         case  0:
25526         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
25527         else goto __pyx_L5_argtuple_error;
25528       }
25529       if (unlikely(kw_args > 0)) {
25530         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(8, 7, __pyx_L3_error)
25531       }
25532     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
25533       goto __pyx_L5_argtuple_error;
25534     } else {
25535       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
25536     }
25537     __pyx_v_dobj = values[0];
25538   }
25539   goto __pyx_L4_argument_unpacking_done;
25540   __pyx_L5_argtuple_error:;
25541   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(8, 7, __pyx_L3_error)
25542   __pyx_L3_error:;
25543   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
25544   __Pyx_RefNannyFinishContext();
25545   return -1;
25546   __pyx_L4_argument_unpacking_done:;
25547   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self), __pyx_v_dobj);
25548 
25549   /* function exit code */
25550   __Pyx_RefNannyFinishContext();
25551   return __pyx_r;
25552 }
25553 
25554 static int __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
25555   int __pyx_v_i;
25556   int __pyx_r;
25557   __Pyx_RefNannyDeclarations
25558   int __pyx_t_1;
25559   PyObject *__pyx_t_2 = NULL;
25560   PyObject *__pyx_t_3 = NULL;
25561   __pyx_t_5numpy_float64_t __pyx_t_4;
25562   __Pyx_RefNannySetupContext("__init__", 0);
25563 
25564   /* "yt/geometry/_selection_routines/disk_selector.pxi":9
25565  *     def __init__(self, dobj):
25566  *         cdef int i
25567  *         for i in range(3):             # <<<<<<<<<<<<<<
25568  *             self.norm_vec[i] = dobj._norm_vec[i]
25569  *             self.center[i] = _ensure_code(dobj.center[i])
25570  */
25571   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
25572     __pyx_v_i = __pyx_t_1;
25573 
25574     /* "yt/geometry/_selection_routines/disk_selector.pxi":10
25575  *         cdef int i
25576  *         for i in range(3):
25577  *             self.norm_vec[i] = dobj._norm_vec[i]             # <<<<<<<<<<<<<<
25578  *             self.center[i] = _ensure_code(dobj.center[i])
25579  *         self.radius = _ensure_code(dobj.radius)
25580  */
25581     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_norm_vec); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 10, __pyx_L1_error)
25582     __Pyx_GOTREF(__pyx_t_2);
25583     __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 10, __pyx_L1_error)
25584     __Pyx_GOTREF(__pyx_t_3);
25585     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
25586     __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(8, 10, __pyx_L1_error)
25587     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
25588     (__pyx_v_self->norm_vec[__pyx_v_i]) = __pyx_t_4;
25589 
25590     /* "yt/geometry/_selection_routines/disk_selector.pxi":11
25591  *         for i in range(3):
25592  *             self.norm_vec[i] = dobj._norm_vec[i]
25593  *             self.center[i] = _ensure_code(dobj.center[i])             # <<<<<<<<<<<<<<
25594  *         self.radius = _ensure_code(dobj.radius)
25595  *         self.radius2 = self.radius * self.radius
25596  */
25597     __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_center); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 11, __pyx_L1_error)
25598     __Pyx_GOTREF(__pyx_t_3);
25599     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 11, __pyx_L1_error)
25600     __Pyx_GOTREF(__pyx_t_2);
25601     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
25602     __pyx_t_3 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 11, __pyx_L1_error)
25603     __Pyx_GOTREF(__pyx_t_3);
25604     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
25605     __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(8, 11, __pyx_L1_error)
25606     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
25607     (__pyx_v_self->center[__pyx_v_i]) = __pyx_t_4;
25608   }
25609 
25610   /* "yt/geometry/_selection_routines/disk_selector.pxi":12
25611  *             self.norm_vec[i] = dobj._norm_vec[i]
25612  *             self.center[i] = _ensure_code(dobj.center[i])
25613  *         self.radius = _ensure_code(dobj.radius)             # <<<<<<<<<<<<<<
25614  *         self.radius2 = self.radius * self.radius
25615  *         self.height = _ensure_code(dobj.height)
25616  */
25617   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_radius); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 12, __pyx_L1_error)
25618   __Pyx_GOTREF(__pyx_t_3);
25619   __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 12, __pyx_L1_error)
25620   __Pyx_GOTREF(__pyx_t_2);
25621   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
25622   __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(8, 12, __pyx_L1_error)
25623   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
25624   __pyx_v_self->radius = __pyx_t_4;
25625 
25626   /* "yt/geometry/_selection_routines/disk_selector.pxi":13
25627  *             self.center[i] = _ensure_code(dobj.center[i])
25628  *         self.radius = _ensure_code(dobj.radius)
25629  *         self.radius2 = self.radius * self.radius             # <<<<<<<<<<<<<<
25630  *         self.height = _ensure_code(dobj.height)
25631  *
25632  */
25633   __pyx_v_self->radius2 = (__pyx_v_self->radius * __pyx_v_self->radius);
25634 
25635   /* "yt/geometry/_selection_routines/disk_selector.pxi":14
25636  *         self.radius = _ensure_code(dobj.radius)
25637  *         self.radius2 = self.radius * self.radius
25638  *         self.height = _ensure_code(dobj.height)             # <<<<<<<<<<<<<<
25639  *
25640  *     @cython.boundscheck(False)
25641  */
25642   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_height); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 14, __pyx_L1_error)
25643   __Pyx_GOTREF(__pyx_t_2);
25644   __pyx_t_3 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 14, __pyx_L1_error)
25645   __Pyx_GOTREF(__pyx_t_3);
25646   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
25647   __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(8, 14, __pyx_L1_error)
25648   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
25649   __pyx_v_self->height = __pyx_t_4;
25650 
25651   /* "yt/geometry/_selection_routines/disk_selector.pxi":7
25652  *     cdef public np.float64_t height
25653  *
25654  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
25655  *         cdef int i
25656  *         for i in range(3):
25657  */
25658 
25659   /* function exit code */
25660   __pyx_r = 0;
25661   goto __pyx_L0;
25662   __pyx_L1_error:;
25663   __Pyx_XDECREF(__pyx_t_2);
25664   __Pyx_XDECREF(__pyx_t_3);
25665   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
25666   __pyx_r = -1;
25667   __pyx_L0:;
25668   __Pyx_RefNannyFinishContext();
25669   return __pyx_r;
25670 }
25671 
25672 /* "yt/geometry/_selection_routines/disk_selector.pxi":19
25673  *     @cython.wraparound(False)
25674  *     @cython.cdivision(True)
25675  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
25676  *         return self.select_point(pos)
25677  *
25678  */
25679 
25680 static int __pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds) {
25681   int __pyx_r;
25682 
25683   /* "yt/geometry/_selection_routines/disk_selector.pxi":20
25684  *     @cython.cdivision(True)
25685  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
25686  *         return self.select_point(pos)             # <<<<<<<<<<<<<<
25687  *
25688  *     @cython.boundscheck(False)
25689  */
25690   __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.select_point(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_pos);
25691   goto __pyx_L0;
25692 
25693   /* "yt/geometry/_selection_routines/disk_selector.pxi":19
25694  *     @cython.wraparound(False)
25695  *     @cython.cdivision(True)
25696  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
25697  *         return self.select_point(pos)
25698  *
25699  */
25700 
25701   /* function exit code */
25702   __pyx_L0:;
25703   return __pyx_r;
25704 }
25705 
25706 /* "yt/geometry/_selection_routines/disk_selector.pxi":25
25707  *     @cython.wraparound(False)
25708  *     @cython.cdivision(True)
25709  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
25710  *         cdef np.float64_t h, d, r2, temp
25711  *         cdef int i
25712  */
25713 
25714 static int __pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
25715   __pyx_t_5numpy_float64_t __pyx_v_h;
25716   __pyx_t_5numpy_float64_t __pyx_v_d;
25717   __pyx_t_5numpy_float64_t __pyx_v_r2;
25718   __pyx_t_5numpy_float64_t __pyx_v_temp;
25719   int __pyx_v_i;
25720   int __pyx_r;
25721   int __pyx_t_1;
25722   int __pyx_t_2;
25723   int __pyx_t_3;
25724 
25725   /* "yt/geometry/_selection_routines/disk_selector.pxi":28
25726  *         cdef np.float64_t h, d, r2, temp
25727  *         cdef int i
25728  *         h = d = 0             # <<<<<<<<<<<<<<
25729  *         for i in range(3):
25730  *             temp = self.periodic_difference(pos[i], self.center[i], i)
25731  */
25732   __pyx_v_h = 0.0;
25733   __pyx_v_d = 0.0;
25734 
25735   /* "yt/geometry/_selection_routines/disk_selector.pxi":29
25736  *         cdef int i
25737  *         h = d = 0
25738  *         for i in range(3):             # <<<<<<<<<<<<<<
25739  *             temp = self.periodic_difference(pos[i], self.center[i], i)
25740  *             h += temp * self.norm_vec[i]
25741  */
25742   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
25743     __pyx_v_i = __pyx_t_1;
25744 
25745     /* "yt/geometry/_selection_routines/disk_selector.pxi":30
25746  *         h = d = 0
25747  *         for i in range(3):
25748  *             temp = self.periodic_difference(pos[i], self.center[i], i)             # <<<<<<<<<<<<<<
25749  *             h += temp * self.norm_vec[i]
25750  *             d += temp*temp
25751  */
25752     __pyx_v_temp = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), (__pyx_v_pos[__pyx_v_i]), (__pyx_v_self->center[__pyx_v_i]), __pyx_v_i);
25753 
25754     /* "yt/geometry/_selection_routines/disk_selector.pxi":31
25755  *         for i in range(3):
25756  *             temp = self.periodic_difference(pos[i], self.center[i], i)
25757  *             h += temp * self.norm_vec[i]             # <<<<<<<<<<<<<<
25758  *             d += temp*temp
25759  *         r2 = (d - h*h)
25760  */
25761     __pyx_v_h = (__pyx_v_h + (__pyx_v_temp * (__pyx_v_self->norm_vec[__pyx_v_i])));
25762 
25763     /* "yt/geometry/_selection_routines/disk_selector.pxi":32
25764  *             temp = self.periodic_difference(pos[i], self.center[i], i)
25765  *             h += temp * self.norm_vec[i]
25766  *             d += temp*temp             # <<<<<<<<<<<<<<
25767  *         r2 = (d - h*h)
25768  *         if fabs(h) <= self.height and r2 <= self.radius2: return 1
25769  */
25770     __pyx_v_d = (__pyx_v_d + (__pyx_v_temp * __pyx_v_temp));
25771   }
25772 
25773   /* "yt/geometry/_selection_routines/disk_selector.pxi":33
25774  *             h += temp * self.norm_vec[i]
25775  *             d += temp*temp
25776  *         r2 = (d - h*h)             # <<<<<<<<<<<<<<
25777  *         if fabs(h) <= self.height and r2 <= self.radius2: return 1
25778  *         return 0
25779  */
25780   __pyx_v_r2 = (__pyx_v_d - (__pyx_v_h * __pyx_v_h));
25781 
25782   /* "yt/geometry/_selection_routines/disk_selector.pxi":34
25783  *             d += temp*temp
25784  *         r2 = (d - h*h)
25785  *         if fabs(h) <= self.height and r2 <= self.radius2: return 1             # <<<<<<<<<<<<<<
25786  *         return 0
25787  *
25788  */
25789   __pyx_t_3 = ((fabs(__pyx_v_h) <= __pyx_v_self->height) != 0);
25790   if (__pyx_t_3) {
25791   } else {
25792     __pyx_t_2 = __pyx_t_3;
25793     goto __pyx_L6_bool_binop_done;
25794   }
25795   __pyx_t_3 = ((__pyx_v_r2 <= __pyx_v_self->radius2) != 0);
25796   __pyx_t_2 = __pyx_t_3;
25797   __pyx_L6_bool_binop_done:;
25798   if (__pyx_t_2) {
25799     __pyx_r = 1;
25800     goto __pyx_L0;
25801   }
25802 
25803   /* "yt/geometry/_selection_routines/disk_selector.pxi":35
25804  *         r2 = (d - h*h)
25805  *         if fabs(h) <= self.height and r2 <= self.radius2: return 1
25806  *         return 0             # <<<<<<<<<<<<<<
25807  *
25808  *     @cython.boundscheck(False)
25809  */
25810   __pyx_r = 0;
25811   goto __pyx_L0;
25812 
25813   /* "yt/geometry/_selection_routines/disk_selector.pxi":25
25814  *     @cython.wraparound(False)
25815  *     @cython.cdivision(True)
25816  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
25817  *         cdef np.float64_t h, d, r2, temp
25818  *         cdef int i
25819  */
25820 
25821   /* function exit code */
25822   __pyx_L0:;
25823   return __pyx_r;
25824 }
25825 
25826 /* "yt/geometry/_selection_routines/disk_selector.pxi":40
25827  *     @cython.wraparound(False)
25828  *     @cython.cdivision(True)
25829  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
25830  *         cdef np.float64_t h, d, r2, temp
25831  *         cdef int i
25832  */
25833 
25834 static int __pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
25835   __pyx_t_5numpy_float64_t __pyx_v_h;
25836   __pyx_t_5numpy_float64_t __pyx_v_d;
25837   __pyx_t_5numpy_float64_t __pyx_v_r2;
25838   __pyx_t_5numpy_float64_t __pyx_v_temp;
25839   int __pyx_v_i;
25840   int __pyx_r;
25841   int __pyx_t_1;
25842   int __pyx_t_2;
25843   int __pyx_t_3;
25844 
25845   /* "yt/geometry/_selection_routines/disk_selector.pxi":43
25846  *         cdef np.float64_t h, d, r2, temp
25847  *         cdef int i
25848  *         h = d = 0             # <<<<<<<<<<<<<<
25849  *         for i in range(3):
25850  *             temp = self.periodic_difference(pos[i], self.center[i], i)
25851  */
25852   __pyx_v_h = 0.0;
25853   __pyx_v_d = 0.0;
25854 
25855   /* "yt/geometry/_selection_routines/disk_selector.pxi":44
25856  *         cdef int i
25857  *         h = d = 0
25858  *         for i in range(3):             # <<<<<<<<<<<<<<
25859  *             temp = self.periodic_difference(pos[i], self.center[i], i)
25860  *             h += temp * self.norm_vec[i]
25861  */
25862   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
25863     __pyx_v_i = __pyx_t_1;
25864 
25865     /* "yt/geometry/_selection_routines/disk_selector.pxi":45
25866  *         h = d = 0
25867  *         for i in range(3):
25868  *             temp = self.periodic_difference(pos[i], self.center[i], i)             # <<<<<<<<<<<<<<
25869  *             h += temp * self.norm_vec[i]
25870  *             d += temp*temp
25871  */
25872     __pyx_v_temp = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), (__pyx_v_pos[__pyx_v_i]), (__pyx_v_self->center[__pyx_v_i]), __pyx_v_i);
25873 
25874     /* "yt/geometry/_selection_routines/disk_selector.pxi":46
25875  *         for i in range(3):
25876  *             temp = self.periodic_difference(pos[i], self.center[i], i)
25877  *             h += temp * self.norm_vec[i]             # <<<<<<<<<<<<<<
25878  *             d += temp*temp
25879  *         r2 = (d - h*h)
25880  */
25881     __pyx_v_h = (__pyx_v_h + (__pyx_v_temp * (__pyx_v_self->norm_vec[__pyx_v_i])));
25882 
25883     /* "yt/geometry/_selection_routines/disk_selector.pxi":47
25884  *             temp = self.periodic_difference(pos[i], self.center[i], i)
25885  *             h += temp * self.norm_vec[i]
25886  *             d += temp*temp             # <<<<<<<<<<<<<<
25887  *         r2 = (d - h*h)
25888  *         d = self.radius+radius
25889  */
25890     __pyx_v_d = (__pyx_v_d + (__pyx_v_temp * __pyx_v_temp));
25891   }
25892 
25893   /* "yt/geometry/_selection_routines/disk_selector.pxi":48
25894  *             h += temp * self.norm_vec[i]
25895  *             d += temp*temp
25896  *         r2 = (d - h*h)             # <<<<<<<<<<<<<<
25897  *         d = self.radius+radius
25898  *         if fabs(h) <= self.height+radius and r2 <= d*d: return 1
25899  */
25900   __pyx_v_r2 = (__pyx_v_d - (__pyx_v_h * __pyx_v_h));
25901 
25902   /* "yt/geometry/_selection_routines/disk_selector.pxi":49
25903  *             d += temp*temp
25904  *         r2 = (d - h*h)
25905  *         d = self.radius+radius             # <<<<<<<<<<<<<<
25906  *         if fabs(h) <= self.height+radius and r2 <= d*d: return 1
25907  *         return 0
25908  */
25909   __pyx_v_d = (__pyx_v_self->radius + __pyx_v_radius);
25910 
25911   /* "yt/geometry/_selection_routines/disk_selector.pxi":50
25912  *         r2 = (d - h*h)
25913  *         d = self.radius+radius
25914  *         if fabs(h) <= self.height+radius and r2 <= d*d: return 1             # <<<<<<<<<<<<<<
25915  *         return 0
25916  *
25917  */
25918   __pyx_t_3 = ((fabs(__pyx_v_h) <= (__pyx_v_self->height + __pyx_v_radius)) != 0);
25919   if (__pyx_t_3) {
25920   } else {
25921     __pyx_t_2 = __pyx_t_3;
25922     goto __pyx_L6_bool_binop_done;
25923   }
25924   __pyx_t_3 = ((__pyx_v_r2 <= (__pyx_v_d * __pyx_v_d)) != 0);
25925   __pyx_t_2 = __pyx_t_3;
25926   __pyx_L6_bool_binop_done:;
25927   if (__pyx_t_2) {
25928     __pyx_r = 1;
25929     goto __pyx_L0;
25930   }
25931 
25932   /* "yt/geometry/_selection_routines/disk_selector.pxi":51
25933  *         d = self.radius+radius
25934  *         if fabs(h) <= self.height+radius and r2 <= d*d: return 1
25935  *         return 0             # <<<<<<<<<<<<<<
25936  *
25937  *     @cython.boundscheck(False)
25938  */
25939   __pyx_r = 0;
25940   goto __pyx_L0;
25941 
25942   /* "yt/geometry/_selection_routines/disk_selector.pxi":40
25943  *     @cython.wraparound(False)
25944  *     @cython.cdivision(True)
25945  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
25946  *         cdef np.float64_t h, d, r2, temp
25947  *         cdef int i
25948  */
25949 
25950   /* function exit code */
25951   __pyx_L0:;
25952   return __pyx_r;
25953 }
25954 
25955 /* "yt/geometry/_selection_routines/disk_selector.pxi":56
25956  *     @cython.wraparound(False)
25957  *     @cython.cdivision(True)
25958  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
25959  *                                np.float64_t right_edge[3]) nogil:
25960  *         # Until we can get our OBB/OBB intersection correct, disable this.
25961  */
25962 
25963 static int __pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_bbox(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
25964   int __pyx_r;
25965 
25966   /* "yt/geometry/_selection_routines/disk_selector.pxi":59
25967  *                                np.float64_t right_edge[3]) nogil:
25968  *         # Until we can get our OBB/OBB intersection correct, disable this.
25969  *         return 1             # <<<<<<<<<<<<<<
25970  *         # cdef np.float64_t *arr[2]
25971  *         # cdef np.float64_t pos[3]
25972  */
25973   __pyx_r = 1;
25974   goto __pyx_L0;
25975 
25976   /* "yt/geometry/_selection_routines/disk_selector.pxi":56
25977  *     @cython.wraparound(False)
25978  *     @cython.cdivision(True)
25979  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
25980  *                                np.float64_t right_edge[3]) nogil:
25981  *         # Until we can get our OBB/OBB intersection correct, disable this.
25982  */
25983 
25984   /* function exit code */
25985   __pyx_L0:;
25986   return __pyx_r;
25987 }
25988 
25989 /* "yt/geometry/_selection_routines/disk_selector.pxi":106
25990  *     @cython.wraparound(False)
25991  *     @cython.cdivision(True)
25992  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
25993  *                                np.float64_t right_edge[3]) nogil:
25994  *         # Until we can get our OBB/OBB intersection correct, disable this.
25995  */
25996 
25997 static int __pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_bbox_edge(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
25998   int __pyx_r;
25999 
26000   /* "yt/geometry/_selection_routines/disk_selector.pxi":109
26001  *                                np.float64_t right_edge[3]) nogil:
26002  *         # Until we can get our OBB/OBB intersection correct, disable this.
26003  *         return 2             # <<<<<<<<<<<<<<
26004  *         # cdef np.float64_t *arr[2]
26005  *         # cdef np.float64_t pos[3], H, D, R2, temp
26006  */
26007   __pyx_r = 2;
26008   goto __pyx_L0;
26009 
26010   /* "yt/geometry/_selection_routines/disk_selector.pxi":106
26011  *     @cython.wraparound(False)
26012  *     @cython.cdivision(True)
26013  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
26014  *                                np.float64_t right_edge[3]) nogil:
26015  *         # Until we can get our OBB/OBB intersection correct, disable this.
26016  */
26017 
26018   /* function exit code */
26019   __pyx_L0:;
26020   return __pyx_r;
26021 }
26022 
26023 /* "yt/geometry/_selection_routines/disk_selector.pxi":153
26024  *         # return 0
26025  *
26026  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
26027  *         return (("norm_vec[0]", self.norm_vec[0]),
26028  *                 ("norm_vec[1]", self.norm_vec[1]),
26029  */
26030 
26031 /* Python wrapper */
26032 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
26033 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
26034   PyObject *__pyx_r = 0;
26035   __Pyx_RefNannyDeclarations
26036   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
26037   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_2_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self));
26038 
26039   /* function exit code */
26040   __Pyx_RefNannyFinishContext();
26041   return __pyx_r;
26042 }
26043 
26044 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self) {
26045   PyObject *__pyx_r = NULL;
26046   __Pyx_RefNannyDeclarations
26047   PyObject *__pyx_t_1 = NULL;
26048   PyObject *__pyx_t_2 = NULL;
26049   PyObject *__pyx_t_3 = NULL;
26050   PyObject *__pyx_t_4 = NULL;
26051   PyObject *__pyx_t_5 = NULL;
26052   PyObject *__pyx_t_6 = NULL;
26053   PyObject *__pyx_t_7 = NULL;
26054   PyObject *__pyx_t_8 = NULL;
26055   PyObject *__pyx_t_9 = NULL;
26056   PyObject *__pyx_t_10 = NULL;
26057   __Pyx_RefNannySetupContext("_hash_vals", 0);
26058 
26059   /* "yt/geometry/_selection_routines/disk_selector.pxi":154
26060  *
26061  *     def _hash_vals(self):
26062  *         return (("norm_vec[0]", self.norm_vec[0]),             # <<<<<<<<<<<<<<
26063  *                 ("norm_vec[1]", self.norm_vec[1]),
26064  *                 ("norm_vec[2]", self.norm_vec[2]),
26065  */
26066   __Pyx_XDECREF(__pyx_r);
26067   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->norm_vec[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 154, __pyx_L1_error)
26068   __Pyx_GOTREF(__pyx_t_1);
26069   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 154, __pyx_L1_error)
26070   __Pyx_GOTREF(__pyx_t_2);
26071   __Pyx_INCREF(__pyx_kp_s_norm_vec_0);
26072   __Pyx_GIVEREF(__pyx_kp_s_norm_vec_0);
26073   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_s_norm_vec_0);
26074   __Pyx_GIVEREF(__pyx_t_1);
26075   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
26076   __pyx_t_1 = 0;
26077 
26078   /* "yt/geometry/_selection_routines/disk_selector.pxi":155
26079  *     def _hash_vals(self):
26080  *         return (("norm_vec[0]", self.norm_vec[0]),
26081  *                 ("norm_vec[1]", self.norm_vec[1]),             # <<<<<<<<<<<<<<
26082  *                 ("norm_vec[2]", self.norm_vec[2]),
26083  *                 ("center[0]", self.center[0]),
26084  */
26085   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->norm_vec[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 155, __pyx_L1_error)
26086   __Pyx_GOTREF(__pyx_t_1);
26087   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(8, 155, __pyx_L1_error)
26088   __Pyx_GOTREF(__pyx_t_3);
26089   __Pyx_INCREF(__pyx_kp_s_norm_vec_1);
26090   __Pyx_GIVEREF(__pyx_kp_s_norm_vec_1);
26091   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_norm_vec_1);
26092   __Pyx_GIVEREF(__pyx_t_1);
26093   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
26094   __pyx_t_1 = 0;
26095 
26096   /* "yt/geometry/_selection_routines/disk_selector.pxi":156
26097  *         return (("norm_vec[0]", self.norm_vec[0]),
26098  *                 ("norm_vec[1]", self.norm_vec[1]),
26099  *                 ("norm_vec[2]", self.norm_vec[2]),             # <<<<<<<<<<<<<<
26100  *                 ("center[0]", self.center[0]),
26101  *                 ("center[1]", self.center[1]),
26102  */
26103   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->norm_vec[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 156, __pyx_L1_error)
26104   __Pyx_GOTREF(__pyx_t_1);
26105   __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 156, __pyx_L1_error)
26106   __Pyx_GOTREF(__pyx_t_4);
26107   __Pyx_INCREF(__pyx_kp_s_norm_vec_2);
26108   __Pyx_GIVEREF(__pyx_kp_s_norm_vec_2);
26109   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_s_norm_vec_2);
26110   __Pyx_GIVEREF(__pyx_t_1);
26111   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
26112   __pyx_t_1 = 0;
26113 
26114   /* "yt/geometry/_selection_routines/disk_selector.pxi":157
26115  *                 ("norm_vec[1]", self.norm_vec[1]),
26116  *                 ("norm_vec[2]", self.norm_vec[2]),
26117  *                 ("center[0]", self.center[0]),             # <<<<<<<<<<<<<<
26118  *                 ("center[1]", self.center[1]),
26119  *                 ("center[2]", self.center[2]),
26120  */
26121   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->center[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 157, __pyx_L1_error)
26122   __Pyx_GOTREF(__pyx_t_1);
26123   __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 157, __pyx_L1_error)
26124   __Pyx_GOTREF(__pyx_t_5);
26125   __Pyx_INCREF(__pyx_kp_s_center_0);
26126   __Pyx_GIVEREF(__pyx_kp_s_center_0);
26127   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_s_center_0);
26128   __Pyx_GIVEREF(__pyx_t_1);
26129   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
26130   __pyx_t_1 = 0;
26131 
26132   /* "yt/geometry/_selection_routines/disk_selector.pxi":158
26133  *                 ("norm_vec[2]", self.norm_vec[2]),
26134  *                 ("center[0]", self.center[0]),
26135  *                 ("center[1]", self.center[1]),             # <<<<<<<<<<<<<<
26136  *                 ("center[2]", self.center[2]),
26137  *                 ("radius", self.radius),
26138  */
26139   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->center[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 158, __pyx_L1_error)
26140   __Pyx_GOTREF(__pyx_t_1);
26141   __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 158, __pyx_L1_error)
26142   __Pyx_GOTREF(__pyx_t_6);
26143   __Pyx_INCREF(__pyx_kp_s_center_1);
26144   __Pyx_GIVEREF(__pyx_kp_s_center_1);
26145   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_s_center_1);
26146   __Pyx_GIVEREF(__pyx_t_1);
26147   PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
26148   __pyx_t_1 = 0;
26149 
26150   /* "yt/geometry/_selection_routines/disk_selector.pxi":159
26151  *                 ("center[0]", self.center[0]),
26152  *                 ("center[1]", self.center[1]),
26153  *                 ("center[2]", self.center[2]),             # <<<<<<<<<<<<<<
26154  *                 ("radius", self.radius),
26155  *                 ("radius2", self.radius2),
26156  */
26157   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->center[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 159, __pyx_L1_error)
26158   __Pyx_GOTREF(__pyx_t_1);
26159   __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 159, __pyx_L1_error)
26160   __Pyx_GOTREF(__pyx_t_7);
26161   __Pyx_INCREF(__pyx_kp_s_center_2);
26162   __Pyx_GIVEREF(__pyx_kp_s_center_2);
26163   PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_s_center_2);
26164   __Pyx_GIVEREF(__pyx_t_1);
26165   PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
26166   __pyx_t_1 = 0;
26167 
26168   /* "yt/geometry/_selection_routines/disk_selector.pxi":160
26169  *                 ("center[1]", self.center[1]),
26170  *                 ("center[2]", self.center[2]),
26171  *                 ("radius", self.radius),             # <<<<<<<<<<<<<<
26172  *                 ("radius2", self.radius2),
26173  *                 ("height", self.height))
26174  */
26175   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->radius); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 160, __pyx_L1_error)
26176   __Pyx_GOTREF(__pyx_t_1);
26177   __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 160, __pyx_L1_error)
26178   __Pyx_GOTREF(__pyx_t_8);
26179   __Pyx_INCREF(__pyx_n_s_radius);
26180   __Pyx_GIVEREF(__pyx_n_s_radius);
26181   PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_n_s_radius);
26182   __Pyx_GIVEREF(__pyx_t_1);
26183   PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1);
26184   __pyx_t_1 = 0;
26185 
26186   /* "yt/geometry/_selection_routines/disk_selector.pxi":161
26187  *                 ("center[2]", self.center[2]),
26188  *                 ("radius", self.radius),
26189  *                 ("radius2", self.radius2),             # <<<<<<<<<<<<<<
26190  *                 ("height", self.height))
26191  *
26192  */
26193   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->radius2); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 161, __pyx_L1_error)
26194   __Pyx_GOTREF(__pyx_t_1);
26195   __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 161, __pyx_L1_error)
26196   __Pyx_GOTREF(__pyx_t_9);
26197   __Pyx_INCREF(__pyx_n_s_radius2);
26198   __Pyx_GIVEREF(__pyx_n_s_radius2);
26199   PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_n_s_radius2);
26200   __Pyx_GIVEREF(__pyx_t_1);
26201   PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1);
26202   __pyx_t_1 = 0;
26203 
26204   /* "yt/geometry/_selection_routines/disk_selector.pxi":162
26205  *                 ("radius", self.radius),
26206  *                 ("radius2", self.radius2),
26207  *                 ("height", self.height))             # <<<<<<<<<<<<<<
26208  *
26209  *     def _get_state_attnames(self):
26210  */
26211   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->height); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 162, __pyx_L1_error)
26212   __Pyx_GOTREF(__pyx_t_1);
26213   __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(8, 162, __pyx_L1_error)
26214   __Pyx_GOTREF(__pyx_t_10);
26215   __Pyx_INCREF(__pyx_n_s_height);
26216   __Pyx_GIVEREF(__pyx_n_s_height);
26217   PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_n_s_height);
26218   __Pyx_GIVEREF(__pyx_t_1);
26219   PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_1);
26220   __pyx_t_1 = 0;
26221 
26222   /* "yt/geometry/_selection_routines/disk_selector.pxi":154
26223  *
26224  *     def _hash_vals(self):
26225  *         return (("norm_vec[0]", self.norm_vec[0]),             # <<<<<<<<<<<<<<
26226  *                 ("norm_vec[1]", self.norm_vec[1]),
26227  *                 ("norm_vec[2]", self.norm_vec[2]),
26228  */
26229   __pyx_t_1 = PyTuple_New(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 154, __pyx_L1_error)
26230   __Pyx_GOTREF(__pyx_t_1);
26231   __Pyx_GIVEREF(__pyx_t_2);
26232   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
26233   __Pyx_GIVEREF(__pyx_t_3);
26234   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
26235   __Pyx_GIVEREF(__pyx_t_4);
26236   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
26237   __Pyx_GIVEREF(__pyx_t_5);
26238   PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_5);
26239   __Pyx_GIVEREF(__pyx_t_6);
26240   PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_6);
26241   __Pyx_GIVEREF(__pyx_t_7);
26242   PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_7);
26243   __Pyx_GIVEREF(__pyx_t_8);
26244   PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_t_8);
26245   __Pyx_GIVEREF(__pyx_t_9);
26246   PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_t_9);
26247   __Pyx_GIVEREF(__pyx_t_10);
26248   PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_t_10);
26249   __pyx_t_2 = 0;
26250   __pyx_t_3 = 0;
26251   __pyx_t_4 = 0;
26252   __pyx_t_5 = 0;
26253   __pyx_t_6 = 0;
26254   __pyx_t_7 = 0;
26255   __pyx_t_8 = 0;
26256   __pyx_t_9 = 0;
26257   __pyx_t_10 = 0;
26258   __pyx_r = __pyx_t_1;
26259   __pyx_t_1 = 0;
26260   goto __pyx_L0;
26261 
26262   /* "yt/geometry/_selection_routines/disk_selector.pxi":153
26263  *         # return 0
26264  *
26265  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
26266  *         return (("norm_vec[0]", self.norm_vec[0]),
26267  *                 ("norm_vec[1]", self.norm_vec[1]),
26268  */
26269 
26270   /* function exit code */
26271   __pyx_L1_error:;
26272   __Pyx_XDECREF(__pyx_t_1);
26273   __Pyx_XDECREF(__pyx_t_2);
26274   __Pyx_XDECREF(__pyx_t_3);
26275   __Pyx_XDECREF(__pyx_t_4);
26276   __Pyx_XDECREF(__pyx_t_5);
26277   __Pyx_XDECREF(__pyx_t_6);
26278   __Pyx_XDECREF(__pyx_t_7);
26279   __Pyx_XDECREF(__pyx_t_8);
26280   __Pyx_XDECREF(__pyx_t_9);
26281   __Pyx_XDECREF(__pyx_t_10);
26282   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
26283   __pyx_r = NULL;
26284   __pyx_L0:;
26285   __Pyx_XGIVEREF(__pyx_r);
26286   __Pyx_RefNannyFinishContext();
26287   return __pyx_r;
26288 }
26289 
26290 /* "yt/geometry/_selection_routines/disk_selector.pxi":164
26291  *                 ("height", self.height))
26292  *
26293  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
26294  *         return ("radius", "radius2", "height", "norm_vec", "center")
26295  *
26296  */
26297 
26298 /* Python wrapper */
26299 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_5_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
26300 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_5_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
26301   PyObject *__pyx_r = 0;
26302   __Pyx_RefNannyDeclarations
26303   __Pyx_RefNannySetupContext("_get_state_attnames (wrapper)", 0);
26304   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_4_get_state_attnames(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self));
26305 
26306   /* function exit code */
26307   __Pyx_RefNannyFinishContext();
26308   return __pyx_r;
26309 }
26310 
26311 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_4_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self) {
26312   PyObject *__pyx_r = NULL;
26313   __Pyx_RefNannyDeclarations
26314   __Pyx_RefNannySetupContext("_get_state_attnames", 0);
26315 
26316   /* "yt/geometry/_selection_routines/disk_selector.pxi":165
26317  *
26318  *     def _get_state_attnames(self):
26319  *         return ("radius", "radius2", "height", "norm_vec", "center")             # <<<<<<<<<<<<<<
26320  *
26321  *
26322  */
26323   __Pyx_XDECREF(__pyx_r);
26324   __Pyx_INCREF(__pyx_tuple__21);
26325   __pyx_r = __pyx_tuple__21;
26326   goto __pyx_L0;
26327 
26328   /* "yt/geometry/_selection_routines/disk_selector.pxi":164
26329  *                 ("height", self.height))
26330  *
26331  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
26332  *         return ("radius", "radius2", "height", "norm_vec", "center")
26333  *
26334  */
26335 
26336   /* function exit code */
26337   __pyx_L0:;
26338   __Pyx_XGIVEREF(__pyx_r);
26339   __Pyx_RefNannyFinishContext();
26340   return __pyx_r;
26341 }
26342 
26343 /* "yt/geometry/_selection_routines/disk_selector.pxi":2
26344  * cdef class DiskSelector(SelectorObject):
26345  *     cdef public np.float64_t norm_vec[3]             # <<<<<<<<<<<<<<
26346  *     cdef public np.float64_t center[3]
26347  *     cdef public np.float64_t radius, radius2
26348  */
26349 
26350 /* Python wrapper */
26351 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_8norm_vec_1__get__(PyObject *__pyx_v_self); /*proto*/
26352 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_8norm_vec_1__get__(PyObject *__pyx_v_self) {
26353   PyObject *__pyx_r = 0;
26354   __Pyx_RefNannyDeclarations
26355   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
26356   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_8norm_vec___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self));
26357 
26358   /* function exit code */
26359   __Pyx_RefNannyFinishContext();
26360   return __pyx_r;
26361 }
26362 
26363 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_8norm_vec___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self) {
26364   PyObject *__pyx_r = NULL;
26365   __Pyx_RefNannyDeclarations
26366   PyObject *__pyx_t_1 = NULL;
26367   __Pyx_RefNannySetupContext("__get__", 0);
26368   __Pyx_XDECREF(__pyx_r);
26369   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->norm_vec, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 2, __pyx_L1_error)
26370   __Pyx_GOTREF(__pyx_t_1);
26371   __pyx_r = __pyx_t_1;
26372   __pyx_t_1 = 0;
26373   goto __pyx_L0;
26374 
26375   /* function exit code */
26376   __pyx_L1_error:;
26377   __Pyx_XDECREF(__pyx_t_1);
26378   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.norm_vec.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26379   __pyx_r = NULL;
26380   __pyx_L0:;
26381   __Pyx_XGIVEREF(__pyx_r);
26382   __Pyx_RefNannyFinishContext();
26383   return __pyx_r;
26384 }
26385 
26386 /* Python wrapper */
26387 static int __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_8norm_vec_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
26388 static int __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_8norm_vec_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
26389   int __pyx_r;
26390   __Pyx_RefNannyDeclarations
26391   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
26392   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_8norm_vec_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
26393 
26394   /* function exit code */
26395   __Pyx_RefNannyFinishContext();
26396   return __pyx_r;
26397 }
26398 
26399 static int __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_8norm_vec_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, PyObject *__pyx_v_value) {
26400   int __pyx_r;
26401   __Pyx_RefNannyDeclarations
26402   __pyx_t_5numpy_float64_t __pyx_t_1[3];
26403   __Pyx_RefNannySetupContext("__set__", 0);
26404   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(8, 2, __pyx_L1_error)
26405   memcpy(&(__pyx_v_self->norm_vec[0]), __pyx_t_1, sizeof(__pyx_v_self->norm_vec[0]) * (3));
26406 
26407   /* function exit code */
26408   __pyx_r = 0;
26409   goto __pyx_L0;
26410   __pyx_L1_error:;
26411   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.norm_vec.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26412   __pyx_r = -1;
26413   __pyx_L0:;
26414   __Pyx_RefNannyFinishContext();
26415   return __pyx_r;
26416 }
26417 
26418 /* "yt/geometry/_selection_routines/disk_selector.pxi":3
26419  * cdef class DiskSelector(SelectorObject):
26420  *     cdef public np.float64_t norm_vec[3]
26421  *     cdef public np.float64_t center[3]             # <<<<<<<<<<<<<<
26422  *     cdef public np.float64_t radius, radius2
26423  *     cdef public np.float64_t height
26424  */
26425 
26426 /* Python wrapper */
26427 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6center_1__get__(PyObject *__pyx_v_self); /*proto*/
26428 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6center_1__get__(PyObject *__pyx_v_self) {
26429   PyObject *__pyx_r = 0;
26430   __Pyx_RefNannyDeclarations
26431   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
26432   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6center___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self));
26433 
26434   /* function exit code */
26435   __Pyx_RefNannyFinishContext();
26436   return __pyx_r;
26437 }
26438 
26439 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6center___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self) {
26440   PyObject *__pyx_r = NULL;
26441   __Pyx_RefNannyDeclarations
26442   PyObject *__pyx_t_1 = NULL;
26443   __Pyx_RefNannySetupContext("__get__", 0);
26444   __Pyx_XDECREF(__pyx_r);
26445   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->center, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 3, __pyx_L1_error)
26446   __Pyx_GOTREF(__pyx_t_1);
26447   __pyx_r = __pyx_t_1;
26448   __pyx_t_1 = 0;
26449   goto __pyx_L0;
26450 
26451   /* function exit code */
26452   __pyx_L1_error:;
26453   __Pyx_XDECREF(__pyx_t_1);
26454   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.center.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26455   __pyx_r = NULL;
26456   __pyx_L0:;
26457   __Pyx_XGIVEREF(__pyx_r);
26458   __Pyx_RefNannyFinishContext();
26459   return __pyx_r;
26460 }
26461 
26462 /* Python wrapper */
26463 static int __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6center_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
26464 static int __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6center_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
26465   int __pyx_r;
26466   __Pyx_RefNannyDeclarations
26467   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
26468   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6center_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
26469 
26470   /* function exit code */
26471   __Pyx_RefNannyFinishContext();
26472   return __pyx_r;
26473 }
26474 
26475 static int __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6center_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, PyObject *__pyx_v_value) {
26476   int __pyx_r;
26477   __Pyx_RefNannyDeclarations
26478   __pyx_t_5numpy_float64_t __pyx_t_1[3];
26479   __Pyx_RefNannySetupContext("__set__", 0);
26480   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(8, 3, __pyx_L1_error)
26481   memcpy(&(__pyx_v_self->center[0]), __pyx_t_1, sizeof(__pyx_v_self->center[0]) * (3));
26482 
26483   /* function exit code */
26484   __pyx_r = 0;
26485   goto __pyx_L0;
26486   __pyx_L1_error:;
26487   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.center.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26488   __pyx_r = -1;
26489   __pyx_L0:;
26490   __Pyx_RefNannyFinishContext();
26491   return __pyx_r;
26492 }
26493 
26494 /* "yt/geometry/_selection_routines/disk_selector.pxi":4
26495  *     cdef public np.float64_t norm_vec[3]
26496  *     cdef public np.float64_t center[3]
26497  *     cdef public np.float64_t radius, radius2             # <<<<<<<<<<<<<<
26498  *     cdef public np.float64_t height
26499  *
26500  */
26501 
26502 /* Python wrapper */
26503 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6radius_1__get__(PyObject *__pyx_v_self); /*proto*/
26504 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6radius_1__get__(PyObject *__pyx_v_self) {
26505   PyObject *__pyx_r = 0;
26506   __Pyx_RefNannyDeclarations
26507   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
26508   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6radius___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self));
26509 
26510   /* function exit code */
26511   __Pyx_RefNannyFinishContext();
26512   return __pyx_r;
26513 }
26514 
26515 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6radius___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self) {
26516   PyObject *__pyx_r = NULL;
26517   __Pyx_RefNannyDeclarations
26518   PyObject *__pyx_t_1 = NULL;
26519   __Pyx_RefNannySetupContext("__get__", 0);
26520   __Pyx_XDECREF(__pyx_r);
26521   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->radius); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 4, __pyx_L1_error)
26522   __Pyx_GOTREF(__pyx_t_1);
26523   __pyx_r = __pyx_t_1;
26524   __pyx_t_1 = 0;
26525   goto __pyx_L0;
26526 
26527   /* function exit code */
26528   __pyx_L1_error:;
26529   __Pyx_XDECREF(__pyx_t_1);
26530   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.radius.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26531   __pyx_r = NULL;
26532   __pyx_L0:;
26533   __Pyx_XGIVEREF(__pyx_r);
26534   __Pyx_RefNannyFinishContext();
26535   return __pyx_r;
26536 }
26537 
26538 /* Python wrapper */
26539 static int __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6radius_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
26540 static int __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6radius_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
26541   int __pyx_r;
26542   __Pyx_RefNannyDeclarations
26543   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
26544   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6radius_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
26545 
26546   /* function exit code */
26547   __Pyx_RefNannyFinishContext();
26548   return __pyx_r;
26549 }
26550 
26551 static int __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6radius_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, PyObject *__pyx_v_value) {
26552   int __pyx_r;
26553   __Pyx_RefNannyDeclarations
26554   __pyx_t_5numpy_float64_t __pyx_t_1;
26555   __Pyx_RefNannySetupContext("__set__", 0);
26556   __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(8, 4, __pyx_L1_error)
26557   __pyx_v_self->radius = __pyx_t_1;
26558 
26559   /* function exit code */
26560   __pyx_r = 0;
26561   goto __pyx_L0;
26562   __pyx_L1_error:;
26563   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.radius.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26564   __pyx_r = -1;
26565   __pyx_L0:;
26566   __Pyx_RefNannyFinishContext();
26567   return __pyx_r;
26568 }
26569 
26570 /* Python wrapper */
26571 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_7radius2_1__get__(PyObject *__pyx_v_self); /*proto*/
26572 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_7radius2_1__get__(PyObject *__pyx_v_self) {
26573   PyObject *__pyx_r = 0;
26574   __Pyx_RefNannyDeclarations
26575   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
26576   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_7radius2___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self));
26577 
26578   /* function exit code */
26579   __Pyx_RefNannyFinishContext();
26580   return __pyx_r;
26581 }
26582 
26583 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_7radius2___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self) {
26584   PyObject *__pyx_r = NULL;
26585   __Pyx_RefNannyDeclarations
26586   PyObject *__pyx_t_1 = NULL;
26587   __Pyx_RefNannySetupContext("__get__", 0);
26588   __Pyx_XDECREF(__pyx_r);
26589   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->radius2); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 4, __pyx_L1_error)
26590   __Pyx_GOTREF(__pyx_t_1);
26591   __pyx_r = __pyx_t_1;
26592   __pyx_t_1 = 0;
26593   goto __pyx_L0;
26594 
26595   /* function exit code */
26596   __pyx_L1_error:;
26597   __Pyx_XDECREF(__pyx_t_1);
26598   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.radius2.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26599   __pyx_r = NULL;
26600   __pyx_L0:;
26601   __Pyx_XGIVEREF(__pyx_r);
26602   __Pyx_RefNannyFinishContext();
26603   return __pyx_r;
26604 }
26605 
26606 /* Python wrapper */
26607 static int __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_7radius2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
26608 static int __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_7radius2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
26609   int __pyx_r;
26610   __Pyx_RefNannyDeclarations
26611   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
26612   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_7radius2_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
26613 
26614   /* function exit code */
26615   __Pyx_RefNannyFinishContext();
26616   return __pyx_r;
26617 }
26618 
26619 static int __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_7radius2_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, PyObject *__pyx_v_value) {
26620   int __pyx_r;
26621   __Pyx_RefNannyDeclarations
26622   __pyx_t_5numpy_float64_t __pyx_t_1;
26623   __Pyx_RefNannySetupContext("__set__", 0);
26624   __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(8, 4, __pyx_L1_error)
26625   __pyx_v_self->radius2 = __pyx_t_1;
26626 
26627   /* function exit code */
26628   __pyx_r = 0;
26629   goto __pyx_L0;
26630   __pyx_L1_error:;
26631   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.radius2.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26632   __pyx_r = -1;
26633   __pyx_L0:;
26634   __Pyx_RefNannyFinishContext();
26635   return __pyx_r;
26636 }
26637 
26638 /* "yt/geometry/_selection_routines/disk_selector.pxi":5
26639  *     cdef public np.float64_t center[3]
26640  *     cdef public np.float64_t radius, radius2
26641  *     cdef public np.float64_t height             # <<<<<<<<<<<<<<
26642  *
26643  *     def __init__(self, dobj):
26644  */
26645 
26646 /* Python wrapper */
26647 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6height_1__get__(PyObject *__pyx_v_self); /*proto*/
26648 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6height_1__get__(PyObject *__pyx_v_self) {
26649   PyObject *__pyx_r = 0;
26650   __Pyx_RefNannyDeclarations
26651   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
26652   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6height___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self));
26653 
26654   /* function exit code */
26655   __Pyx_RefNannyFinishContext();
26656   return __pyx_r;
26657 }
26658 
26659 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6height___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self) {
26660   PyObject *__pyx_r = NULL;
26661   __Pyx_RefNannyDeclarations
26662   PyObject *__pyx_t_1 = NULL;
26663   __Pyx_RefNannySetupContext("__get__", 0);
26664   __Pyx_XDECREF(__pyx_r);
26665   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->height); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 5, __pyx_L1_error)
26666   __Pyx_GOTREF(__pyx_t_1);
26667   __pyx_r = __pyx_t_1;
26668   __pyx_t_1 = 0;
26669   goto __pyx_L0;
26670 
26671   /* function exit code */
26672   __pyx_L1_error:;
26673   __Pyx_XDECREF(__pyx_t_1);
26674   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.height.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26675   __pyx_r = NULL;
26676   __pyx_L0:;
26677   __Pyx_XGIVEREF(__pyx_r);
26678   __Pyx_RefNannyFinishContext();
26679   return __pyx_r;
26680 }
26681 
26682 /* Python wrapper */
26683 static int __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6height_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
26684 static int __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6height_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
26685   int __pyx_r;
26686   __Pyx_RefNannyDeclarations
26687   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
26688   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6height_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
26689 
26690   /* function exit code */
26691   __Pyx_RefNannyFinishContext();
26692   return __pyx_r;
26693 }
26694 
26695 static int __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6height_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, PyObject *__pyx_v_value) {
26696   int __pyx_r;
26697   __Pyx_RefNannyDeclarations
26698   __pyx_t_5numpy_float64_t __pyx_t_1;
26699   __Pyx_RefNannySetupContext("__set__", 0);
26700   __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(8, 5, __pyx_L1_error)
26701   __pyx_v_self->height = __pyx_t_1;
26702 
26703   /* function exit code */
26704   __pyx_r = 0;
26705   goto __pyx_L0;
26706   __pyx_L1_error:;
26707   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.height.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26708   __pyx_r = -1;
26709   __pyx_L0:;
26710   __Pyx_RefNannyFinishContext();
26711   return __pyx_r;
26712 }
26713 
26714 /* "(tree fragment)":1
26715  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
26716  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
26717  * def __setstate_cython__(self, __pyx_state):
26718  */
26719 
26720 /* Python wrapper */
26721 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
26722 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
26723   PyObject *__pyx_r = 0;
26724   __Pyx_RefNannyDeclarations
26725   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
26726   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self));
26727 
26728   /* function exit code */
26729   __Pyx_RefNannyFinishContext();
26730   return __pyx_r;
26731 }
26732 
26733 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self) {
26734   PyObject *__pyx_r = NULL;
26735   __Pyx_RefNannyDeclarations
26736   PyObject *__pyx_t_1 = NULL;
26737   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
26738 
26739   /* "(tree fragment)":2
26740  * def __reduce_cython__(self):
26741  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
26742  * def __setstate_cython__(self, __pyx_state):
26743  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
26744  */
26745   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
26746   __Pyx_GOTREF(__pyx_t_1);
26747   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
26748   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
26749   __PYX_ERR(5, 2, __pyx_L1_error)
26750 
26751   /* "(tree fragment)":1
26752  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
26753  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
26754  * def __setstate_cython__(self, __pyx_state):
26755  */
26756 
26757   /* function exit code */
26758   __pyx_L1_error:;
26759   __Pyx_XDECREF(__pyx_t_1);
26760   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26761   __pyx_r = NULL;
26762   __Pyx_XGIVEREF(__pyx_r);
26763   __Pyx_RefNannyFinishContext();
26764   return __pyx_r;
26765 }
26766 
26767 /* "(tree fragment)":3
26768  * def __reduce_cython__(self):
26769  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
26770  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
26771  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
26772  */
26773 
26774 /* Python wrapper */
26775 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
26776 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
26777   PyObject *__pyx_r = 0;
26778   __Pyx_RefNannyDeclarations
26779   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
26780   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_8__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
26781 
26782   /* function exit code */
26783   __Pyx_RefNannyFinishContext();
26784   return __pyx_r;
26785 }
26786 
26787 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12DiskSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
26788   PyObject *__pyx_r = NULL;
26789   __Pyx_RefNannyDeclarations
26790   PyObject *__pyx_t_1 = NULL;
26791   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
26792 
26793   /* "(tree fragment)":4
26794  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
26795  * def __setstate_cython__(self, __pyx_state):
26796  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
26797  */
26798   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
26799   __Pyx_GOTREF(__pyx_t_1);
26800   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
26801   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
26802   __PYX_ERR(5, 4, __pyx_L1_error)
26803 
26804   /* "(tree fragment)":3
26805  * def __reduce_cython__(self):
26806  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
26807  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
26808  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
26809  */
26810 
26811   /* function exit code */
26812   __pyx_L1_error:;
26813   __Pyx_XDECREF(__pyx_t_1);
26814   __Pyx_AddTraceback("yt.geometry.selection_routines.DiskSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26815   __pyx_r = NULL;
26816   __Pyx_XGIVEREF(__pyx_r);
26817   __Pyx_RefNannyFinishContext();
26818   return __pyx_r;
26819 }
26820 
26821 /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":5
26822  *     cdef public np.float64_t d
26823  *
26824  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
26825  *         cdef int i
26826  *         for i in range(3):
26827  */
26828 
26829 /* Python wrapper */
26830 static int __pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
26831 static int __pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
26832   PyObject *__pyx_v_dobj = 0;
26833   int __pyx_r;
26834   __Pyx_RefNannyDeclarations
26835   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
26836   {
26837     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
26838     PyObject* values[1] = {0};
26839     if (unlikely(__pyx_kwds)) {
26840       Py_ssize_t kw_args;
26841       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
26842       switch (pos_args) {
26843         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
26844         CYTHON_FALLTHROUGH;
26845         case  0: break;
26846         default: goto __pyx_L5_argtuple_error;
26847       }
26848       kw_args = PyDict_Size(__pyx_kwds);
26849       switch (pos_args) {
26850         case  0:
26851         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
26852         else goto __pyx_L5_argtuple_error;
26853       }
26854       if (unlikely(kw_args > 0)) {
26855         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(9, 5, __pyx_L3_error)
26856       }
26857     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
26858       goto __pyx_L5_argtuple_error;
26859     } else {
26860       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
26861     }
26862     __pyx_v_dobj = values[0];
26863   }
26864   goto __pyx_L4_argument_unpacking_done;
26865   __pyx_L5_argtuple_error:;
26866   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(9, 5, __pyx_L3_error)
26867   __pyx_L3_error:;
26868   __Pyx_AddTraceback("yt.geometry.selection_routines.CuttingPlaneSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26869   __Pyx_RefNannyFinishContext();
26870   return -1;
26871   __pyx_L4_argument_unpacking_done:;
26872   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *)__pyx_v_self), __pyx_v_dobj);
26873 
26874   /* function exit code */
26875   __Pyx_RefNannyFinishContext();
26876   return __pyx_r;
26877 }
26878 
26879 static int __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
26880   int __pyx_v_i;
26881   int __pyx_r;
26882   __Pyx_RefNannyDeclarations
26883   int __pyx_t_1;
26884   PyObject *__pyx_t_2 = NULL;
26885   PyObject *__pyx_t_3 = NULL;
26886   __pyx_t_5numpy_float64_t __pyx_t_4;
26887   __Pyx_RefNannySetupContext("__init__", 0);
26888 
26889   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":7
26890  *     def __init__(self, dobj):
26891  *         cdef int i
26892  *         for i in range(3):             # <<<<<<<<<<<<<<
26893  *             self.norm_vec[i] = dobj._norm_vec[i]
26894  *         self.d = _ensure_code(dobj._d)
26895  */
26896   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
26897     __pyx_v_i = __pyx_t_1;
26898 
26899     /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":8
26900  *         cdef int i
26901  *         for i in range(3):
26902  *             self.norm_vec[i] = dobj._norm_vec[i]             # <<<<<<<<<<<<<<
26903  *         self.d = _ensure_code(dobj._d)
26904  *
26905  */
26906     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_norm_vec); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 8, __pyx_L1_error)
26907     __Pyx_GOTREF(__pyx_t_2);
26908     __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 8, __pyx_L1_error)
26909     __Pyx_GOTREF(__pyx_t_3);
26910     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
26911     __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(9, 8, __pyx_L1_error)
26912     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
26913     (__pyx_v_self->norm_vec[__pyx_v_i]) = __pyx_t_4;
26914   }
26915 
26916   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":9
26917  *         for i in range(3):
26918  *             self.norm_vec[i] = dobj._norm_vec[i]
26919  *         self.d = _ensure_code(dobj._d)             # <<<<<<<<<<<<<<
26920  *
26921  *     @cython.boundscheck(False)
26922  */
26923   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_d_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 9, __pyx_L1_error)
26924   __Pyx_GOTREF(__pyx_t_3);
26925   __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 9, __pyx_L1_error)
26926   __Pyx_GOTREF(__pyx_t_2);
26927   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
26928   __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(9, 9, __pyx_L1_error)
26929   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
26930   __pyx_v_self->d = __pyx_t_4;
26931 
26932   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":5
26933  *     cdef public np.float64_t d
26934  *
26935  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
26936  *         cdef int i
26937  *         for i in range(3):
26938  */
26939 
26940   /* function exit code */
26941   __pyx_r = 0;
26942   goto __pyx_L0;
26943   __pyx_L1_error:;
26944   __Pyx_XDECREF(__pyx_t_2);
26945   __Pyx_XDECREF(__pyx_t_3);
26946   __Pyx_AddTraceback("yt.geometry.selection_routines.CuttingPlaneSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
26947   __pyx_r = -1;
26948   __pyx_L0:;
26949   __Pyx_RefNannyFinishContext();
26950   return __pyx_r;
26951 }
26952 
26953 /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":14
26954  *     @cython.wraparound(False)
26955  *     @cython.cdivision(True)
26956  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
26957  *         cdef np.float64_t left_edge[3]
26958  *         cdef np.float64_t right_edge[3]
26959  */
26960 
26961 static int __pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
26962   __pyx_t_5numpy_float64_t __pyx_v_left_edge[3];
26963   __pyx_t_5numpy_float64_t __pyx_v_right_edge[3];
26964   int __pyx_v_i;
26965   int __pyx_r;
26966   int __pyx_t_1;
26967 
26968   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":18
26969  *         cdef np.float64_t right_edge[3]
26970  *         cdef int i
26971  *         for i in range(3):             # <<<<<<<<<<<<<<
26972  *             left_edge[i] = pos[i] - 0.5*dds[i]
26973  *             right_edge[i] = pos[i] + 0.5*dds[i]
26974  */
26975   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
26976     __pyx_v_i = __pyx_t_1;
26977 
26978     /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":19
26979  *         cdef int i
26980  *         for i in range(3):
26981  *             left_edge[i] = pos[i] - 0.5*dds[i]             # <<<<<<<<<<<<<<
26982  *             right_edge[i] = pos[i] + 0.5*dds[i]
26983  *         return self.select_bbox(left_edge, right_edge)
26984  */
26985     (__pyx_v_left_edge[__pyx_v_i]) = ((__pyx_v_pos[__pyx_v_i]) - (0.5 * (__pyx_v_dds[__pyx_v_i])));
26986 
26987     /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":20
26988  *         for i in range(3):
26989  *             left_edge[i] = pos[i] - 0.5*dds[i]
26990  *             right_edge[i] = pos[i] + 0.5*dds[i]             # <<<<<<<<<<<<<<
26991  *         return self.select_bbox(left_edge, right_edge)
26992  *
26993  */
26994     (__pyx_v_right_edge[__pyx_v_i]) = ((__pyx_v_pos[__pyx_v_i]) + (0.5 * (__pyx_v_dds[__pyx_v_i])));
26995   }
26996 
26997   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":21
26998  *             left_edge[i] = pos[i] - 0.5*dds[i]
26999  *             right_edge[i] = pos[i] + 0.5*dds[i]
27000  *         return self.select_bbox(left_edge, right_edge)             # <<<<<<<<<<<<<<
27001  *
27002  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
27003  */
27004   __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_CuttingPlaneSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.select_bbox(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_left_edge, __pyx_v_right_edge);
27005   goto __pyx_L0;
27006 
27007   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":14
27008  *     @cython.wraparound(False)
27009  *     @cython.cdivision(True)
27010  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
27011  *         cdef np.float64_t left_edge[3]
27012  *         cdef np.float64_t right_edge[3]
27013  */
27014 
27015   /* function exit code */
27016   __pyx_L0:;
27017   return __pyx_r;
27018 }
27019 
27020 /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":23
27021  *         return self.select_bbox(left_edge, right_edge)
27022  *
27023  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
27024  *         # two 0-volume constructs don't intersect
27025  *         return 0
27026  */
27027 
27028 static int __pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos) {
27029   int __pyx_r;
27030 
27031   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":25
27032  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
27033  *         # two 0-volume constructs don't intersect
27034  *         return 0             # <<<<<<<<<<<<<<
27035  *
27036  *     @cython.boundscheck(False)
27037  */
27038   __pyx_r = 0;
27039   goto __pyx_L0;
27040 
27041   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":23
27042  *         return self.select_bbox(left_edge, right_edge)
27043  *
27044  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
27045  *         # two 0-volume constructs don't intersect
27046  *         return 0
27047  */
27048 
27049   /* function exit code */
27050   __pyx_L0:;
27051   return __pyx_r;
27052 }
27053 
27054 /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":30
27055  *     @cython.wraparound(False)
27056  *     @cython.cdivision(True)
27057  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
27058  *         cdef int i
27059  *         cdef np.float64_t height = self.d
27060  */
27061 
27062 static int __pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
27063   int __pyx_v_i;
27064   __pyx_t_5numpy_float64_t __pyx_v_height;
27065   int __pyx_r;
27066   __pyx_t_5numpy_float64_t __pyx_t_1;
27067   int __pyx_t_2;
27068   int __pyx_t_3;
27069 
27070   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":32
27071  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
27072  *         cdef int i
27073  *         cdef np.float64_t height = self.d             # <<<<<<<<<<<<<<
27074  *         for i in range(3) :
27075  *             height += pos[i] * self.norm_vec[i]
27076  */
27077   __pyx_t_1 = __pyx_v_self->d;
27078   __pyx_v_height = __pyx_t_1;
27079 
27080   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":33
27081  *         cdef int i
27082  *         cdef np.float64_t height = self.d
27083  *         for i in range(3) :             # <<<<<<<<<<<<<<
27084  *             height += pos[i] * self.norm_vec[i]
27085  *         if height*height <= radius*radius : return 1
27086  */
27087   for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
27088     __pyx_v_i = __pyx_t_2;
27089 
27090     /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":34
27091  *         cdef np.float64_t height = self.d
27092  *         for i in range(3) :
27093  *             height += pos[i] * self.norm_vec[i]             # <<<<<<<<<<<<<<
27094  *         if height*height <= radius*radius : return 1
27095  *         return 0
27096  */
27097     __pyx_v_height = (__pyx_v_height + ((__pyx_v_pos[__pyx_v_i]) * (__pyx_v_self->norm_vec[__pyx_v_i])));
27098   }
27099 
27100   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":35
27101  *         for i in range(3) :
27102  *             height += pos[i] * self.norm_vec[i]
27103  *         if height*height <= radius*radius : return 1             # <<<<<<<<<<<<<<
27104  *         return 0
27105  *
27106  */
27107   __pyx_t_3 = (((__pyx_v_height * __pyx_v_height) <= (__pyx_v_radius * __pyx_v_radius)) != 0);
27108   if (__pyx_t_3) {
27109     __pyx_r = 1;
27110     goto __pyx_L0;
27111   }
27112 
27113   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":36
27114  *             height += pos[i] * self.norm_vec[i]
27115  *         if height*height <= radius*radius : return 1
27116  *         return 0             # <<<<<<<<<<<<<<
27117  *
27118  *     @cython.boundscheck(False)
27119  */
27120   __pyx_r = 0;
27121   goto __pyx_L0;
27122 
27123   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":30
27124  *     @cython.wraparound(False)
27125  *     @cython.cdivision(True)
27126  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
27127  *         cdef int i
27128  *         cdef np.float64_t height = self.d
27129  */
27130 
27131   /* function exit code */
27132   __pyx_L0:;
27133   return __pyx_r;
27134 }
27135 
27136 /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":41
27137  *     @cython.wraparound(False)
27138  *     @cython.cdivision(True)
27139  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
27140  *                                np.float64_t right_edge[3]) nogil:
27141  *         cdef int i, j, k, n
27142  */
27143 
27144 static int __pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
27145   int __pyx_v_i;
27146   int __pyx_v_j;
27147   int __pyx_v_k;
27148   int __pyx_v_n;
27149   __pyx_t_5numpy_float64_t *__pyx_v_arr[2];
27150   __pyx_t_5numpy_float64_t __pyx_v_pos[3];
27151   __pyx_t_5numpy_float64_t __pyx_v_gd;
27152   long __pyx_v_all_under;
27153   long __pyx_v_all_over;
27154   int __pyx_r;
27155   int __pyx_t_1;
27156   int __pyx_t_2;
27157   int __pyx_t_3;
27158   __pyx_t_5numpy_float64_t __pyx_t_4;
27159   int __pyx_t_5;
27160   int __pyx_t_6;
27161   int __pyx_t_7;
27162 
27163   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":47
27164  *         cdef np.float64_t pos[3]
27165  *         cdef np.float64_t gd
27166  *         arr[0] = left_edge             # <<<<<<<<<<<<<<
27167  *         arr[1] = right_edge
27168  *         all_under = 1
27169  */
27170   (__pyx_v_arr[0]) = __pyx_v_left_edge;
27171 
27172   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":48
27173  *         cdef np.float64_t gd
27174  *         arr[0] = left_edge
27175  *         arr[1] = right_edge             # <<<<<<<<<<<<<<
27176  *         all_under = 1
27177  *         all_over = 1
27178  */
27179   (__pyx_v_arr[1]) = __pyx_v_right_edge;
27180 
27181   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":49
27182  *         arr[0] = left_edge
27183  *         arr[1] = right_edge
27184  *         all_under = 1             # <<<<<<<<<<<<<<
27185  *         all_over = 1
27186  *         # Check each corner
27187  */
27188   __pyx_v_all_under = 1;
27189 
27190   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":50
27191  *         arr[1] = right_edge
27192  *         all_under = 1
27193  *         all_over = 1             # <<<<<<<<<<<<<<
27194  *         # Check each corner
27195  *         for i in range(2):
27196  */
27197   __pyx_v_all_over = 1;
27198 
27199   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":52
27200  *         all_over = 1
27201  *         # Check each corner
27202  *         for i in range(2):             # <<<<<<<<<<<<<<
27203  *             pos[0] = arr[i][0]
27204  *             for j in range(2):
27205  */
27206   for (__pyx_t_1 = 0; __pyx_t_1 < 2; __pyx_t_1+=1) {
27207     __pyx_v_i = __pyx_t_1;
27208 
27209     /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":53
27210  *         # Check each corner
27211  *         for i in range(2):
27212  *             pos[0] = arr[i][0]             # <<<<<<<<<<<<<<
27213  *             for j in range(2):
27214  *                 pos[1] = arr[j][1]
27215  */
27216     (__pyx_v_pos[0]) = ((__pyx_v_arr[__pyx_v_i])[0]);
27217 
27218     /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":54
27219  *         for i in range(2):
27220  *             pos[0] = arr[i][0]
27221  *             for j in range(2):             # <<<<<<<<<<<<<<
27222  *                 pos[1] = arr[j][1]
27223  *                 for k in range(2):
27224  */
27225     for (__pyx_t_2 = 0; __pyx_t_2 < 2; __pyx_t_2+=1) {
27226       __pyx_v_j = __pyx_t_2;
27227 
27228       /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":55
27229  *             pos[0] = arr[i][0]
27230  *             for j in range(2):
27231  *                 pos[1] = arr[j][1]             # <<<<<<<<<<<<<<
27232  *                 for k in range(2):
27233  *                     pos[2] = arr[k][2]
27234  */
27235       (__pyx_v_pos[1]) = ((__pyx_v_arr[__pyx_v_j])[1]);
27236 
27237       /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":56
27238  *             for j in range(2):
27239  *                 pos[1] = arr[j][1]
27240  *                 for k in range(2):             # <<<<<<<<<<<<<<
27241  *                     pos[2] = arr[k][2]
27242  *                     gd = self.d
27243  */
27244       for (__pyx_t_3 = 0; __pyx_t_3 < 2; __pyx_t_3+=1) {
27245         __pyx_v_k = __pyx_t_3;
27246 
27247         /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":57
27248  *                 pos[1] = arr[j][1]
27249  *                 for k in range(2):
27250  *                     pos[2] = arr[k][2]             # <<<<<<<<<<<<<<
27251  *                     gd = self.d
27252  *                     for n in range(3):
27253  */
27254         (__pyx_v_pos[2]) = ((__pyx_v_arr[__pyx_v_k])[2]);
27255 
27256         /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":58
27257  *                 for k in range(2):
27258  *                     pos[2] = arr[k][2]
27259  *                     gd = self.d             # <<<<<<<<<<<<<<
27260  *                     for n in range(3):
27261  *                         gd += pos[n] * self.norm_vec[n]
27262  */
27263         __pyx_t_4 = __pyx_v_self->d;
27264         __pyx_v_gd = __pyx_t_4;
27265 
27266         /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":59
27267  *                     pos[2] = arr[k][2]
27268  *                     gd = self.d
27269  *                     for n in range(3):             # <<<<<<<<<<<<<<
27270  *                         gd += pos[n] * self.norm_vec[n]
27271  *                     # this allows corners and faces on the low-end to
27272  */
27273         for (__pyx_t_5 = 0; __pyx_t_5 < 3; __pyx_t_5+=1) {
27274           __pyx_v_n = __pyx_t_5;
27275 
27276           /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":60
27277  *                     gd = self.d
27278  *                     for n in range(3):
27279  *                         gd += pos[n] * self.norm_vec[n]             # <<<<<<<<<<<<<<
27280  *                     # this allows corners and faces on the low-end to
27281  *                     # collide, while not selecting cells on the high-side
27282  */
27283           __pyx_v_gd = (__pyx_v_gd + ((__pyx_v_pos[__pyx_v_n]) * (__pyx_v_self->norm_vec[__pyx_v_n])));
27284         }
27285 
27286         /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":63
27287  *                     # this allows corners and faces on the low-end to
27288  *                     # collide, while not selecting cells on the high-side
27289  *                     if i == 0 and j == 0 and k == 0 :             # <<<<<<<<<<<<<<
27290  *                         if gd <= 0: all_over = 0
27291  *                         if gd >= 0: all_under = 0
27292  */
27293         __pyx_t_7 = ((__pyx_v_i == 0) != 0);
27294         if (__pyx_t_7) {
27295         } else {
27296           __pyx_t_6 = __pyx_t_7;
27297           goto __pyx_L12_bool_binop_done;
27298         }
27299         __pyx_t_7 = ((__pyx_v_j == 0) != 0);
27300         if (__pyx_t_7) {
27301         } else {
27302           __pyx_t_6 = __pyx_t_7;
27303           goto __pyx_L12_bool_binop_done;
27304         }
27305         __pyx_t_7 = ((__pyx_v_k == 0) != 0);
27306         __pyx_t_6 = __pyx_t_7;
27307         __pyx_L12_bool_binop_done:;
27308         if (__pyx_t_6) {
27309 
27310           /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":64
27311  *                     # collide, while not selecting cells on the high-side
27312  *                     if i == 0 and j == 0 and k == 0 :
27313  *                         if gd <= 0: all_over = 0             # <<<<<<<<<<<<<<
27314  *                         if gd >= 0: all_under = 0
27315  *                     else :
27316  */
27317           __pyx_t_6 = ((__pyx_v_gd <= 0.0) != 0);
27318           if (__pyx_t_6) {
27319             __pyx_v_all_over = 0;
27320           }
27321 
27322           /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":65
27323  *                     if i == 0 and j == 0 and k == 0 :
27324  *                         if gd <= 0: all_over = 0
27325  *                         if gd >= 0: all_under = 0             # <<<<<<<<<<<<<<
27326  *                     else :
27327  *                         if gd < 0: all_over = 0
27328  */
27329           __pyx_t_6 = ((__pyx_v_gd >= 0.0) != 0);
27330           if (__pyx_t_6) {
27331             __pyx_v_all_under = 0;
27332           }
27333 
27334           /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":63
27335  *                     # this allows corners and faces on the low-end to
27336  *                     # collide, while not selecting cells on the high-side
27337  *                     if i == 0 and j == 0 and k == 0 :             # <<<<<<<<<<<<<<
27338  *                         if gd <= 0: all_over = 0
27339  *                         if gd >= 0: all_under = 0
27340  */
27341           goto __pyx_L11;
27342         }
27343 
27344         /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":67
27345  *                         if gd >= 0: all_under = 0
27346  *                     else :
27347  *                         if gd < 0: all_over = 0             # <<<<<<<<<<<<<<
27348  *                         if gd > 0: all_under = 0
27349  *         if all_over == 1 or all_under == 1:
27350  */
27351         /*else*/ {
27352           __pyx_t_6 = ((__pyx_v_gd < 0.0) != 0);
27353           if (__pyx_t_6) {
27354             __pyx_v_all_over = 0;
27355           }
27356 
27357           /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":68
27358  *                     else :
27359  *                         if gd < 0: all_over = 0
27360  *                         if gd > 0: all_under = 0             # <<<<<<<<<<<<<<
27361  *         if all_over == 1 or all_under == 1:
27362  *             return 0
27363  */
27364           __pyx_t_6 = ((__pyx_v_gd > 0.0) != 0);
27365           if (__pyx_t_6) {
27366             __pyx_v_all_under = 0;
27367           }
27368         }
27369         __pyx_L11:;
27370       }
27371     }
27372   }
27373 
27374   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":69
27375  *                         if gd < 0: all_over = 0
27376  *                         if gd > 0: all_under = 0
27377  *         if all_over == 1 or all_under == 1:             # <<<<<<<<<<<<<<
27378  *             return 0
27379  *         return 1
27380  */
27381   __pyx_t_7 = ((__pyx_v_all_over == 1) != 0);
27382   if (!__pyx_t_7) {
27383   } else {
27384     __pyx_t_6 = __pyx_t_7;
27385     goto __pyx_L20_bool_binop_done;
27386   }
27387   __pyx_t_7 = ((__pyx_v_all_under == 1) != 0);
27388   __pyx_t_6 = __pyx_t_7;
27389   __pyx_L20_bool_binop_done:;
27390   if (__pyx_t_6) {
27391 
27392     /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":70
27393  *                         if gd > 0: all_under = 0
27394  *         if all_over == 1 or all_under == 1:
27395  *             return 0             # <<<<<<<<<<<<<<
27396  *         return 1
27397  *
27398  */
27399     __pyx_r = 0;
27400     goto __pyx_L0;
27401 
27402     /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":69
27403  *                         if gd < 0: all_over = 0
27404  *                         if gd > 0: all_under = 0
27405  *         if all_over == 1 or all_under == 1:             # <<<<<<<<<<<<<<
27406  *             return 0
27407  *         return 1
27408  */
27409   }
27410 
27411   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":71
27412  *         if all_over == 1 or all_under == 1:
27413  *             return 0
27414  *         return 1             # <<<<<<<<<<<<<<
27415  *
27416  *     @cython.boundscheck(False)
27417  */
27418   __pyx_r = 1;
27419   goto __pyx_L0;
27420 
27421   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":41
27422  *     @cython.wraparound(False)
27423  *     @cython.cdivision(True)
27424  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
27425  *                                np.float64_t right_edge[3]) nogil:
27426  *         cdef int i, j, k, n
27427  */
27428 
27429   /* function exit code */
27430   __pyx_L0:;
27431   return __pyx_r;
27432 }
27433 
27434 /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":76
27435  *     @cython.wraparound(False)
27436  *     @cython.cdivision(True)
27437  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
27438  *                                np.float64_t right_edge[3]) nogil:
27439  *         cdef int i, j, k, n
27440  */
27441 
27442 static int __pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
27443   int __pyx_v_i;
27444   int __pyx_v_j;
27445   int __pyx_v_k;
27446   int __pyx_v_n;
27447   __pyx_t_5numpy_float64_t *__pyx_v_arr[2];
27448   __pyx_t_5numpy_float64_t __pyx_v_pos[3];
27449   __pyx_t_5numpy_float64_t __pyx_v_gd;
27450   long __pyx_v_all_under;
27451   long __pyx_v_all_over;
27452   int __pyx_r;
27453   int __pyx_t_1;
27454   int __pyx_t_2;
27455   int __pyx_t_3;
27456   __pyx_t_5numpy_float64_t __pyx_t_4;
27457   int __pyx_t_5;
27458   int __pyx_t_6;
27459   int __pyx_t_7;
27460 
27461   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":82
27462  *         cdef np.float64_t pos[3]
27463  *         cdef np.float64_t gd
27464  *         arr[0] = left_edge             # <<<<<<<<<<<<<<
27465  *         arr[1] = right_edge
27466  *         all_under = 1
27467  */
27468   (__pyx_v_arr[0]) = __pyx_v_left_edge;
27469 
27470   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":83
27471  *         cdef np.float64_t gd
27472  *         arr[0] = left_edge
27473  *         arr[1] = right_edge             # <<<<<<<<<<<<<<
27474  *         all_under = 1
27475  *         all_over = 1
27476  */
27477   (__pyx_v_arr[1]) = __pyx_v_right_edge;
27478 
27479   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":84
27480  *         arr[0] = left_edge
27481  *         arr[1] = right_edge
27482  *         all_under = 1             # <<<<<<<<<<<<<<
27483  *         all_over = 1
27484  *         # Check each corner
27485  */
27486   __pyx_v_all_under = 1;
27487 
27488   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":85
27489  *         arr[1] = right_edge
27490  *         all_under = 1
27491  *         all_over = 1             # <<<<<<<<<<<<<<
27492  *         # Check each corner
27493  *         for i in range(2):
27494  */
27495   __pyx_v_all_over = 1;
27496 
27497   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":87
27498  *         all_over = 1
27499  *         # Check each corner
27500  *         for i in range(2):             # <<<<<<<<<<<<<<
27501  *             pos[0] = arr[i][0]
27502  *             for j in range(2):
27503  */
27504   for (__pyx_t_1 = 0; __pyx_t_1 < 2; __pyx_t_1+=1) {
27505     __pyx_v_i = __pyx_t_1;
27506 
27507     /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":88
27508  *         # Check each corner
27509  *         for i in range(2):
27510  *             pos[0] = arr[i][0]             # <<<<<<<<<<<<<<
27511  *             for j in range(2):
27512  *                 pos[1] = arr[j][1]
27513  */
27514     (__pyx_v_pos[0]) = ((__pyx_v_arr[__pyx_v_i])[0]);
27515 
27516     /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":89
27517  *         for i in range(2):
27518  *             pos[0] = arr[i][0]
27519  *             for j in range(2):             # <<<<<<<<<<<<<<
27520  *                 pos[1] = arr[j][1]
27521  *                 for k in range(2):
27522  */
27523     for (__pyx_t_2 = 0; __pyx_t_2 < 2; __pyx_t_2+=1) {
27524       __pyx_v_j = __pyx_t_2;
27525 
27526       /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":90
27527  *             pos[0] = arr[i][0]
27528  *             for j in range(2):
27529  *                 pos[1] = arr[j][1]             # <<<<<<<<<<<<<<
27530  *                 for k in range(2):
27531  *                     pos[2] = arr[k][2]
27532  */
27533       (__pyx_v_pos[1]) = ((__pyx_v_arr[__pyx_v_j])[1]);
27534 
27535       /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":91
27536  *             for j in range(2):
27537  *                 pos[1] = arr[j][1]
27538  *                 for k in range(2):             # <<<<<<<<<<<<<<
27539  *                     pos[2] = arr[k][2]
27540  *                     gd = self.d
27541  */
27542       for (__pyx_t_3 = 0; __pyx_t_3 < 2; __pyx_t_3+=1) {
27543         __pyx_v_k = __pyx_t_3;
27544 
27545         /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":92
27546  *                 pos[1] = arr[j][1]
27547  *                 for k in range(2):
27548  *                     pos[2] = arr[k][2]             # <<<<<<<<<<<<<<
27549  *                     gd = self.d
27550  *                     for n in range(3):
27551  */
27552         (__pyx_v_pos[2]) = ((__pyx_v_arr[__pyx_v_k])[2]);
27553 
27554         /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":93
27555  *                 for k in range(2):
27556  *                     pos[2] = arr[k][2]
27557  *                     gd = self.d             # <<<<<<<<<<<<<<
27558  *                     for n in range(3):
27559  *                         gd += pos[n] * self.norm_vec[n]
27560  */
27561         __pyx_t_4 = __pyx_v_self->d;
27562         __pyx_v_gd = __pyx_t_4;
27563 
27564         /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":94
27565  *                     pos[2] = arr[k][2]
27566  *                     gd = self.d
27567  *                     for n in range(3):             # <<<<<<<<<<<<<<
27568  *                         gd += pos[n] * self.norm_vec[n]
27569  *                     # this allows corners and faces on the low-end to
27570  */
27571         for (__pyx_t_5 = 0; __pyx_t_5 < 3; __pyx_t_5+=1) {
27572           __pyx_v_n = __pyx_t_5;
27573 
27574           /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":95
27575  *                     gd = self.d
27576  *                     for n in range(3):
27577  *                         gd += pos[n] * self.norm_vec[n]             # <<<<<<<<<<<<<<
27578  *                     # this allows corners and faces on the low-end to
27579  *                     # collide, while not selecting cells on the high-side
27580  */
27581           __pyx_v_gd = (__pyx_v_gd + ((__pyx_v_pos[__pyx_v_n]) * (__pyx_v_self->norm_vec[__pyx_v_n])));
27582         }
27583 
27584         /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":98
27585  *                     # this allows corners and faces on the low-end to
27586  *                     # collide, while not selecting cells on the high-side
27587  *                     if i == 0 and j == 0 and k == 0 :             # <<<<<<<<<<<<<<
27588  *                         if gd <= 0: all_over = 0
27589  *                         if gd >= 0: all_under = 0
27590  */
27591         __pyx_t_7 = ((__pyx_v_i == 0) != 0);
27592         if (__pyx_t_7) {
27593         } else {
27594           __pyx_t_6 = __pyx_t_7;
27595           goto __pyx_L12_bool_binop_done;
27596         }
27597         __pyx_t_7 = ((__pyx_v_j == 0) != 0);
27598         if (__pyx_t_7) {
27599         } else {
27600           __pyx_t_6 = __pyx_t_7;
27601           goto __pyx_L12_bool_binop_done;
27602         }
27603         __pyx_t_7 = ((__pyx_v_k == 0) != 0);
27604         __pyx_t_6 = __pyx_t_7;
27605         __pyx_L12_bool_binop_done:;
27606         if (__pyx_t_6) {
27607 
27608           /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":99
27609  *                     # collide, while not selecting cells on the high-side
27610  *                     if i == 0 and j == 0 and k == 0 :
27611  *                         if gd <= 0: all_over = 0             # <<<<<<<<<<<<<<
27612  *                         if gd >= 0: all_under = 0
27613  *                     else :
27614  */
27615           __pyx_t_6 = ((__pyx_v_gd <= 0.0) != 0);
27616           if (__pyx_t_6) {
27617             __pyx_v_all_over = 0;
27618           }
27619 
27620           /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":100
27621  *                     if i == 0 and j == 0 and k == 0 :
27622  *                         if gd <= 0: all_over = 0
27623  *                         if gd >= 0: all_under = 0             # <<<<<<<<<<<<<<
27624  *                     else :
27625  *                         if gd < 0: all_over = 0
27626  */
27627           __pyx_t_6 = ((__pyx_v_gd >= 0.0) != 0);
27628           if (__pyx_t_6) {
27629             __pyx_v_all_under = 0;
27630           }
27631 
27632           /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":98
27633  *                     # this allows corners and faces on the low-end to
27634  *                     # collide, while not selecting cells on the high-side
27635  *                     if i == 0 and j == 0 and k == 0 :             # <<<<<<<<<<<<<<
27636  *                         if gd <= 0: all_over = 0
27637  *                         if gd >= 0: all_under = 0
27638  */
27639           goto __pyx_L11;
27640         }
27641 
27642         /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":102
27643  *                         if gd >= 0: all_under = 0
27644  *                     else :
27645  *                         if gd < 0: all_over = 0             # <<<<<<<<<<<<<<
27646  *                         if gd > 0: all_under = 0
27647  *         if all_over == 1 or all_under == 1:
27648  */
27649         /*else*/ {
27650           __pyx_t_6 = ((__pyx_v_gd < 0.0) != 0);
27651           if (__pyx_t_6) {
27652             __pyx_v_all_over = 0;
27653           }
27654 
27655           /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":103
27656  *                     else :
27657  *                         if gd < 0: all_over = 0
27658  *                         if gd > 0: all_under = 0             # <<<<<<<<<<<<<<
27659  *         if all_over == 1 or all_under == 1:
27660  *             return 0
27661  */
27662           __pyx_t_6 = ((__pyx_v_gd > 0.0) != 0);
27663           if (__pyx_t_6) {
27664             __pyx_v_all_under = 0;
27665           }
27666         }
27667         __pyx_L11:;
27668       }
27669     }
27670   }
27671 
27672   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":104
27673  *                         if gd < 0: all_over = 0
27674  *                         if gd > 0: all_under = 0
27675  *         if all_over == 1 or all_under == 1:             # <<<<<<<<<<<<<<
27676  *             return 0
27677  *         return 2 # a box of non-zeros volume can't be inside a plane
27678  */
27679   __pyx_t_7 = ((__pyx_v_all_over == 1) != 0);
27680   if (!__pyx_t_7) {
27681   } else {
27682     __pyx_t_6 = __pyx_t_7;
27683     goto __pyx_L20_bool_binop_done;
27684   }
27685   __pyx_t_7 = ((__pyx_v_all_under == 1) != 0);
27686   __pyx_t_6 = __pyx_t_7;
27687   __pyx_L20_bool_binop_done:;
27688   if (__pyx_t_6) {
27689 
27690     /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":105
27691  *                         if gd > 0: all_under = 0
27692  *         if all_over == 1 or all_under == 1:
27693  *             return 0             # <<<<<<<<<<<<<<
27694  *         return 2 # a box of non-zeros volume can't be inside a plane
27695  *
27696  */
27697     __pyx_r = 0;
27698     goto __pyx_L0;
27699 
27700     /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":104
27701  *                         if gd < 0: all_over = 0
27702  *                         if gd > 0: all_under = 0
27703  *         if all_over == 1 or all_under == 1:             # <<<<<<<<<<<<<<
27704  *             return 0
27705  *         return 2 # a box of non-zeros volume can't be inside a plane
27706  */
27707   }
27708 
27709   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":106
27710  *         if all_over == 1 or all_under == 1:
27711  *             return 0
27712  *         return 2 # a box of non-zeros volume can't be inside a plane             # <<<<<<<<<<<<<<
27713  *
27714  *     def _hash_vals(self):
27715  */
27716   __pyx_r = 2;
27717   goto __pyx_L0;
27718 
27719   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":76
27720  *     @cython.wraparound(False)
27721  *     @cython.cdivision(True)
27722  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
27723  *                                np.float64_t right_edge[3]) nogil:
27724  *         cdef int i, j, k, n
27725  */
27726 
27727   /* function exit code */
27728   __pyx_L0:;
27729   return __pyx_r;
27730 }
27731 
27732 /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":108
27733  *         return 2 # a box of non-zeros volume can't be inside a plane
27734  *
27735  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
27736  *         return (("norm_vec[0]", self.norm_vec[0]),
27737  *                 ("norm_vec[1]", self.norm_vec[1]),
27738  */
27739 
27740 /* Python wrapper */
27741 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
27742 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
27743   PyObject *__pyx_r = 0;
27744   __Pyx_RefNannyDeclarations
27745   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
27746   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_2_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *)__pyx_v_self));
27747 
27748   /* function exit code */
27749   __Pyx_RefNannyFinishContext();
27750   return __pyx_r;
27751 }
27752 
27753 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self) {
27754   PyObject *__pyx_r = NULL;
27755   __Pyx_RefNannyDeclarations
27756   PyObject *__pyx_t_1 = NULL;
27757   PyObject *__pyx_t_2 = NULL;
27758   PyObject *__pyx_t_3 = NULL;
27759   PyObject *__pyx_t_4 = NULL;
27760   PyObject *__pyx_t_5 = NULL;
27761   __Pyx_RefNannySetupContext("_hash_vals", 0);
27762 
27763   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":109
27764  *
27765  *     def _hash_vals(self):
27766  *         return (("norm_vec[0]", self.norm_vec[0]),             # <<<<<<<<<<<<<<
27767  *                 ("norm_vec[1]", self.norm_vec[1]),
27768  *                 ("norm_vec[2]", self.norm_vec[2]),
27769  */
27770   __Pyx_XDECREF(__pyx_r);
27771   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->norm_vec[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 109, __pyx_L1_error)
27772   __Pyx_GOTREF(__pyx_t_1);
27773   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 109, __pyx_L1_error)
27774   __Pyx_GOTREF(__pyx_t_2);
27775   __Pyx_INCREF(__pyx_kp_s_norm_vec_0);
27776   __Pyx_GIVEREF(__pyx_kp_s_norm_vec_0);
27777   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_s_norm_vec_0);
27778   __Pyx_GIVEREF(__pyx_t_1);
27779   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
27780   __pyx_t_1 = 0;
27781 
27782   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":110
27783  *     def _hash_vals(self):
27784  *         return (("norm_vec[0]", self.norm_vec[0]),
27785  *                 ("norm_vec[1]", self.norm_vec[1]),             # <<<<<<<<<<<<<<
27786  *                 ("norm_vec[2]", self.norm_vec[2]),
27787  *                 ("d", self.d))
27788  */
27789   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->norm_vec[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 110, __pyx_L1_error)
27790   __Pyx_GOTREF(__pyx_t_1);
27791   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 110, __pyx_L1_error)
27792   __Pyx_GOTREF(__pyx_t_3);
27793   __Pyx_INCREF(__pyx_kp_s_norm_vec_1);
27794   __Pyx_GIVEREF(__pyx_kp_s_norm_vec_1);
27795   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_norm_vec_1);
27796   __Pyx_GIVEREF(__pyx_t_1);
27797   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
27798   __pyx_t_1 = 0;
27799 
27800   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":111
27801  *         return (("norm_vec[0]", self.norm_vec[0]),
27802  *                 ("norm_vec[1]", self.norm_vec[1]),
27803  *                 ("norm_vec[2]", self.norm_vec[2]),             # <<<<<<<<<<<<<<
27804  *                 ("d", self.d))
27805  *
27806  */
27807   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->norm_vec[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 111, __pyx_L1_error)
27808   __Pyx_GOTREF(__pyx_t_1);
27809   __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 111, __pyx_L1_error)
27810   __Pyx_GOTREF(__pyx_t_4);
27811   __Pyx_INCREF(__pyx_kp_s_norm_vec_2);
27812   __Pyx_GIVEREF(__pyx_kp_s_norm_vec_2);
27813   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_s_norm_vec_2);
27814   __Pyx_GIVEREF(__pyx_t_1);
27815   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
27816   __pyx_t_1 = 0;
27817 
27818   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":112
27819  *                 ("norm_vec[1]", self.norm_vec[1]),
27820  *                 ("norm_vec[2]", self.norm_vec[2]),
27821  *                 ("d", self.d))             # <<<<<<<<<<<<<<
27822  *
27823  *     def _get_state_attnames(self):
27824  */
27825   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->d); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 112, __pyx_L1_error)
27826   __Pyx_GOTREF(__pyx_t_1);
27827   __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 112, __pyx_L1_error)
27828   __Pyx_GOTREF(__pyx_t_5);
27829   __Pyx_INCREF(__pyx_n_s_d);
27830   __Pyx_GIVEREF(__pyx_n_s_d);
27831   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_d);
27832   __Pyx_GIVEREF(__pyx_t_1);
27833   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
27834   __pyx_t_1 = 0;
27835 
27836   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":109
27837  *
27838  *     def _hash_vals(self):
27839  *         return (("norm_vec[0]", self.norm_vec[0]),             # <<<<<<<<<<<<<<
27840  *                 ("norm_vec[1]", self.norm_vec[1]),
27841  *                 ("norm_vec[2]", self.norm_vec[2]),
27842  */
27843   __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 109, __pyx_L1_error)
27844   __Pyx_GOTREF(__pyx_t_1);
27845   __Pyx_GIVEREF(__pyx_t_2);
27846   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
27847   __Pyx_GIVEREF(__pyx_t_3);
27848   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
27849   __Pyx_GIVEREF(__pyx_t_4);
27850   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
27851   __Pyx_GIVEREF(__pyx_t_5);
27852   PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_5);
27853   __pyx_t_2 = 0;
27854   __pyx_t_3 = 0;
27855   __pyx_t_4 = 0;
27856   __pyx_t_5 = 0;
27857   __pyx_r = __pyx_t_1;
27858   __pyx_t_1 = 0;
27859   goto __pyx_L0;
27860 
27861   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":108
27862  *         return 2 # a box of non-zeros volume can't be inside a plane
27863  *
27864  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
27865  *         return (("norm_vec[0]", self.norm_vec[0]),
27866  *                 ("norm_vec[1]", self.norm_vec[1]),
27867  */
27868 
27869   /* function exit code */
27870   __pyx_L1_error:;
27871   __Pyx_XDECREF(__pyx_t_1);
27872   __Pyx_XDECREF(__pyx_t_2);
27873   __Pyx_XDECREF(__pyx_t_3);
27874   __Pyx_XDECREF(__pyx_t_4);
27875   __Pyx_XDECREF(__pyx_t_5);
27876   __Pyx_AddTraceback("yt.geometry.selection_routines.CuttingPlaneSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
27877   __pyx_r = NULL;
27878   __pyx_L0:;
27879   __Pyx_XGIVEREF(__pyx_r);
27880   __Pyx_RefNannyFinishContext();
27881   return __pyx_r;
27882 }
27883 
27884 /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":114
27885  *                 ("d", self.d))
27886  *
27887  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
27888  *         return ("d", "norm_vec")
27889  *
27890  */
27891 
27892 /* Python wrapper */
27893 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_5_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
27894 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_5_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
27895   PyObject *__pyx_r = 0;
27896   __Pyx_RefNannyDeclarations
27897   __Pyx_RefNannySetupContext("_get_state_attnames (wrapper)", 0);
27898   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_4_get_state_attnames(((struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *)__pyx_v_self));
27899 
27900   /* function exit code */
27901   __Pyx_RefNannyFinishContext();
27902   return __pyx_r;
27903 }
27904 
27905 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_4_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self) {
27906   PyObject *__pyx_r = NULL;
27907   __Pyx_RefNannyDeclarations
27908   __Pyx_RefNannySetupContext("_get_state_attnames", 0);
27909 
27910   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":115
27911  *
27912  *     def _get_state_attnames(self):
27913  *         return ("d", "norm_vec")             # <<<<<<<<<<<<<<
27914  *
27915  * cutting_selector = CuttingPlaneSelector
27916  */
27917   __Pyx_XDECREF(__pyx_r);
27918   __Pyx_INCREF(__pyx_tuple__24);
27919   __pyx_r = __pyx_tuple__24;
27920   goto __pyx_L0;
27921 
27922   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":114
27923  *                 ("d", self.d))
27924  *
27925  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
27926  *         return ("d", "norm_vec")
27927  *
27928  */
27929 
27930   /* function exit code */
27931   __pyx_L0:;
27932   __Pyx_XGIVEREF(__pyx_r);
27933   __Pyx_RefNannyFinishContext();
27934   return __pyx_r;
27935 }
27936 
27937 /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":2
27938  * cdef class CuttingPlaneSelector(SelectorObject):
27939  *     cdef public np.float64_t norm_vec[3]             # <<<<<<<<<<<<<<
27940  *     cdef public np.float64_t d
27941  *
27942  */
27943 
27944 /* Python wrapper */
27945 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8norm_vec_1__get__(PyObject *__pyx_v_self); /*proto*/
27946 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8norm_vec_1__get__(PyObject *__pyx_v_self) {
27947   PyObject *__pyx_r = 0;
27948   __Pyx_RefNannyDeclarations
27949   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
27950   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8norm_vec___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *)__pyx_v_self));
27951 
27952   /* function exit code */
27953   __Pyx_RefNannyFinishContext();
27954   return __pyx_r;
27955 }
27956 
27957 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8norm_vec___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self) {
27958   PyObject *__pyx_r = NULL;
27959   __Pyx_RefNannyDeclarations
27960   PyObject *__pyx_t_1 = NULL;
27961   __Pyx_RefNannySetupContext("__get__", 0);
27962   __Pyx_XDECREF(__pyx_r);
27963   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->norm_vec, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 2, __pyx_L1_error)
27964   __Pyx_GOTREF(__pyx_t_1);
27965   __pyx_r = __pyx_t_1;
27966   __pyx_t_1 = 0;
27967   goto __pyx_L0;
27968 
27969   /* function exit code */
27970   __pyx_L1_error:;
27971   __Pyx_XDECREF(__pyx_t_1);
27972   __Pyx_AddTraceback("yt.geometry.selection_routines.CuttingPlaneSelector.norm_vec.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
27973   __pyx_r = NULL;
27974   __pyx_L0:;
27975   __Pyx_XGIVEREF(__pyx_r);
27976   __Pyx_RefNannyFinishContext();
27977   return __pyx_r;
27978 }
27979 
27980 /* Python wrapper */
27981 static int __pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8norm_vec_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
27982 static int __pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8norm_vec_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
27983   int __pyx_r;
27984   __Pyx_RefNannyDeclarations
27985   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
27986   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8norm_vec_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
27987 
27988   /* function exit code */
27989   __Pyx_RefNannyFinishContext();
27990   return __pyx_r;
27991 }
27992 
27993 static int __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8norm_vec_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, PyObject *__pyx_v_value) {
27994   int __pyx_r;
27995   __Pyx_RefNannyDeclarations
27996   __pyx_t_5numpy_float64_t __pyx_t_1[3];
27997   __Pyx_RefNannySetupContext("__set__", 0);
27998   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(9, 2, __pyx_L1_error)
27999   memcpy(&(__pyx_v_self->norm_vec[0]), __pyx_t_1, sizeof(__pyx_v_self->norm_vec[0]) * (3));
28000 
28001   /* function exit code */
28002   __pyx_r = 0;
28003   goto __pyx_L0;
28004   __pyx_L1_error:;
28005   __Pyx_AddTraceback("yt.geometry.selection_routines.CuttingPlaneSelector.norm_vec.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
28006   __pyx_r = -1;
28007   __pyx_L0:;
28008   __Pyx_RefNannyFinishContext();
28009   return __pyx_r;
28010 }
28011 
28012 /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":3
28013  * cdef class CuttingPlaneSelector(SelectorObject):
28014  *     cdef public np.float64_t norm_vec[3]
28015  *     cdef public np.float64_t d             # <<<<<<<<<<<<<<
28016  *
28017  *     def __init__(self, dobj):
28018  */
28019 
28020 /* Python wrapper */
28021 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1d_1__get__(PyObject *__pyx_v_self); /*proto*/
28022 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1d_1__get__(PyObject *__pyx_v_self) {
28023   PyObject *__pyx_r = 0;
28024   __Pyx_RefNannyDeclarations
28025   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
28026   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1d___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *)__pyx_v_self));
28027 
28028   /* function exit code */
28029   __Pyx_RefNannyFinishContext();
28030   return __pyx_r;
28031 }
28032 
28033 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1d___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self) {
28034   PyObject *__pyx_r = NULL;
28035   __Pyx_RefNannyDeclarations
28036   PyObject *__pyx_t_1 = NULL;
28037   __Pyx_RefNannySetupContext("__get__", 0);
28038   __Pyx_XDECREF(__pyx_r);
28039   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->d); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 3, __pyx_L1_error)
28040   __Pyx_GOTREF(__pyx_t_1);
28041   __pyx_r = __pyx_t_1;
28042   __pyx_t_1 = 0;
28043   goto __pyx_L0;
28044 
28045   /* function exit code */
28046   __pyx_L1_error:;
28047   __Pyx_XDECREF(__pyx_t_1);
28048   __Pyx_AddTraceback("yt.geometry.selection_routines.CuttingPlaneSelector.d.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
28049   __pyx_r = NULL;
28050   __pyx_L0:;
28051   __Pyx_XGIVEREF(__pyx_r);
28052   __Pyx_RefNannyFinishContext();
28053   return __pyx_r;
28054 }
28055 
28056 /* Python wrapper */
28057 static int __pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1d_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
28058 static int __pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1d_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
28059   int __pyx_r;
28060   __Pyx_RefNannyDeclarations
28061   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
28062   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1d_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
28063 
28064   /* function exit code */
28065   __Pyx_RefNannyFinishContext();
28066   return __pyx_r;
28067 }
28068 
28069 static int __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1d_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, PyObject *__pyx_v_value) {
28070   int __pyx_r;
28071   __Pyx_RefNannyDeclarations
28072   __pyx_t_5numpy_float64_t __pyx_t_1;
28073   __Pyx_RefNannySetupContext("__set__", 0);
28074   __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(9, 3, __pyx_L1_error)
28075   __pyx_v_self->d = __pyx_t_1;
28076 
28077   /* function exit code */
28078   __pyx_r = 0;
28079   goto __pyx_L0;
28080   __pyx_L1_error:;
28081   __Pyx_AddTraceback("yt.geometry.selection_routines.CuttingPlaneSelector.d.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
28082   __pyx_r = -1;
28083   __pyx_L0:;
28084   __Pyx_RefNannyFinishContext();
28085   return __pyx_r;
28086 }
28087 
28088 /* "(tree fragment)":1
28089  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
28090  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
28091  * def __setstate_cython__(self, __pyx_state):
28092  */
28093 
28094 /* Python wrapper */
28095 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
28096 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
28097   PyObject *__pyx_r = 0;
28098   __Pyx_RefNannyDeclarations
28099   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
28100   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_6__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *)__pyx_v_self));
28101 
28102   /* function exit code */
28103   __Pyx_RefNannyFinishContext();
28104   return __pyx_r;
28105 }
28106 
28107 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self) {
28108   PyObject *__pyx_r = NULL;
28109   __Pyx_RefNannyDeclarations
28110   PyObject *__pyx_t_1 = NULL;
28111   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
28112 
28113   /* "(tree fragment)":2
28114  * def __reduce_cython__(self):
28115  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
28116  * def __setstate_cython__(self, __pyx_state):
28117  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
28118  */
28119   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
28120   __Pyx_GOTREF(__pyx_t_1);
28121   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
28122   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28123   __PYX_ERR(5, 2, __pyx_L1_error)
28124 
28125   /* "(tree fragment)":1
28126  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
28127  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
28128  * def __setstate_cython__(self, __pyx_state):
28129  */
28130 
28131   /* function exit code */
28132   __pyx_L1_error:;
28133   __Pyx_XDECREF(__pyx_t_1);
28134   __Pyx_AddTraceback("yt.geometry.selection_routines.CuttingPlaneSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
28135   __pyx_r = NULL;
28136   __Pyx_XGIVEREF(__pyx_r);
28137   __Pyx_RefNannyFinishContext();
28138   return __pyx_r;
28139 }
28140 
28141 /* "(tree fragment)":3
28142  * def __reduce_cython__(self):
28143  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
28144  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
28145  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
28146  */
28147 
28148 /* Python wrapper */
28149 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
28150 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
28151   PyObject *__pyx_r = 0;
28152   __Pyx_RefNannyDeclarations
28153   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
28154   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
28155 
28156   /* function exit code */
28157   __Pyx_RefNannyFinishContext();
28158   return __pyx_r;
28159 }
28160 
28161 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
28162   PyObject *__pyx_r = NULL;
28163   __Pyx_RefNannyDeclarations
28164   PyObject *__pyx_t_1 = NULL;
28165   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
28166 
28167   /* "(tree fragment)":4
28168  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
28169  * def __setstate_cython__(self, __pyx_state):
28170  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
28171  */
28172   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
28173   __Pyx_GOTREF(__pyx_t_1);
28174   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
28175   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28176   __PYX_ERR(5, 4, __pyx_L1_error)
28177 
28178   /* "(tree fragment)":3
28179  * def __reduce_cython__(self):
28180  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
28181  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
28182  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
28183  */
28184 
28185   /* function exit code */
28186   __pyx_L1_error:;
28187   __Pyx_XDECREF(__pyx_t_1);
28188   __Pyx_AddTraceback("yt.geometry.selection_routines.CuttingPlaneSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
28189   __pyx_r = NULL;
28190   __Pyx_XGIVEREF(__pyx_r);
28191   __Pyx_RefNannyFinishContext();
28192   return __pyx_r;
28193 }
28194 
28195 /* "yt/geometry/_selection_routines/slice_selector.pxi":7
28196  *     cdef public int reduced_dimensionality
28197  *
28198  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
28199  *         self.axis = dobj.axis
28200  *         self.coord = _ensure_code(dobj.coord)
28201  */
28202 
28203 /* Python wrapper */
28204 static int __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
28205 static int __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
28206   PyObject *__pyx_v_dobj = 0;
28207   int __pyx_r;
28208   __Pyx_RefNannyDeclarations
28209   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
28210   {
28211     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
28212     PyObject* values[1] = {0};
28213     if (unlikely(__pyx_kwds)) {
28214       Py_ssize_t kw_args;
28215       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
28216       switch (pos_args) {
28217         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
28218         CYTHON_FALLTHROUGH;
28219         case  0: break;
28220         default: goto __pyx_L5_argtuple_error;
28221       }
28222       kw_args = PyDict_Size(__pyx_kwds);
28223       switch (pos_args) {
28224         case  0:
28225         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
28226         else goto __pyx_L5_argtuple_error;
28227       }
28228       if (unlikely(kw_args > 0)) {
28229         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(10, 7, __pyx_L3_error)
28230       }
28231     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
28232       goto __pyx_L5_argtuple_error;
28233     } else {
28234       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
28235     }
28236     __pyx_v_dobj = values[0];
28237   }
28238   goto __pyx_L4_argument_unpacking_done;
28239   __pyx_L5_argtuple_error:;
28240   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 7, __pyx_L3_error)
28241   __pyx_L3_error:;
28242   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
28243   __Pyx_RefNannyFinishContext();
28244   return -1;
28245   __pyx_L4_argument_unpacking_done:;
28246   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self), __pyx_v_dobj);
28247 
28248   /* function exit code */
28249   __Pyx_RefNannyFinishContext();
28250   return __pyx_r;
28251 }
28252 
28253 static int __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
28254   int __pyx_r;
28255   __Pyx_RefNannyDeclarations
28256   PyObject *__pyx_t_1 = NULL;
28257   int __pyx_t_2;
28258   PyObject *__pyx_t_3 = NULL;
28259   __pyx_t_5numpy_float64_t __pyx_t_4;
28260   PyObject *__pyx_t_5 = NULL;
28261   int __pyx_t_6;
28262   __Pyx_RefNannySetupContext("__init__", 0);
28263 
28264   /* "yt/geometry/_selection_routines/slice_selector.pxi":8
28265  *
28266  *     def __init__(self, dobj):
28267  *         self.axis = dobj.axis             # <<<<<<<<<<<<<<
28268  *         self.coord = _ensure_code(dobj.coord)
28269  *         # If we have a reduced dimensionality dataset, we want to avoid any
28270  */
28271   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_axis); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 8, __pyx_L1_error)
28272   __Pyx_GOTREF(__pyx_t_1);
28273   __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(10, 8, __pyx_L1_error)
28274   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28275   __pyx_v_self->axis = __pyx_t_2;
28276 
28277   /* "yt/geometry/_selection_routines/slice_selector.pxi":9
28278  *     def __init__(self, dobj):
28279  *         self.axis = dobj.axis
28280  *         self.coord = _ensure_code(dobj.coord)             # <<<<<<<<<<<<<<
28281  *         # If we have a reduced dimensionality dataset, we want to avoid any
28282  *         # checks against it in the axes that are beyond its dimensionality.
28283  */
28284   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_coord); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 9, __pyx_L1_error)
28285   __Pyx_GOTREF(__pyx_t_1);
28286   __pyx_t_3 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 9, __pyx_L1_error)
28287   __Pyx_GOTREF(__pyx_t_3);
28288   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28289   __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(10, 9, __pyx_L1_error)
28290   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
28291   __pyx_v_self->coord = __pyx_t_4;
28292 
28293   /* "yt/geometry/_selection_routines/slice_selector.pxi":14
28294  *         # This means that if we have a 2D dataset, *all* slices along z will
28295  *         # select all the zones.
28296  *         if self.axis >= dobj.ds.dimensionality:             # <<<<<<<<<<<<<<
28297  *             self.reduced_dimensionality = 1
28298  *         else:
28299  */
28300   __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->axis); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 14, __pyx_L1_error)
28301   __Pyx_GOTREF(__pyx_t_3);
28302   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 14, __pyx_L1_error)
28303   __Pyx_GOTREF(__pyx_t_1);
28304   __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_dimensionality); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 14, __pyx_L1_error)
28305   __Pyx_GOTREF(__pyx_t_5);
28306   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28307   __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_5, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 14, __pyx_L1_error)
28308   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
28309   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
28310   __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(10, 14, __pyx_L1_error)
28311   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28312   if (__pyx_t_6) {
28313 
28314     /* "yt/geometry/_selection_routines/slice_selector.pxi":15
28315  *         # select all the zones.
28316  *         if self.axis >= dobj.ds.dimensionality:
28317  *             self.reduced_dimensionality = 1             # <<<<<<<<<<<<<<
28318  *         else:
28319  *             self.reduced_dimensionality = 0
28320  */
28321     __pyx_v_self->reduced_dimensionality = 1;
28322 
28323     /* "yt/geometry/_selection_routines/slice_selector.pxi":14
28324  *         # This means that if we have a 2D dataset, *all* slices along z will
28325  *         # select all the zones.
28326  *         if self.axis >= dobj.ds.dimensionality:             # <<<<<<<<<<<<<<
28327  *             self.reduced_dimensionality = 1
28328  *         else:
28329  */
28330     goto __pyx_L3;
28331   }
28332 
28333   /* "yt/geometry/_selection_routines/slice_selector.pxi":17
28334  *             self.reduced_dimensionality = 1
28335  *         else:
28336  *             self.reduced_dimensionality = 0             # <<<<<<<<<<<<<<
28337  *
28338  *         self.ax = (self.axis+1) % 3
28339  */
28340   /*else*/ {
28341     __pyx_v_self->reduced_dimensionality = 0;
28342   }
28343   __pyx_L3:;
28344 
28345   /* "yt/geometry/_selection_routines/slice_selector.pxi":19
28346  *             self.reduced_dimensionality = 0
28347  *
28348  *         self.ax = (self.axis+1) % 3             # <<<<<<<<<<<<<<
28349  *         self.ay = (self.axis+2) % 3
28350  *
28351  */
28352   __pyx_v_self->ax = __Pyx_mod_long((__pyx_v_self->axis + 1), 3);
28353 
28354   /* "yt/geometry/_selection_routines/slice_selector.pxi":20
28355  *
28356  *         self.ax = (self.axis+1) % 3
28357  *         self.ay = (self.axis+2) % 3             # <<<<<<<<<<<<<<
28358  *
28359  *     @cython.boundscheck(False)
28360  */
28361   __pyx_v_self->ay = __Pyx_mod_long((__pyx_v_self->axis + 2), 3);
28362 
28363   /* "yt/geometry/_selection_routines/slice_selector.pxi":7
28364  *     cdef public int reduced_dimensionality
28365  *
28366  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
28367  *         self.axis = dobj.axis
28368  *         self.coord = _ensure_code(dobj.coord)
28369  */
28370 
28371   /* function exit code */
28372   __pyx_r = 0;
28373   goto __pyx_L0;
28374   __pyx_L1_error:;
28375   __Pyx_XDECREF(__pyx_t_1);
28376   __Pyx_XDECREF(__pyx_t_3);
28377   __Pyx_XDECREF(__pyx_t_5);
28378   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
28379   __pyx_r = -1;
28380   __pyx_L0:;
28381   __Pyx_RefNannyFinishContext();
28382   return __pyx_r;
28383 }
28384 
28385 /* "yt/geometry/_selection_routines/slice_selector.pxi":25
28386  *     @cython.wraparound(False)
28387  *     @cython.cdivision(True)
28388  *     def fill_mask(self, gobj):             # <<<<<<<<<<<<<<
28389  *         cdef np.ndarray[np.uint8_t, ndim=3] mask
28390  *         cdef np.ndarray[np.uint8_t, ndim=3, cast=True] child_mask
28391  */
28392 
28393 /* Python wrapper */
28394 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_3fill_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj); /*proto*/
28395 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_3fill_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj) {
28396   PyObject *__pyx_r = 0;
28397   __Pyx_RefNannyDeclarations
28398   __Pyx_RefNannySetupContext("fill_mask (wrapper)", 0);
28399   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2fill_mask(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self), ((PyObject *)__pyx_v_gobj));
28400 
28401   /* function exit code */
28402   __Pyx_RefNannyFinishContext();
28403   return __pyx_r;
28404 }
28405 
28406 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2fill_mask(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_gobj) {
28407   PyArrayObject *__pyx_v_mask = 0;
28408   PyArrayObject *__pyx_v_child_mask = 0;
28409   int __pyx_v_i;
28410   int __pyx_v_j;
28411   int __pyx_v_k;
28412   int __pyx_v_total;
28413   int __pyx_v_this_level;
28414   int __pyx_v_ind[3][2];
28415   __pyx_t_5numpy_uint64_t __pyx_v_icoord;
28416   __pyx_t_5numpy_int32_t __pyx_v_level;
28417   __Pyx_LocalBuf_ND __pyx_pybuffernd_child_mask;
28418   __Pyx_Buffer __pyx_pybuffer_child_mask;
28419   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
28420   __Pyx_Buffer __pyx_pybuffer_mask;
28421   PyObject *__pyx_r = NULL;
28422   __Pyx_RefNannyDeclarations
28423   PyObject *__pyx_t_1 = NULL;
28424   __pyx_t_5numpy_int32_t __pyx_t_2;
28425   PyObject *__pyx_t_3 = NULL;
28426   int __pyx_t_4;
28427   int __pyx_t_5;
28428   PyArrayObject *__pyx_t_6 = NULL;
28429   int __pyx_t_7;
28430   PyObject *__pyx_t_8 = NULL;
28431   PyObject *__pyx_t_9 = NULL;
28432   PyObject *__pyx_t_10 = NULL;
28433   PyObject *__pyx_t_11 = NULL;
28434   PyObject *__pyx_t_12 = NULL;
28435   PyObject *__pyx_t_13 = NULL;
28436   PyArrayObject *__pyx_t_14 = NULL;
28437   __pyx_t_5numpy_uint64_t __pyx_t_15;
28438   __pyx_t_5numpy_int64_t __pyx_t_16;
28439   int __pyx_t_17;
28440   int __pyx_t_18;
28441   int __pyx_t_19;
28442   int __pyx_t_20;
28443   int __pyx_t_21;
28444   int __pyx_t_22;
28445   int __pyx_t_23;
28446   int __pyx_t_24;
28447   Py_ssize_t __pyx_t_25;
28448   Py_ssize_t __pyx_t_26;
28449   Py_ssize_t __pyx_t_27;
28450   Py_ssize_t __pyx_t_28;
28451   Py_ssize_t __pyx_t_29;
28452   Py_ssize_t __pyx_t_30;
28453   __Pyx_RefNannySetupContext("fill_mask", 0);
28454   __pyx_pybuffer_mask.pybuffer.buf = NULL;
28455   __pyx_pybuffer_mask.refcount = 0;
28456   __pyx_pybuffernd_mask.data = NULL;
28457   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
28458   __pyx_pybuffer_child_mask.pybuffer.buf = NULL;
28459   __pyx_pybuffer_child_mask.refcount = 0;
28460   __pyx_pybuffernd_child_mask.data = NULL;
28461   __pyx_pybuffernd_child_mask.rcbuffer = &__pyx_pybuffer_child_mask;
28462 
28463   /* "yt/geometry/_selection_routines/slice_selector.pxi":29
28464  *         cdef np.ndarray[np.uint8_t, ndim=3, cast=True] child_mask
28465  *         cdef int i, j, k
28466  *         cdef int total = 0             # <<<<<<<<<<<<<<
28467  *         cdef int this_level = 0
28468  *         cdef int ind[3][2]
28469  */
28470   __pyx_v_total = 0;
28471 
28472   /* "yt/geometry/_selection_routines/slice_selector.pxi":30
28473  *         cdef int i, j, k
28474  *         cdef int total = 0
28475  *         cdef int this_level = 0             # <<<<<<<<<<<<<<
28476  *         cdef int ind[3][2]
28477  *         cdef np.uint64_t icoord
28478  */
28479   __pyx_v_this_level = 0;
28480 
28481   /* "yt/geometry/_selection_routines/slice_selector.pxi":33
28482  *         cdef int ind[3][2]
28483  *         cdef np.uint64_t icoord
28484  *         cdef np.int32_t level = gobj.Level             # <<<<<<<<<<<<<<
28485  *         _ensure_code(gobj.LeftEdge)
28486  *         _ensure_code(gobj.dds)
28487  */
28488   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_Level); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 33, __pyx_L1_error)
28489   __Pyx_GOTREF(__pyx_t_1);
28490   __pyx_t_2 = __Pyx_PyInt_As_npy_int32(__pyx_t_1); if (unlikely((__pyx_t_2 == ((npy_int32)-1)) && PyErr_Occurred())) __PYX_ERR(10, 33, __pyx_L1_error)
28491   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28492   __pyx_v_level = __pyx_t_2;
28493 
28494   /* "yt/geometry/_selection_routines/slice_selector.pxi":34
28495  *         cdef np.uint64_t icoord
28496  *         cdef np.int32_t level = gobj.Level
28497  *         _ensure_code(gobj.LeftEdge)             # <<<<<<<<<<<<<<
28498  *         _ensure_code(gobj.dds)
28499  *
28500  */
28501   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_LeftEdge); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 34, __pyx_L1_error)
28502   __Pyx_GOTREF(__pyx_t_1);
28503   __pyx_t_3 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 34, __pyx_L1_error)
28504   __Pyx_GOTREF(__pyx_t_3);
28505   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28506   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
28507 
28508   /* "yt/geometry/_selection_routines/slice_selector.pxi":35
28509  *         cdef np.int32_t level = gobj.Level
28510  *         _ensure_code(gobj.LeftEdge)
28511  *         _ensure_code(gobj.dds)             # <<<<<<<<<<<<<<
28512  *
28513  *         if level < self.min_level or level > self.max_level:
28514  */
28515   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 35, __pyx_L1_error)
28516   __Pyx_GOTREF(__pyx_t_3);
28517   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 35, __pyx_L1_error)
28518   __Pyx_GOTREF(__pyx_t_1);
28519   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
28520   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28521 
28522   /* "yt/geometry/_selection_routines/slice_selector.pxi":37
28523  *         _ensure_code(gobj.dds)
28524  *
28525  *         if level < self.min_level or level > self.max_level:             # <<<<<<<<<<<<<<
28526  *             return None
28527  *         else:
28528  */
28529   __pyx_t_5 = ((__pyx_v_level < __pyx_v_self->__pyx_base.min_level) != 0);
28530   if (!__pyx_t_5) {
28531   } else {
28532     __pyx_t_4 = __pyx_t_5;
28533     goto __pyx_L4_bool_binop_done;
28534   }
28535   __pyx_t_5 = ((__pyx_v_level > __pyx_v_self->__pyx_base.max_level) != 0);
28536   __pyx_t_4 = __pyx_t_5;
28537   __pyx_L4_bool_binop_done:;
28538   if (__pyx_t_4) {
28539 
28540     /* "yt/geometry/_selection_routines/slice_selector.pxi":38
28541  *
28542  *         if level < self.min_level or level > self.max_level:
28543  *             return None             # <<<<<<<<<<<<<<
28544  *         else:
28545  *             child_mask = gobj.child_mask
28546  */
28547     __Pyx_XDECREF(__pyx_r);
28548     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
28549     goto __pyx_L0;
28550 
28551     /* "yt/geometry/_selection_routines/slice_selector.pxi":37
28552  *         _ensure_code(gobj.dds)
28553  *
28554  *         if level < self.min_level or level > self.max_level:             # <<<<<<<<<<<<<<
28555  *             return None
28556  *         else:
28557  */
28558   }
28559 
28560   /* "yt/geometry/_selection_routines/slice_selector.pxi":40
28561  *             return None
28562  *         else:
28563  *             child_mask = gobj.child_mask             # <<<<<<<<<<<<<<
28564  *             mask = np.zeros(gobj.ActiveDimensions, dtype=np.uint8)
28565  *             if level == self.max_level:
28566  */
28567   /*else*/ {
28568     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_child_mask); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 40, __pyx_L1_error)
28569     __Pyx_GOTREF(__pyx_t_1);
28570     if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(10, 40, __pyx_L1_error)
28571     __pyx_t_6 = ((PyArrayObject *)__pyx_t_1);
28572     {
28573       __Pyx_BufFmt_StackElem __pyx_stack[1];
28574       __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
28575       __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack);
28576       if (unlikely(__pyx_t_7 < 0)) {
28577         PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
28578         if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_child_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack) == -1)) {
28579           Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);
28580           __Pyx_RaiseBufferFallbackError();
28581         } else {
28582           PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
28583         }
28584         __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;
28585       }
28586       __pyx_pybuffernd_child_mask.diminfo[0].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_child_mask.diminfo[0].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_child_mask.diminfo[1].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_child_mask.diminfo[1].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_child_mask.diminfo[2].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_child_mask.diminfo[2].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[2];
28587       if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(10, 40, __pyx_L1_error)
28588     }
28589     __pyx_t_6 = 0;
28590     __pyx_v_child_mask = ((PyArrayObject *)__pyx_t_1);
28591     __pyx_t_1 = 0;
28592 
28593     /* "yt/geometry/_selection_routines/slice_selector.pxi":41
28594  *         else:
28595  *             child_mask = gobj.child_mask
28596  *             mask = np.zeros(gobj.ActiveDimensions, dtype=np.uint8)             # <<<<<<<<<<<<<<
28597  *             if level == self.max_level:
28598  *                 this_level = 1
28599  */
28600     __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 41, __pyx_L1_error)
28601     __Pyx_GOTREF(__pyx_t_1);
28602     __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 41, __pyx_L1_error)
28603     __Pyx_GOTREF(__pyx_t_3);
28604     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28605     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 41, __pyx_L1_error)
28606     __Pyx_GOTREF(__pyx_t_1);
28607     __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(10, 41, __pyx_L1_error)
28608     __Pyx_GOTREF(__pyx_t_11);
28609     __Pyx_GIVEREF(__pyx_t_1);
28610     PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
28611     __pyx_t_1 = 0;
28612     __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 41, __pyx_L1_error)
28613     __Pyx_GOTREF(__pyx_t_1);
28614     __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(10, 41, __pyx_L1_error)
28615     __Pyx_GOTREF(__pyx_t_12);
28616     __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_uint8); if (unlikely(!__pyx_t_13)) __PYX_ERR(10, 41, __pyx_L1_error)
28617     __Pyx_GOTREF(__pyx_t_13);
28618     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
28619     if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_13) < 0) __PYX_ERR(10, 41, __pyx_L1_error)
28620     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
28621     __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_11, __pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(10, 41, __pyx_L1_error)
28622     __Pyx_GOTREF(__pyx_t_13);
28623     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
28624     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
28625     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28626     if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(10, 41, __pyx_L1_error)
28627     __pyx_t_14 = ((PyArrayObject *)__pyx_t_13);
28628     {
28629       __Pyx_BufFmt_StackElem __pyx_stack[1];
28630       __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
28631       __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack);
28632       if (unlikely(__pyx_t_7 < 0)) {
28633         PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);
28634         if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
28635           Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);
28636           __Pyx_RaiseBufferFallbackError();
28637         } else {
28638           PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);
28639         }
28640         __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;
28641       }
28642       __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_mask.diminfo[2].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_mask.diminfo[2].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[2];
28643       if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(10, 41, __pyx_L1_error)
28644     }
28645     __pyx_t_14 = 0;
28646     __pyx_v_mask = ((PyArrayObject *)__pyx_t_13);
28647     __pyx_t_13 = 0;
28648 
28649     /* "yt/geometry/_selection_routines/slice_selector.pxi":42
28650  *             child_mask = gobj.child_mask
28651  *             mask = np.zeros(gobj.ActiveDimensions, dtype=np.uint8)
28652  *             if level == self.max_level:             # <<<<<<<<<<<<<<
28653  *                 this_level = 1
28654  *             for i in range(3):
28655  */
28656     __pyx_t_4 = ((__pyx_v_level == __pyx_v_self->__pyx_base.max_level) != 0);
28657     if (__pyx_t_4) {
28658 
28659       /* "yt/geometry/_selection_routines/slice_selector.pxi":43
28660  *             mask = np.zeros(gobj.ActiveDimensions, dtype=np.uint8)
28661  *             if level == self.max_level:
28662  *                 this_level = 1             # <<<<<<<<<<<<<<
28663  *             for i in range(3):
28664  *                 if i == self.axis:
28665  */
28666       __pyx_v_this_level = 1;
28667 
28668       /* "yt/geometry/_selection_routines/slice_selector.pxi":42
28669  *             child_mask = gobj.child_mask
28670  *             mask = np.zeros(gobj.ActiveDimensions, dtype=np.uint8)
28671  *             if level == self.max_level:             # <<<<<<<<<<<<<<
28672  *                 this_level = 1
28673  *             for i in range(3):
28674  */
28675     }
28676 
28677     /* "yt/geometry/_selection_routines/slice_selector.pxi":44
28678  *             if level == self.max_level:
28679  *                 this_level = 1
28680  *             for i in range(3):             # <<<<<<<<<<<<<<
28681  *                 if i == self.axis:
28682  *                     icoord = <np.uint64_t>(
28683  */
28684     for (__pyx_t_7 = 0; __pyx_t_7 < 3; __pyx_t_7+=1) {
28685       __pyx_v_i = __pyx_t_7;
28686 
28687       /* "yt/geometry/_selection_routines/slice_selector.pxi":45
28688  *                 this_level = 1
28689  *             for i in range(3):
28690  *                 if i == self.axis:             # <<<<<<<<<<<<<<
28691  *                     icoord = <np.uint64_t>(
28692  *                         (self.coord - gobj.LeftEdge.d[i])/gobj.dds[i])
28693  */
28694       __pyx_t_4 = ((__pyx_v_i == __pyx_v_self->axis) != 0);
28695       if (__pyx_t_4) {
28696 
28697         /* "yt/geometry/_selection_routines/slice_selector.pxi":47
28698  *                 if i == self.axis:
28699  *                     icoord = <np.uint64_t>(
28700  *                         (self.coord - gobj.LeftEdge.d[i])/gobj.dds[i])             # <<<<<<<<<<<<<<
28701  *                     # clip coordinate to avoid seg fault below if we're
28702  *                     # exactly at a grid boundary
28703  */
28704         __pyx_t_13 = PyFloat_FromDouble(__pyx_v_self->coord); if (unlikely(!__pyx_t_13)) __PYX_ERR(10, 47, __pyx_L1_error)
28705         __Pyx_GOTREF(__pyx_t_13);
28706         __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_LeftEdge); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 47, __pyx_L1_error)
28707         __Pyx_GOTREF(__pyx_t_1);
28708         __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_d); if (unlikely(!__pyx_t_11)) __PYX_ERR(10, 47, __pyx_L1_error)
28709         __Pyx_GOTREF(__pyx_t_11);
28710         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28711         __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_11, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 47, __pyx_L1_error)
28712         __Pyx_GOTREF(__pyx_t_1);
28713         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
28714         __pyx_t_11 = PyNumber_Subtract(__pyx_t_13, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(10, 47, __pyx_L1_error)
28715         __Pyx_GOTREF(__pyx_t_11);
28716         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
28717         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28718         __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 47, __pyx_L1_error)
28719         __Pyx_GOTREF(__pyx_t_1);
28720         __pyx_t_13 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(10, 47, __pyx_L1_error)
28721         __Pyx_GOTREF(__pyx_t_13);
28722         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28723         __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_11, __pyx_t_13); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 47, __pyx_L1_error)
28724         __Pyx_GOTREF(__pyx_t_1);
28725         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
28726         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
28727         __pyx_t_15 = __Pyx_PyInt_As_npy_uint64(__pyx_t_1); if (unlikely((__pyx_t_15 == ((npy_uint64)-1)) && PyErr_Occurred())) __PYX_ERR(10, 47, __pyx_L1_error)
28728         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28729 
28730         /* "yt/geometry/_selection_routines/slice_selector.pxi":46
28731  *             for i in range(3):
28732  *                 if i == self.axis:
28733  *                     icoord = <np.uint64_t>(             # <<<<<<<<<<<<<<
28734  *                         (self.coord - gobj.LeftEdge.d[i])/gobj.dds[i])
28735  *                     # clip coordinate to avoid seg fault below if we're
28736  */
28737         __pyx_v_icoord = ((__pyx_t_5numpy_uint64_t)__pyx_t_15);
28738 
28739         /* "yt/geometry/_selection_routines/slice_selector.pxi":51
28740  *                     # exactly at a grid boundary
28741  *                     ind[i][0] = iclip(
28742  *                         icoord, 0, gobj.ActiveDimensions[i]-1)             # <<<<<<<<<<<<<<
28743  *                     ind[i][1] = ind[i][0] + 1
28744  *                 else:
28745  */
28746         __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 51, __pyx_L1_error)
28747         __Pyx_GOTREF(__pyx_t_1);
28748         __pyx_t_13 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(10, 51, __pyx_L1_error)
28749         __Pyx_GOTREF(__pyx_t_13);
28750         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28751         __pyx_t_1 = __Pyx_PyInt_SubtractObjC(__pyx_t_13, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 51, __pyx_L1_error)
28752         __Pyx_GOTREF(__pyx_t_1);
28753         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
28754         __pyx_t_16 = __Pyx_PyInt_As_npy_int64(__pyx_t_1); if (unlikely((__pyx_t_16 == ((npy_int64)-1)) && PyErr_Occurred())) __PYX_ERR(10, 51, __pyx_L1_error)
28755         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28756 
28757         /* "yt/geometry/_selection_routines/slice_selector.pxi":50
28758  *                     # clip coordinate to avoid seg fault below if we're
28759  *                     # exactly at a grid boundary
28760  *                     ind[i][0] = iclip(             # <<<<<<<<<<<<<<
28761  *                         icoord, 0, gobj.ActiveDimensions[i]-1)
28762  *                     ind[i][1] = ind[i][0] + 1
28763  */
28764         ((__pyx_v_ind[__pyx_v_i])[0]) = __pyx_f_2yt_9utilities_3lib_8fp_utils_iclip(__pyx_v_icoord, 0, __pyx_t_16);
28765 
28766         /* "yt/geometry/_selection_routines/slice_selector.pxi":52
28767  *                     ind[i][0] = iclip(
28768  *                         icoord, 0, gobj.ActiveDimensions[i]-1)
28769  *                     ind[i][1] = ind[i][0] + 1             # <<<<<<<<<<<<<<
28770  *                 else:
28771  *                     ind[i][0] = 0
28772  */
28773         ((__pyx_v_ind[__pyx_v_i])[1]) = (((__pyx_v_ind[__pyx_v_i])[0]) + 1);
28774 
28775         /* "yt/geometry/_selection_routines/slice_selector.pxi":45
28776  *                 this_level = 1
28777  *             for i in range(3):
28778  *                 if i == self.axis:             # <<<<<<<<<<<<<<
28779  *                     icoord = <np.uint64_t>(
28780  *                         (self.coord - gobj.LeftEdge.d[i])/gobj.dds[i])
28781  */
28782         goto __pyx_L9;
28783       }
28784 
28785       /* "yt/geometry/_selection_routines/slice_selector.pxi":54
28786  *                     ind[i][1] = ind[i][0] + 1
28787  *                 else:
28788  *                     ind[i][0] = 0             # <<<<<<<<<<<<<<
28789  *                     ind[i][1] = gobj.ActiveDimensions[i]
28790  *             with nogil:
28791  */
28792       /*else*/ {
28793         ((__pyx_v_ind[__pyx_v_i])[0]) = 0;
28794 
28795         /* "yt/geometry/_selection_routines/slice_selector.pxi":55
28796  *                 else:
28797  *                     ind[i][0] = 0
28798  *                     ind[i][1] = gobj.ActiveDimensions[i]             # <<<<<<<<<<<<<<
28799  *             with nogil:
28800  *                 for i in range(ind[0][0], ind[0][1]):
28801  */
28802         __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 55, __pyx_L1_error)
28803         __Pyx_GOTREF(__pyx_t_1);
28804         __pyx_t_13 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(10, 55, __pyx_L1_error)
28805         __Pyx_GOTREF(__pyx_t_13);
28806         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28807         __pyx_t_17 = __Pyx_PyInt_As_int(__pyx_t_13); if (unlikely((__pyx_t_17 == (int)-1) && PyErr_Occurred())) __PYX_ERR(10, 55, __pyx_L1_error)
28808         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
28809         ((__pyx_v_ind[__pyx_v_i])[1]) = __pyx_t_17;
28810       }
28811       __pyx_L9:;
28812     }
28813 
28814     /* "yt/geometry/_selection_routines/slice_selector.pxi":56
28815  *                     ind[i][0] = 0
28816  *                     ind[i][1] = gobj.ActiveDimensions[i]
28817  *             with nogil:             # <<<<<<<<<<<<<<
28818  *                 for i in range(ind[0][0], ind[0][1]):
28819  *                     for j in range(ind[1][0], ind[1][1]):
28820  */
28821     {
28822         #ifdef WITH_THREAD
28823         PyThreadState *_save;
28824         Py_UNBLOCK_THREADS
28825         __Pyx_FastGIL_Remember();
28826         #endif
28827         /*try:*/ {
28828 
28829           /* "yt/geometry/_selection_routines/slice_selector.pxi":57
28830  *                     ind[i][1] = gobj.ActiveDimensions[i]
28831  *             with nogil:
28832  *                 for i in range(ind[0][0], ind[0][1]):             # <<<<<<<<<<<<<<
28833  *                     for j in range(ind[1][0], ind[1][1]):
28834  *                         for k in range(ind[2][0], ind[2][1]):
28835  */
28836           __pyx_t_7 = ((__pyx_v_ind[0])[1]);
28837           __pyx_t_17 = __pyx_t_7;
28838           for (__pyx_t_18 = ((__pyx_v_ind[0])[0]); __pyx_t_18 < __pyx_t_17; __pyx_t_18+=1) {
28839             __pyx_v_i = __pyx_t_18;
28840 
28841             /* "yt/geometry/_selection_routines/slice_selector.pxi":58
28842  *             with nogil:
28843  *                 for i in range(ind[0][0], ind[0][1]):
28844  *                     for j in range(ind[1][0], ind[1][1]):             # <<<<<<<<<<<<<<
28845  *                         for k in range(ind[2][0], ind[2][1]):
28846  *                             if this_level == 1 or child_mask[i, j, k]:
28847  */
28848             __pyx_t_19 = ((__pyx_v_ind[1])[1]);
28849             __pyx_t_20 = __pyx_t_19;
28850             for (__pyx_t_21 = ((__pyx_v_ind[1])[0]); __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {
28851               __pyx_v_j = __pyx_t_21;
28852 
28853               /* "yt/geometry/_selection_routines/slice_selector.pxi":59
28854  *                 for i in range(ind[0][0], ind[0][1]):
28855  *                     for j in range(ind[1][0], ind[1][1]):
28856  *                         for k in range(ind[2][0], ind[2][1]):             # <<<<<<<<<<<<<<
28857  *                             if this_level == 1 or child_mask[i, j, k]:
28858  *                                 mask[i, j, k] = 1
28859  */
28860               __pyx_t_22 = ((__pyx_v_ind[2])[1]);
28861               __pyx_t_23 = __pyx_t_22;
28862               for (__pyx_t_24 = ((__pyx_v_ind[2])[0]); __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
28863                 __pyx_v_k = __pyx_t_24;
28864 
28865                 /* "yt/geometry/_selection_routines/slice_selector.pxi":60
28866  *                     for j in range(ind[1][0], ind[1][1]):
28867  *                         for k in range(ind[2][0], ind[2][1]):
28868  *                             if this_level == 1 or child_mask[i, j, k]:             # <<<<<<<<<<<<<<
28869  *                                 mask[i, j, k] = 1
28870  *                                 total += 1
28871  */
28872                 __pyx_t_5 = ((__pyx_v_this_level == 1) != 0);
28873                 if (!__pyx_t_5) {
28874                 } else {
28875                   __pyx_t_4 = __pyx_t_5;
28876                   goto __pyx_L20_bool_binop_done;
28877                 }
28878                 __pyx_t_25 = __pyx_v_i;
28879                 __pyx_t_26 = __pyx_v_j;
28880                 __pyx_t_27 = __pyx_v_k;
28881                 __pyx_t_5 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_child_mask.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_child_mask.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_child_mask.diminfo[2].strides)) != 0);
28882                 __pyx_t_4 = __pyx_t_5;
28883                 __pyx_L20_bool_binop_done:;
28884                 if (__pyx_t_4) {
28885 
28886                   /* "yt/geometry/_selection_routines/slice_selector.pxi":61
28887  *                         for k in range(ind[2][0], ind[2][1]):
28888  *                             if this_level == 1 or child_mask[i, j, k]:
28889  *                                 mask[i, j, k] = 1             # <<<<<<<<<<<<<<
28890  *                                 total += 1
28891  *             if total == 0: return None
28892  */
28893                   __pyx_t_28 = __pyx_v_i;
28894                   __pyx_t_29 = __pyx_v_j;
28895                   __pyx_t_30 = __pyx_v_k;
28896                   *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_mask.diminfo[1].strides, __pyx_t_30, __pyx_pybuffernd_mask.diminfo[2].strides) = 1;
28897 
28898                   /* "yt/geometry/_selection_routines/slice_selector.pxi":62
28899  *                             if this_level == 1 or child_mask[i, j, k]:
28900  *                                 mask[i, j, k] = 1
28901  *                                 total += 1             # <<<<<<<<<<<<<<
28902  *             if total == 0: return None
28903  *             return mask.astype("bool")
28904  */
28905                   __pyx_v_total = (__pyx_v_total + 1);
28906 
28907                   /* "yt/geometry/_selection_routines/slice_selector.pxi":60
28908  *                     for j in range(ind[1][0], ind[1][1]):
28909  *                         for k in range(ind[2][0], ind[2][1]):
28910  *                             if this_level == 1 or child_mask[i, j, k]:             # <<<<<<<<<<<<<<
28911  *                                 mask[i, j, k] = 1
28912  *                                 total += 1
28913  */
28914                 }
28915               }
28916             }
28917           }
28918         }
28919 
28920         /* "yt/geometry/_selection_routines/slice_selector.pxi":56
28921  *                     ind[i][0] = 0
28922  *                     ind[i][1] = gobj.ActiveDimensions[i]
28923  *             with nogil:             # <<<<<<<<<<<<<<
28924  *                 for i in range(ind[0][0], ind[0][1]):
28925  *                     for j in range(ind[1][0], ind[1][1]):
28926  */
28927         /*finally:*/ {
28928           /*normal exit:*/{
28929             #ifdef WITH_THREAD
28930             __Pyx_FastGIL_Forget();
28931             Py_BLOCK_THREADS
28932             #endif
28933             goto __pyx_L12;
28934           }
28935           __pyx_L12:;
28936         }
28937     }
28938 
28939     /* "yt/geometry/_selection_routines/slice_selector.pxi":63
28940  *                                 mask[i, j, k] = 1
28941  *                                 total += 1
28942  *             if total == 0: return None             # <<<<<<<<<<<<<<
28943  *             return mask.astype("bool")
28944  *
28945  */
28946     __pyx_t_4 = ((__pyx_v_total == 0) != 0);
28947     if (__pyx_t_4) {
28948       __Pyx_XDECREF(__pyx_r);
28949       __pyx_r = Py_None; __Pyx_INCREF(Py_None);
28950       goto __pyx_L0;
28951     }
28952 
28953     /* "yt/geometry/_selection_routines/slice_selector.pxi":64
28954  *                                 total += 1
28955  *             if total == 0: return None
28956  *             return mask.astype("bool")             # <<<<<<<<<<<<<<
28957  *
28958  *     @cython.boundscheck(False)
28959  */
28960     __Pyx_XDECREF(__pyx_r);
28961     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_mask), __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 64, __pyx_L1_error)
28962     __Pyx_GOTREF(__pyx_t_1);
28963     __pyx_t_11 = NULL;
28964     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
28965       __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
28966       if (likely(__pyx_t_11)) {
28967         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
28968         __Pyx_INCREF(__pyx_t_11);
28969         __Pyx_INCREF(function);
28970         __Pyx_DECREF_SET(__pyx_t_1, function);
28971       }
28972     }
28973     __pyx_t_13 = (__pyx_t_11) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_11, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_n_s_bool);
28974     __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
28975     if (unlikely(!__pyx_t_13)) __PYX_ERR(10, 64, __pyx_L1_error)
28976     __Pyx_GOTREF(__pyx_t_13);
28977     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
28978     __pyx_r = __pyx_t_13;
28979     __pyx_t_13 = 0;
28980     goto __pyx_L0;
28981   }
28982 
28983   /* "yt/geometry/_selection_routines/slice_selector.pxi":25
28984  *     @cython.wraparound(False)
28985  *     @cython.cdivision(True)
28986  *     def fill_mask(self, gobj):             # <<<<<<<<<<<<<<
28987  *         cdef np.ndarray[np.uint8_t, ndim=3] mask
28988  *         cdef np.ndarray[np.uint8_t, ndim=3, cast=True] child_mask
28989  */
28990 
28991   /* function exit code */
28992   __pyx_L1_error:;
28993   __Pyx_XDECREF(__pyx_t_1);
28994   __Pyx_XDECREF(__pyx_t_3);
28995   __Pyx_XDECREF(__pyx_t_11);
28996   __Pyx_XDECREF(__pyx_t_12);
28997   __Pyx_XDECREF(__pyx_t_13);
28998   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
28999     __Pyx_PyThreadState_declare
29000     __Pyx_PyThreadState_assign
29001     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
29002     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
29003     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
29004   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
29005   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.fill_mask", __pyx_clineno, __pyx_lineno, __pyx_filename);
29006   __pyx_r = NULL;
29007   goto __pyx_L2;
29008   __pyx_L0:;
29009   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
29010   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
29011   __pyx_L2:;
29012   __Pyx_XDECREF((PyObject *)__pyx_v_mask);
29013   __Pyx_XDECREF((PyObject *)__pyx_v_child_mask);
29014   __Pyx_XGIVEREF(__pyx_r);
29015   __Pyx_RefNannyFinishContext();
29016   return __pyx_r;
29017 }
29018 
29019 /* "yt/geometry/_selection_routines/slice_selector.pxi":69
29020  *     @cython.wraparound(False)
29021  *     @cython.cdivision(True)
29022  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
29023  *         if self.reduced_dimensionality == 1:
29024  *             return 1
29025  */
29026 
29027 static int __pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
29028   int __pyx_r;
29029   int __pyx_t_1;
29030   int __pyx_t_2;
29031 
29032   /* "yt/geometry/_selection_routines/slice_selector.pxi":70
29033  *     @cython.cdivision(True)
29034  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
29035  *         if self.reduced_dimensionality == 1:             # <<<<<<<<<<<<<<
29036  *             return 1
29037  *         if pos[self.axis] + 0.5*dds[self.axis] > self.coord \
29038  */
29039   __pyx_t_1 = ((__pyx_v_self->reduced_dimensionality == 1) != 0);
29040   if (__pyx_t_1) {
29041 
29042     /* "yt/geometry/_selection_routines/slice_selector.pxi":71
29043  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
29044  *         if self.reduced_dimensionality == 1:
29045  *             return 1             # <<<<<<<<<<<<<<
29046  *         if pos[self.axis] + 0.5*dds[self.axis] > self.coord \
29047  *            and pos[self.axis] - 0.5*dds[self.axis] - grid_eps <= self.coord:
29048  */
29049     __pyx_r = 1;
29050     goto __pyx_L0;
29051 
29052     /* "yt/geometry/_selection_routines/slice_selector.pxi":70
29053  *     @cython.cdivision(True)
29054  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
29055  *         if self.reduced_dimensionality == 1:             # <<<<<<<<<<<<<<
29056  *             return 1
29057  *         if pos[self.axis] + 0.5*dds[self.axis] > self.coord \
29058  */
29059   }
29060 
29061   /* "yt/geometry/_selection_routines/slice_selector.pxi":72
29062  *         if self.reduced_dimensionality == 1:
29063  *             return 1
29064  *         if pos[self.axis] + 0.5*dds[self.axis] > self.coord \             # <<<<<<<<<<<<<<
29065  *            and pos[self.axis] - 0.5*dds[self.axis] - grid_eps <= self.coord:
29066  *             return 1
29067  */
29068   __pyx_t_2 = ((((__pyx_v_pos[__pyx_v_self->axis]) + (0.5 * (__pyx_v_dds[__pyx_v_self->axis]))) > __pyx_v_self->coord) != 0);
29069   if (__pyx_t_2) {
29070   } else {
29071     __pyx_t_1 = __pyx_t_2;
29072     goto __pyx_L5_bool_binop_done;
29073   }
29074 
29075   /* "yt/geometry/_selection_routines/slice_selector.pxi":73
29076  *             return 1
29077  *         if pos[self.axis] + 0.5*dds[self.axis] > self.coord \
29078  *            and pos[self.axis] - 0.5*dds[self.axis] - grid_eps <= self.coord:             # <<<<<<<<<<<<<<
29079  *             return 1
29080  *         return 0
29081  */
29082   __pyx_t_2 = (((((__pyx_v_pos[__pyx_v_self->axis]) - (0.5 * (__pyx_v_dds[__pyx_v_self->axis]))) - __pyx_v_2yt_8geometry_18selection_routines_grid_eps) <= __pyx_v_self->coord) != 0);
29083   __pyx_t_1 = __pyx_t_2;
29084   __pyx_L5_bool_binop_done:;
29085 
29086   /* "yt/geometry/_selection_routines/slice_selector.pxi":72
29087  *         if self.reduced_dimensionality == 1:
29088  *             return 1
29089  *         if pos[self.axis] + 0.5*dds[self.axis] > self.coord \             # <<<<<<<<<<<<<<
29090  *            and pos[self.axis] - 0.5*dds[self.axis] - grid_eps <= self.coord:
29091  *             return 1
29092  */
29093   if (__pyx_t_1) {
29094 
29095     /* "yt/geometry/_selection_routines/slice_selector.pxi":74
29096  *         if pos[self.axis] + 0.5*dds[self.axis] > self.coord \
29097  *            and pos[self.axis] - 0.5*dds[self.axis] - grid_eps <= self.coord:
29098  *             return 1             # <<<<<<<<<<<<<<
29099  *         return 0
29100  *
29101  */
29102     __pyx_r = 1;
29103     goto __pyx_L0;
29104 
29105     /* "yt/geometry/_selection_routines/slice_selector.pxi":72
29106  *         if self.reduced_dimensionality == 1:
29107  *             return 1
29108  *         if pos[self.axis] + 0.5*dds[self.axis] > self.coord \             # <<<<<<<<<<<<<<
29109  *            and pos[self.axis] - 0.5*dds[self.axis] - grid_eps <= self.coord:
29110  *             return 1
29111  */
29112   }
29113 
29114   /* "yt/geometry/_selection_routines/slice_selector.pxi":75
29115  *            and pos[self.axis] - 0.5*dds[self.axis] - grid_eps <= self.coord:
29116  *             return 1
29117  *         return 0             # <<<<<<<<<<<<<<
29118  *
29119  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
29120  */
29121   __pyx_r = 0;
29122   goto __pyx_L0;
29123 
29124   /* "yt/geometry/_selection_routines/slice_selector.pxi":69
29125  *     @cython.wraparound(False)
29126  *     @cython.cdivision(True)
29127  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
29128  *         if self.reduced_dimensionality == 1:
29129  *             return 1
29130  */
29131 
29132   /* function exit code */
29133   __pyx_L0:;
29134   return __pyx_r;
29135 }
29136 
29137 /* "yt/geometry/_selection_routines/slice_selector.pxi":77
29138  *         return 0
29139  *
29140  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
29141  *         # two 0-volume constructs don't intersect
29142  *         return 0
29143  */
29144 
29145 static int __pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos) {
29146   int __pyx_r;
29147 
29148   /* "yt/geometry/_selection_routines/slice_selector.pxi":79
29149  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
29150  *         # two 0-volume constructs don't intersect
29151  *         return 0             # <<<<<<<<<<<<<<
29152  *
29153  *     @cython.boundscheck(False)
29154  */
29155   __pyx_r = 0;
29156   goto __pyx_L0;
29157 
29158   /* "yt/geometry/_selection_routines/slice_selector.pxi":77
29159  *         return 0
29160  *
29161  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
29162  *         # two 0-volume constructs don't intersect
29163  *         return 0
29164  */
29165 
29166   /* function exit code */
29167   __pyx_L0:;
29168   return __pyx_r;
29169 }
29170 
29171 /* "yt/geometry/_selection_routines/slice_selector.pxi":84
29172  *     @cython.wraparound(False)
29173  *     @cython.cdivision(True)
29174  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
29175  *         if self.reduced_dimensionality == 1:
29176  *             return 1
29177  */
29178 
29179 static int __pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
29180   __pyx_t_5numpy_float64_t __pyx_v_dist;
29181   int __pyx_r;
29182   int __pyx_t_1;
29183 
29184   /* "yt/geometry/_selection_routines/slice_selector.pxi":85
29185  *     @cython.cdivision(True)
29186  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
29187  *         if self.reduced_dimensionality == 1:             # <<<<<<<<<<<<<<
29188  *             return 1
29189  *         cdef np.float64_t dist = self.periodic_difference(
29190  */
29191   __pyx_t_1 = ((__pyx_v_self->reduced_dimensionality == 1) != 0);
29192   if (__pyx_t_1) {
29193 
29194     /* "yt/geometry/_selection_routines/slice_selector.pxi":86
29195  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
29196  *         if self.reduced_dimensionality == 1:
29197  *             return 1             # <<<<<<<<<<<<<<
29198  *         cdef np.float64_t dist = self.periodic_difference(
29199  *             pos[self.axis], self.coord, self.axis)
29200  */
29201     __pyx_r = 1;
29202     goto __pyx_L0;
29203 
29204     /* "yt/geometry/_selection_routines/slice_selector.pxi":85
29205  *     @cython.cdivision(True)
29206  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
29207  *         if self.reduced_dimensionality == 1:             # <<<<<<<<<<<<<<
29208  *             return 1
29209  *         cdef np.float64_t dist = self.periodic_difference(
29210  */
29211   }
29212 
29213   /* "yt/geometry/_selection_routines/slice_selector.pxi":87
29214  *         if self.reduced_dimensionality == 1:
29215  *             return 1
29216  *         cdef np.float64_t dist = self.periodic_difference(             # <<<<<<<<<<<<<<
29217  *             pos[self.axis], self.coord, self.axis)
29218  *         if dist*dist < radius*radius:
29219  */
29220   __pyx_v_dist = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), (__pyx_v_pos[__pyx_v_self->axis]), __pyx_v_self->coord, __pyx_v_self->axis);
29221 
29222   /* "yt/geometry/_selection_routines/slice_selector.pxi":89
29223  *         cdef np.float64_t dist = self.periodic_difference(
29224  *             pos[self.axis], self.coord, self.axis)
29225  *         if dist*dist < radius*radius:             # <<<<<<<<<<<<<<
29226  *             return 1
29227  *         return 0
29228  */
29229   __pyx_t_1 = (((__pyx_v_dist * __pyx_v_dist) < (__pyx_v_radius * __pyx_v_radius)) != 0);
29230   if (__pyx_t_1) {
29231 
29232     /* "yt/geometry/_selection_routines/slice_selector.pxi":90
29233  *             pos[self.axis], self.coord, self.axis)
29234  *         if dist*dist < radius*radius:
29235  *             return 1             # <<<<<<<<<<<<<<
29236  *         return 0
29237  *
29238  */
29239     __pyx_r = 1;
29240     goto __pyx_L0;
29241 
29242     /* "yt/geometry/_selection_routines/slice_selector.pxi":89
29243  *         cdef np.float64_t dist = self.periodic_difference(
29244  *             pos[self.axis], self.coord, self.axis)
29245  *         if dist*dist < radius*radius:             # <<<<<<<<<<<<<<
29246  *             return 1
29247  *         return 0
29248  */
29249   }
29250 
29251   /* "yt/geometry/_selection_routines/slice_selector.pxi":91
29252  *         if dist*dist < radius*radius:
29253  *             return 1
29254  *         return 0             # <<<<<<<<<<<<<<
29255  *
29256  *     @cython.boundscheck(False)
29257  */
29258   __pyx_r = 0;
29259   goto __pyx_L0;
29260 
29261   /* "yt/geometry/_selection_routines/slice_selector.pxi":84
29262  *     @cython.wraparound(False)
29263  *     @cython.cdivision(True)
29264  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
29265  *         if self.reduced_dimensionality == 1:
29266  *             return 1
29267  */
29268 
29269   /* function exit code */
29270   __pyx_L0:;
29271   return __pyx_r;
29272 }
29273 
29274 /* "yt/geometry/_selection_routines/slice_selector.pxi":96
29275  *     @cython.wraparound(False)
29276  *     @cython.cdivision(True)
29277  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
29278  *                                np.float64_t right_edge[3]) nogil:
29279  *         if self.reduced_dimensionality == 1:
29280  */
29281 
29282 static int __pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
29283   int __pyx_r;
29284   int __pyx_t_1;
29285   int __pyx_t_2;
29286 
29287   /* "yt/geometry/_selection_routines/slice_selector.pxi":98
29288  *     cdef int select_bbox(self, np.float64_t left_edge[3],
29289  *                                np.float64_t right_edge[3]) nogil:
29290  *         if self.reduced_dimensionality == 1:             # <<<<<<<<<<<<<<
29291  *             return 1
29292  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:
29293  */
29294   __pyx_t_1 = ((__pyx_v_self->reduced_dimensionality == 1) != 0);
29295   if (__pyx_t_1) {
29296 
29297     /* "yt/geometry/_selection_routines/slice_selector.pxi":99
29298  *                                np.float64_t right_edge[3]) nogil:
29299  *         if self.reduced_dimensionality == 1:
29300  *             return 1             # <<<<<<<<<<<<<<
29301  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:
29302  *             return 1
29303  */
29304     __pyx_r = 1;
29305     goto __pyx_L0;
29306 
29307     /* "yt/geometry/_selection_routines/slice_selector.pxi":98
29308  *     cdef int select_bbox(self, np.float64_t left_edge[3],
29309  *                                np.float64_t right_edge[3]) nogil:
29310  *         if self.reduced_dimensionality == 1:             # <<<<<<<<<<<<<<
29311  *             return 1
29312  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:
29313  */
29314   }
29315 
29316   /* "yt/geometry/_selection_routines/slice_selector.pxi":100
29317  *         if self.reduced_dimensionality == 1:
29318  *             return 1
29319  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:             # <<<<<<<<<<<<<<
29320  *             return 1
29321  *         return 0
29322  */
29323   __pyx_t_1 = (((__pyx_v_left_edge[__pyx_v_self->axis]) - __pyx_v_2yt_8geometry_18selection_routines_grid_eps) <= __pyx_v_self->coord);
29324   if (__pyx_t_1) {
29325     __pyx_t_1 = (__pyx_v_self->coord < (__pyx_v_right_edge[__pyx_v_self->axis]));
29326   }
29327   __pyx_t_2 = (__pyx_t_1 != 0);
29328   if (__pyx_t_2) {
29329 
29330     /* "yt/geometry/_selection_routines/slice_selector.pxi":101
29331  *             return 1
29332  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:
29333  *             return 1             # <<<<<<<<<<<<<<
29334  *         return 0
29335  *
29336  */
29337     __pyx_r = 1;
29338     goto __pyx_L0;
29339 
29340     /* "yt/geometry/_selection_routines/slice_selector.pxi":100
29341  *         if self.reduced_dimensionality == 1:
29342  *             return 1
29343  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:             # <<<<<<<<<<<<<<
29344  *             return 1
29345  *         return 0
29346  */
29347   }
29348 
29349   /* "yt/geometry/_selection_routines/slice_selector.pxi":102
29350  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:
29351  *             return 1
29352  *         return 0             # <<<<<<<<<<<<<<
29353  *
29354  *     @cython.boundscheck(False)
29355  */
29356   __pyx_r = 0;
29357   goto __pyx_L0;
29358 
29359   /* "yt/geometry/_selection_routines/slice_selector.pxi":96
29360  *     @cython.wraparound(False)
29361  *     @cython.cdivision(True)
29362  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
29363  *                                np.float64_t right_edge[3]) nogil:
29364  *         if self.reduced_dimensionality == 1:
29365  */
29366 
29367   /* function exit code */
29368   __pyx_L0:;
29369   return __pyx_r;
29370 }
29371 
29372 /* "yt/geometry/_selection_routines/slice_selector.pxi":107
29373  *     @cython.wraparound(False)
29374  *     @cython.cdivision(True)
29375  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
29376  *                                np.float64_t right_edge[3]) nogil:
29377  *         if self.reduced_dimensionality == 1:
29378  */
29379 
29380 static int __pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
29381   int __pyx_r;
29382   int __pyx_t_1;
29383   int __pyx_t_2;
29384 
29385   /* "yt/geometry/_selection_routines/slice_selector.pxi":109
29386  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
29387  *                                np.float64_t right_edge[3]) nogil:
29388  *         if self.reduced_dimensionality == 1:             # <<<<<<<<<<<<<<
29389  *             return 2
29390  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:
29391  */
29392   __pyx_t_1 = ((__pyx_v_self->reduced_dimensionality == 1) != 0);
29393   if (__pyx_t_1) {
29394 
29395     /* "yt/geometry/_selection_routines/slice_selector.pxi":110
29396  *                                np.float64_t right_edge[3]) nogil:
29397  *         if self.reduced_dimensionality == 1:
29398  *             return 2             # <<<<<<<<<<<<<<
29399  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:
29400  *             return 2 # a box with non-zero volume can't be inside a plane
29401  */
29402     __pyx_r = 2;
29403     goto __pyx_L0;
29404 
29405     /* "yt/geometry/_selection_routines/slice_selector.pxi":109
29406  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
29407  *                                np.float64_t right_edge[3]) nogil:
29408  *         if self.reduced_dimensionality == 1:             # <<<<<<<<<<<<<<
29409  *             return 2
29410  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:
29411  */
29412   }
29413 
29414   /* "yt/geometry/_selection_routines/slice_selector.pxi":111
29415  *         if self.reduced_dimensionality == 1:
29416  *             return 2
29417  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:             # <<<<<<<<<<<<<<
29418  *             return 2 # a box with non-zero volume can't be inside a plane
29419  *         return 0
29420  */
29421   __pyx_t_1 = (((__pyx_v_left_edge[__pyx_v_self->axis]) - __pyx_v_2yt_8geometry_18selection_routines_grid_eps) <= __pyx_v_self->coord);
29422   if (__pyx_t_1) {
29423     __pyx_t_1 = (__pyx_v_self->coord < (__pyx_v_right_edge[__pyx_v_self->axis]));
29424   }
29425   __pyx_t_2 = (__pyx_t_1 != 0);
29426   if (__pyx_t_2) {
29427 
29428     /* "yt/geometry/_selection_routines/slice_selector.pxi":112
29429  *             return 2
29430  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:
29431  *             return 2 # a box with non-zero volume can't be inside a plane             # <<<<<<<<<<<<<<
29432  *         return 0
29433  *
29434  */
29435     __pyx_r = 2;
29436     goto __pyx_L0;
29437 
29438     /* "yt/geometry/_selection_routines/slice_selector.pxi":111
29439  *         if self.reduced_dimensionality == 1:
29440  *             return 2
29441  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:             # <<<<<<<<<<<<<<
29442  *             return 2 # a box with non-zero volume can't be inside a plane
29443  *         return 0
29444  */
29445   }
29446 
29447   /* "yt/geometry/_selection_routines/slice_selector.pxi":113
29448  *         if left_edge[self.axis] - grid_eps <= self.coord < right_edge[self.axis]:
29449  *             return 2 # a box with non-zero volume can't be inside a plane
29450  *         return 0             # <<<<<<<<<<<<<<
29451  *
29452  *     def _hash_vals(self):
29453  */
29454   __pyx_r = 0;
29455   goto __pyx_L0;
29456 
29457   /* "yt/geometry/_selection_routines/slice_selector.pxi":107
29458  *     @cython.wraparound(False)
29459  *     @cython.cdivision(True)
29460  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
29461  *                                np.float64_t right_edge[3]) nogil:
29462  *         if self.reduced_dimensionality == 1:
29463  */
29464 
29465   /* function exit code */
29466   __pyx_L0:;
29467   return __pyx_r;
29468 }
29469 
29470 /* "yt/geometry/_selection_routines/slice_selector.pxi":115
29471  *         return 0
29472  *
29473  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
29474  *         return (("axis", self.axis),
29475  *                 ("coord", self.coord))
29476  */
29477 
29478 /* Python wrapper */
29479 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
29480 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
29481   PyObject *__pyx_r = 0;
29482   __Pyx_RefNannyDeclarations
29483   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
29484   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_4_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self));
29485 
29486   /* function exit code */
29487   __Pyx_RefNannyFinishContext();
29488   return __pyx_r;
29489 }
29490 
29491 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_4_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self) {
29492   PyObject *__pyx_r = NULL;
29493   __Pyx_RefNannyDeclarations
29494   PyObject *__pyx_t_1 = NULL;
29495   PyObject *__pyx_t_2 = NULL;
29496   PyObject *__pyx_t_3 = NULL;
29497   __Pyx_RefNannySetupContext("_hash_vals", 0);
29498 
29499   /* "yt/geometry/_selection_routines/slice_selector.pxi":116
29500  *
29501  *     def _hash_vals(self):
29502  *         return (("axis", self.axis),             # <<<<<<<<<<<<<<
29503  *                 ("coord", self.coord))
29504  *
29505  */
29506   __Pyx_XDECREF(__pyx_r);
29507   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->axis); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 116, __pyx_L1_error)
29508   __Pyx_GOTREF(__pyx_t_1);
29509   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 116, __pyx_L1_error)
29510   __Pyx_GOTREF(__pyx_t_2);
29511   __Pyx_INCREF(__pyx_n_s_axis);
29512   __Pyx_GIVEREF(__pyx_n_s_axis);
29513   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_axis);
29514   __Pyx_GIVEREF(__pyx_t_1);
29515   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
29516   __pyx_t_1 = 0;
29517 
29518   /* "yt/geometry/_selection_routines/slice_selector.pxi":117
29519  *     def _hash_vals(self):
29520  *         return (("axis", self.axis),
29521  *                 ("coord", self.coord))             # <<<<<<<<<<<<<<
29522  *
29523  *     def _get_state_attnames(self):
29524  */
29525   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->coord); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 117, __pyx_L1_error)
29526   __Pyx_GOTREF(__pyx_t_1);
29527   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 117, __pyx_L1_error)
29528   __Pyx_GOTREF(__pyx_t_3);
29529   __Pyx_INCREF(__pyx_n_s_coord);
29530   __Pyx_GIVEREF(__pyx_n_s_coord);
29531   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_coord);
29532   __Pyx_GIVEREF(__pyx_t_1);
29533   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
29534   __pyx_t_1 = 0;
29535 
29536   /* "yt/geometry/_selection_routines/slice_selector.pxi":116
29537  *
29538  *     def _hash_vals(self):
29539  *         return (("axis", self.axis),             # <<<<<<<<<<<<<<
29540  *                 ("coord", self.coord))
29541  *
29542  */
29543   __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 116, __pyx_L1_error)
29544   __Pyx_GOTREF(__pyx_t_1);
29545   __Pyx_GIVEREF(__pyx_t_2);
29546   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
29547   __Pyx_GIVEREF(__pyx_t_3);
29548   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
29549   __pyx_t_2 = 0;
29550   __pyx_t_3 = 0;
29551   __pyx_r = __pyx_t_1;
29552   __pyx_t_1 = 0;
29553   goto __pyx_L0;
29554 
29555   /* "yt/geometry/_selection_routines/slice_selector.pxi":115
29556  *         return 0
29557  *
29558  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
29559  *         return (("axis", self.axis),
29560  *                 ("coord", self.coord))
29561  */
29562 
29563   /* function exit code */
29564   __pyx_L1_error:;
29565   __Pyx_XDECREF(__pyx_t_1);
29566   __Pyx_XDECREF(__pyx_t_2);
29567   __Pyx_XDECREF(__pyx_t_3);
29568   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
29569   __pyx_r = NULL;
29570   __pyx_L0:;
29571   __Pyx_XGIVEREF(__pyx_r);
29572   __Pyx_RefNannyFinishContext();
29573   return __pyx_r;
29574 }
29575 
29576 /* "yt/geometry/_selection_routines/slice_selector.pxi":119
29577  *                 ("coord", self.coord))
29578  *
29579  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
29580  *         return ("axis", "coord", "ax", "ay", "reduced_dimensionality")
29581  *
29582  */
29583 
29584 /* Python wrapper */
29585 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_7_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
29586 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_7_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
29587   PyObject *__pyx_r = 0;
29588   __Pyx_RefNannyDeclarations
29589   __Pyx_RefNannySetupContext("_get_state_attnames (wrapper)", 0);
29590   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_6_get_state_attnames(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self));
29591 
29592   /* function exit code */
29593   __Pyx_RefNannyFinishContext();
29594   return __pyx_r;
29595 }
29596 
29597 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_6_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self) {
29598   PyObject *__pyx_r = NULL;
29599   __Pyx_RefNannyDeclarations
29600   __Pyx_RefNannySetupContext("_get_state_attnames", 0);
29601 
29602   /* "yt/geometry/_selection_routines/slice_selector.pxi":120
29603  *
29604  *     def _get_state_attnames(self):
29605  *         return ("axis", "coord", "ax", "ay", "reduced_dimensionality")             # <<<<<<<<<<<<<<
29606  *
29607  * slice_selector = SliceSelector
29608  */
29609   __Pyx_XDECREF(__pyx_r);
29610   __Pyx_INCREF(__pyx_tuple__27);
29611   __pyx_r = __pyx_tuple__27;
29612   goto __pyx_L0;
29613 
29614   /* "yt/geometry/_selection_routines/slice_selector.pxi":119
29615  *                 ("coord", self.coord))
29616  *
29617  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
29618  *         return ("axis", "coord", "ax", "ay", "reduced_dimensionality")
29619  *
29620  */
29621 
29622   /* function exit code */
29623   __pyx_L0:;
29624   __Pyx_XGIVEREF(__pyx_r);
29625   __Pyx_RefNannyFinishContext();
29626   return __pyx_r;
29627 }
29628 
29629 /* "yt/geometry/_selection_routines/slice_selector.pxi":2
29630  * cdef class SliceSelector(SelectorObject):
29631  *     cdef public int axis             # <<<<<<<<<<<<<<
29632  *     cdef public np.float64_t coord
29633  *     cdef public int ax, ay
29634  */
29635 
29636 /* Python wrapper */
29637 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_4axis_1__get__(PyObject *__pyx_v_self); /*proto*/
29638 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_4axis_1__get__(PyObject *__pyx_v_self) {
29639   PyObject *__pyx_r = 0;
29640   __Pyx_RefNannyDeclarations
29641   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
29642   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_4axis___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self));
29643 
29644   /* function exit code */
29645   __Pyx_RefNannyFinishContext();
29646   return __pyx_r;
29647 }
29648 
29649 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_4axis___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self) {
29650   PyObject *__pyx_r = NULL;
29651   __Pyx_RefNannyDeclarations
29652   PyObject *__pyx_t_1 = NULL;
29653   __Pyx_RefNannySetupContext("__get__", 0);
29654   __Pyx_XDECREF(__pyx_r);
29655   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->axis); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 2, __pyx_L1_error)
29656   __Pyx_GOTREF(__pyx_t_1);
29657   __pyx_r = __pyx_t_1;
29658   __pyx_t_1 = 0;
29659   goto __pyx_L0;
29660 
29661   /* function exit code */
29662   __pyx_L1_error:;
29663   __Pyx_XDECREF(__pyx_t_1);
29664   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.axis.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
29665   __pyx_r = NULL;
29666   __pyx_L0:;
29667   __Pyx_XGIVEREF(__pyx_r);
29668   __Pyx_RefNannyFinishContext();
29669   return __pyx_r;
29670 }
29671 
29672 /* Python wrapper */
29673 static int __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_4axis_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
29674 static int __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_4axis_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
29675   int __pyx_r;
29676   __Pyx_RefNannyDeclarations
29677   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
29678   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_4axis_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
29679 
29680   /* function exit code */
29681   __Pyx_RefNannyFinishContext();
29682   return __pyx_r;
29683 }
29684 
29685 static int __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_4axis_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_value) {
29686   int __pyx_r;
29687   __Pyx_RefNannyDeclarations
29688   int __pyx_t_1;
29689   __Pyx_RefNannySetupContext("__set__", 0);
29690   __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(10, 2, __pyx_L1_error)
29691   __pyx_v_self->axis = __pyx_t_1;
29692 
29693   /* function exit code */
29694   __pyx_r = 0;
29695   goto __pyx_L0;
29696   __pyx_L1_error:;
29697   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.axis.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
29698   __pyx_r = -1;
29699   __pyx_L0:;
29700   __Pyx_RefNannyFinishContext();
29701   return __pyx_r;
29702 }
29703 
29704 /* "yt/geometry/_selection_routines/slice_selector.pxi":3
29705  * cdef class SliceSelector(SelectorObject):
29706  *     cdef public int axis
29707  *     cdef public np.float64_t coord             # <<<<<<<<<<<<<<
29708  *     cdef public int ax, ay
29709  *     cdef public int reduced_dimensionality
29710  */
29711 
29712 /* Python wrapper */
29713 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_5coord_1__get__(PyObject *__pyx_v_self); /*proto*/
29714 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_5coord_1__get__(PyObject *__pyx_v_self) {
29715   PyObject *__pyx_r = 0;
29716   __Pyx_RefNannyDeclarations
29717   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
29718   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_5coord___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self));
29719 
29720   /* function exit code */
29721   __Pyx_RefNannyFinishContext();
29722   return __pyx_r;
29723 }
29724 
29725 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_5coord___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self) {
29726   PyObject *__pyx_r = NULL;
29727   __Pyx_RefNannyDeclarations
29728   PyObject *__pyx_t_1 = NULL;
29729   __Pyx_RefNannySetupContext("__get__", 0);
29730   __Pyx_XDECREF(__pyx_r);
29731   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->coord); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 3, __pyx_L1_error)
29732   __Pyx_GOTREF(__pyx_t_1);
29733   __pyx_r = __pyx_t_1;
29734   __pyx_t_1 = 0;
29735   goto __pyx_L0;
29736 
29737   /* function exit code */
29738   __pyx_L1_error:;
29739   __Pyx_XDECREF(__pyx_t_1);
29740   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.coord.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
29741   __pyx_r = NULL;
29742   __pyx_L0:;
29743   __Pyx_XGIVEREF(__pyx_r);
29744   __Pyx_RefNannyFinishContext();
29745   return __pyx_r;
29746 }
29747 
29748 /* Python wrapper */
29749 static int __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_5coord_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
29750 static int __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_5coord_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
29751   int __pyx_r;
29752   __Pyx_RefNannyDeclarations
29753   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
29754   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_5coord_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
29755 
29756   /* function exit code */
29757   __Pyx_RefNannyFinishContext();
29758   return __pyx_r;
29759 }
29760 
29761 static int __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_5coord_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_value) {
29762   int __pyx_r;
29763   __Pyx_RefNannyDeclarations
29764   __pyx_t_5numpy_float64_t __pyx_t_1;
29765   __Pyx_RefNannySetupContext("__set__", 0);
29766   __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(10, 3, __pyx_L1_error)
29767   __pyx_v_self->coord = __pyx_t_1;
29768 
29769   /* function exit code */
29770   __pyx_r = 0;
29771   goto __pyx_L0;
29772   __pyx_L1_error:;
29773   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.coord.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
29774   __pyx_r = -1;
29775   __pyx_L0:;
29776   __Pyx_RefNannyFinishContext();
29777   return __pyx_r;
29778 }
29779 
29780 /* "yt/geometry/_selection_routines/slice_selector.pxi":4
29781  *     cdef public int axis
29782  *     cdef public np.float64_t coord
29783  *     cdef public int ax, ay             # <<<<<<<<<<<<<<
29784  *     cdef public int reduced_dimensionality
29785  *
29786  */
29787 
29788 /* Python wrapper */
29789 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_2ax_1__get__(PyObject *__pyx_v_self); /*proto*/
29790 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_2ax_1__get__(PyObject *__pyx_v_self) {
29791   PyObject *__pyx_r = 0;
29792   __Pyx_RefNannyDeclarations
29793   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
29794   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2ax___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self));
29795 
29796   /* function exit code */
29797   __Pyx_RefNannyFinishContext();
29798   return __pyx_r;
29799 }
29800 
29801 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2ax___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self) {
29802   PyObject *__pyx_r = NULL;
29803   __Pyx_RefNannyDeclarations
29804   PyObject *__pyx_t_1 = NULL;
29805   __Pyx_RefNannySetupContext("__get__", 0);
29806   __Pyx_XDECREF(__pyx_r);
29807   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ax); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 4, __pyx_L1_error)
29808   __Pyx_GOTREF(__pyx_t_1);
29809   __pyx_r = __pyx_t_1;
29810   __pyx_t_1 = 0;
29811   goto __pyx_L0;
29812 
29813   /* function exit code */
29814   __pyx_L1_error:;
29815   __Pyx_XDECREF(__pyx_t_1);
29816   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.ax.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
29817   __pyx_r = NULL;
29818   __pyx_L0:;
29819   __Pyx_XGIVEREF(__pyx_r);
29820   __Pyx_RefNannyFinishContext();
29821   return __pyx_r;
29822 }
29823 
29824 /* Python wrapper */
29825 static int __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_2ax_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
29826 static int __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_2ax_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
29827   int __pyx_r;
29828   __Pyx_RefNannyDeclarations
29829   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
29830   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2ax_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
29831 
29832   /* function exit code */
29833   __Pyx_RefNannyFinishContext();
29834   return __pyx_r;
29835 }
29836 
29837 static int __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2ax_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_value) {
29838   int __pyx_r;
29839   __Pyx_RefNannyDeclarations
29840   int __pyx_t_1;
29841   __Pyx_RefNannySetupContext("__set__", 0);
29842   __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(10, 4, __pyx_L1_error)
29843   __pyx_v_self->ax = __pyx_t_1;
29844 
29845   /* function exit code */
29846   __pyx_r = 0;
29847   goto __pyx_L0;
29848   __pyx_L1_error:;
29849   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.ax.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
29850   __pyx_r = -1;
29851   __pyx_L0:;
29852   __Pyx_RefNannyFinishContext();
29853   return __pyx_r;
29854 }
29855 
29856 /* Python wrapper */
29857 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_2ay_1__get__(PyObject *__pyx_v_self); /*proto*/
29858 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_2ay_1__get__(PyObject *__pyx_v_self) {
29859   PyObject *__pyx_r = 0;
29860   __Pyx_RefNannyDeclarations
29861   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
29862   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2ay___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self));
29863 
29864   /* function exit code */
29865   __Pyx_RefNannyFinishContext();
29866   return __pyx_r;
29867 }
29868 
29869 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2ay___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self) {
29870   PyObject *__pyx_r = NULL;
29871   __Pyx_RefNannyDeclarations
29872   PyObject *__pyx_t_1 = NULL;
29873   __Pyx_RefNannySetupContext("__get__", 0);
29874   __Pyx_XDECREF(__pyx_r);
29875   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->ay); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 4, __pyx_L1_error)
29876   __Pyx_GOTREF(__pyx_t_1);
29877   __pyx_r = __pyx_t_1;
29878   __pyx_t_1 = 0;
29879   goto __pyx_L0;
29880 
29881   /* function exit code */
29882   __pyx_L1_error:;
29883   __Pyx_XDECREF(__pyx_t_1);
29884   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.ay.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
29885   __pyx_r = NULL;
29886   __pyx_L0:;
29887   __Pyx_XGIVEREF(__pyx_r);
29888   __Pyx_RefNannyFinishContext();
29889   return __pyx_r;
29890 }
29891 
29892 /* Python wrapper */
29893 static int __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_2ay_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
29894 static int __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_2ay_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
29895   int __pyx_r;
29896   __Pyx_RefNannyDeclarations
29897   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
29898   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2ay_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
29899 
29900   /* function exit code */
29901   __Pyx_RefNannyFinishContext();
29902   return __pyx_r;
29903 }
29904 
29905 static int __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_2ay_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_value) {
29906   int __pyx_r;
29907   __Pyx_RefNannyDeclarations
29908   int __pyx_t_1;
29909   __Pyx_RefNannySetupContext("__set__", 0);
29910   __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(10, 4, __pyx_L1_error)
29911   __pyx_v_self->ay = __pyx_t_1;
29912 
29913   /* function exit code */
29914   __pyx_r = 0;
29915   goto __pyx_L0;
29916   __pyx_L1_error:;
29917   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.ay.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
29918   __pyx_r = -1;
29919   __pyx_L0:;
29920   __Pyx_RefNannyFinishContext();
29921   return __pyx_r;
29922 }
29923 
29924 /* "yt/geometry/_selection_routines/slice_selector.pxi":5
29925  *     cdef public np.float64_t coord
29926  *     cdef public int ax, ay
29927  *     cdef public int reduced_dimensionality             # <<<<<<<<<<<<<<
29928  *
29929  *     def __init__(self, dobj):
29930  */
29931 
29932 /* Python wrapper */
29933 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_22reduced_dimensionality_1__get__(PyObject *__pyx_v_self); /*proto*/
29934 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_22reduced_dimensionality_1__get__(PyObject *__pyx_v_self) {
29935   PyObject *__pyx_r = 0;
29936   __Pyx_RefNannyDeclarations
29937   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
29938   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_22reduced_dimensionality___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self));
29939 
29940   /* function exit code */
29941   __Pyx_RefNannyFinishContext();
29942   return __pyx_r;
29943 }
29944 
29945 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_22reduced_dimensionality___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self) {
29946   PyObject *__pyx_r = NULL;
29947   __Pyx_RefNannyDeclarations
29948   PyObject *__pyx_t_1 = NULL;
29949   __Pyx_RefNannySetupContext("__get__", 0);
29950   __Pyx_XDECREF(__pyx_r);
29951   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->reduced_dimensionality); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 5, __pyx_L1_error)
29952   __Pyx_GOTREF(__pyx_t_1);
29953   __pyx_r = __pyx_t_1;
29954   __pyx_t_1 = 0;
29955   goto __pyx_L0;
29956 
29957   /* function exit code */
29958   __pyx_L1_error:;
29959   __Pyx_XDECREF(__pyx_t_1);
29960   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.reduced_dimensionality.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
29961   __pyx_r = NULL;
29962   __pyx_L0:;
29963   __Pyx_XGIVEREF(__pyx_r);
29964   __Pyx_RefNannyFinishContext();
29965   return __pyx_r;
29966 }
29967 
29968 /* Python wrapper */
29969 static int __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_22reduced_dimensionality_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
29970 static int __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_22reduced_dimensionality_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
29971   int __pyx_r;
29972   __Pyx_RefNannyDeclarations
29973   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
29974   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_22reduced_dimensionality_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
29975 
29976   /* function exit code */
29977   __Pyx_RefNannyFinishContext();
29978   return __pyx_r;
29979 }
29980 
29981 static int __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_22reduced_dimensionality_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, PyObject *__pyx_v_value) {
29982   int __pyx_r;
29983   __Pyx_RefNannyDeclarations
29984   int __pyx_t_1;
29985   __Pyx_RefNannySetupContext("__set__", 0);
29986   __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(10, 5, __pyx_L1_error)
29987   __pyx_v_self->reduced_dimensionality = __pyx_t_1;
29988 
29989   /* function exit code */
29990   __pyx_r = 0;
29991   goto __pyx_L0;
29992   __pyx_L1_error:;
29993   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.reduced_dimensionality.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
29994   __pyx_r = -1;
29995   __pyx_L0:;
29996   __Pyx_RefNannyFinishContext();
29997   return __pyx_r;
29998 }
29999 
30000 /* "(tree fragment)":1
30001  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
30002  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
30003  * def __setstate_cython__(self, __pyx_state):
30004  */
30005 
30006 /* Python wrapper */
30007 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
30008 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
30009   PyObject *__pyx_r = 0;
30010   __Pyx_RefNannyDeclarations
30011   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
30012   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_8__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self));
30013 
30014   /* function exit code */
30015   __Pyx_RefNannyFinishContext();
30016   return __pyx_r;
30017 }
30018 
30019 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self) {
30020   PyObject *__pyx_r = NULL;
30021   __Pyx_RefNannyDeclarations
30022   PyObject *__pyx_t_1 = NULL;
30023   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
30024 
30025   /* "(tree fragment)":2
30026  * def __reduce_cython__(self):
30027  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
30028  * def __setstate_cython__(self, __pyx_state):
30029  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
30030  */
30031   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
30032   __Pyx_GOTREF(__pyx_t_1);
30033   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
30034   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30035   __PYX_ERR(5, 2, __pyx_L1_error)
30036 
30037   /* "(tree fragment)":1
30038  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
30039  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
30040  * def __setstate_cython__(self, __pyx_state):
30041  */
30042 
30043   /* function exit code */
30044   __pyx_L1_error:;
30045   __Pyx_XDECREF(__pyx_t_1);
30046   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
30047   __pyx_r = NULL;
30048   __Pyx_XGIVEREF(__pyx_r);
30049   __Pyx_RefNannyFinishContext();
30050   return __pyx_r;
30051 }
30052 
30053 /* "(tree fragment)":3
30054  * def __reduce_cython__(self):
30055  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
30056  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
30057  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
30058  */
30059 
30060 /* Python wrapper */
30061 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
30062 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
30063   PyObject *__pyx_r = 0;
30064   __Pyx_RefNannyDeclarations
30065   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
30066   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_10__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
30067 
30068   /* function exit code */
30069   __Pyx_RefNannyFinishContext();
30070   return __pyx_r;
30071 }
30072 
30073 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_13SliceSelector_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
30074   PyObject *__pyx_r = NULL;
30075   __Pyx_RefNannyDeclarations
30076   PyObject *__pyx_t_1 = NULL;
30077   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
30078 
30079   /* "(tree fragment)":4
30080  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
30081  * def __setstate_cython__(self, __pyx_state):
30082  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
30083  */
30084   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
30085   __Pyx_GOTREF(__pyx_t_1);
30086   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
30087   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30088   __PYX_ERR(5, 4, __pyx_L1_error)
30089 
30090   /* "(tree fragment)":3
30091  * def __reduce_cython__(self):
30092  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
30093  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
30094  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
30095  */
30096 
30097   /* function exit code */
30098   __pyx_L1_error:;
30099   __Pyx_XDECREF(__pyx_t_1);
30100   __Pyx_AddTraceback("yt.geometry.selection_routines.SliceSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
30101   __pyx_r = NULL;
30102   __Pyx_XGIVEREF(__pyx_r);
30103   __Pyx_RefNannyFinishContext();
30104   return __pyx_r;
30105 }
30106 
30107 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":9
30108  *     cdef public int axis
30109  *
30110  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
30111  *         self.axis = dobj.axis
30112  *         self.px_ax = dobj.px_ax
30113  */
30114 
30115 /* Python wrapper */
30116 static int __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
30117 static int __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
30118   PyObject *__pyx_v_dobj = 0;
30119   int __pyx_r;
30120   __Pyx_RefNannyDeclarations
30121   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
30122   {
30123     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
30124     PyObject* values[1] = {0};
30125     if (unlikely(__pyx_kwds)) {
30126       Py_ssize_t kw_args;
30127       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
30128       switch (pos_args) {
30129         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
30130         CYTHON_FALLTHROUGH;
30131         case  0: break;
30132         default: goto __pyx_L5_argtuple_error;
30133       }
30134       kw_args = PyDict_Size(__pyx_kwds);
30135       switch (pos_args) {
30136         case  0:
30137         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
30138         else goto __pyx_L5_argtuple_error;
30139       }
30140       if (unlikely(kw_args > 0)) {
30141         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(11, 9, __pyx_L3_error)
30142       }
30143     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
30144       goto __pyx_L5_argtuple_error;
30145     } else {
30146       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
30147     }
30148     __pyx_v_dobj = values[0];
30149   }
30150   goto __pyx_L4_argument_unpacking_done;
30151   __pyx_L5_argtuple_error:;
30152   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(11, 9, __pyx_L3_error)
30153   __pyx_L3_error:;
30154   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
30155   __Pyx_RefNannyFinishContext();
30156   return -1;
30157   __pyx_L4_argument_unpacking_done:;
30158   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self), __pyx_v_dobj);
30159 
30160   /* function exit code */
30161   __Pyx_RefNannyFinishContext();
30162   return __pyx_r;
30163 }
30164 
30165 static int __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
30166   int __pyx_r;
30167   __Pyx_RefNannyDeclarations
30168   PyObject *__pyx_t_1 = NULL;
30169   int __pyx_t_2;
30170   __pyx_t_5numpy_uint8_t __pyx_t_3;
30171   __pyx_t_5numpy_float64_t __pyx_t_4;
30172   __Pyx_RefNannySetupContext("__init__", 0);
30173 
30174   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":10
30175  *
30176  *     def __init__(self, dobj):
30177  *         self.axis = dobj.axis             # <<<<<<<<<<<<<<
30178  *         self.px_ax = dobj.px_ax
30179  *         self.py_ax = dobj.py_ax
30180  */
30181   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_axis); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 10, __pyx_L1_error)
30182   __Pyx_GOTREF(__pyx_t_1);
30183   __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(11, 10, __pyx_L1_error)
30184   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30185   __pyx_v_self->axis = __pyx_t_2;
30186 
30187   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":11
30188  *     def __init__(self, dobj):
30189  *         self.axis = dobj.axis
30190  *         self.px_ax = dobj.px_ax             # <<<<<<<<<<<<<<
30191  *         self.py_ax = dobj.py_ax
30192  *         self.px = dobj.px
30193  */
30194   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_px_ax); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 11, __pyx_L1_error)
30195   __Pyx_GOTREF(__pyx_t_1);
30196   __pyx_t_3 = __Pyx_PyInt_As_npy_uint8(__pyx_t_1); if (unlikely((__pyx_t_3 == ((npy_uint8)-1)) && PyErr_Occurred())) __PYX_ERR(11, 11, __pyx_L1_error)
30197   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30198   __pyx_v_self->px_ax = __pyx_t_3;
30199 
30200   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":12
30201  *         self.axis = dobj.axis
30202  *         self.px_ax = dobj.px_ax
30203  *         self.py_ax = dobj.py_ax             # <<<<<<<<<<<<<<
30204  *         self.px = dobj.px
30205  *         self.py = dobj.py
30206  */
30207   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_py_ax); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 12, __pyx_L1_error)
30208   __Pyx_GOTREF(__pyx_t_1);
30209   __pyx_t_3 = __Pyx_PyInt_As_npy_uint8(__pyx_t_1); if (unlikely((__pyx_t_3 == ((npy_uint8)-1)) && PyErr_Occurred())) __PYX_ERR(11, 12, __pyx_L1_error)
30210   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30211   __pyx_v_self->py_ax = __pyx_t_3;
30212 
30213   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":13
30214  *         self.px_ax = dobj.px_ax
30215  *         self.py_ax = dobj.py_ax
30216  *         self.px = dobj.px             # <<<<<<<<<<<<<<
30217  *         self.py = dobj.py
30218  *
30219  */
30220   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_px); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 13, __pyx_L1_error)
30221   __Pyx_GOTREF(__pyx_t_1);
30222   __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(11, 13, __pyx_L1_error)
30223   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30224   __pyx_v_self->px = __pyx_t_4;
30225 
30226   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":14
30227  *         self.py_ax = dobj.py_ax
30228  *         self.px = dobj.px
30229  *         self.py = dobj.py             # <<<<<<<<<<<<<<
30230  *
30231  *     @cython.boundscheck(False)
30232  */
30233   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_py); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 14, __pyx_L1_error)
30234   __Pyx_GOTREF(__pyx_t_1);
30235   __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(11, 14, __pyx_L1_error)
30236   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30237   __pyx_v_self->py = __pyx_t_4;
30238 
30239   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":9
30240  *     cdef public int axis
30241  *
30242  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
30243  *         self.axis = dobj.axis
30244  *         self.px_ax = dobj.px_ax
30245  */
30246 
30247   /* function exit code */
30248   __pyx_r = 0;
30249   goto __pyx_L0;
30250   __pyx_L1_error:;
30251   __Pyx_XDECREF(__pyx_t_1);
30252   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
30253   __pyx_r = -1;
30254   __pyx_L0:;
30255   __Pyx_RefNannyFinishContext();
30256   return __pyx_r;
30257 }
30258 
30259 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":19
30260  *     @cython.wraparound(False)
30261  *     @cython.cdivision(True)
30262  *     def fill_mask(self, gobj):             # <<<<<<<<<<<<<<
30263  *         cdef np.ndarray[np.uint8_t, ndim=3] mask
30264  *         cdef np.ndarray[np.uint8_t, ndim=3, cast=True] child_mask
30265  */
30266 
30267 /* Python wrapper */
30268 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_3fill_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj); /*proto*/
30269 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_3fill_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj) {
30270   PyObject *__pyx_r = 0;
30271   __Pyx_RefNannyDeclarations
30272   __Pyx_RefNannySetupContext("fill_mask (wrapper)", 0);
30273   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2fill_mask(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self), ((PyObject *)__pyx_v_gobj));
30274 
30275   /* function exit code */
30276   __Pyx_RefNannyFinishContext();
30277   return __pyx_r;
30278 }
30279 
30280 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2fill_mask(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_gobj) {
30281   PyArrayObject *__pyx_v_mask = 0;
30282   PyArrayObject *__pyx_v_child_mask = 0;
30283   int __pyx_v_i;
30284   int __pyx_v_j;
30285   int __pyx_v_k;
30286   int __pyx_v_total;
30287   int __pyx_v_this_level;
30288   int __pyx_v_ind[3][2];
30289   __pyx_t_5numpy_int32_t __pyx_v_level;
30290   __Pyx_LocalBuf_ND __pyx_pybuffernd_child_mask;
30291   __Pyx_Buffer __pyx_pybuffer_child_mask;
30292   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
30293   __Pyx_Buffer __pyx_pybuffer_mask;
30294   PyObject *__pyx_r = NULL;
30295   __Pyx_RefNannyDeclarations
30296   PyObject *__pyx_t_1 = NULL;
30297   __pyx_t_5numpy_int32_t __pyx_t_2;
30298   PyObject *__pyx_t_3 = NULL;
30299   int __pyx_t_4;
30300   int __pyx_t_5;
30301   PyArrayObject *__pyx_t_6 = NULL;
30302   int __pyx_t_7;
30303   PyObject *__pyx_t_8 = NULL;
30304   PyObject *__pyx_t_9 = NULL;
30305   PyObject *__pyx_t_10 = NULL;
30306   PyObject *__pyx_t_11 = NULL;
30307   PyObject *__pyx_t_12 = NULL;
30308   PyObject *__pyx_t_13 = NULL;
30309   PyArrayObject *__pyx_t_14 = NULL;
30310   int __pyx_t_15;
30311   int __pyx_t_16;
30312   int __pyx_t_17;
30313   int __pyx_t_18;
30314   int __pyx_t_19;
30315   int __pyx_t_20;
30316   int __pyx_t_21;
30317   int __pyx_t_22;
30318   Py_ssize_t __pyx_t_23;
30319   Py_ssize_t __pyx_t_24;
30320   Py_ssize_t __pyx_t_25;
30321   Py_ssize_t __pyx_t_26;
30322   Py_ssize_t __pyx_t_27;
30323   Py_ssize_t __pyx_t_28;
30324   __Pyx_RefNannySetupContext("fill_mask", 0);
30325   __pyx_pybuffer_mask.pybuffer.buf = NULL;
30326   __pyx_pybuffer_mask.refcount = 0;
30327   __pyx_pybuffernd_mask.data = NULL;
30328   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
30329   __pyx_pybuffer_child_mask.pybuffer.buf = NULL;
30330   __pyx_pybuffer_child_mask.refcount = 0;
30331   __pyx_pybuffernd_child_mask.data = NULL;
30332   __pyx_pybuffernd_child_mask.rcbuffer = &__pyx_pybuffer_child_mask;
30333 
30334   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":23
30335  *         cdef np.ndarray[np.uint8_t, ndim=3, cast=True] child_mask
30336  *         cdef int i, j, k
30337  *         cdef int total = 0             # <<<<<<<<<<<<<<
30338  *         cdef int this_level = 0
30339  *         cdef int ind[3][2]
30340  */
30341   __pyx_v_total = 0;
30342 
30343   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":24
30344  *         cdef int i, j, k
30345  *         cdef int total = 0
30346  *         cdef int this_level = 0             # <<<<<<<<<<<<<<
30347  *         cdef int ind[3][2]
30348  *         cdef np.int32_t level = gobj.Level
30349  */
30350   __pyx_v_this_level = 0;
30351 
30352   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":26
30353  *         cdef int this_level = 0
30354  *         cdef int ind[3][2]
30355  *         cdef np.int32_t level = gobj.Level             # <<<<<<<<<<<<<<
30356  *         _ensure_code(gobj.LeftEdge)
30357  *         _ensure_code(gobj.RightEdge)
30358  */
30359   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_Level); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 26, __pyx_L1_error)
30360   __Pyx_GOTREF(__pyx_t_1);
30361   __pyx_t_2 = __Pyx_PyInt_As_npy_int32(__pyx_t_1); if (unlikely((__pyx_t_2 == ((npy_int32)-1)) && PyErr_Occurred())) __PYX_ERR(11, 26, __pyx_L1_error)
30362   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30363   __pyx_v_level = __pyx_t_2;
30364 
30365   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":27
30366  *         cdef int ind[3][2]
30367  *         cdef np.int32_t level = gobj.Level
30368  *         _ensure_code(gobj.LeftEdge)             # <<<<<<<<<<<<<<
30369  *         _ensure_code(gobj.RightEdge)
30370  *         _ensure_code(gobj.dds)
30371  */
30372   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_LeftEdge); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 27, __pyx_L1_error)
30373   __Pyx_GOTREF(__pyx_t_1);
30374   __pyx_t_3 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 27, __pyx_L1_error)
30375   __Pyx_GOTREF(__pyx_t_3);
30376   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30377   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
30378 
30379   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":28
30380  *         cdef np.int32_t level = gobj.Level
30381  *         _ensure_code(gobj.LeftEdge)
30382  *         _ensure_code(gobj.RightEdge)             # <<<<<<<<<<<<<<
30383  *         _ensure_code(gobj.dds)
30384  *
30385  */
30386   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_RightEdge); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 28, __pyx_L1_error)
30387   __Pyx_GOTREF(__pyx_t_3);
30388   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 28, __pyx_L1_error)
30389   __Pyx_GOTREF(__pyx_t_1);
30390   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
30391   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30392 
30393   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":29
30394  *         _ensure_code(gobj.LeftEdge)
30395  *         _ensure_code(gobj.RightEdge)
30396  *         _ensure_code(gobj.dds)             # <<<<<<<<<<<<<<
30397  *
30398  *         if level < self.min_level or level > self.max_level:
30399  */
30400   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 29, __pyx_L1_error)
30401   __Pyx_GOTREF(__pyx_t_1);
30402   __pyx_t_3 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 29, __pyx_L1_error)
30403   __Pyx_GOTREF(__pyx_t_3);
30404   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30405   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
30406 
30407   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":31
30408  *         _ensure_code(gobj.dds)
30409  *
30410  *         if level < self.min_level or level > self.max_level:             # <<<<<<<<<<<<<<
30411  *             return None
30412  *         else:
30413  */
30414   __pyx_t_5 = ((__pyx_v_level < __pyx_v_self->__pyx_base.min_level) != 0);
30415   if (!__pyx_t_5) {
30416   } else {
30417     __pyx_t_4 = __pyx_t_5;
30418     goto __pyx_L4_bool_binop_done;
30419   }
30420   __pyx_t_5 = ((__pyx_v_level > __pyx_v_self->__pyx_base.max_level) != 0);
30421   __pyx_t_4 = __pyx_t_5;
30422   __pyx_L4_bool_binop_done:;
30423   if (__pyx_t_4) {
30424 
30425     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":32
30426  *
30427  *         if level < self.min_level or level > self.max_level:
30428  *             return None             # <<<<<<<<<<<<<<
30429  *         else:
30430  *             child_mask = gobj.child_mask
30431  */
30432     __Pyx_XDECREF(__pyx_r);
30433     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
30434     goto __pyx_L0;
30435 
30436     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":31
30437  *         _ensure_code(gobj.dds)
30438  *
30439  *         if level < self.min_level or level > self.max_level:             # <<<<<<<<<<<<<<
30440  *             return None
30441  *         else:
30442  */
30443   }
30444 
30445   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":34
30446  *             return None
30447  *         else:
30448  *             child_mask = gobj.child_mask             # <<<<<<<<<<<<<<
30449  *             mask = np.zeros(gobj.ActiveDimensions, dtype=np.uint8)
30450  *             if level == self.max_level:
30451  */
30452   /*else*/ {
30453     __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_child_mask); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 34, __pyx_L1_error)
30454     __Pyx_GOTREF(__pyx_t_3);
30455     if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(11, 34, __pyx_L1_error)
30456     __pyx_t_6 = ((PyArrayObject *)__pyx_t_3);
30457     {
30458       __Pyx_BufFmt_StackElem __pyx_stack[1];
30459       __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
30460       __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack);
30461       if (unlikely(__pyx_t_7 < 0)) {
30462         PyErr_Fetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
30463         if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_child_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack) == -1)) {
30464           Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_10);
30465           __Pyx_RaiseBufferFallbackError();
30466         } else {
30467           PyErr_Restore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
30468         }
30469         __pyx_t_8 = __pyx_t_9 = __pyx_t_10 = 0;
30470       }
30471       __pyx_pybuffernd_child_mask.diminfo[0].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_child_mask.diminfo[0].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_child_mask.diminfo[1].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_child_mask.diminfo[1].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_child_mask.diminfo[2].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_child_mask.diminfo[2].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[2];
30472       if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(11, 34, __pyx_L1_error)
30473     }
30474     __pyx_t_6 = 0;
30475     __pyx_v_child_mask = ((PyArrayObject *)__pyx_t_3);
30476     __pyx_t_3 = 0;
30477 
30478     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":35
30479  *         else:
30480  *             child_mask = gobj.child_mask
30481  *             mask = np.zeros(gobj.ActiveDimensions, dtype=np.uint8)             # <<<<<<<<<<<<<<
30482  *             if level == self.max_level:
30483  *                 this_level = 1
30484  */
30485     __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 35, __pyx_L1_error)
30486     __Pyx_GOTREF(__pyx_t_3);
30487     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 35, __pyx_L1_error)
30488     __Pyx_GOTREF(__pyx_t_1);
30489     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
30490     __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 35, __pyx_L1_error)
30491     __Pyx_GOTREF(__pyx_t_3);
30492     __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) __PYX_ERR(11, 35, __pyx_L1_error)
30493     __Pyx_GOTREF(__pyx_t_11);
30494     __Pyx_GIVEREF(__pyx_t_3);
30495     PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3);
30496     __pyx_t_3 = 0;
30497     __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 35, __pyx_L1_error)
30498     __Pyx_GOTREF(__pyx_t_3);
30499     __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_np); if (unlikely(!__pyx_t_12)) __PYX_ERR(11, 35, __pyx_L1_error)
30500     __Pyx_GOTREF(__pyx_t_12);
30501     __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_12, __pyx_n_s_uint8); if (unlikely(!__pyx_t_13)) __PYX_ERR(11, 35, __pyx_L1_error)
30502     __Pyx_GOTREF(__pyx_t_13);
30503     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
30504     if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_13) < 0) __PYX_ERR(11, 35, __pyx_L1_error)
30505     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
30506     __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, __pyx_t_3); if (unlikely(!__pyx_t_13)) __PYX_ERR(11, 35, __pyx_L1_error)
30507     __Pyx_GOTREF(__pyx_t_13);
30508     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30509     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
30510     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
30511     if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(11, 35, __pyx_L1_error)
30512     __pyx_t_14 = ((PyArrayObject *)__pyx_t_13);
30513     {
30514       __Pyx_BufFmt_StackElem __pyx_stack[1];
30515       __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
30516       __pyx_t_7 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack);
30517       if (unlikely(__pyx_t_7 < 0)) {
30518         PyErr_Fetch(&__pyx_t_10, &__pyx_t_9, &__pyx_t_8);
30519         if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
30520           Py_XDECREF(__pyx_t_10); Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8);
30521           __Pyx_RaiseBufferFallbackError();
30522         } else {
30523           PyErr_Restore(__pyx_t_10, __pyx_t_9, __pyx_t_8);
30524         }
30525         __pyx_t_10 = __pyx_t_9 = __pyx_t_8 = 0;
30526       }
30527       __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_mask.diminfo[2].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_mask.diminfo[2].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[2];
30528       if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(11, 35, __pyx_L1_error)
30529     }
30530     __pyx_t_14 = 0;
30531     __pyx_v_mask = ((PyArrayObject *)__pyx_t_13);
30532     __pyx_t_13 = 0;
30533 
30534     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":36
30535  *             child_mask = gobj.child_mask
30536  *             mask = np.zeros(gobj.ActiveDimensions, dtype=np.uint8)
30537  *             if level == self.max_level:             # <<<<<<<<<<<<<<
30538  *                 this_level = 1
30539  *             ind[self.axis][0] = 0
30540  */
30541     __pyx_t_4 = ((__pyx_v_level == __pyx_v_self->__pyx_base.max_level) != 0);
30542     if (__pyx_t_4) {
30543 
30544       /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":37
30545  *             mask = np.zeros(gobj.ActiveDimensions, dtype=np.uint8)
30546  *             if level == self.max_level:
30547  *                 this_level = 1             # <<<<<<<<<<<<<<
30548  *             ind[self.axis][0] = 0
30549  *             ind[self.axis][1] = gobj.ActiveDimensions[self.axis]
30550  */
30551       __pyx_v_this_level = 1;
30552 
30553       /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":36
30554  *             child_mask = gobj.child_mask
30555  *             mask = np.zeros(gobj.ActiveDimensions, dtype=np.uint8)
30556  *             if level == self.max_level:             # <<<<<<<<<<<<<<
30557  *                 this_level = 1
30558  *             ind[self.axis][0] = 0
30559  */
30560     }
30561 
30562     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":38
30563  *             if level == self.max_level:
30564  *                 this_level = 1
30565  *             ind[self.axis][0] = 0             # <<<<<<<<<<<<<<
30566  *             ind[self.axis][1] = gobj.ActiveDimensions[self.axis]
30567  *             ind[self.px_ax][0] = \
30568  */
30569     ((__pyx_v_ind[__pyx_v_self->axis])[0]) = 0;
30570 
30571     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":39
30572  *                 this_level = 1
30573  *             ind[self.axis][0] = 0
30574  *             ind[self.axis][1] = gobj.ActiveDimensions[self.axis]             # <<<<<<<<<<<<<<
30575  *             ind[self.px_ax][0] = \
30576  *                 <int> ((self.px - (gobj.LeftEdge).to_ndarray()[self.px_ax]) /
30577  */
30578     __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_13)) __PYX_ERR(11, 39, __pyx_L1_error)
30579     __Pyx_GOTREF(__pyx_t_13);
30580     __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_13, __pyx_v_self->axis, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 39, __pyx_L1_error)
30581     __Pyx_GOTREF(__pyx_t_3);
30582     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
30583     __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(11, 39, __pyx_L1_error)
30584     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
30585     ((__pyx_v_ind[__pyx_v_self->axis])[1]) = __pyx_t_7;
30586 
30587     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":41
30588  *             ind[self.axis][1] = gobj.ActiveDimensions[self.axis]
30589  *             ind[self.px_ax][0] = \
30590  *                 <int> ((self.px - (gobj.LeftEdge).to_ndarray()[self.px_ax]) /             # <<<<<<<<<<<<<<
30591  *                        gobj.dds[self.px_ax])
30592  *             ind[self.px_ax][1] = ind[self.px_ax][0] + 1
30593  */
30594     __pyx_t_3 = PyFloat_FromDouble(__pyx_v_self->px); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 41, __pyx_L1_error)
30595     __Pyx_GOTREF(__pyx_t_3);
30596     __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_LeftEdge); if (unlikely(!__pyx_t_11)) __PYX_ERR(11, 41, __pyx_L1_error)
30597     __Pyx_GOTREF(__pyx_t_11);
30598     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_to_ndarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 41, __pyx_L1_error)
30599     __Pyx_GOTREF(__pyx_t_1);
30600     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
30601     __pyx_t_11 = NULL;
30602     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
30603       __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
30604       if (likely(__pyx_t_11)) {
30605         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
30606         __Pyx_INCREF(__pyx_t_11);
30607         __Pyx_INCREF(function);
30608         __Pyx_DECREF_SET(__pyx_t_1, function);
30609       }
30610     }
30611     __pyx_t_13 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
30612     __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
30613     if (unlikely(!__pyx_t_13)) __PYX_ERR(11, 41, __pyx_L1_error)
30614     __Pyx_GOTREF(__pyx_t_13);
30615     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30616     __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_13, __pyx_v_self->px_ax, __pyx_t_5numpy_uint8_t, 0, __Pyx_PyInt_From_npy_uint8, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 41, __pyx_L1_error)
30617     __Pyx_GOTREF(__pyx_t_1);
30618     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
30619     __pyx_t_13 = PyNumber_Subtract(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(11, 41, __pyx_L1_error)
30620     __Pyx_GOTREF(__pyx_t_13);
30621     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
30622     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30623 
30624     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":42
30625  *             ind[self.px_ax][0] = \
30626  *                 <int> ((self.px - (gobj.LeftEdge).to_ndarray()[self.px_ax]) /
30627  *                        gobj.dds[self.px_ax])             # <<<<<<<<<<<<<<
30628  *             ind[self.px_ax][1] = ind[self.px_ax][0] + 1
30629  *             ind[self.py_ax][0] = \
30630  */
30631     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 42, __pyx_L1_error)
30632     __Pyx_GOTREF(__pyx_t_1);
30633     __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_self->px_ax, __pyx_t_5numpy_uint8_t, 0, __Pyx_PyInt_From_npy_uint8, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 42, __pyx_L1_error)
30634     __Pyx_GOTREF(__pyx_t_3);
30635     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30636 
30637     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":41
30638  *             ind[self.axis][1] = gobj.ActiveDimensions[self.axis]
30639  *             ind[self.px_ax][0] = \
30640  *                 <int> ((self.px - (gobj.LeftEdge).to_ndarray()[self.px_ax]) /             # <<<<<<<<<<<<<<
30641  *                        gobj.dds[self.px_ax])
30642  *             ind[self.px_ax][1] = ind[self.px_ax][0] + 1
30643  */
30644     __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_13, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 41, __pyx_L1_error)
30645     __Pyx_GOTREF(__pyx_t_1);
30646     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
30647     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
30648     __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(11, 41, __pyx_L1_error)
30649     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30650 
30651     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":40
30652  *             ind[self.axis][0] = 0
30653  *             ind[self.axis][1] = gobj.ActiveDimensions[self.axis]
30654  *             ind[self.px_ax][0] = \             # <<<<<<<<<<<<<<
30655  *                 <int> ((self.px - (gobj.LeftEdge).to_ndarray()[self.px_ax]) /
30656  *                        gobj.dds[self.px_ax])
30657  */
30658     ((__pyx_v_ind[__pyx_v_self->px_ax])[0]) = ((int)__pyx_t_7);
30659 
30660     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":43
30661  *                 <int> ((self.px - (gobj.LeftEdge).to_ndarray()[self.px_ax]) /
30662  *                        gobj.dds[self.px_ax])
30663  *             ind[self.px_ax][1] = ind[self.px_ax][0] + 1             # <<<<<<<<<<<<<<
30664  *             ind[self.py_ax][0] = \
30665  *                 <int> ((self.py - (gobj.LeftEdge).to_ndarray()[self.py_ax]) /
30666  */
30667     ((__pyx_v_ind[__pyx_v_self->px_ax])[1]) = (((__pyx_v_ind[__pyx_v_self->px_ax])[0]) + 1);
30668 
30669     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":45
30670  *             ind[self.px_ax][1] = ind[self.px_ax][0] + 1
30671  *             ind[self.py_ax][0] = \
30672  *                 <int> ((self.py - (gobj.LeftEdge).to_ndarray()[self.py_ax]) /             # <<<<<<<<<<<<<<
30673  *                        gobj.dds[self.py_ax])
30674  *             ind[self.py_ax][1] = ind[self.py_ax][0] + 1
30675  */
30676     __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->py); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 45, __pyx_L1_error)
30677     __Pyx_GOTREF(__pyx_t_1);
30678     __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_LeftEdge); if (unlikely(!__pyx_t_13)) __PYX_ERR(11, 45, __pyx_L1_error)
30679     __Pyx_GOTREF(__pyx_t_13);
30680     __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_to_ndarray); if (unlikely(!__pyx_t_11)) __PYX_ERR(11, 45, __pyx_L1_error)
30681     __Pyx_GOTREF(__pyx_t_11);
30682     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
30683     __pyx_t_13 = NULL;
30684     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
30685       __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_11);
30686       if (likely(__pyx_t_13)) {
30687         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
30688         __Pyx_INCREF(__pyx_t_13);
30689         __Pyx_INCREF(function);
30690         __Pyx_DECREF_SET(__pyx_t_11, function);
30691       }
30692     }
30693     __pyx_t_3 = (__pyx_t_13) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_13) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
30694     __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
30695     if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 45, __pyx_L1_error)
30696     __Pyx_GOTREF(__pyx_t_3);
30697     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
30698     __pyx_t_11 = __Pyx_GetItemInt(__pyx_t_3, __pyx_v_self->py_ax, __pyx_t_5numpy_uint8_t, 0, __Pyx_PyInt_From_npy_uint8, 0, 0, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(11, 45, __pyx_L1_error)
30699     __Pyx_GOTREF(__pyx_t_11);
30700     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
30701     __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 45, __pyx_L1_error)
30702     __Pyx_GOTREF(__pyx_t_3);
30703     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30704     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
30705 
30706     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":46
30707  *             ind[self.py_ax][0] = \
30708  *                 <int> ((self.py - (gobj.LeftEdge).to_ndarray()[self.py_ax]) /
30709  *                        gobj.dds[self.py_ax])             # <<<<<<<<<<<<<<
30710  *             ind[self.py_ax][1] = ind[self.py_ax][0] + 1
30711  *
30712  */
30713     __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_11)) __PYX_ERR(11, 46, __pyx_L1_error)
30714     __Pyx_GOTREF(__pyx_t_11);
30715     __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_11, __pyx_v_self->py_ax, __pyx_t_5numpy_uint8_t, 0, __Pyx_PyInt_From_npy_uint8, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 46, __pyx_L1_error)
30716     __Pyx_GOTREF(__pyx_t_1);
30717     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
30718 
30719     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":45
30720  *             ind[self.px_ax][1] = ind[self.px_ax][0] + 1
30721  *             ind[self.py_ax][0] = \
30722  *                 <int> ((self.py - (gobj.LeftEdge).to_ndarray()[self.py_ax]) /             # <<<<<<<<<<<<<<
30723  *                        gobj.dds[self.py_ax])
30724  *             ind[self.py_ax][1] = ind[self.py_ax][0] + 1
30725  */
30726     __pyx_t_11 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(11, 45, __pyx_L1_error)
30727     __Pyx_GOTREF(__pyx_t_11);
30728     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
30729     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30730     __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_11); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(11, 45, __pyx_L1_error)
30731     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
30732 
30733     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":44
30734  *                        gobj.dds[self.px_ax])
30735  *             ind[self.px_ax][1] = ind[self.px_ax][0] + 1
30736  *             ind[self.py_ax][0] = \             # <<<<<<<<<<<<<<
30737  *                 <int> ((self.py - (gobj.LeftEdge).to_ndarray()[self.py_ax]) /
30738  *                        gobj.dds[self.py_ax])
30739  */
30740     ((__pyx_v_ind[__pyx_v_self->py_ax])[0]) = ((int)__pyx_t_7);
30741 
30742     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":47
30743  *                 <int> ((self.py - (gobj.LeftEdge).to_ndarray()[self.py_ax]) /
30744  *                        gobj.dds[self.py_ax])
30745  *             ind[self.py_ax][1] = ind[self.py_ax][0] + 1             # <<<<<<<<<<<<<<
30746  *
30747  *             with nogil:
30748  */
30749     ((__pyx_v_ind[__pyx_v_self->py_ax])[1]) = (((__pyx_v_ind[__pyx_v_self->py_ax])[0]) + 1);
30750 
30751     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":49
30752  *             ind[self.py_ax][1] = ind[self.py_ax][0] + 1
30753  *
30754  *             with nogil:             # <<<<<<<<<<<<<<
30755  *                 for i in range(ind[0][0], ind[0][1]):
30756  *                     for j in range(ind[1][0], ind[1][1]):
30757  */
30758     {
30759         #ifdef WITH_THREAD
30760         PyThreadState *_save;
30761         Py_UNBLOCK_THREADS
30762         __Pyx_FastGIL_Remember();
30763         #endif
30764         /*try:*/ {
30765 
30766           /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":50
30767  *
30768  *             with nogil:
30769  *                 for i in range(ind[0][0], ind[0][1]):             # <<<<<<<<<<<<<<
30770  *                     for j in range(ind[1][0], ind[1][1]):
30771  *                         for k in range(ind[2][0], ind[2][1]):
30772  */
30773           __pyx_t_7 = ((__pyx_v_ind[0])[1]);
30774           __pyx_t_15 = __pyx_t_7;
30775           for (__pyx_t_16 = ((__pyx_v_ind[0])[0]); __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
30776             __pyx_v_i = __pyx_t_16;
30777 
30778             /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":51
30779  *             with nogil:
30780  *                 for i in range(ind[0][0], ind[0][1]):
30781  *                     for j in range(ind[1][0], ind[1][1]):             # <<<<<<<<<<<<<<
30782  *                         for k in range(ind[2][0], ind[2][1]):
30783  *                             if this_level == 1 or child_mask[i, j, k]:
30784  */
30785             __pyx_t_17 = ((__pyx_v_ind[1])[1]);
30786             __pyx_t_18 = __pyx_t_17;
30787             for (__pyx_t_19 = ((__pyx_v_ind[1])[0]); __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
30788               __pyx_v_j = __pyx_t_19;
30789 
30790               /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":52
30791  *                 for i in range(ind[0][0], ind[0][1]):
30792  *                     for j in range(ind[1][0], ind[1][1]):
30793  *                         for k in range(ind[2][0], ind[2][1]):             # <<<<<<<<<<<<<<
30794  *                             if this_level == 1 or child_mask[i, j, k]:
30795  *                                 mask[i, j, k] = 1
30796  */
30797               __pyx_t_20 = ((__pyx_v_ind[2])[1]);
30798               __pyx_t_21 = __pyx_t_20;
30799               for (__pyx_t_22 = ((__pyx_v_ind[2])[0]); __pyx_t_22 < __pyx_t_21; __pyx_t_22+=1) {
30800                 __pyx_v_k = __pyx_t_22;
30801 
30802                 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":53
30803  *                     for j in range(ind[1][0], ind[1][1]):
30804  *                         for k in range(ind[2][0], ind[2][1]):
30805  *                             if this_level == 1 or child_mask[i, j, k]:             # <<<<<<<<<<<<<<
30806  *                                 mask[i, j, k] = 1
30807  *                                 total += 1
30808  */
30809                 __pyx_t_5 = ((__pyx_v_this_level == 1) != 0);
30810                 if (!__pyx_t_5) {
30811                 } else {
30812                   __pyx_t_4 = __pyx_t_5;
30813                   goto __pyx_L17_bool_binop_done;
30814                 }
30815                 __pyx_t_23 = __pyx_v_i;
30816                 __pyx_t_24 = __pyx_v_j;
30817                 __pyx_t_25 = __pyx_v_k;
30818                 __pyx_t_5 = ((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_child_mask.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_child_mask.diminfo[1].strides, __pyx_t_25, __pyx_pybuffernd_child_mask.diminfo[2].strides)) != 0);
30819                 __pyx_t_4 = __pyx_t_5;
30820                 __pyx_L17_bool_binop_done:;
30821                 if (__pyx_t_4) {
30822 
30823                   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":54
30824  *                         for k in range(ind[2][0], ind[2][1]):
30825  *                             if this_level == 1 or child_mask[i, j, k]:
30826  *                                 mask[i, j, k] = 1             # <<<<<<<<<<<<<<
30827  *                                 total += 1
30828  *             if total == 0: return None
30829  */
30830                   __pyx_t_26 = __pyx_v_i;
30831                   __pyx_t_27 = __pyx_v_j;
30832                   __pyx_t_28 = __pyx_v_k;
30833                   *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_mask.rcbuffer->pybuffer.buf, __pyx_t_26, __pyx_pybuffernd_mask.diminfo[0].strides, __pyx_t_27, __pyx_pybuffernd_mask.diminfo[1].strides, __pyx_t_28, __pyx_pybuffernd_mask.diminfo[2].strides) = 1;
30834 
30835                   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":55
30836  *                             if this_level == 1 or child_mask[i, j, k]:
30837  *                                 mask[i, j, k] = 1
30838  *                                 total += 1             # <<<<<<<<<<<<<<
30839  *             if total == 0: return None
30840  *             return mask.astype("bool")
30841  */
30842                   __pyx_v_total = (__pyx_v_total + 1);
30843 
30844                   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":53
30845  *                     for j in range(ind[1][0], ind[1][1]):
30846  *                         for k in range(ind[2][0], ind[2][1]):
30847  *                             if this_level == 1 or child_mask[i, j, k]:             # <<<<<<<<<<<<<<
30848  *                                 mask[i, j, k] = 1
30849  *                                 total += 1
30850  */
30851                 }
30852               }
30853             }
30854           }
30855         }
30856 
30857         /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":49
30858  *             ind[self.py_ax][1] = ind[self.py_ax][0] + 1
30859  *
30860  *             with nogil:             # <<<<<<<<<<<<<<
30861  *                 for i in range(ind[0][0], ind[0][1]):
30862  *                     for j in range(ind[1][0], ind[1][1]):
30863  */
30864         /*finally:*/ {
30865           /*normal exit:*/{
30866             #ifdef WITH_THREAD
30867             __Pyx_FastGIL_Forget();
30868             Py_BLOCK_THREADS
30869             #endif
30870             goto __pyx_L9;
30871           }
30872           __pyx_L9:;
30873         }
30874     }
30875 
30876     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":56
30877  *                                 mask[i, j, k] = 1
30878  *                                 total += 1
30879  *             if total == 0: return None             # <<<<<<<<<<<<<<
30880  *             return mask.astype("bool")
30881  *
30882  */
30883     __pyx_t_4 = ((__pyx_v_total == 0) != 0);
30884     if (__pyx_t_4) {
30885       __Pyx_XDECREF(__pyx_r);
30886       __pyx_r = Py_None; __Pyx_INCREF(Py_None);
30887       goto __pyx_L0;
30888     }
30889 
30890     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":57
30891  *                                 total += 1
30892  *             if total == 0: return None
30893  *             return mask.astype("bool")             # <<<<<<<<<<<<<<
30894  *
30895  *     @cython.boundscheck(False)
30896  */
30897     __Pyx_XDECREF(__pyx_r);
30898     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_mask), __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 57, __pyx_L1_error)
30899     __Pyx_GOTREF(__pyx_t_1);
30900     __pyx_t_3 = NULL;
30901     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
30902       __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
30903       if (likely(__pyx_t_3)) {
30904         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
30905         __Pyx_INCREF(__pyx_t_3);
30906         __Pyx_INCREF(function);
30907         __Pyx_DECREF_SET(__pyx_t_1, function);
30908       }
30909     }
30910     __pyx_t_11 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_n_s_bool);
30911     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
30912     if (unlikely(!__pyx_t_11)) __PYX_ERR(11, 57, __pyx_L1_error)
30913     __Pyx_GOTREF(__pyx_t_11);
30914     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
30915     __pyx_r = __pyx_t_11;
30916     __pyx_t_11 = 0;
30917     goto __pyx_L0;
30918   }
30919 
30920   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":19
30921  *     @cython.wraparound(False)
30922  *     @cython.cdivision(True)
30923  *     def fill_mask(self, gobj):             # <<<<<<<<<<<<<<
30924  *         cdef np.ndarray[np.uint8_t, ndim=3] mask
30925  *         cdef np.ndarray[np.uint8_t, ndim=3, cast=True] child_mask
30926  */
30927 
30928   /* function exit code */
30929   __pyx_L1_error:;
30930   __Pyx_XDECREF(__pyx_t_1);
30931   __Pyx_XDECREF(__pyx_t_3);
30932   __Pyx_XDECREF(__pyx_t_11);
30933   __Pyx_XDECREF(__pyx_t_12);
30934   __Pyx_XDECREF(__pyx_t_13);
30935   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
30936     __Pyx_PyThreadState_declare
30937     __Pyx_PyThreadState_assign
30938     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
30939     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
30940     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
30941   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
30942   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.fill_mask", __pyx_clineno, __pyx_lineno, __pyx_filename);
30943   __pyx_r = NULL;
30944   goto __pyx_L2;
30945   __pyx_L0:;
30946   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
30947   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
30948   __pyx_L2:;
30949   __Pyx_XDECREF((PyObject *)__pyx_v_mask);
30950   __Pyx_XDECREF((PyObject *)__pyx_v_child_mask);
30951   __Pyx_XGIVEREF(__pyx_r);
30952   __Pyx_RefNannyFinishContext();
30953   return __pyx_r;
30954 }
30955 
30956 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":62
30957  *     @cython.wraparound(False)
30958  *     @cython.cdivision(True)
30959  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
30960  *         if self.px >= pos[self.px_ax] - 0.5*dds[self.px_ax] and \
30961  *            self.px <  pos[self.px_ax] + 0.5*dds[self.px_ax] and \
30962  */
30963 
30964 static int __pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
30965   int __pyx_r;
30966   int __pyx_t_1;
30967   int __pyx_t_2;
30968 
30969   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":63
30970  *     @cython.cdivision(True)
30971  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
30972  *         if self.px >= pos[self.px_ax] - 0.5*dds[self.px_ax] and \             # <<<<<<<<<<<<<<
30973  *            self.px <  pos[self.px_ax] + 0.5*dds[self.px_ax] and \
30974  *            self.py >= pos[self.py_ax] - 0.5*dds[self.py_ax] and \
30975  */
30976   __pyx_t_2 = ((__pyx_v_self->px >= ((__pyx_v_pos[__pyx_v_self->px_ax]) - (0.5 * (__pyx_v_dds[__pyx_v_self->px_ax])))) != 0);
30977   if (__pyx_t_2) {
30978   } else {
30979     __pyx_t_1 = __pyx_t_2;
30980     goto __pyx_L4_bool_binop_done;
30981   }
30982 
30983   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":64
30984  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
30985  *         if self.px >= pos[self.px_ax] - 0.5*dds[self.px_ax] and \
30986  *            self.px <  pos[self.px_ax] + 0.5*dds[self.px_ax] and \             # <<<<<<<<<<<<<<
30987  *            self.py >= pos[self.py_ax] - 0.5*dds[self.py_ax] and \
30988  *            self.py <  pos[self.py_ax] + 0.5*dds[self.py_ax]:
30989  */
30990   __pyx_t_2 = ((__pyx_v_self->px < ((__pyx_v_pos[__pyx_v_self->px_ax]) + (0.5 * (__pyx_v_dds[__pyx_v_self->px_ax])))) != 0);
30991   if (__pyx_t_2) {
30992   } else {
30993     __pyx_t_1 = __pyx_t_2;
30994     goto __pyx_L4_bool_binop_done;
30995   }
30996 
30997   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":65
30998  *         if self.px >= pos[self.px_ax] - 0.5*dds[self.px_ax] and \
30999  *            self.px <  pos[self.px_ax] + 0.5*dds[self.px_ax] and \
31000  *            self.py >= pos[self.py_ax] - 0.5*dds[self.py_ax] and \             # <<<<<<<<<<<<<<
31001  *            self.py <  pos[self.py_ax] + 0.5*dds[self.py_ax]:
31002  *             return 1
31003  */
31004   __pyx_t_2 = ((__pyx_v_self->py >= ((__pyx_v_pos[__pyx_v_self->py_ax]) - (0.5 * (__pyx_v_dds[__pyx_v_self->py_ax])))) != 0);
31005   if (__pyx_t_2) {
31006   } else {
31007     __pyx_t_1 = __pyx_t_2;
31008     goto __pyx_L4_bool_binop_done;
31009   }
31010 
31011   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":66
31012  *            self.px <  pos[self.px_ax] + 0.5*dds[self.px_ax] and \
31013  *            self.py >= pos[self.py_ax] - 0.5*dds[self.py_ax] and \
31014  *            self.py <  pos[self.py_ax] + 0.5*dds[self.py_ax]:             # <<<<<<<<<<<<<<
31015  *             return 1
31016  *         return 0
31017  */
31018   __pyx_t_2 = ((__pyx_v_self->py < ((__pyx_v_pos[__pyx_v_self->py_ax]) + (0.5 * (__pyx_v_dds[__pyx_v_self->py_ax])))) != 0);
31019   __pyx_t_1 = __pyx_t_2;
31020   __pyx_L4_bool_binop_done:;
31021 
31022   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":63
31023  *     @cython.cdivision(True)
31024  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
31025  *         if self.px >= pos[self.px_ax] - 0.5*dds[self.px_ax] and \             # <<<<<<<<<<<<<<
31026  *            self.px <  pos[self.px_ax] + 0.5*dds[self.px_ax] and \
31027  *            self.py >= pos[self.py_ax] - 0.5*dds[self.py_ax] and \
31028  */
31029   if (__pyx_t_1) {
31030 
31031     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":67
31032  *            self.py >= pos[self.py_ax] - 0.5*dds[self.py_ax] and \
31033  *            self.py <  pos[self.py_ax] + 0.5*dds[self.py_ax]:
31034  *             return 1             # <<<<<<<<<<<<<<
31035  *         return 0
31036  *
31037  */
31038     __pyx_r = 1;
31039     goto __pyx_L0;
31040 
31041     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":63
31042  *     @cython.cdivision(True)
31043  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
31044  *         if self.px >= pos[self.px_ax] - 0.5*dds[self.px_ax] and \             # <<<<<<<<<<<<<<
31045  *            self.px <  pos[self.px_ax] + 0.5*dds[self.px_ax] and \
31046  *            self.py >= pos[self.py_ax] - 0.5*dds[self.py_ax] and \
31047  */
31048   }
31049 
31050   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":68
31051  *            self.py <  pos[self.py_ax] + 0.5*dds[self.py_ax]:
31052  *             return 1
31053  *         return 0             # <<<<<<<<<<<<<<
31054  *
31055  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
31056  */
31057   __pyx_r = 0;
31058   goto __pyx_L0;
31059 
31060   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":62
31061  *     @cython.wraparound(False)
31062  *     @cython.cdivision(True)
31063  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
31064  *         if self.px >= pos[self.px_ax] - 0.5*dds[self.px_ax] and \
31065  *            self.px <  pos[self.px_ax] + 0.5*dds[self.px_ax] and \
31066  */
31067 
31068   /* function exit code */
31069   __pyx_L0:;
31070   return __pyx_r;
31071 }
31072 
31073 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":70
31074  *         return 0
31075  *
31076  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
31077  *         # two 0-volume constructs don't intersect
31078  *         return 0
31079  */
31080 
31081 static int __pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos) {
31082   int __pyx_r;
31083 
31084   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":72
31085  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
31086  *         # two 0-volume constructs don't intersect
31087  *         return 0             # <<<<<<<<<<<<<<
31088  *
31089  *     @cython.boundscheck(False)
31090  */
31091   __pyx_r = 0;
31092   goto __pyx_L0;
31093 
31094   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":70
31095  *         return 0
31096  *
31097  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
31098  *         # two 0-volume constructs don't intersect
31099  *         return 0
31100  */
31101 
31102   /* function exit code */
31103   __pyx_L0:;
31104   return __pyx_r;
31105 }
31106 
31107 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":77
31108  *     @cython.wraparound(False)
31109  *     @cython.cdivision(True)
31110  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
31111  *         cdef np.float64_t dx = self.periodic_difference(
31112  *             pos[self.px_ax], self.px, self.px_ax)
31113  */
31114 
31115 static int __pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
31116   __pyx_t_5numpy_float64_t __pyx_v_dx;
31117   __pyx_t_5numpy_float64_t __pyx_v_dy;
31118   int __pyx_r;
31119   int __pyx_t_1;
31120 
31121   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":78
31122  *     @cython.cdivision(True)
31123  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
31124  *         cdef np.float64_t dx = self.periodic_difference(             # <<<<<<<<<<<<<<
31125  *             pos[self.px_ax], self.px, self.px_ax)
31126  *         cdef np.float64_t dy = self.periodic_difference(
31127  */
31128   __pyx_v_dx = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), (__pyx_v_pos[__pyx_v_self->px_ax]), __pyx_v_self->px, __pyx_v_self->px_ax);
31129 
31130   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":80
31131  *         cdef np.float64_t dx = self.periodic_difference(
31132  *             pos[self.px_ax], self.px, self.px_ax)
31133  *         cdef np.float64_t dy = self.periodic_difference(             # <<<<<<<<<<<<<<
31134  *             pos[self.py_ax], self.py, self.py_ax)
31135  *         if dx*dx + dy*dy < radius*radius:
31136  */
31137   __pyx_v_dy = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), (__pyx_v_pos[__pyx_v_self->py_ax]), __pyx_v_self->py, __pyx_v_self->py_ax);
31138 
31139   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":82
31140  *         cdef np.float64_t dy = self.periodic_difference(
31141  *             pos[self.py_ax], self.py, self.py_ax)
31142  *         if dx*dx + dy*dy < radius*radius:             # <<<<<<<<<<<<<<
31143  *             return 1
31144  *         return 0
31145  */
31146   __pyx_t_1 = ((((__pyx_v_dx * __pyx_v_dx) + (__pyx_v_dy * __pyx_v_dy)) < (__pyx_v_radius * __pyx_v_radius)) != 0);
31147   if (__pyx_t_1) {
31148 
31149     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":83
31150  *             pos[self.py_ax], self.py, self.py_ax)
31151  *         if dx*dx + dy*dy < radius*radius:
31152  *             return 1             # <<<<<<<<<<<<<<
31153  *         return 0
31154  *
31155  */
31156     __pyx_r = 1;
31157     goto __pyx_L0;
31158 
31159     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":82
31160  *         cdef np.float64_t dy = self.periodic_difference(
31161  *             pos[self.py_ax], self.py, self.py_ax)
31162  *         if dx*dx + dy*dy < radius*radius:             # <<<<<<<<<<<<<<
31163  *             return 1
31164  *         return 0
31165  */
31166   }
31167 
31168   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":84
31169  *         if dx*dx + dy*dy < radius*radius:
31170  *             return 1
31171  *         return 0             # <<<<<<<<<<<<<<
31172  *
31173  *     @cython.boundscheck(False)
31174  */
31175   __pyx_r = 0;
31176   goto __pyx_L0;
31177 
31178   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":77
31179  *     @cython.wraparound(False)
31180  *     @cython.cdivision(True)
31181  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
31182  *         cdef np.float64_t dx = self.periodic_difference(
31183  *             pos[self.px_ax], self.px, self.px_ax)
31184  */
31185 
31186   /* function exit code */
31187   __pyx_L0:;
31188   return __pyx_r;
31189 }
31190 
31191 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":89
31192  *     @cython.wraparound(False)
31193  *     @cython.cdivision(True)
31194  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
31195  *                                np.float64_t right_edge[3]) nogil:
31196  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \
31197  */
31198 
31199 static int __pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
31200   int __pyx_r;
31201   int __pyx_t_1;
31202   int __pyx_t_2;
31203   int __pyx_t_3;
31204 
31205   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":91
31206  *     cdef int select_bbox(self, np.float64_t left_edge[3],
31207  *                                np.float64_t right_edge[3]) nogil:
31208  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \             # <<<<<<<<<<<<<<
31209  *            left_edge[self.py_ax] <= self.py < right_edge[self.py_ax] :
31210  *             return 1
31211  */
31212   __pyx_t_2 = ((__pyx_v_left_edge[__pyx_v_self->px_ax]) <= __pyx_v_self->px);
31213   if (__pyx_t_2) {
31214     __pyx_t_2 = (__pyx_v_self->px < (__pyx_v_right_edge[__pyx_v_self->px_ax]));
31215   }
31216   __pyx_t_3 = (__pyx_t_2 != 0);
31217   if (__pyx_t_3) {
31218   } else {
31219     __pyx_t_1 = __pyx_t_3;
31220     goto __pyx_L4_bool_binop_done;
31221   }
31222 
31223   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":92
31224  *                                np.float64_t right_edge[3]) nogil:
31225  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \
31226  *            left_edge[self.py_ax] <= self.py < right_edge[self.py_ax] :             # <<<<<<<<<<<<<<
31227  *             return 1
31228  *         return 0
31229  */
31230   __pyx_t_3 = ((__pyx_v_left_edge[__pyx_v_self->py_ax]) <= __pyx_v_self->py);
31231   if (__pyx_t_3) {
31232     __pyx_t_3 = (__pyx_v_self->py < (__pyx_v_right_edge[__pyx_v_self->py_ax]));
31233   }
31234   __pyx_t_2 = (__pyx_t_3 != 0);
31235   __pyx_t_1 = __pyx_t_2;
31236   __pyx_L4_bool_binop_done:;
31237 
31238   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":91
31239  *     cdef int select_bbox(self, np.float64_t left_edge[3],
31240  *                                np.float64_t right_edge[3]) nogil:
31241  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \             # <<<<<<<<<<<<<<
31242  *            left_edge[self.py_ax] <= self.py < right_edge[self.py_ax] :
31243  *             return 1
31244  */
31245   if (__pyx_t_1) {
31246 
31247     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":93
31248  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \
31249  *            left_edge[self.py_ax] <= self.py < right_edge[self.py_ax] :
31250  *             return 1             # <<<<<<<<<<<<<<
31251  *         return 0
31252  *
31253  */
31254     __pyx_r = 1;
31255     goto __pyx_L0;
31256 
31257     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":91
31258  *     cdef int select_bbox(self, np.float64_t left_edge[3],
31259  *                                np.float64_t right_edge[3]) nogil:
31260  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \             # <<<<<<<<<<<<<<
31261  *            left_edge[self.py_ax] <= self.py < right_edge[self.py_ax] :
31262  *             return 1
31263  */
31264   }
31265 
31266   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":94
31267  *            left_edge[self.py_ax] <= self.py < right_edge[self.py_ax] :
31268  *             return 1
31269  *         return 0             # <<<<<<<<<<<<<<
31270  *
31271  *     @cython.boundscheck(False)
31272  */
31273   __pyx_r = 0;
31274   goto __pyx_L0;
31275 
31276   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":89
31277  *     @cython.wraparound(False)
31278  *     @cython.cdivision(True)
31279  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
31280  *                                np.float64_t right_edge[3]) nogil:
31281  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \
31282  */
31283 
31284   /* function exit code */
31285   __pyx_L0:;
31286   return __pyx_r;
31287 }
31288 
31289 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":99
31290  *     @cython.wraparound(False)
31291  *     @cython.cdivision(True)
31292  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
31293  *                                np.float64_t right_edge[3]) nogil:
31294  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \
31295  */
31296 
31297 static int __pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
31298   int __pyx_r;
31299   int __pyx_t_1;
31300   int __pyx_t_2;
31301   int __pyx_t_3;
31302 
31303   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":101
31304  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
31305  *                                np.float64_t right_edge[3]) nogil:
31306  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \             # <<<<<<<<<<<<<<
31307  *            left_edge[self.py_ax] <= self.py < right_edge[self.py_ax] :
31308  *             return 2 # a box of non-zero volume can't be inside a ray
31309  */
31310   __pyx_t_2 = ((__pyx_v_left_edge[__pyx_v_self->px_ax]) <= __pyx_v_self->px);
31311   if (__pyx_t_2) {
31312     __pyx_t_2 = (__pyx_v_self->px < (__pyx_v_right_edge[__pyx_v_self->px_ax]));
31313   }
31314   __pyx_t_3 = (__pyx_t_2 != 0);
31315   if (__pyx_t_3) {
31316   } else {
31317     __pyx_t_1 = __pyx_t_3;
31318     goto __pyx_L4_bool_binop_done;
31319   }
31320 
31321   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":102
31322  *                                np.float64_t right_edge[3]) nogil:
31323  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \
31324  *            left_edge[self.py_ax] <= self.py < right_edge[self.py_ax] :             # <<<<<<<<<<<<<<
31325  *             return 2 # a box of non-zero volume can't be inside a ray
31326  *         return 0
31327  */
31328   __pyx_t_3 = ((__pyx_v_left_edge[__pyx_v_self->py_ax]) <= __pyx_v_self->py);
31329   if (__pyx_t_3) {
31330     __pyx_t_3 = (__pyx_v_self->py < (__pyx_v_right_edge[__pyx_v_self->py_ax]));
31331   }
31332   __pyx_t_2 = (__pyx_t_3 != 0);
31333   __pyx_t_1 = __pyx_t_2;
31334   __pyx_L4_bool_binop_done:;
31335 
31336   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":101
31337  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
31338  *                                np.float64_t right_edge[3]) nogil:
31339  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \             # <<<<<<<<<<<<<<
31340  *            left_edge[self.py_ax] <= self.py < right_edge[self.py_ax] :
31341  *             return 2 # a box of non-zero volume can't be inside a ray
31342  */
31343   if (__pyx_t_1) {
31344 
31345     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":103
31346  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \
31347  *            left_edge[self.py_ax] <= self.py < right_edge[self.py_ax] :
31348  *             return 2 # a box of non-zero volume can't be inside a ray             # <<<<<<<<<<<<<<
31349  *         return 0
31350  *
31351  */
31352     __pyx_r = 2;
31353     goto __pyx_L0;
31354 
31355     /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":101
31356  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
31357  *                                np.float64_t right_edge[3]) nogil:
31358  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \             # <<<<<<<<<<<<<<
31359  *            left_edge[self.py_ax] <= self.py < right_edge[self.py_ax] :
31360  *             return 2 # a box of non-zero volume can't be inside a ray
31361  */
31362   }
31363 
31364   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":104
31365  *            left_edge[self.py_ax] <= self.py < right_edge[self.py_ax] :
31366  *             return 2 # a box of non-zero volume can't be inside a ray
31367  *         return 0             # <<<<<<<<<<<<<<
31368  *
31369  *     def _hash_vals(self):
31370  */
31371   __pyx_r = 0;
31372   goto __pyx_L0;
31373 
31374   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":99
31375  *     @cython.wraparound(False)
31376  *     @cython.cdivision(True)
31377  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
31378  *                                np.float64_t right_edge[3]) nogil:
31379  *         if left_edge[self.px_ax] <= self.px < right_edge[self.px_ax] and \
31380  */
31381 
31382   /* function exit code */
31383   __pyx_L0:;
31384   return __pyx_r;
31385 }
31386 
31387 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":106
31388  *         return 0
31389  *
31390  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
31391  *         return (("px_ax", self.px_ax),
31392  *                 ("py_ax", self.py_ax),
31393  */
31394 
31395 /* Python wrapper */
31396 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
31397 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
31398   PyObject *__pyx_r = 0;
31399   __Pyx_RefNannyDeclarations
31400   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
31401   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_4_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self));
31402 
31403   /* function exit code */
31404   __Pyx_RefNannyFinishContext();
31405   return __pyx_r;
31406 }
31407 
31408 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_4_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self) {
31409   PyObject *__pyx_r = NULL;
31410   __Pyx_RefNannyDeclarations
31411   PyObject *__pyx_t_1 = NULL;
31412   PyObject *__pyx_t_2 = NULL;
31413   PyObject *__pyx_t_3 = NULL;
31414   PyObject *__pyx_t_4 = NULL;
31415   PyObject *__pyx_t_5 = NULL;
31416   PyObject *__pyx_t_6 = NULL;
31417   __Pyx_RefNannySetupContext("_hash_vals", 0);
31418 
31419   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":107
31420  *
31421  *     def _hash_vals(self):
31422  *         return (("px_ax", self.px_ax),             # <<<<<<<<<<<<<<
31423  *                 ("py_ax", self.py_ax),
31424  *                 ("px", self.px),
31425  */
31426   __Pyx_XDECREF(__pyx_r);
31427   __pyx_t_1 = __Pyx_PyInt_From_npy_uint8(__pyx_v_self->px_ax); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 107, __pyx_L1_error)
31428   __Pyx_GOTREF(__pyx_t_1);
31429   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 107, __pyx_L1_error)
31430   __Pyx_GOTREF(__pyx_t_2);
31431   __Pyx_INCREF(__pyx_n_s_px_ax);
31432   __Pyx_GIVEREF(__pyx_n_s_px_ax);
31433   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_px_ax);
31434   __Pyx_GIVEREF(__pyx_t_1);
31435   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
31436   __pyx_t_1 = 0;
31437 
31438   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":108
31439  *     def _hash_vals(self):
31440  *         return (("px_ax", self.px_ax),
31441  *                 ("py_ax", self.py_ax),             # <<<<<<<<<<<<<<
31442  *                 ("px", self.px),
31443  *                 ("py", self.py),
31444  */
31445   __pyx_t_1 = __Pyx_PyInt_From_npy_uint8(__pyx_v_self->py_ax); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 108, __pyx_L1_error)
31446   __Pyx_GOTREF(__pyx_t_1);
31447   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 108, __pyx_L1_error)
31448   __Pyx_GOTREF(__pyx_t_3);
31449   __Pyx_INCREF(__pyx_n_s_py_ax);
31450   __Pyx_GIVEREF(__pyx_n_s_py_ax);
31451   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_py_ax);
31452   __Pyx_GIVEREF(__pyx_t_1);
31453   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
31454   __pyx_t_1 = 0;
31455 
31456   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":109
31457  *         return (("px_ax", self.px_ax),
31458  *                 ("py_ax", self.py_ax),
31459  *                 ("px", self.px),             # <<<<<<<<<<<<<<
31460  *                 ("py", self.py),
31461  *                 ("axis", self.axis))
31462  */
31463   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->px); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 109, __pyx_L1_error)
31464   __Pyx_GOTREF(__pyx_t_1);
31465   __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 109, __pyx_L1_error)
31466   __Pyx_GOTREF(__pyx_t_4);
31467   __Pyx_INCREF(__pyx_n_s_px);
31468   __Pyx_GIVEREF(__pyx_n_s_px);
31469   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_px);
31470   __Pyx_GIVEREF(__pyx_t_1);
31471   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
31472   __pyx_t_1 = 0;
31473 
31474   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":110
31475  *                 ("py_ax", self.py_ax),
31476  *                 ("px", self.px),
31477  *                 ("py", self.py),             # <<<<<<<<<<<<<<
31478  *                 ("axis", self.axis))
31479  *
31480  */
31481   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->py); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 110, __pyx_L1_error)
31482   __Pyx_GOTREF(__pyx_t_1);
31483   __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 110, __pyx_L1_error)
31484   __Pyx_GOTREF(__pyx_t_5);
31485   __Pyx_INCREF(__pyx_n_s_py);
31486   __Pyx_GIVEREF(__pyx_n_s_py);
31487   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_n_s_py);
31488   __Pyx_GIVEREF(__pyx_t_1);
31489   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
31490   __pyx_t_1 = 0;
31491 
31492   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":111
31493  *                 ("px", self.px),
31494  *                 ("py", self.py),
31495  *                 ("axis", self.axis))             # <<<<<<<<<<<<<<
31496  *
31497  *     def _get_state_attnames(self):
31498  */
31499   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->axis); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 111, __pyx_L1_error)
31500   __Pyx_GOTREF(__pyx_t_1);
31501   __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 111, __pyx_L1_error)
31502   __Pyx_GOTREF(__pyx_t_6);
31503   __Pyx_INCREF(__pyx_n_s_axis);
31504   __Pyx_GIVEREF(__pyx_n_s_axis);
31505   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_n_s_axis);
31506   __Pyx_GIVEREF(__pyx_t_1);
31507   PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
31508   __pyx_t_1 = 0;
31509 
31510   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":107
31511  *
31512  *     def _hash_vals(self):
31513  *         return (("px_ax", self.px_ax),             # <<<<<<<<<<<<<<
31514  *                 ("py_ax", self.py_ax),
31515  *                 ("px", self.px),
31516  */
31517   __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 107, __pyx_L1_error)
31518   __Pyx_GOTREF(__pyx_t_1);
31519   __Pyx_GIVEREF(__pyx_t_2);
31520   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
31521   __Pyx_GIVEREF(__pyx_t_3);
31522   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
31523   __Pyx_GIVEREF(__pyx_t_4);
31524   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
31525   __Pyx_GIVEREF(__pyx_t_5);
31526   PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_5);
31527   __Pyx_GIVEREF(__pyx_t_6);
31528   PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_6);
31529   __pyx_t_2 = 0;
31530   __pyx_t_3 = 0;
31531   __pyx_t_4 = 0;
31532   __pyx_t_5 = 0;
31533   __pyx_t_6 = 0;
31534   __pyx_r = __pyx_t_1;
31535   __pyx_t_1 = 0;
31536   goto __pyx_L0;
31537 
31538   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":106
31539  *         return 0
31540  *
31541  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
31542  *         return (("px_ax", self.px_ax),
31543  *                 ("py_ax", self.py_ax),
31544  */
31545 
31546   /* function exit code */
31547   __pyx_L1_error:;
31548   __Pyx_XDECREF(__pyx_t_1);
31549   __Pyx_XDECREF(__pyx_t_2);
31550   __Pyx_XDECREF(__pyx_t_3);
31551   __Pyx_XDECREF(__pyx_t_4);
31552   __Pyx_XDECREF(__pyx_t_5);
31553   __Pyx_XDECREF(__pyx_t_6);
31554   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
31555   __pyx_r = NULL;
31556   __pyx_L0:;
31557   __Pyx_XGIVEREF(__pyx_r);
31558   __Pyx_RefNannyFinishContext();
31559   return __pyx_r;
31560 }
31561 
31562 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":113
31563  *                 ("axis", self.axis))
31564  *
31565  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
31566  *         return ("px_ax", "py_ax", "px", "py", "axis")
31567  *
31568  */
31569 
31570 /* Python wrapper */
31571 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_7_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
31572 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_7_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
31573   PyObject *__pyx_r = 0;
31574   __Pyx_RefNannyDeclarations
31575   __Pyx_RefNannySetupContext("_get_state_attnames (wrapper)", 0);
31576   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_6_get_state_attnames(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self));
31577 
31578   /* function exit code */
31579   __Pyx_RefNannyFinishContext();
31580   return __pyx_r;
31581 }
31582 
31583 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_6_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self) {
31584   PyObject *__pyx_r = NULL;
31585   __Pyx_RefNannyDeclarations
31586   __Pyx_RefNannySetupContext("_get_state_attnames", 0);
31587 
31588   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":114
31589  *
31590  *     def _get_state_attnames(self):
31591  *         return ("px_ax", "py_ax", "px", "py", "axis")             # <<<<<<<<<<<<<<
31592  *
31593  * ortho_ray_selector = OrthoRaySelector
31594  */
31595   __Pyx_XDECREF(__pyx_r);
31596   __Pyx_INCREF(__pyx_tuple__30);
31597   __pyx_r = __pyx_tuple__30;
31598   goto __pyx_L0;
31599 
31600   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":113
31601  *                 ("axis", self.axis))
31602  *
31603  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
31604  *         return ("px_ax", "py_ax", "px", "py", "axis")
31605  *
31606  */
31607 
31608   /* function exit code */
31609   __pyx_L0:;
31610   __Pyx_XGIVEREF(__pyx_r);
31611   __Pyx_RefNannyFinishContext();
31612   return __pyx_r;
31613 }
31614 
31615 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":3
31616  * cdef class OrthoRaySelector(SelectorObject):
31617  *
31618  *     cdef public np.uint8_t px_ax             # <<<<<<<<<<<<<<
31619  *     cdef public np.uint8_t py_ax
31620  *     cdef public np.float64_t px
31621  */
31622 
31623 /* Python wrapper */
31624 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5px_ax_1__get__(PyObject *__pyx_v_self); /*proto*/
31625 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5px_ax_1__get__(PyObject *__pyx_v_self) {
31626   PyObject *__pyx_r = 0;
31627   __Pyx_RefNannyDeclarations
31628   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
31629   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_5px_ax___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self));
31630 
31631   /* function exit code */
31632   __Pyx_RefNannyFinishContext();
31633   return __pyx_r;
31634 }
31635 
31636 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_5px_ax___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self) {
31637   PyObject *__pyx_r = NULL;
31638   __Pyx_RefNannyDeclarations
31639   PyObject *__pyx_t_1 = NULL;
31640   __Pyx_RefNannySetupContext("__get__", 0);
31641   __Pyx_XDECREF(__pyx_r);
31642   __pyx_t_1 = __Pyx_PyInt_From_npy_uint8(__pyx_v_self->px_ax); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 3, __pyx_L1_error)
31643   __Pyx_GOTREF(__pyx_t_1);
31644   __pyx_r = __pyx_t_1;
31645   __pyx_t_1 = 0;
31646   goto __pyx_L0;
31647 
31648   /* function exit code */
31649   __pyx_L1_error:;
31650   __Pyx_XDECREF(__pyx_t_1);
31651   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.px_ax.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
31652   __pyx_r = NULL;
31653   __pyx_L0:;
31654   __Pyx_XGIVEREF(__pyx_r);
31655   __Pyx_RefNannyFinishContext();
31656   return __pyx_r;
31657 }
31658 
31659 /* Python wrapper */
31660 static int __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5px_ax_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
31661 static int __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5px_ax_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
31662   int __pyx_r;
31663   __Pyx_RefNannyDeclarations
31664   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
31665   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_5px_ax_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
31666 
31667   /* function exit code */
31668   __Pyx_RefNannyFinishContext();
31669   return __pyx_r;
31670 }
31671 
31672 static int __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_5px_ax_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_value) {
31673   int __pyx_r;
31674   __Pyx_RefNannyDeclarations
31675   __pyx_t_5numpy_uint8_t __pyx_t_1;
31676   __Pyx_RefNannySetupContext("__set__", 0);
31677   __pyx_t_1 = __Pyx_PyInt_As_npy_uint8(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_uint8)-1)) && PyErr_Occurred())) __PYX_ERR(11, 3, __pyx_L1_error)
31678   __pyx_v_self->px_ax = __pyx_t_1;
31679 
31680   /* function exit code */
31681   __pyx_r = 0;
31682   goto __pyx_L0;
31683   __pyx_L1_error:;
31684   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.px_ax.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
31685   __pyx_r = -1;
31686   __pyx_L0:;
31687   __Pyx_RefNannyFinishContext();
31688   return __pyx_r;
31689 }
31690 
31691 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":4
31692  *
31693  *     cdef public np.uint8_t px_ax
31694  *     cdef public np.uint8_t py_ax             # <<<<<<<<<<<<<<
31695  *     cdef public np.float64_t px
31696  *     cdef public np.float64_t py
31697  */
31698 
31699 /* Python wrapper */
31700 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5py_ax_1__get__(PyObject *__pyx_v_self); /*proto*/
31701 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5py_ax_1__get__(PyObject *__pyx_v_self) {
31702   PyObject *__pyx_r = 0;
31703   __Pyx_RefNannyDeclarations
31704   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
31705   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_5py_ax___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self));
31706 
31707   /* function exit code */
31708   __Pyx_RefNannyFinishContext();
31709   return __pyx_r;
31710 }
31711 
31712 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_5py_ax___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self) {
31713   PyObject *__pyx_r = NULL;
31714   __Pyx_RefNannyDeclarations
31715   PyObject *__pyx_t_1 = NULL;
31716   __Pyx_RefNannySetupContext("__get__", 0);
31717   __Pyx_XDECREF(__pyx_r);
31718   __pyx_t_1 = __Pyx_PyInt_From_npy_uint8(__pyx_v_self->py_ax); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 4, __pyx_L1_error)
31719   __Pyx_GOTREF(__pyx_t_1);
31720   __pyx_r = __pyx_t_1;
31721   __pyx_t_1 = 0;
31722   goto __pyx_L0;
31723 
31724   /* function exit code */
31725   __pyx_L1_error:;
31726   __Pyx_XDECREF(__pyx_t_1);
31727   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.py_ax.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
31728   __pyx_r = NULL;
31729   __pyx_L0:;
31730   __Pyx_XGIVEREF(__pyx_r);
31731   __Pyx_RefNannyFinishContext();
31732   return __pyx_r;
31733 }
31734 
31735 /* Python wrapper */
31736 static int __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5py_ax_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
31737 static int __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5py_ax_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
31738   int __pyx_r;
31739   __Pyx_RefNannyDeclarations
31740   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
31741   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_5py_ax_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
31742 
31743   /* function exit code */
31744   __Pyx_RefNannyFinishContext();
31745   return __pyx_r;
31746 }
31747 
31748 static int __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_5py_ax_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_value) {
31749   int __pyx_r;
31750   __Pyx_RefNannyDeclarations
31751   __pyx_t_5numpy_uint8_t __pyx_t_1;
31752   __Pyx_RefNannySetupContext("__set__", 0);
31753   __pyx_t_1 = __Pyx_PyInt_As_npy_uint8(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_uint8)-1)) && PyErr_Occurred())) __PYX_ERR(11, 4, __pyx_L1_error)
31754   __pyx_v_self->py_ax = __pyx_t_1;
31755 
31756   /* function exit code */
31757   __pyx_r = 0;
31758   goto __pyx_L0;
31759   __pyx_L1_error:;
31760   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.py_ax.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
31761   __pyx_r = -1;
31762   __pyx_L0:;
31763   __Pyx_RefNannyFinishContext();
31764   return __pyx_r;
31765 }
31766 
31767 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":5
31768  *     cdef public np.uint8_t px_ax
31769  *     cdef public np.uint8_t py_ax
31770  *     cdef public np.float64_t px             # <<<<<<<<<<<<<<
31771  *     cdef public np.float64_t py
31772  *     cdef public int axis
31773  */
31774 
31775 /* Python wrapper */
31776 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_2px_1__get__(PyObject *__pyx_v_self); /*proto*/
31777 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_2px_1__get__(PyObject *__pyx_v_self) {
31778   PyObject *__pyx_r = 0;
31779   __Pyx_RefNannyDeclarations
31780   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
31781   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2px___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self));
31782 
31783   /* function exit code */
31784   __Pyx_RefNannyFinishContext();
31785   return __pyx_r;
31786 }
31787 
31788 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2px___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self) {
31789   PyObject *__pyx_r = NULL;
31790   __Pyx_RefNannyDeclarations
31791   PyObject *__pyx_t_1 = NULL;
31792   __Pyx_RefNannySetupContext("__get__", 0);
31793   __Pyx_XDECREF(__pyx_r);
31794   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->px); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 5, __pyx_L1_error)
31795   __Pyx_GOTREF(__pyx_t_1);
31796   __pyx_r = __pyx_t_1;
31797   __pyx_t_1 = 0;
31798   goto __pyx_L0;
31799 
31800   /* function exit code */
31801   __pyx_L1_error:;
31802   __Pyx_XDECREF(__pyx_t_1);
31803   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.px.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
31804   __pyx_r = NULL;
31805   __pyx_L0:;
31806   __Pyx_XGIVEREF(__pyx_r);
31807   __Pyx_RefNannyFinishContext();
31808   return __pyx_r;
31809 }
31810 
31811 /* Python wrapper */
31812 static int __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_2px_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
31813 static int __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_2px_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
31814   int __pyx_r;
31815   __Pyx_RefNannyDeclarations
31816   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
31817   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2px_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
31818 
31819   /* function exit code */
31820   __Pyx_RefNannyFinishContext();
31821   return __pyx_r;
31822 }
31823 
31824 static int __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2px_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_value) {
31825   int __pyx_r;
31826   __Pyx_RefNannyDeclarations
31827   __pyx_t_5numpy_float64_t __pyx_t_1;
31828   __Pyx_RefNannySetupContext("__set__", 0);
31829   __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(11, 5, __pyx_L1_error)
31830   __pyx_v_self->px = __pyx_t_1;
31831 
31832   /* function exit code */
31833   __pyx_r = 0;
31834   goto __pyx_L0;
31835   __pyx_L1_error:;
31836   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.px.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
31837   __pyx_r = -1;
31838   __pyx_L0:;
31839   __Pyx_RefNannyFinishContext();
31840   return __pyx_r;
31841 }
31842 
31843 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":6
31844  *     cdef public np.uint8_t py_ax
31845  *     cdef public np.float64_t px
31846  *     cdef public np.float64_t py             # <<<<<<<<<<<<<<
31847  *     cdef public int axis
31848  *
31849  */
31850 
31851 /* Python wrapper */
31852 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_2py_1__get__(PyObject *__pyx_v_self); /*proto*/
31853 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_2py_1__get__(PyObject *__pyx_v_self) {
31854   PyObject *__pyx_r = 0;
31855   __Pyx_RefNannyDeclarations
31856   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
31857   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2py___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self));
31858 
31859   /* function exit code */
31860   __Pyx_RefNannyFinishContext();
31861   return __pyx_r;
31862 }
31863 
31864 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2py___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self) {
31865   PyObject *__pyx_r = NULL;
31866   __Pyx_RefNannyDeclarations
31867   PyObject *__pyx_t_1 = NULL;
31868   __Pyx_RefNannySetupContext("__get__", 0);
31869   __Pyx_XDECREF(__pyx_r);
31870   __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->py); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 6, __pyx_L1_error)
31871   __Pyx_GOTREF(__pyx_t_1);
31872   __pyx_r = __pyx_t_1;
31873   __pyx_t_1 = 0;
31874   goto __pyx_L0;
31875 
31876   /* function exit code */
31877   __pyx_L1_error:;
31878   __Pyx_XDECREF(__pyx_t_1);
31879   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.py.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
31880   __pyx_r = NULL;
31881   __pyx_L0:;
31882   __Pyx_XGIVEREF(__pyx_r);
31883   __Pyx_RefNannyFinishContext();
31884   return __pyx_r;
31885 }
31886 
31887 /* Python wrapper */
31888 static int __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_2py_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
31889 static int __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_2py_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
31890   int __pyx_r;
31891   __Pyx_RefNannyDeclarations
31892   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
31893   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2py_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
31894 
31895   /* function exit code */
31896   __Pyx_RefNannyFinishContext();
31897   return __pyx_r;
31898 }
31899 
31900 static int __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_2py_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_value) {
31901   int __pyx_r;
31902   __Pyx_RefNannyDeclarations
31903   __pyx_t_5numpy_float64_t __pyx_t_1;
31904   __Pyx_RefNannySetupContext("__set__", 0);
31905   __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(11, 6, __pyx_L1_error)
31906   __pyx_v_self->py = __pyx_t_1;
31907 
31908   /* function exit code */
31909   __pyx_r = 0;
31910   goto __pyx_L0;
31911   __pyx_L1_error:;
31912   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.py.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
31913   __pyx_r = -1;
31914   __pyx_L0:;
31915   __Pyx_RefNannyFinishContext();
31916   return __pyx_r;
31917 }
31918 
31919 /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":7
31920  *     cdef public np.float64_t px
31921  *     cdef public np.float64_t py
31922  *     cdef public int axis             # <<<<<<<<<<<<<<
31923  *
31924  *     def __init__(self, dobj):
31925  */
31926 
31927 /* Python wrapper */
31928 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_4axis_1__get__(PyObject *__pyx_v_self); /*proto*/
31929 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_4axis_1__get__(PyObject *__pyx_v_self) {
31930   PyObject *__pyx_r = 0;
31931   __Pyx_RefNannyDeclarations
31932   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
31933   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_4axis___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self));
31934 
31935   /* function exit code */
31936   __Pyx_RefNannyFinishContext();
31937   return __pyx_r;
31938 }
31939 
31940 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_4axis___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self) {
31941   PyObject *__pyx_r = NULL;
31942   __Pyx_RefNannyDeclarations
31943   PyObject *__pyx_t_1 = NULL;
31944   __Pyx_RefNannySetupContext("__get__", 0);
31945   __Pyx_XDECREF(__pyx_r);
31946   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->axis); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 7, __pyx_L1_error)
31947   __Pyx_GOTREF(__pyx_t_1);
31948   __pyx_r = __pyx_t_1;
31949   __pyx_t_1 = 0;
31950   goto __pyx_L0;
31951 
31952   /* function exit code */
31953   __pyx_L1_error:;
31954   __Pyx_XDECREF(__pyx_t_1);
31955   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.axis.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
31956   __pyx_r = NULL;
31957   __pyx_L0:;
31958   __Pyx_XGIVEREF(__pyx_r);
31959   __Pyx_RefNannyFinishContext();
31960   return __pyx_r;
31961 }
31962 
31963 /* Python wrapper */
31964 static int __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_4axis_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
31965 static int __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_4axis_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
31966   int __pyx_r;
31967   __Pyx_RefNannyDeclarations
31968   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
31969   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_4axis_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
31970 
31971   /* function exit code */
31972   __Pyx_RefNannyFinishContext();
31973   return __pyx_r;
31974 }
31975 
31976 static int __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_4axis_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, PyObject *__pyx_v_value) {
31977   int __pyx_r;
31978   __Pyx_RefNannyDeclarations
31979   int __pyx_t_1;
31980   __Pyx_RefNannySetupContext("__set__", 0);
31981   __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(11, 7, __pyx_L1_error)
31982   __pyx_v_self->axis = __pyx_t_1;
31983 
31984   /* function exit code */
31985   __pyx_r = 0;
31986   goto __pyx_L0;
31987   __pyx_L1_error:;
31988   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.axis.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
31989   __pyx_r = -1;
31990   __pyx_L0:;
31991   __Pyx_RefNannyFinishContext();
31992   return __pyx_r;
31993 }
31994 
31995 /* "(tree fragment)":1
31996  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
31997  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
31998  * def __setstate_cython__(self, __pyx_state):
31999  */
32000 
32001 /* Python wrapper */
32002 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
32003 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
32004   PyObject *__pyx_r = 0;
32005   __Pyx_RefNannyDeclarations
32006   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
32007   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_8__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self));
32008 
32009   /* function exit code */
32010   __Pyx_RefNannyFinishContext();
32011   return __pyx_r;
32012 }
32013 
32014 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self) {
32015   PyObject *__pyx_r = NULL;
32016   __Pyx_RefNannyDeclarations
32017   PyObject *__pyx_t_1 = NULL;
32018   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
32019 
32020   /* "(tree fragment)":2
32021  * def __reduce_cython__(self):
32022  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
32023  * def __setstate_cython__(self, __pyx_state):
32024  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
32025  */
32026   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__31, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
32027   __Pyx_GOTREF(__pyx_t_1);
32028   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
32029   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32030   __PYX_ERR(5, 2, __pyx_L1_error)
32031 
32032   /* "(tree fragment)":1
32033  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
32034  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
32035  * def __setstate_cython__(self, __pyx_state):
32036  */
32037 
32038   /* function exit code */
32039   __pyx_L1_error:;
32040   __Pyx_XDECREF(__pyx_t_1);
32041   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
32042   __pyx_r = NULL;
32043   __Pyx_XGIVEREF(__pyx_r);
32044   __Pyx_RefNannyFinishContext();
32045   return __pyx_r;
32046 }
32047 
32048 /* "(tree fragment)":3
32049  * def __reduce_cython__(self):
32050  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
32051  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
32052  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
32053  */
32054 
32055 /* Python wrapper */
32056 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
32057 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
32058   PyObject *__pyx_r = 0;
32059   __Pyx_RefNannyDeclarations
32060   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
32061   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_10__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
32062 
32063   /* function exit code */
32064   __Pyx_RefNannyFinishContext();
32065   return __pyx_r;
32066 }
32067 
32068 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_16OrthoRaySelector_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
32069   PyObject *__pyx_r = NULL;
32070   __Pyx_RefNannyDeclarations
32071   PyObject *__pyx_t_1 = NULL;
32072   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
32073 
32074   /* "(tree fragment)":4
32075  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
32076  * def __setstate_cython__(self, __pyx_state):
32077  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
32078  */
32079   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__32, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
32080   __Pyx_GOTREF(__pyx_t_1);
32081   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
32082   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32083   __PYX_ERR(5, 4, __pyx_L1_error)
32084 
32085   /* "(tree fragment)":3
32086  * def __reduce_cython__(self):
32087  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
32088  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
32089  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
32090  */
32091 
32092   /* function exit code */
32093   __pyx_L1_error:;
32094   __Pyx_XDECREF(__pyx_t_1);
32095   __Pyx_AddTraceback("yt.geometry.selection_routines.OrthoRaySelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
32096   __pyx_r = NULL;
32097   __Pyx_XGIVEREF(__pyx_r);
32098   __Pyx_RefNannyFinishContext();
32099   return __pyx_r;
32100 }
32101 
32102 /* "yt/geometry/_selection_routines/ray_selector.pxi":7
32103  *     int hits
32104  *
32105  * cdef void dt_sampler(             # <<<<<<<<<<<<<<
32106  *              VolumeContainer *vc,
32107  *              np.float64_t v_pos[3],
32108  */
32109 
32110 static void __pyx_f_2yt_8geometry_18selection_routines_dt_sampler(struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer *__pyx_v_vc, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_v_dir, __pyx_t_5numpy_float64_t __pyx_v_enter_t, __pyx_t_5numpy_float64_t __pyx_v_exit_t, int *__pyx_v_index, void *__pyx_v_data) {
32111   struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator *__pyx_v_am;
32112   int __pyx_v_di;
32113   int __pyx_t_1;
32114   int __pyx_t_2;
32115 
32116   /* "yt/geometry/_selection_routines/ray_selector.pxi":15
32117  *              int index[3],
32118  *              void *data) nogil:
32119  *     cdef IntegrationAccumulator *am = <IntegrationAccumulator *> data             # <<<<<<<<<<<<<<
32120  *     cdef int di = (index[0]*vc.dims[1]+index[1])*vc.dims[2]+index[2]
32121  *     if am.child_mask[di] == 0 or enter_t == exit_t:
32122  */
32123   __pyx_v_am = ((struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator *)__pyx_v_data);
32124 
32125   /* "yt/geometry/_selection_routines/ray_selector.pxi":16
32126  *              void *data) nogil:
32127  *     cdef IntegrationAccumulator *am = <IntegrationAccumulator *> data
32128  *     cdef int di = (index[0]*vc.dims[1]+index[1])*vc.dims[2]+index[2]             # <<<<<<<<<<<<<<
32129  *     if am.child_mask[di] == 0 or enter_t == exit_t:
32130  *         return
32131  */
32132   __pyx_v_di = (((((__pyx_v_index[0]) * (__pyx_v_vc->dims[1])) + (__pyx_v_index[1])) * (__pyx_v_vc->dims[2])) + (__pyx_v_index[2]));
32133 
32134   /* "yt/geometry/_selection_routines/ray_selector.pxi":17
32135  *     cdef IntegrationAccumulator *am = <IntegrationAccumulator *> data
32136  *     cdef int di = (index[0]*vc.dims[1]+index[1])*vc.dims[2]+index[2]
32137  *     if am.child_mask[di] == 0 or enter_t == exit_t:             # <<<<<<<<<<<<<<
32138  *         return
32139  *     am.hits += 1
32140  */
32141   __pyx_t_2 = (((__pyx_v_am->child_mask[__pyx_v_di]) == 0) != 0);
32142   if (!__pyx_t_2) {
32143   } else {
32144     __pyx_t_1 = __pyx_t_2;
32145     goto __pyx_L4_bool_binop_done;
32146   }
32147   __pyx_t_2 = ((__pyx_v_enter_t == __pyx_v_exit_t) != 0);
32148   __pyx_t_1 = __pyx_t_2;
32149   __pyx_L4_bool_binop_done:;
32150   if (__pyx_t_1) {
32151 
32152     /* "yt/geometry/_selection_routines/ray_selector.pxi":18
32153  *     cdef int di = (index[0]*vc.dims[1]+index[1])*vc.dims[2]+index[2]
32154  *     if am.child_mask[di] == 0 or enter_t == exit_t:
32155  *         return             # <<<<<<<<<<<<<<
32156  *     am.hits += 1
32157  *     am.t[di] = enter_t
32158  */
32159     goto __pyx_L0;
32160 
32161     /* "yt/geometry/_selection_routines/ray_selector.pxi":17
32162  *     cdef IntegrationAccumulator *am = <IntegrationAccumulator *> data
32163  *     cdef int di = (index[0]*vc.dims[1]+index[1])*vc.dims[2]+index[2]
32164  *     if am.child_mask[di] == 0 or enter_t == exit_t:             # <<<<<<<<<<<<<<
32165  *         return
32166  *     am.hits += 1
32167  */
32168   }
32169 
32170   /* "yt/geometry/_selection_routines/ray_selector.pxi":19
32171  *     if am.child_mask[di] == 0 or enter_t == exit_t:
32172  *         return
32173  *     am.hits += 1             # <<<<<<<<<<<<<<
32174  *     am.t[di] = enter_t
32175  *     am.dt[di] = (exit_t - enter_t)
32176  */
32177   __pyx_v_am->hits = (__pyx_v_am->hits + 1);
32178 
32179   /* "yt/geometry/_selection_routines/ray_selector.pxi":20
32180  *         return
32181  *     am.hits += 1
32182  *     am.t[di] = enter_t             # <<<<<<<<<<<<<<
32183  *     am.dt[di] = (exit_t - enter_t)
32184  *
32185  */
32186   (__pyx_v_am->t[__pyx_v_di]) = __pyx_v_enter_t;
32187 
32188   /* "yt/geometry/_selection_routines/ray_selector.pxi":21
32189  *     am.hits += 1
32190  *     am.t[di] = enter_t
32191  *     am.dt[di] = (exit_t - enter_t)             # <<<<<<<<<<<<<<
32192  *
32193  * cdef class RaySelector(SelectorObject):
32194  */
32195   (__pyx_v_am->dt[__pyx_v_di]) = (__pyx_v_exit_t - __pyx_v_enter_t);
32196 
32197   /* "yt/geometry/_selection_routines/ray_selector.pxi":7
32198  *     int hits
32199  *
32200  * cdef void dt_sampler(             # <<<<<<<<<<<<<<
32201  *              VolumeContainer *vc,
32202  *              np.float64_t v_pos[3],
32203  */
32204 
32205   /* function exit code */
32206   __pyx_L0:;
32207 }
32208 
32209 /* "yt/geometry/_selection_routines/ray_selector.pxi":29
32210  *     cdef public np.float64_t vec[3]
32211  *
32212  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
32213  *         cdef int i
32214  *         _ensure_code(dobj.start_point)
32215  */
32216 
32217 /* Python wrapper */
32218 static int __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
32219 static int __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
32220   PyObject *__pyx_v_dobj = 0;
32221   int __pyx_r;
32222   __Pyx_RefNannyDeclarations
32223   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
32224   {
32225     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
32226     PyObject* values[1] = {0};
32227     if (unlikely(__pyx_kwds)) {
32228       Py_ssize_t kw_args;
32229       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
32230       switch (pos_args) {
32231         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
32232         CYTHON_FALLTHROUGH;
32233         case  0: break;
32234         default: goto __pyx_L5_argtuple_error;
32235       }
32236       kw_args = PyDict_Size(__pyx_kwds);
32237       switch (pos_args) {
32238         case  0:
32239         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
32240         else goto __pyx_L5_argtuple_error;
32241       }
32242       if (unlikely(kw_args > 0)) {
32243         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(12, 29, __pyx_L3_error)
32244       }
32245     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
32246       goto __pyx_L5_argtuple_error;
32247     } else {
32248       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
32249     }
32250     __pyx_v_dobj = values[0];
32251   }
32252   goto __pyx_L4_argument_unpacking_done;
32253   __pyx_L5_argtuple_error:;
32254   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(12, 29, __pyx_L3_error)
32255   __pyx_L3_error:;
32256   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
32257   __Pyx_RefNannyFinishContext();
32258   return -1;
32259   __pyx_L4_argument_unpacking_done:;
32260   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self), __pyx_v_dobj);
32261 
32262   /* function exit code */
32263   __Pyx_RefNannyFinishContext();
32264   return __pyx_r;
32265 }
32266 
32267 static int __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
32268   int __pyx_v_i;
32269   int __pyx_r;
32270   __Pyx_RefNannyDeclarations
32271   PyObject *__pyx_t_1 = NULL;
32272   PyObject *__pyx_t_2 = NULL;
32273   int __pyx_t_3;
32274   __pyx_t_5numpy_float64_t __pyx_t_4;
32275   __Pyx_RefNannySetupContext("__init__", 0);
32276 
32277   /* "yt/geometry/_selection_routines/ray_selector.pxi":31
32278  *     def __init__(self, dobj):
32279  *         cdef int i
32280  *         _ensure_code(dobj.start_point)             # <<<<<<<<<<<<<<
32281  *         _ensure_code(dobj.end_point)
32282  *         for i in range(3):
32283  */
32284   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_start_point); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 31, __pyx_L1_error)
32285   __Pyx_GOTREF(__pyx_t_1);
32286   __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 31, __pyx_L1_error)
32287   __Pyx_GOTREF(__pyx_t_2);
32288   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32289   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32290 
32291   /* "yt/geometry/_selection_routines/ray_selector.pxi":32
32292  *         cdef int i
32293  *         _ensure_code(dobj.start_point)
32294  *         _ensure_code(dobj.end_point)             # <<<<<<<<<<<<<<
32295  *         for i in range(3):
32296  *             self.vec[i] = dobj.vec[i]
32297  */
32298   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_end_point); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 32, __pyx_L1_error)
32299   __Pyx_GOTREF(__pyx_t_2);
32300   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 32, __pyx_L1_error)
32301   __Pyx_GOTREF(__pyx_t_1);
32302   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32303   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32304 
32305   /* "yt/geometry/_selection_routines/ray_selector.pxi":33
32306  *         _ensure_code(dobj.start_point)
32307  *         _ensure_code(dobj.end_point)
32308  *         for i in range(3):             # <<<<<<<<<<<<<<
32309  *             self.vec[i] = dobj.vec[i]
32310  *             self.p1[i] = dobj.start_point[i]
32311  */
32312   for (__pyx_t_3 = 0; __pyx_t_3 < 3; __pyx_t_3+=1) {
32313     __pyx_v_i = __pyx_t_3;
32314 
32315     /* "yt/geometry/_selection_routines/ray_selector.pxi":34
32316  *         _ensure_code(dobj.end_point)
32317  *         for i in range(3):
32318  *             self.vec[i] = dobj.vec[i]             # <<<<<<<<<<<<<<
32319  *             self.p1[i] = dobj.start_point[i]
32320  *             self.p2[i] = dobj.end_point[i]
32321  */
32322     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_vec); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 34, __pyx_L1_error)
32323     __Pyx_GOTREF(__pyx_t_1);
32324     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 34, __pyx_L1_error)
32325     __Pyx_GOTREF(__pyx_t_2);
32326     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32327     __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(12, 34, __pyx_L1_error)
32328     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32329     (__pyx_v_self->vec[__pyx_v_i]) = __pyx_t_4;
32330 
32331     /* "yt/geometry/_selection_routines/ray_selector.pxi":35
32332  *         for i in range(3):
32333  *             self.vec[i] = dobj.vec[i]
32334  *             self.p1[i] = dobj.start_point[i]             # <<<<<<<<<<<<<<
32335  *             self.p2[i] = dobj.end_point[i]
32336  *
32337  */
32338     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_start_point); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 35, __pyx_L1_error)
32339     __Pyx_GOTREF(__pyx_t_2);
32340     __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 35, __pyx_L1_error)
32341     __Pyx_GOTREF(__pyx_t_1);
32342     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32343     __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(12, 35, __pyx_L1_error)
32344     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32345     (__pyx_v_self->p1[__pyx_v_i]) = __pyx_t_4;
32346 
32347     /* "yt/geometry/_selection_routines/ray_selector.pxi":36
32348  *             self.vec[i] = dobj.vec[i]
32349  *             self.p1[i] = dobj.start_point[i]
32350  *             self.p2[i] = dobj.end_point[i]             # <<<<<<<<<<<<<<
32351  *
32352  *     @cython.boundscheck(False)
32353  */
32354     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_end_point); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 36, __pyx_L1_error)
32355     __Pyx_GOTREF(__pyx_t_1);
32356     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 36, __pyx_L1_error)
32357     __Pyx_GOTREF(__pyx_t_2);
32358     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32359     __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(12, 36, __pyx_L1_error)
32360     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32361     (__pyx_v_self->p2[__pyx_v_i]) = __pyx_t_4;
32362   }
32363 
32364   /* "yt/geometry/_selection_routines/ray_selector.pxi":29
32365  *     cdef public np.float64_t vec[3]
32366  *
32367  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
32368  *         cdef int i
32369  *         _ensure_code(dobj.start_point)
32370  */
32371 
32372   /* function exit code */
32373   __pyx_r = 0;
32374   goto __pyx_L0;
32375   __pyx_L1_error:;
32376   __Pyx_XDECREF(__pyx_t_1);
32377   __Pyx_XDECREF(__pyx_t_2);
32378   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
32379   __pyx_r = -1;
32380   __pyx_L0:;
32381   __Pyx_RefNannyFinishContext();
32382   return __pyx_r;
32383 }
32384 
32385 /* "yt/geometry/_selection_routines/ray_selector.pxi":41
32386  *     @cython.wraparound(False)
32387  *     @cython.cdivision(True)
32388  *     def fill_mask(self, gobj):             # <<<<<<<<<<<<<<
32389  *         cdef np.ndarray[np.float64_t, ndim=3] t, dt
32390  *         cdef np.ndarray[np.uint8_t, ndim=3, cast=True] child_mask
32391  */
32392 
32393 /* Python wrapper */
32394 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_3fill_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj); /*proto*/
32395 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_3fill_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj) {
32396   PyObject *__pyx_r = 0;
32397   __Pyx_RefNannyDeclarations
32398   __Pyx_RefNannySetupContext("fill_mask (wrapper)", 0);
32399   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2fill_mask(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self), ((PyObject *)__pyx_v_gobj));
32400 
32401   /* function exit code */
32402   __Pyx_RefNannyFinishContext();
32403   return __pyx_r;
32404 }
32405 
32406 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2fill_mask(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_gobj) {
32407   PyArrayObject *__pyx_v_t = 0;
32408   PyArrayObject *__pyx_v_dt = 0;
32409   PyArrayObject *__pyx_v_child_mask = 0;
32410   int __pyx_v_i;
32411   int __pyx_v_total;
32412   struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator *__pyx_v_ia;
32413   struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer __pyx_v_vc;
32414   PyObject *__pyx_v_mask = NULL;
32415   npy_intp __pyx_v_j;
32416   npy_intp __pyx_v_k;
32417   __Pyx_LocalBuf_ND __pyx_pybuffernd_child_mask;
32418   __Pyx_Buffer __pyx_pybuffer_child_mask;
32419   __Pyx_LocalBuf_ND __pyx_pybuffernd_dt;
32420   __Pyx_Buffer __pyx_pybuffer_dt;
32421   __Pyx_LocalBuf_ND __pyx_pybuffernd_t;
32422   __Pyx_Buffer __pyx_pybuffer_t;
32423   PyObject *__pyx_r = NULL;
32424   __Pyx_RefNannyDeclarations
32425   PyObject *__pyx_t_1 = NULL;
32426   PyObject *__pyx_t_2 = NULL;
32427   PyObject *__pyx_t_3 = NULL;
32428   PyObject *__pyx_t_4 = NULL;
32429   PyArrayObject *__pyx_t_5 = NULL;
32430   int __pyx_t_6;
32431   PyObject *__pyx_t_7 = NULL;
32432   PyObject *__pyx_t_8 = NULL;
32433   PyObject *__pyx_t_9 = NULL;
32434   PyArrayObject *__pyx_t_10 = NULL;
32435   __pyx_t_5numpy_float64_t __pyx_t_11;
32436   npy_intp __pyx_t_12;
32437   npy_intp __pyx_t_13;
32438   npy_intp __pyx_t_14;
32439   npy_intp __pyx_t_15;
32440   npy_intp __pyx_t_16;
32441   npy_intp __pyx_t_17;
32442   npy_intp __pyx_t_18;
32443   npy_intp __pyx_t_19;
32444   Py_ssize_t __pyx_t_20;
32445   Py_ssize_t __pyx_t_21;
32446   Py_ssize_t __pyx_t_22;
32447   int __pyx_t_23;
32448   __Pyx_RefNannySetupContext("fill_mask", 0);
32449   __pyx_pybuffer_t.pybuffer.buf = NULL;
32450   __pyx_pybuffer_t.refcount = 0;
32451   __pyx_pybuffernd_t.data = NULL;
32452   __pyx_pybuffernd_t.rcbuffer = &__pyx_pybuffer_t;
32453   __pyx_pybuffer_dt.pybuffer.buf = NULL;
32454   __pyx_pybuffer_dt.refcount = 0;
32455   __pyx_pybuffernd_dt.data = NULL;
32456   __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
32457   __pyx_pybuffer_child_mask.pybuffer.buf = NULL;
32458   __pyx_pybuffer_child_mask.refcount = 0;
32459   __pyx_pybuffernd_child_mask.data = NULL;
32460   __pyx_pybuffernd_child_mask.rcbuffer = &__pyx_pybuffer_child_mask;
32461 
32462   /* "yt/geometry/_selection_routines/ray_selector.pxi":45
32463  *         cdef np.ndarray[np.uint8_t, ndim=3, cast=True] child_mask
32464  *         cdef int i
32465  *         cdef int total = 0             # <<<<<<<<<<<<<<
32466  *         cdef IntegrationAccumulator *ia
32467  *         ia = <IntegrationAccumulator *> malloc(sizeof(IntegrationAccumulator))
32468  */
32469   __pyx_v_total = 0;
32470 
32471   /* "yt/geometry/_selection_routines/ray_selector.pxi":47
32472  *         cdef int total = 0
32473  *         cdef IntegrationAccumulator *ia
32474  *         ia = <IntegrationAccumulator *> malloc(sizeof(IntegrationAccumulator))             # <<<<<<<<<<<<<<
32475  *         cdef VolumeContainer vc
32476  *         mask = np.zeros(gobj.ActiveDimensions, dtype='uint8')
32477  */
32478   __pyx_v_ia = ((struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator *)malloc((sizeof(struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator))));
32479 
32480   /* "yt/geometry/_selection_routines/ray_selector.pxi":49
32481  *         ia = <IntegrationAccumulator *> malloc(sizeof(IntegrationAccumulator))
32482  *         cdef VolumeContainer vc
32483  *         mask = np.zeros(gobj.ActiveDimensions, dtype='uint8')             # <<<<<<<<<<<<<<
32484  *         t = np.zeros(gobj.ActiveDimensions, dtype="float64")
32485  *         dt = np.zeros(gobj.ActiveDimensions, dtype="float64") - 1
32486  */
32487   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 49, __pyx_L1_error)
32488   __Pyx_GOTREF(__pyx_t_1);
32489   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 49, __pyx_L1_error)
32490   __Pyx_GOTREF(__pyx_t_2);
32491   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32492   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 49, __pyx_L1_error)
32493   __Pyx_GOTREF(__pyx_t_1);
32494   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 49, __pyx_L1_error)
32495   __Pyx_GOTREF(__pyx_t_3);
32496   __Pyx_GIVEREF(__pyx_t_1);
32497   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
32498   __pyx_t_1 = 0;
32499   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 49, __pyx_L1_error)
32500   __Pyx_GOTREF(__pyx_t_1);
32501   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(12, 49, __pyx_L1_error)
32502   __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 49, __pyx_L1_error)
32503   __Pyx_GOTREF(__pyx_t_4);
32504   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32505   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
32506   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32507   __pyx_v_mask = __pyx_t_4;
32508   __pyx_t_4 = 0;
32509 
32510   /* "yt/geometry/_selection_routines/ray_selector.pxi":50
32511  *         cdef VolumeContainer vc
32512  *         mask = np.zeros(gobj.ActiveDimensions, dtype='uint8')
32513  *         t = np.zeros(gobj.ActiveDimensions, dtype="float64")             # <<<<<<<<<<<<<<
32514  *         dt = np.zeros(gobj.ActiveDimensions, dtype="float64") - 1
32515  *         child_mask = gobj.child_mask
32516  */
32517   __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 50, __pyx_L1_error)
32518   __Pyx_GOTREF(__pyx_t_4);
32519   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 50, __pyx_L1_error)
32520   __Pyx_GOTREF(__pyx_t_1);
32521   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
32522   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 50, __pyx_L1_error)
32523   __Pyx_GOTREF(__pyx_t_4);
32524   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 50, __pyx_L1_error)
32525   __Pyx_GOTREF(__pyx_t_3);
32526   __Pyx_GIVEREF(__pyx_t_4);
32527   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
32528   __pyx_t_4 = 0;
32529   __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 50, __pyx_L1_error)
32530   __Pyx_GOTREF(__pyx_t_4);
32531   if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(12, 50, __pyx_L1_error)
32532   __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 50, __pyx_L1_error)
32533   __Pyx_GOTREF(__pyx_t_2);
32534   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32535   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
32536   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
32537   if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 50, __pyx_L1_error)
32538   __pyx_t_5 = ((PyArrayObject *)__pyx_t_2);
32539   {
32540     __Pyx_BufFmt_StackElem __pyx_stack[1];
32541     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t.rcbuffer->pybuffer);
32542     __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_t.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack);
32543     if (unlikely(__pyx_t_6 < 0)) {
32544       PyErr_Fetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
32545       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_t.rcbuffer->pybuffer, (PyObject*)__pyx_v_t, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {
32546         Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9);
32547         __Pyx_RaiseBufferFallbackError();
32548       } else {
32549         PyErr_Restore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
32550       }
32551       __pyx_t_7 = __pyx_t_8 = __pyx_t_9 = 0;
32552     }
32553     __pyx_pybuffernd_t.diminfo[0].strides = __pyx_pybuffernd_t.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_t.diminfo[0].shape = __pyx_pybuffernd_t.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_t.diminfo[1].strides = __pyx_pybuffernd_t.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_t.diminfo[1].shape = __pyx_pybuffernd_t.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_t.diminfo[2].strides = __pyx_pybuffernd_t.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_t.diminfo[2].shape = __pyx_pybuffernd_t.rcbuffer->pybuffer.shape[2];
32554     if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(12, 50, __pyx_L1_error)
32555   }
32556   __pyx_t_5 = 0;
32557   __pyx_v_t = ((PyArrayObject *)__pyx_t_2);
32558   __pyx_t_2 = 0;
32559 
32560   /* "yt/geometry/_selection_routines/ray_selector.pxi":51
32561  *         mask = np.zeros(gobj.ActiveDimensions, dtype='uint8')
32562  *         t = np.zeros(gobj.ActiveDimensions, dtype="float64")
32563  *         dt = np.zeros(gobj.ActiveDimensions, dtype="float64") - 1             # <<<<<<<<<<<<<<
32564  *         child_mask = gobj.child_mask
32565  *         ia.t = <np.float64_t *> t.data
32566  */
32567   __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 51, __pyx_L1_error)
32568   __Pyx_GOTREF(__pyx_t_2);
32569   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 51, __pyx_L1_error)
32570   __Pyx_GOTREF(__pyx_t_4);
32571   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32572   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 51, __pyx_L1_error)
32573   __Pyx_GOTREF(__pyx_t_2);
32574   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 51, __pyx_L1_error)
32575   __Pyx_GOTREF(__pyx_t_3);
32576   __Pyx_GIVEREF(__pyx_t_2);
32577   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
32578   __pyx_t_2 = 0;
32579   __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 51, __pyx_L1_error)
32580   __Pyx_GOTREF(__pyx_t_2);
32581   if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(12, 51, __pyx_L1_error)
32582   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 51, __pyx_L1_error)
32583   __Pyx_GOTREF(__pyx_t_1);
32584   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
32585   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
32586   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32587   __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 51, __pyx_L1_error)
32588   __Pyx_GOTREF(__pyx_t_2);
32589   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32590   if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 51, __pyx_L1_error)
32591   __pyx_t_5 = ((PyArrayObject *)__pyx_t_2);
32592   {
32593     __Pyx_BufFmt_StackElem __pyx_stack[1];
32594     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
32595     __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack);
32596     if (unlikely(__pyx_t_6 < 0)) {
32597       PyErr_Fetch(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
32598       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {
32599         Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_7);
32600         __Pyx_RaiseBufferFallbackError();
32601       } else {
32602         PyErr_Restore(__pyx_t_9, __pyx_t_8, __pyx_t_7);
32603       }
32604       __pyx_t_9 = __pyx_t_8 = __pyx_t_7 = 0;
32605     }
32606     __pyx_pybuffernd_dt.diminfo[0].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dt.diminfo[0].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_dt.diminfo[1].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_dt.diminfo[1].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_dt.diminfo[2].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_dt.diminfo[2].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[2];
32607     if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(12, 51, __pyx_L1_error)
32608   }
32609   __pyx_t_5 = 0;
32610   __pyx_v_dt = ((PyArrayObject *)__pyx_t_2);
32611   __pyx_t_2 = 0;
32612 
32613   /* "yt/geometry/_selection_routines/ray_selector.pxi":52
32614  *         t = np.zeros(gobj.ActiveDimensions, dtype="float64")
32615  *         dt = np.zeros(gobj.ActiveDimensions, dtype="float64") - 1
32616  *         child_mask = gobj.child_mask             # <<<<<<<<<<<<<<
32617  *         ia.t = <np.float64_t *> t.data
32618  *         ia.dt = <np.float64_t *> dt.data
32619  */
32620   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_child_mask); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 52, __pyx_L1_error)
32621   __Pyx_GOTREF(__pyx_t_2);
32622   if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 52, __pyx_L1_error)
32623   __pyx_t_10 = ((PyArrayObject *)__pyx_t_2);
32624   {
32625     __Pyx_BufFmt_StackElem __pyx_stack[1];
32626     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
32627     __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack);
32628     if (unlikely(__pyx_t_6 < 0)) {
32629       PyErr_Fetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
32630       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_child_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack) == -1)) {
32631         Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9);
32632         __Pyx_RaiseBufferFallbackError();
32633       } else {
32634         PyErr_Restore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
32635       }
32636       __pyx_t_7 = __pyx_t_8 = __pyx_t_9 = 0;
32637     }
32638     __pyx_pybuffernd_child_mask.diminfo[0].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_child_mask.diminfo[0].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_child_mask.diminfo[1].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_child_mask.diminfo[1].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_child_mask.diminfo[2].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_child_mask.diminfo[2].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[2];
32639     if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(12, 52, __pyx_L1_error)
32640   }
32641   __pyx_t_10 = 0;
32642   __pyx_v_child_mask = ((PyArrayObject *)__pyx_t_2);
32643   __pyx_t_2 = 0;
32644 
32645   /* "yt/geometry/_selection_routines/ray_selector.pxi":53
32646  *         dt = np.zeros(gobj.ActiveDimensions, dtype="float64") - 1
32647  *         child_mask = gobj.child_mask
32648  *         ia.t = <np.float64_t *> t.data             # <<<<<<<<<<<<<<
32649  *         ia.dt = <np.float64_t *> dt.data
32650  *         ia.child_mask = <np.uint8_t *> child_mask.data
32651  */
32652   __pyx_v_ia->t = ((__pyx_t_5numpy_float64_t *)__pyx_v_t->data);
32653 
32654   /* "yt/geometry/_selection_routines/ray_selector.pxi":54
32655  *         child_mask = gobj.child_mask
32656  *         ia.t = <np.float64_t *> t.data
32657  *         ia.dt = <np.float64_t *> dt.data             # <<<<<<<<<<<<<<
32658  *         ia.child_mask = <np.uint8_t *> child_mask.data
32659  *         ia.hits = 0
32660  */
32661   __pyx_v_ia->dt = ((__pyx_t_5numpy_float64_t *)__pyx_v_dt->data);
32662 
32663   /* "yt/geometry/_selection_routines/ray_selector.pxi":55
32664  *         ia.t = <np.float64_t *> t.data
32665  *         ia.dt = <np.float64_t *> dt.data
32666  *         ia.child_mask = <np.uint8_t *> child_mask.data             # <<<<<<<<<<<<<<
32667  *         ia.hits = 0
32668  *         _ensure_code(gobj.LeftEdge)
32669  */
32670   __pyx_v_ia->child_mask = ((__pyx_t_5numpy_uint8_t *)__pyx_v_child_mask->data);
32671 
32672   /* "yt/geometry/_selection_routines/ray_selector.pxi":56
32673  *         ia.dt = <np.float64_t *> dt.data
32674  *         ia.child_mask = <np.uint8_t *> child_mask.data
32675  *         ia.hits = 0             # <<<<<<<<<<<<<<
32676  *         _ensure_code(gobj.LeftEdge)
32677  *         _ensure_code(gobj.RightEdge)
32678  */
32679   __pyx_v_ia->hits = 0;
32680 
32681   /* "yt/geometry/_selection_routines/ray_selector.pxi":57
32682  *         ia.child_mask = <np.uint8_t *> child_mask.data
32683  *         ia.hits = 0
32684  *         _ensure_code(gobj.LeftEdge)             # <<<<<<<<<<<<<<
32685  *         _ensure_code(gobj.RightEdge)
32686  *         _ensure_code(gobj.dds)
32687  */
32688   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_LeftEdge); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 57, __pyx_L1_error)
32689   __Pyx_GOTREF(__pyx_t_2);
32690   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 57, __pyx_L1_error)
32691   __Pyx_GOTREF(__pyx_t_1);
32692   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32693   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32694 
32695   /* "yt/geometry/_selection_routines/ray_selector.pxi":58
32696  *         ia.hits = 0
32697  *         _ensure_code(gobj.LeftEdge)
32698  *         _ensure_code(gobj.RightEdge)             # <<<<<<<<<<<<<<
32699  *         _ensure_code(gobj.dds)
32700  *         for i in range(3):
32701  */
32702   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_RightEdge); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 58, __pyx_L1_error)
32703   __Pyx_GOTREF(__pyx_t_1);
32704   __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 58, __pyx_L1_error)
32705   __Pyx_GOTREF(__pyx_t_2);
32706   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32707   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32708 
32709   /* "yt/geometry/_selection_routines/ray_selector.pxi":59
32710  *         _ensure_code(gobj.LeftEdge)
32711  *         _ensure_code(gobj.RightEdge)
32712  *         _ensure_code(gobj.dds)             # <<<<<<<<<<<<<<
32713  *         for i in range(3):
32714  *             vc.left_edge[i] = gobj.LeftEdge[i]
32715  */
32716   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 59, __pyx_L1_error)
32717   __Pyx_GOTREF(__pyx_t_2);
32718   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 59, __pyx_L1_error)
32719   __Pyx_GOTREF(__pyx_t_1);
32720   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32721   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32722 
32723   /* "yt/geometry/_selection_routines/ray_selector.pxi":60
32724  *         _ensure_code(gobj.RightEdge)
32725  *         _ensure_code(gobj.dds)
32726  *         for i in range(3):             # <<<<<<<<<<<<<<
32727  *             vc.left_edge[i] = gobj.LeftEdge[i]
32728  *             vc.right_edge[i] = gobj.RightEdge[i]
32729  */
32730   for (__pyx_t_6 = 0; __pyx_t_6 < 3; __pyx_t_6+=1) {
32731     __pyx_v_i = __pyx_t_6;
32732 
32733     /* "yt/geometry/_selection_routines/ray_selector.pxi":61
32734  *         _ensure_code(gobj.dds)
32735  *         for i in range(3):
32736  *             vc.left_edge[i] = gobj.LeftEdge[i]             # <<<<<<<<<<<<<<
32737  *             vc.right_edge[i] = gobj.RightEdge[i]
32738  *             vc.dds[i] = gobj.dds[i]
32739  */
32740     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_LeftEdge); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 61, __pyx_L1_error)
32741     __Pyx_GOTREF(__pyx_t_1);
32742     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 61, __pyx_L1_error)
32743     __Pyx_GOTREF(__pyx_t_2);
32744     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32745     __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(12, 61, __pyx_L1_error)
32746     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32747     (__pyx_v_vc.left_edge[__pyx_v_i]) = __pyx_t_11;
32748 
32749     /* "yt/geometry/_selection_routines/ray_selector.pxi":62
32750  *         for i in range(3):
32751  *             vc.left_edge[i] = gobj.LeftEdge[i]
32752  *             vc.right_edge[i] = gobj.RightEdge[i]             # <<<<<<<<<<<<<<
32753  *             vc.dds[i] = gobj.dds[i]
32754  *             vc.idds[i] = 1.0/gobj.dds[i]
32755  */
32756     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_RightEdge); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 62, __pyx_L1_error)
32757     __Pyx_GOTREF(__pyx_t_2);
32758     __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 62, __pyx_L1_error)
32759     __Pyx_GOTREF(__pyx_t_1);
32760     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32761     __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_11 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(12, 62, __pyx_L1_error)
32762     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32763     (__pyx_v_vc.right_edge[__pyx_v_i]) = __pyx_t_11;
32764 
32765     /* "yt/geometry/_selection_routines/ray_selector.pxi":63
32766  *             vc.left_edge[i] = gobj.LeftEdge[i]
32767  *             vc.right_edge[i] = gobj.RightEdge[i]
32768  *             vc.dds[i] = gobj.dds[i]             # <<<<<<<<<<<<<<
32769  *             vc.idds[i] = 1.0/gobj.dds[i]
32770  *             vc.dims[i] = dt.shape[i]
32771  */
32772     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 63, __pyx_L1_error)
32773     __Pyx_GOTREF(__pyx_t_1);
32774     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 63, __pyx_L1_error)
32775     __Pyx_GOTREF(__pyx_t_2);
32776     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32777     __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(12, 63, __pyx_L1_error)
32778     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32779     (__pyx_v_vc.dds[__pyx_v_i]) = __pyx_t_11;
32780 
32781     /* "yt/geometry/_selection_routines/ray_selector.pxi":64
32782  *             vc.right_edge[i] = gobj.RightEdge[i]
32783  *             vc.dds[i] = gobj.dds[i]
32784  *             vc.idds[i] = 1.0/gobj.dds[i]             # <<<<<<<<<<<<<<
32785  *             vc.dims[i] = dt.shape[i]
32786  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
32787  */
32788     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 64, __pyx_L1_error)
32789     __Pyx_GOTREF(__pyx_t_2);
32790     __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 64, __pyx_L1_error)
32791     __Pyx_GOTREF(__pyx_t_1);
32792     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32793     __pyx_t_2 = __Pyx_PyFloat_DivideCObj(__pyx_float_1_0, __pyx_t_1, 1.0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 64, __pyx_L1_error)
32794     __Pyx_GOTREF(__pyx_t_2);
32795     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
32796     __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(12, 64, __pyx_L1_error)
32797     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
32798     (__pyx_v_vc.idds[__pyx_v_i]) = __pyx_t_11;
32799 
32800     /* "yt/geometry/_selection_routines/ray_selector.pxi":65
32801  *             vc.dds[i] = gobj.dds[i]
32802  *             vc.idds[i] = 1.0/gobj.dds[i]
32803  *             vc.dims[i] = dt.shape[i]             # <<<<<<<<<<<<<<
32804  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
32805  *         for i in range(dt.shape[0]):
32806  */
32807     (__pyx_v_vc.dims[__pyx_v_i]) = (__pyx_v_dt->dimensions[__pyx_v_i]);
32808   }
32809 
32810   /* "yt/geometry/_selection_routines/ray_selector.pxi":66
32811  *             vc.idds[i] = 1.0/gobj.dds[i]
32812  *             vc.dims[i] = dt.shape[i]
32813  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)             # <<<<<<<<<<<<<<
32814  *         for i in range(dt.shape[0]):
32815  *             for j in range(dt.shape[1]):
32816  */
32817   (void)(__pyx_f_2yt_9utilities_3lib_14grid_traversal_walk_volume((&__pyx_v_vc), __pyx_v_self->p1, __pyx_v_self->vec, __pyx_f_2yt_8geometry_18selection_routines_dt_sampler, ((void *)__pyx_v_ia), NULL));
32818 
32819   /* "yt/geometry/_selection_routines/ray_selector.pxi":67
32820  *             vc.dims[i] = dt.shape[i]
32821  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
32822  *         for i in range(dt.shape[0]):             # <<<<<<<<<<<<<<
32823  *             for j in range(dt.shape[1]):
32824  *                 for k in range(dt.shape[2]):
32825  */
32826   __pyx_t_12 = (__pyx_v_dt->dimensions[0]);
32827   __pyx_t_13 = __pyx_t_12;
32828   for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_13; __pyx_t_6+=1) {
32829     __pyx_v_i = __pyx_t_6;
32830 
32831     /* "yt/geometry/_selection_routines/ray_selector.pxi":68
32832  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
32833  *         for i in range(dt.shape[0]):
32834  *             for j in range(dt.shape[1]):             # <<<<<<<<<<<<<<
32835  *                 for k in range(dt.shape[2]):
32836  *                     if dt[i, j, k] >= 0:
32837  */
32838     __pyx_t_14 = (__pyx_v_dt->dimensions[1]);
32839     __pyx_t_15 = __pyx_t_14;
32840     for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
32841       __pyx_v_j = __pyx_t_16;
32842 
32843       /* "yt/geometry/_selection_routines/ray_selector.pxi":69
32844  *         for i in range(dt.shape[0]):
32845  *             for j in range(dt.shape[1]):
32846  *                 for k in range(dt.shape[2]):             # <<<<<<<<<<<<<<
32847  *                     if dt[i, j, k] >= 0:
32848  *                         mask[i, j, k] = 1
32849  */
32850       __pyx_t_17 = (__pyx_v_dt->dimensions[2]);
32851       __pyx_t_18 = __pyx_t_17;
32852       for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
32853         __pyx_v_k = __pyx_t_19;
32854 
32855         /* "yt/geometry/_selection_routines/ray_selector.pxi":70
32856  *             for j in range(dt.shape[1]):
32857  *                 for k in range(dt.shape[2]):
32858  *                     if dt[i, j, k] >= 0:             # <<<<<<<<<<<<<<
32859  *                         mask[i, j, k] = 1
32860  *                         total += 1
32861  */
32862         __pyx_t_20 = __pyx_v_i;
32863         __pyx_t_21 = __pyx_v_j;
32864         __pyx_t_22 = __pyx_v_k;
32865         __pyx_t_23 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_20, __pyx_pybuffernd_dt.diminfo[0].strides, __pyx_t_21, __pyx_pybuffernd_dt.diminfo[1].strides, __pyx_t_22, __pyx_pybuffernd_dt.diminfo[2].strides)) >= 0.0) != 0);
32866         if (__pyx_t_23) {
32867 
32868           /* "yt/geometry/_selection_routines/ray_selector.pxi":71
32869  *                 for k in range(dt.shape[2]):
32870  *                     if dt[i, j, k] >= 0:
32871  *                         mask[i, j, k] = 1             # <<<<<<<<<<<<<<
32872  *                         total += 1
32873  *         free(ia)
32874  */
32875           __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 71, __pyx_L1_error)
32876           __Pyx_GOTREF(__pyx_t_2);
32877           __pyx_t_1 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_j); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 71, __pyx_L1_error)
32878           __Pyx_GOTREF(__pyx_t_1);
32879           __pyx_t_3 = __Pyx_PyInt_From_Py_intptr_t(__pyx_v_k); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 71, __pyx_L1_error)
32880           __Pyx_GOTREF(__pyx_t_3);
32881           __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 71, __pyx_L1_error)
32882           __Pyx_GOTREF(__pyx_t_4);
32883           __Pyx_GIVEREF(__pyx_t_2);
32884           PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
32885           __Pyx_GIVEREF(__pyx_t_1);
32886           PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
32887           __Pyx_GIVEREF(__pyx_t_3);
32888           PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
32889           __pyx_t_2 = 0;
32890           __pyx_t_1 = 0;
32891           __pyx_t_3 = 0;
32892           if (unlikely(PyObject_SetItem(__pyx_v_mask, __pyx_t_4, __pyx_int_1) < 0)) __PYX_ERR(12, 71, __pyx_L1_error)
32893           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
32894 
32895           /* "yt/geometry/_selection_routines/ray_selector.pxi":72
32896  *                     if dt[i, j, k] >= 0:
32897  *                         mask[i, j, k] = 1
32898  *                         total += 1             # <<<<<<<<<<<<<<
32899  *         free(ia)
32900  *         if total == 0: return None
32901  */
32902           __pyx_v_total = (__pyx_v_total + 1);
32903 
32904           /* "yt/geometry/_selection_routines/ray_selector.pxi":70
32905  *             for j in range(dt.shape[1]):
32906  *                 for k in range(dt.shape[2]):
32907  *                     if dt[i, j, k] >= 0:             # <<<<<<<<<<<<<<
32908  *                         mask[i, j, k] = 1
32909  *                         total += 1
32910  */
32911         }
32912       }
32913     }
32914   }
32915 
32916   /* "yt/geometry/_selection_routines/ray_selector.pxi":73
32917  *                         mask[i, j, k] = 1
32918  *                         total += 1
32919  *         free(ia)             # <<<<<<<<<<<<<<
32920  *         if total == 0: return None
32921  *         return mask.astype("bool")
32922  */
32923   free(__pyx_v_ia);
32924 
32925   /* "yt/geometry/_selection_routines/ray_selector.pxi":74
32926  *                         total += 1
32927  *         free(ia)
32928  *         if total == 0: return None             # <<<<<<<<<<<<<<
32929  *         return mask.astype("bool")
32930  *
32931  */
32932   __pyx_t_23 = ((__pyx_v_total == 0) != 0);
32933   if (__pyx_t_23) {
32934     __Pyx_XDECREF(__pyx_r);
32935     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
32936     goto __pyx_L0;
32937   }
32938 
32939   /* "yt/geometry/_selection_routines/ray_selector.pxi":75
32940  *         free(ia)
32941  *         if total == 0: return None
32942  *         return mask.astype("bool")             # <<<<<<<<<<<<<<
32943  *
32944  *     @cython.boundscheck(False)
32945  */
32946   __Pyx_XDECREF(__pyx_r);
32947   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_mask, __pyx_n_s_astype); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 75, __pyx_L1_error)
32948   __Pyx_GOTREF(__pyx_t_3);
32949   __pyx_t_1 = NULL;
32950   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
32951     __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
32952     if (likely(__pyx_t_1)) {
32953       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
32954       __Pyx_INCREF(__pyx_t_1);
32955       __Pyx_INCREF(function);
32956       __Pyx_DECREF_SET(__pyx_t_3, function);
32957     }
32958   }
32959   __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_s_bool);
32960   __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
32961   if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 75, __pyx_L1_error)
32962   __Pyx_GOTREF(__pyx_t_4);
32963   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
32964   __pyx_r = __pyx_t_4;
32965   __pyx_t_4 = 0;
32966   goto __pyx_L0;
32967 
32968   /* "yt/geometry/_selection_routines/ray_selector.pxi":41
32969  *     @cython.wraparound(False)
32970  *     @cython.cdivision(True)
32971  *     def fill_mask(self, gobj):             # <<<<<<<<<<<<<<
32972  *         cdef np.ndarray[np.float64_t, ndim=3] t, dt
32973  *         cdef np.ndarray[np.uint8_t, ndim=3, cast=True] child_mask
32974  */
32975 
32976   /* function exit code */
32977   __pyx_L1_error:;
32978   __Pyx_XDECREF(__pyx_t_1);
32979   __Pyx_XDECREF(__pyx_t_2);
32980   __Pyx_XDECREF(__pyx_t_3);
32981   __Pyx_XDECREF(__pyx_t_4);
32982   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
32983     __Pyx_PyThreadState_declare
32984     __Pyx_PyThreadState_assign
32985     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
32986     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
32987     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
32988     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t.rcbuffer->pybuffer);
32989   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
32990   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.fill_mask", __pyx_clineno, __pyx_lineno, __pyx_filename);
32991   __pyx_r = NULL;
32992   goto __pyx_L2;
32993   __pyx_L0:;
32994   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
32995   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
32996   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t.rcbuffer->pybuffer);
32997   __pyx_L2:;
32998   __Pyx_XDECREF((PyObject *)__pyx_v_t);
32999   __Pyx_XDECREF((PyObject *)__pyx_v_dt);
33000   __Pyx_XDECREF((PyObject *)__pyx_v_child_mask);
33001   __Pyx_XDECREF(__pyx_v_mask);
33002   __Pyx_XGIVEREF(__pyx_r);
33003   __Pyx_RefNannyFinishContext();
33004   return __pyx_r;
33005 }
33006 
33007 /* "yt/geometry/_selection_routines/ray_selector.pxi":80
33008  *     @cython.wraparound(False)
33009  *     @cython.cdivision(True)
33010  *     def get_dt(self, gobj):             # <<<<<<<<<<<<<<
33011  *         cdef np.ndarray[np.float64_t, ndim=3] t, dt
33012  *         cdef np.ndarray[np.float64_t, ndim=1] tr, dtr
33013  */
33014 
33015 /* Python wrapper */
33016 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_5get_dt(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj); /*proto*/
33017 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_5get_dt(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj) {
33018   PyObject *__pyx_r = 0;
33019   __Pyx_RefNannyDeclarations
33020   __Pyx_RefNannySetupContext("get_dt (wrapper)", 0);
33021   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_4get_dt(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self), ((PyObject *)__pyx_v_gobj));
33022 
33023   /* function exit code */
33024   __Pyx_RefNannyFinishContext();
33025   return __pyx_r;
33026 }
33027 
33028 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_4get_dt(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_gobj) {
33029   PyArrayObject *__pyx_v_t = 0;
33030   PyArrayObject *__pyx_v_dt = 0;
33031   PyArrayObject *__pyx_v_tr = 0;
33032   PyArrayObject *__pyx_v_dtr = 0;
33033   PyArrayObject *__pyx_v_child_mask = 0;
33034   int __pyx_v_i;
33035   int __pyx_v_j;
33036   int __pyx_v_k;
33037   int __pyx_v_ni;
33038   struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator *__pyx_v_ia;
33039   struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer __pyx_v_vc;
33040   __Pyx_LocalBuf_ND __pyx_pybuffernd_child_mask;
33041   __Pyx_Buffer __pyx_pybuffer_child_mask;
33042   __Pyx_LocalBuf_ND __pyx_pybuffernd_dt;
33043   __Pyx_Buffer __pyx_pybuffer_dt;
33044   __Pyx_LocalBuf_ND __pyx_pybuffernd_dtr;
33045   __Pyx_Buffer __pyx_pybuffer_dtr;
33046   __Pyx_LocalBuf_ND __pyx_pybuffernd_t;
33047   __Pyx_Buffer __pyx_pybuffer_t;
33048   __Pyx_LocalBuf_ND __pyx_pybuffernd_tr;
33049   __Pyx_Buffer __pyx_pybuffer_tr;
33050   PyObject *__pyx_r = NULL;
33051   __Pyx_RefNannyDeclarations
33052   PyObject *__pyx_t_1 = NULL;
33053   PyObject *__pyx_t_2 = NULL;
33054   PyObject *__pyx_t_3 = NULL;
33055   PyObject *__pyx_t_4 = NULL;
33056   PyArrayObject *__pyx_t_5 = NULL;
33057   int __pyx_t_6;
33058   PyObject *__pyx_t_7 = NULL;
33059   PyObject *__pyx_t_8 = NULL;
33060   PyObject *__pyx_t_9 = NULL;
33061   PyArrayObject *__pyx_t_10 = NULL;
33062   __pyx_t_5numpy_float64_t __pyx_t_11;
33063   PyArrayObject *__pyx_t_12 = NULL;
33064   npy_intp __pyx_t_13;
33065   npy_intp __pyx_t_14;
33066   npy_intp __pyx_t_15;
33067   npy_intp __pyx_t_16;
33068   int __pyx_t_17;
33069   npy_intp __pyx_t_18;
33070   npy_intp __pyx_t_19;
33071   int __pyx_t_20;
33072   Py_ssize_t __pyx_t_21;
33073   Py_ssize_t __pyx_t_22;
33074   Py_ssize_t __pyx_t_23;
33075   int __pyx_t_24;
33076   Py_ssize_t __pyx_t_25;
33077   Py_ssize_t __pyx_t_26;
33078   Py_ssize_t __pyx_t_27;
33079   Py_ssize_t __pyx_t_28;
33080   Py_ssize_t __pyx_t_29;
33081   Py_ssize_t __pyx_t_30;
33082   Py_ssize_t __pyx_t_31;
33083   Py_ssize_t __pyx_t_32;
33084   __Pyx_RefNannySetupContext("get_dt", 0);
33085   __pyx_pybuffer_t.pybuffer.buf = NULL;
33086   __pyx_pybuffer_t.refcount = 0;
33087   __pyx_pybuffernd_t.data = NULL;
33088   __pyx_pybuffernd_t.rcbuffer = &__pyx_pybuffer_t;
33089   __pyx_pybuffer_dt.pybuffer.buf = NULL;
33090   __pyx_pybuffer_dt.refcount = 0;
33091   __pyx_pybuffernd_dt.data = NULL;
33092   __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
33093   __pyx_pybuffer_tr.pybuffer.buf = NULL;
33094   __pyx_pybuffer_tr.refcount = 0;
33095   __pyx_pybuffernd_tr.data = NULL;
33096   __pyx_pybuffernd_tr.rcbuffer = &__pyx_pybuffer_tr;
33097   __pyx_pybuffer_dtr.pybuffer.buf = NULL;
33098   __pyx_pybuffer_dtr.refcount = 0;
33099   __pyx_pybuffernd_dtr.data = NULL;
33100   __pyx_pybuffernd_dtr.rcbuffer = &__pyx_pybuffer_dtr;
33101   __pyx_pybuffer_child_mask.pybuffer.buf = NULL;
33102   __pyx_pybuffer_child_mask.refcount = 0;
33103   __pyx_pybuffernd_child_mask.data = NULL;
33104   __pyx_pybuffernd_child_mask.rcbuffer = &__pyx_pybuffer_child_mask;
33105 
33106   /* "yt/geometry/_selection_routines/ray_selector.pxi":86
33107  *         cdef int i, j, k, ni
33108  *         cdef IntegrationAccumulator *ia
33109  *         ia = <IntegrationAccumulator *> malloc(sizeof(IntegrationAccumulator))             # <<<<<<<<<<<<<<
33110  *         cdef VolumeContainer vc
33111  *         t = np.zeros(gobj.ActiveDimensions, dtype="float64")
33112  */
33113   __pyx_v_ia = ((struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator *)malloc((sizeof(struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator))));
33114 
33115   /* "yt/geometry/_selection_routines/ray_selector.pxi":88
33116  *         ia = <IntegrationAccumulator *> malloc(sizeof(IntegrationAccumulator))
33117  *         cdef VolumeContainer vc
33118  *         t = np.zeros(gobj.ActiveDimensions, dtype="float64")             # <<<<<<<<<<<<<<
33119  *         dt = np.zeros(gobj.ActiveDimensions, dtype="float64") - 1
33120  *         child_mask = gobj.child_mask
33121  */
33122   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 88, __pyx_L1_error)
33123   __Pyx_GOTREF(__pyx_t_1);
33124   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 88, __pyx_L1_error)
33125   __Pyx_GOTREF(__pyx_t_2);
33126   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
33127   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 88, __pyx_L1_error)
33128   __Pyx_GOTREF(__pyx_t_1);
33129   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 88, __pyx_L1_error)
33130   __Pyx_GOTREF(__pyx_t_3);
33131   __Pyx_GIVEREF(__pyx_t_1);
33132   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
33133   __pyx_t_1 = 0;
33134   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 88, __pyx_L1_error)
33135   __Pyx_GOTREF(__pyx_t_1);
33136   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(12, 88, __pyx_L1_error)
33137   __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 88, __pyx_L1_error)
33138   __Pyx_GOTREF(__pyx_t_4);
33139   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
33140   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
33141   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
33142   if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 88, __pyx_L1_error)
33143   __pyx_t_5 = ((PyArrayObject *)__pyx_t_4);
33144   {
33145     __Pyx_BufFmt_StackElem __pyx_stack[1];
33146     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t.rcbuffer->pybuffer);
33147     __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_t.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack);
33148     if (unlikely(__pyx_t_6 < 0)) {
33149       PyErr_Fetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
33150       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_t.rcbuffer->pybuffer, (PyObject*)__pyx_v_t, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {
33151         Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9);
33152         __Pyx_RaiseBufferFallbackError();
33153       } else {
33154         PyErr_Restore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
33155       }
33156       __pyx_t_7 = __pyx_t_8 = __pyx_t_9 = 0;
33157     }
33158     __pyx_pybuffernd_t.diminfo[0].strides = __pyx_pybuffernd_t.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_t.diminfo[0].shape = __pyx_pybuffernd_t.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_t.diminfo[1].strides = __pyx_pybuffernd_t.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_t.diminfo[1].shape = __pyx_pybuffernd_t.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_t.diminfo[2].strides = __pyx_pybuffernd_t.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_t.diminfo[2].shape = __pyx_pybuffernd_t.rcbuffer->pybuffer.shape[2];
33159     if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(12, 88, __pyx_L1_error)
33160   }
33161   __pyx_t_5 = 0;
33162   __pyx_v_t = ((PyArrayObject *)__pyx_t_4);
33163   __pyx_t_4 = 0;
33164 
33165   /* "yt/geometry/_selection_routines/ray_selector.pxi":89
33166  *         cdef VolumeContainer vc
33167  *         t = np.zeros(gobj.ActiveDimensions, dtype="float64")
33168  *         dt = np.zeros(gobj.ActiveDimensions, dtype="float64") - 1             # <<<<<<<<<<<<<<
33169  *         child_mask = gobj.child_mask
33170  *         ia.t = <np.float64_t *> t.data
33171  */
33172   __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 89, __pyx_L1_error)
33173   __Pyx_GOTREF(__pyx_t_4);
33174   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 89, __pyx_L1_error)
33175   __Pyx_GOTREF(__pyx_t_1);
33176   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33177   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 89, __pyx_L1_error)
33178   __Pyx_GOTREF(__pyx_t_4);
33179   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 89, __pyx_L1_error)
33180   __Pyx_GOTREF(__pyx_t_3);
33181   __Pyx_GIVEREF(__pyx_t_4);
33182   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
33183   __pyx_t_4 = 0;
33184   __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 89, __pyx_L1_error)
33185   __Pyx_GOTREF(__pyx_t_4);
33186   if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(12, 89, __pyx_L1_error)
33187   __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 89, __pyx_L1_error)
33188   __Pyx_GOTREF(__pyx_t_2);
33189   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
33190   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
33191   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33192   __pyx_t_4 = __Pyx_PyInt_SubtractObjC(__pyx_t_2, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 89, __pyx_L1_error)
33193   __Pyx_GOTREF(__pyx_t_4);
33194   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
33195   if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 89, __pyx_L1_error)
33196   __pyx_t_5 = ((PyArrayObject *)__pyx_t_4);
33197   {
33198     __Pyx_BufFmt_StackElem __pyx_stack[1];
33199     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
33200     __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack);
33201     if (unlikely(__pyx_t_6 < 0)) {
33202       PyErr_Fetch(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
33203       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {
33204         Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_7);
33205         __Pyx_RaiseBufferFallbackError();
33206       } else {
33207         PyErr_Restore(__pyx_t_9, __pyx_t_8, __pyx_t_7);
33208       }
33209       __pyx_t_9 = __pyx_t_8 = __pyx_t_7 = 0;
33210     }
33211     __pyx_pybuffernd_dt.diminfo[0].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dt.diminfo[0].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_dt.diminfo[1].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_dt.diminfo[1].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_dt.diminfo[2].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_dt.diminfo[2].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[2];
33212     if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(12, 89, __pyx_L1_error)
33213   }
33214   __pyx_t_5 = 0;
33215   __pyx_v_dt = ((PyArrayObject *)__pyx_t_4);
33216   __pyx_t_4 = 0;
33217 
33218   /* "yt/geometry/_selection_routines/ray_selector.pxi":90
33219  *         t = np.zeros(gobj.ActiveDimensions, dtype="float64")
33220  *         dt = np.zeros(gobj.ActiveDimensions, dtype="float64") - 1
33221  *         child_mask = gobj.child_mask             # <<<<<<<<<<<<<<
33222  *         ia.t = <np.float64_t *> t.data
33223  *         ia.dt = <np.float64_t *> dt.data
33224  */
33225   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_child_mask); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 90, __pyx_L1_error)
33226   __Pyx_GOTREF(__pyx_t_4);
33227   if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 90, __pyx_L1_error)
33228   __pyx_t_10 = ((PyArrayObject *)__pyx_t_4);
33229   {
33230     __Pyx_BufFmt_StackElem __pyx_stack[1];
33231     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
33232     __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_10, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack);
33233     if (unlikely(__pyx_t_6 < 0)) {
33234       PyErr_Fetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
33235       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_child_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack) == -1)) {
33236         Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9);
33237         __Pyx_RaiseBufferFallbackError();
33238       } else {
33239         PyErr_Restore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
33240       }
33241       __pyx_t_7 = __pyx_t_8 = __pyx_t_9 = 0;
33242     }
33243     __pyx_pybuffernd_child_mask.diminfo[0].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_child_mask.diminfo[0].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_child_mask.diminfo[1].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_child_mask.diminfo[1].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_child_mask.diminfo[2].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_child_mask.diminfo[2].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[2];
33244     if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(12, 90, __pyx_L1_error)
33245   }
33246   __pyx_t_10 = 0;
33247   __pyx_v_child_mask = ((PyArrayObject *)__pyx_t_4);
33248   __pyx_t_4 = 0;
33249 
33250   /* "yt/geometry/_selection_routines/ray_selector.pxi":91
33251  *         dt = np.zeros(gobj.ActiveDimensions, dtype="float64") - 1
33252  *         child_mask = gobj.child_mask
33253  *         ia.t = <np.float64_t *> t.data             # <<<<<<<<<<<<<<
33254  *         ia.dt = <np.float64_t *> dt.data
33255  *         ia.child_mask = <np.uint8_t *> child_mask.data
33256  */
33257   __pyx_v_ia->t = ((__pyx_t_5numpy_float64_t *)__pyx_v_t->data);
33258 
33259   /* "yt/geometry/_selection_routines/ray_selector.pxi":92
33260  *         child_mask = gobj.child_mask
33261  *         ia.t = <np.float64_t *> t.data
33262  *         ia.dt = <np.float64_t *> dt.data             # <<<<<<<<<<<<<<
33263  *         ia.child_mask = <np.uint8_t *> child_mask.data
33264  *         ia.hits = 0
33265  */
33266   __pyx_v_ia->dt = ((__pyx_t_5numpy_float64_t *)__pyx_v_dt->data);
33267 
33268   /* "yt/geometry/_selection_routines/ray_selector.pxi":93
33269  *         ia.t = <np.float64_t *> t.data
33270  *         ia.dt = <np.float64_t *> dt.data
33271  *         ia.child_mask = <np.uint8_t *> child_mask.data             # <<<<<<<<<<<<<<
33272  *         ia.hits = 0
33273  *         _ensure_code(gobj.LeftEdge)
33274  */
33275   __pyx_v_ia->child_mask = ((__pyx_t_5numpy_uint8_t *)__pyx_v_child_mask->data);
33276 
33277   /* "yt/geometry/_selection_routines/ray_selector.pxi":94
33278  *         ia.dt = <np.float64_t *> dt.data
33279  *         ia.child_mask = <np.uint8_t *> child_mask.data
33280  *         ia.hits = 0             # <<<<<<<<<<<<<<
33281  *         _ensure_code(gobj.LeftEdge)
33282  *         _ensure_code(gobj.RightEdge)
33283  */
33284   __pyx_v_ia->hits = 0;
33285 
33286   /* "yt/geometry/_selection_routines/ray_selector.pxi":95
33287  *         ia.child_mask = <np.uint8_t *> child_mask.data
33288  *         ia.hits = 0
33289  *         _ensure_code(gobj.LeftEdge)             # <<<<<<<<<<<<<<
33290  *         _ensure_code(gobj.RightEdge)
33291  *         _ensure_code(gobj.dds)
33292  */
33293   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_LeftEdge); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 95, __pyx_L1_error)
33294   __Pyx_GOTREF(__pyx_t_4);
33295   __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 95, __pyx_L1_error)
33296   __Pyx_GOTREF(__pyx_t_2);
33297   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33298   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
33299 
33300   /* "yt/geometry/_selection_routines/ray_selector.pxi":96
33301  *         ia.hits = 0
33302  *         _ensure_code(gobj.LeftEdge)
33303  *         _ensure_code(gobj.RightEdge)             # <<<<<<<<<<<<<<
33304  *         _ensure_code(gobj.dds)
33305  *         for i in range(3):
33306  */
33307   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_RightEdge); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 96, __pyx_L1_error)
33308   __Pyx_GOTREF(__pyx_t_2);
33309   __pyx_t_4 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 96, __pyx_L1_error)
33310   __Pyx_GOTREF(__pyx_t_4);
33311   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
33312   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33313 
33314   /* "yt/geometry/_selection_routines/ray_selector.pxi":97
33315  *         _ensure_code(gobj.LeftEdge)
33316  *         _ensure_code(gobj.RightEdge)
33317  *         _ensure_code(gobj.dds)             # <<<<<<<<<<<<<<
33318  *         for i in range(3):
33319  *             vc.left_edge[i] = gobj.LeftEdge[i]
33320  */
33321   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 97, __pyx_L1_error)
33322   __Pyx_GOTREF(__pyx_t_4);
33323   __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 97, __pyx_L1_error)
33324   __Pyx_GOTREF(__pyx_t_2);
33325   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33326   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
33327 
33328   /* "yt/geometry/_selection_routines/ray_selector.pxi":98
33329  *         _ensure_code(gobj.RightEdge)
33330  *         _ensure_code(gobj.dds)
33331  *         for i in range(3):             # <<<<<<<<<<<<<<
33332  *             vc.left_edge[i] = gobj.LeftEdge[i]
33333  *             vc.right_edge[i] = gobj.RightEdge[i]
33334  */
33335   for (__pyx_t_6 = 0; __pyx_t_6 < 3; __pyx_t_6+=1) {
33336     __pyx_v_i = __pyx_t_6;
33337 
33338     /* "yt/geometry/_selection_routines/ray_selector.pxi":99
33339  *         _ensure_code(gobj.dds)
33340  *         for i in range(3):
33341  *             vc.left_edge[i] = gobj.LeftEdge[i]             # <<<<<<<<<<<<<<
33342  *             vc.right_edge[i] = gobj.RightEdge[i]
33343  *             vc.dds[i] = gobj.dds[i]
33344  */
33345     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_LeftEdge); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 99, __pyx_L1_error)
33346     __Pyx_GOTREF(__pyx_t_2);
33347     __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 99, __pyx_L1_error)
33348     __Pyx_GOTREF(__pyx_t_4);
33349     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
33350     __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_11 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(12, 99, __pyx_L1_error)
33351     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33352     (__pyx_v_vc.left_edge[__pyx_v_i]) = __pyx_t_11;
33353 
33354     /* "yt/geometry/_selection_routines/ray_selector.pxi":100
33355  *         for i in range(3):
33356  *             vc.left_edge[i] = gobj.LeftEdge[i]
33357  *             vc.right_edge[i] = gobj.RightEdge[i]             # <<<<<<<<<<<<<<
33358  *             vc.dds[i] = gobj.dds[i]
33359  *             vc.idds[i] = 1.0/gobj.dds[i]
33360  */
33361     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_RightEdge); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 100, __pyx_L1_error)
33362     __Pyx_GOTREF(__pyx_t_4);
33363     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_4, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 100, __pyx_L1_error)
33364     __Pyx_GOTREF(__pyx_t_2);
33365     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33366     __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_11 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(12, 100, __pyx_L1_error)
33367     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
33368     (__pyx_v_vc.right_edge[__pyx_v_i]) = __pyx_t_11;
33369 
33370     /* "yt/geometry/_selection_routines/ray_selector.pxi":101
33371  *             vc.left_edge[i] = gobj.LeftEdge[i]
33372  *             vc.right_edge[i] = gobj.RightEdge[i]
33373  *             vc.dds[i] = gobj.dds[i]             # <<<<<<<<<<<<<<
33374  *             vc.idds[i] = 1.0/gobj.dds[i]
33375  *             vc.dims[i] = dt.shape[i]
33376  */
33377     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 101, __pyx_L1_error)
33378     __Pyx_GOTREF(__pyx_t_2);
33379     __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 101, __pyx_L1_error)
33380     __Pyx_GOTREF(__pyx_t_4);
33381     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
33382     __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_11 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(12, 101, __pyx_L1_error)
33383     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33384     (__pyx_v_vc.dds[__pyx_v_i]) = __pyx_t_11;
33385 
33386     /* "yt/geometry/_selection_routines/ray_selector.pxi":102
33387  *             vc.right_edge[i] = gobj.RightEdge[i]
33388  *             vc.dds[i] = gobj.dds[i]
33389  *             vc.idds[i] = 1.0/gobj.dds[i]             # <<<<<<<<<<<<<<
33390  *             vc.dims[i] = dt.shape[i]
33391  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
33392  */
33393     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_dds); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 102, __pyx_L1_error)
33394     __Pyx_GOTREF(__pyx_t_4);
33395     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_4, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 102, __pyx_L1_error)
33396     __Pyx_GOTREF(__pyx_t_2);
33397     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33398     __pyx_t_4 = __Pyx_PyFloat_DivideCObj(__pyx_float_1_0, __pyx_t_2, 1.0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 102, __pyx_L1_error)
33399     __Pyx_GOTREF(__pyx_t_4);
33400     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
33401     __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_11 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(12, 102, __pyx_L1_error)
33402     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33403     (__pyx_v_vc.idds[__pyx_v_i]) = __pyx_t_11;
33404 
33405     /* "yt/geometry/_selection_routines/ray_selector.pxi":103
33406  *             vc.dds[i] = gobj.dds[i]
33407  *             vc.idds[i] = 1.0/gobj.dds[i]
33408  *             vc.dims[i] = dt.shape[i]             # <<<<<<<<<<<<<<
33409  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
33410  *         tr = np.zeros(ia.hits, dtype="float64")
33411  */
33412     (__pyx_v_vc.dims[__pyx_v_i]) = (__pyx_v_dt->dimensions[__pyx_v_i]);
33413   }
33414 
33415   /* "yt/geometry/_selection_routines/ray_selector.pxi":104
33416  *             vc.idds[i] = 1.0/gobj.dds[i]
33417  *             vc.dims[i] = dt.shape[i]
33418  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)             # <<<<<<<<<<<<<<
33419  *         tr = np.zeros(ia.hits, dtype="float64")
33420  *         dtr = np.zeros(ia.hits, dtype="float64")
33421  */
33422   (void)(__pyx_f_2yt_9utilities_3lib_14grid_traversal_walk_volume((&__pyx_v_vc), __pyx_v_self->p1, __pyx_v_self->vec, __pyx_f_2yt_8geometry_18selection_routines_dt_sampler, ((void *)__pyx_v_ia), NULL));
33423 
33424   /* "yt/geometry/_selection_routines/ray_selector.pxi":105
33425  *             vc.dims[i] = dt.shape[i]
33426  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
33427  *         tr = np.zeros(ia.hits, dtype="float64")             # <<<<<<<<<<<<<<
33428  *         dtr = np.zeros(ia.hits, dtype="float64")
33429  *         ni = 0
33430  */
33431   __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 105, __pyx_L1_error)
33432   __Pyx_GOTREF(__pyx_t_4);
33433   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 105, __pyx_L1_error)
33434   __Pyx_GOTREF(__pyx_t_2);
33435   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33436   __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_ia->hits); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 105, __pyx_L1_error)
33437   __Pyx_GOTREF(__pyx_t_4);
33438   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 105, __pyx_L1_error)
33439   __Pyx_GOTREF(__pyx_t_3);
33440   __Pyx_GIVEREF(__pyx_t_4);
33441   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
33442   __pyx_t_4 = 0;
33443   __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 105, __pyx_L1_error)
33444   __Pyx_GOTREF(__pyx_t_4);
33445   if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(12, 105, __pyx_L1_error)
33446   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 105, __pyx_L1_error)
33447   __Pyx_GOTREF(__pyx_t_1);
33448   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
33449   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
33450   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33451   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 105, __pyx_L1_error)
33452   __pyx_t_12 = ((PyArrayObject *)__pyx_t_1);
33453   {
33454     __Pyx_BufFmt_StackElem __pyx_stack[1];
33455     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_tr.rcbuffer->pybuffer);
33456     __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_tr.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
33457     if (unlikely(__pyx_t_6 < 0)) {
33458       PyErr_Fetch(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
33459       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_tr.rcbuffer->pybuffer, (PyObject*)__pyx_v_tr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
33460         Py_XDECREF(__pyx_t_9); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_7);
33461         __Pyx_RaiseBufferFallbackError();
33462       } else {
33463         PyErr_Restore(__pyx_t_9, __pyx_t_8, __pyx_t_7);
33464       }
33465       __pyx_t_9 = __pyx_t_8 = __pyx_t_7 = 0;
33466     }
33467     __pyx_pybuffernd_tr.diminfo[0].strides = __pyx_pybuffernd_tr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_tr.diminfo[0].shape = __pyx_pybuffernd_tr.rcbuffer->pybuffer.shape[0];
33468     if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(12, 105, __pyx_L1_error)
33469   }
33470   __pyx_t_12 = 0;
33471   __pyx_v_tr = ((PyArrayObject *)__pyx_t_1);
33472   __pyx_t_1 = 0;
33473 
33474   /* "yt/geometry/_selection_routines/ray_selector.pxi":106
33475  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
33476  *         tr = np.zeros(ia.hits, dtype="float64")
33477  *         dtr = np.zeros(ia.hits, dtype="float64")             # <<<<<<<<<<<<<<
33478  *         ni = 0
33479  *         for i in range(dt.shape[0]):
33480  */
33481   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 106, __pyx_L1_error)
33482   __Pyx_GOTREF(__pyx_t_1);
33483   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 106, __pyx_L1_error)
33484   __Pyx_GOTREF(__pyx_t_4);
33485   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
33486   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ia->hits); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 106, __pyx_L1_error)
33487   __Pyx_GOTREF(__pyx_t_1);
33488   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 106, __pyx_L1_error)
33489   __Pyx_GOTREF(__pyx_t_3);
33490   __Pyx_GIVEREF(__pyx_t_1);
33491   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
33492   __pyx_t_1 = 0;
33493   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 106, __pyx_L1_error)
33494   __Pyx_GOTREF(__pyx_t_1);
33495   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(12, 106, __pyx_L1_error)
33496   __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 106, __pyx_L1_error)
33497   __Pyx_GOTREF(__pyx_t_2);
33498   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
33499   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
33500   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
33501   if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 106, __pyx_L1_error)
33502   __pyx_t_12 = ((PyArrayObject *)__pyx_t_2);
33503   {
33504     __Pyx_BufFmt_StackElem __pyx_stack[1];
33505     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dtr.rcbuffer->pybuffer);
33506     __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dtr.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
33507     if (unlikely(__pyx_t_6 < 0)) {
33508       PyErr_Fetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
33509       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dtr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dtr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
33510         Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9);
33511         __Pyx_RaiseBufferFallbackError();
33512       } else {
33513         PyErr_Restore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
33514       }
33515       __pyx_t_7 = __pyx_t_8 = __pyx_t_9 = 0;
33516     }
33517     __pyx_pybuffernd_dtr.diminfo[0].strides = __pyx_pybuffernd_dtr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dtr.diminfo[0].shape = __pyx_pybuffernd_dtr.rcbuffer->pybuffer.shape[0];
33518     if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(12, 106, __pyx_L1_error)
33519   }
33520   __pyx_t_12 = 0;
33521   __pyx_v_dtr = ((PyArrayObject *)__pyx_t_2);
33522   __pyx_t_2 = 0;
33523 
33524   /* "yt/geometry/_selection_routines/ray_selector.pxi":107
33525  *         tr = np.zeros(ia.hits, dtype="float64")
33526  *         dtr = np.zeros(ia.hits, dtype="float64")
33527  *         ni = 0             # <<<<<<<<<<<<<<
33528  *         for i in range(dt.shape[0]):
33529  *             for j in range(dt.shape[1]):
33530  */
33531   __pyx_v_ni = 0;
33532 
33533   /* "yt/geometry/_selection_routines/ray_selector.pxi":108
33534  *         dtr = np.zeros(ia.hits, dtype="float64")
33535  *         ni = 0
33536  *         for i in range(dt.shape[0]):             # <<<<<<<<<<<<<<
33537  *             for j in range(dt.shape[1]):
33538  *                 for k in range(dt.shape[2]):
33539  */
33540   __pyx_t_13 = (__pyx_v_dt->dimensions[0]);
33541   __pyx_t_14 = __pyx_t_13;
33542   for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_14; __pyx_t_6+=1) {
33543     __pyx_v_i = __pyx_t_6;
33544 
33545     /* "yt/geometry/_selection_routines/ray_selector.pxi":109
33546  *         ni = 0
33547  *         for i in range(dt.shape[0]):
33548  *             for j in range(dt.shape[1]):             # <<<<<<<<<<<<<<
33549  *                 for k in range(dt.shape[2]):
33550  *                     if dt[i, j, k] >= 0:
33551  */
33552     __pyx_t_15 = (__pyx_v_dt->dimensions[1]);
33553     __pyx_t_16 = __pyx_t_15;
33554     for (__pyx_t_17 = 0; __pyx_t_17 < __pyx_t_16; __pyx_t_17+=1) {
33555       __pyx_v_j = __pyx_t_17;
33556 
33557       /* "yt/geometry/_selection_routines/ray_selector.pxi":110
33558  *         for i in range(dt.shape[0]):
33559  *             for j in range(dt.shape[1]):
33560  *                 for k in range(dt.shape[2]):             # <<<<<<<<<<<<<<
33561  *                     if dt[i, j, k] >= 0:
33562  *                         tr[ni] = t[i, j, k]
33563  */
33564       __pyx_t_18 = (__pyx_v_dt->dimensions[2]);
33565       __pyx_t_19 = __pyx_t_18;
33566       for (__pyx_t_20 = 0; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
33567         __pyx_v_k = __pyx_t_20;
33568 
33569         /* "yt/geometry/_selection_routines/ray_selector.pxi":111
33570  *             for j in range(dt.shape[1]):
33571  *                 for k in range(dt.shape[2]):
33572  *                     if dt[i, j, k] >= 0:             # <<<<<<<<<<<<<<
33573  *                         tr[ni] = t[i, j, k]
33574  *                         dtr[ni] = dt[i, j, k]
33575  */
33576         __pyx_t_21 = __pyx_v_i;
33577         __pyx_t_22 = __pyx_v_j;
33578         __pyx_t_23 = __pyx_v_k;
33579         __pyx_t_24 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_dt.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_dt.diminfo[1].strides, __pyx_t_23, __pyx_pybuffernd_dt.diminfo[2].strides)) >= 0.0) != 0);
33580         if (__pyx_t_24) {
33581 
33582           /* "yt/geometry/_selection_routines/ray_selector.pxi":112
33583  *                 for k in range(dt.shape[2]):
33584  *                     if dt[i, j, k] >= 0:
33585  *                         tr[ni] = t[i, j, k]             # <<<<<<<<<<<<<<
33586  *                         dtr[ni] = dt[i, j, k]
33587  *                         ni += 1
33588  */
33589           __pyx_t_25 = __pyx_v_i;
33590           __pyx_t_26 = __pyx_v_j;
33591           __pyx_t_27 = __pyx_v_k;
33592           __pyx_t_28 = __pyx_v_ni;
33593           *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_tr.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_tr.diminfo[0].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_t.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_t.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_t.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_t.diminfo[2].strides));
33594 
33595           /* "yt/geometry/_selection_routines/ray_selector.pxi":113
33596  *                     if dt[i, j, k] >= 0:
33597  *                         tr[ni] = t[i, j, k]
33598  *                         dtr[ni] = dt[i, j, k]             # <<<<<<<<<<<<<<
33599  *                         ni += 1
33600  *         if not (ni == ia.hits):
33601  */
33602           __pyx_t_29 = __pyx_v_i;
33603           __pyx_t_30 = __pyx_v_j;
33604           __pyx_t_31 = __pyx_v_k;
33605           __pyx_t_32 = __pyx_v_ni;
33606           *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dtr.rcbuffer->pybuffer.buf, __pyx_t_32, __pyx_pybuffernd_dtr.diminfo[0].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_29, __pyx_pybuffernd_dt.diminfo[0].strides, __pyx_t_30, __pyx_pybuffernd_dt.diminfo[1].strides, __pyx_t_31, __pyx_pybuffernd_dt.diminfo[2].strides));
33607 
33608           /* "yt/geometry/_selection_routines/ray_selector.pxi":114
33609  *                         tr[ni] = t[i, j, k]
33610  *                         dtr[ni] = dt[i, j, k]
33611  *                         ni += 1             # <<<<<<<<<<<<<<
33612  *         if not (ni == ia.hits):
33613  *             print(ni, ia.hits)
33614  */
33615           __pyx_v_ni = (__pyx_v_ni + 1);
33616 
33617           /* "yt/geometry/_selection_routines/ray_selector.pxi":111
33618  *             for j in range(dt.shape[1]):
33619  *                 for k in range(dt.shape[2]):
33620  *                     if dt[i, j, k] >= 0:             # <<<<<<<<<<<<<<
33621  *                         tr[ni] = t[i, j, k]
33622  *                         dtr[ni] = dt[i, j, k]
33623  */
33624         }
33625       }
33626     }
33627   }
33628 
33629   /* "yt/geometry/_selection_routines/ray_selector.pxi":115
33630  *                         dtr[ni] = dt[i, j, k]
33631  *                         ni += 1
33632  *         if not (ni == ia.hits):             # <<<<<<<<<<<<<<
33633  *             print(ni, ia.hits)
33634  *         free(ia)
33635  */
33636   __pyx_t_24 = ((!((__pyx_v_ni == __pyx_v_ia->hits) != 0)) != 0);
33637   if (__pyx_t_24) {
33638 
33639     /* "yt/geometry/_selection_routines/ray_selector.pxi":116
33640  *                         ni += 1
33641  *         if not (ni == ia.hits):
33642  *             print(ni, ia.hits)             # <<<<<<<<<<<<<<
33643  *         free(ia)
33644  *         return dtr, tr
33645  */
33646     __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_ni); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 116, __pyx_L1_error)
33647     __Pyx_GOTREF(__pyx_t_2);
33648     __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ia->hits); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 116, __pyx_L1_error)
33649     __Pyx_GOTREF(__pyx_t_1);
33650     __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 116, __pyx_L1_error)
33651     __Pyx_GOTREF(__pyx_t_3);
33652     __Pyx_GIVEREF(__pyx_t_2);
33653     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
33654     __Pyx_GIVEREF(__pyx_t_1);
33655     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
33656     __pyx_t_2 = 0;
33657     __pyx_t_1 = 0;
33658     if (__Pyx_PrintOne(0, __pyx_t_3) < 0) __PYX_ERR(12, 116, __pyx_L1_error)
33659     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
33660 
33661     /* "yt/geometry/_selection_routines/ray_selector.pxi":115
33662  *                         dtr[ni] = dt[i, j, k]
33663  *                         ni += 1
33664  *         if not (ni == ia.hits):             # <<<<<<<<<<<<<<
33665  *             print(ni, ia.hits)
33666  *         free(ia)
33667  */
33668   }
33669 
33670   /* "yt/geometry/_selection_routines/ray_selector.pxi":117
33671  *         if not (ni == ia.hits):
33672  *             print(ni, ia.hits)
33673  *         free(ia)             # <<<<<<<<<<<<<<
33674  *         return dtr, tr
33675  *
33676  */
33677   free(__pyx_v_ia);
33678 
33679   /* "yt/geometry/_selection_routines/ray_selector.pxi":118
33680  *             print(ni, ia.hits)
33681  *         free(ia)
33682  *         return dtr, tr             # <<<<<<<<<<<<<<
33683  *
33684  *     @cython.boundscheck(False)
33685  */
33686   __Pyx_XDECREF(__pyx_r);
33687   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 118, __pyx_L1_error)
33688   __Pyx_GOTREF(__pyx_t_3);
33689   __Pyx_INCREF(((PyObject *)__pyx_v_dtr));
33690   __Pyx_GIVEREF(((PyObject *)__pyx_v_dtr));
33691   PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_dtr));
33692   __Pyx_INCREF(((PyObject *)__pyx_v_tr));
33693   __Pyx_GIVEREF(((PyObject *)__pyx_v_tr));
33694   PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_tr));
33695   __pyx_r = __pyx_t_3;
33696   __pyx_t_3 = 0;
33697   goto __pyx_L0;
33698 
33699   /* "yt/geometry/_selection_routines/ray_selector.pxi":80
33700  *     @cython.wraparound(False)
33701  *     @cython.cdivision(True)
33702  *     def get_dt(self, gobj):             # <<<<<<<<<<<<<<
33703  *         cdef np.ndarray[np.float64_t, ndim=3] t, dt
33704  *         cdef np.ndarray[np.float64_t, ndim=1] tr, dtr
33705  */
33706 
33707   /* function exit code */
33708   __pyx_L1_error:;
33709   __Pyx_XDECREF(__pyx_t_1);
33710   __Pyx_XDECREF(__pyx_t_2);
33711   __Pyx_XDECREF(__pyx_t_3);
33712   __Pyx_XDECREF(__pyx_t_4);
33713   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
33714     __Pyx_PyThreadState_declare
33715     __Pyx_PyThreadState_assign
33716     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
33717     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
33718     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
33719     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dtr.rcbuffer->pybuffer);
33720     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t.rcbuffer->pybuffer);
33721     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_tr.rcbuffer->pybuffer);
33722   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
33723   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.get_dt", __pyx_clineno, __pyx_lineno, __pyx_filename);
33724   __pyx_r = NULL;
33725   goto __pyx_L2;
33726   __pyx_L0:;
33727   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
33728   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
33729   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dtr.rcbuffer->pybuffer);
33730   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t.rcbuffer->pybuffer);
33731   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_tr.rcbuffer->pybuffer);
33732   __pyx_L2:;
33733   __Pyx_XDECREF((PyObject *)__pyx_v_t);
33734   __Pyx_XDECREF((PyObject *)__pyx_v_dt);
33735   __Pyx_XDECREF((PyObject *)__pyx_v_tr);
33736   __Pyx_XDECREF((PyObject *)__pyx_v_dtr);
33737   __Pyx_XDECREF((PyObject *)__pyx_v_child_mask);
33738   __Pyx_XGIVEREF(__pyx_r);
33739   __Pyx_RefNannyFinishContext();
33740   return __pyx_r;
33741 }
33742 
33743 /* "yt/geometry/_selection_routines/ray_selector.pxi":123
33744  *     @cython.wraparound(False)
33745  *     @cython.cdivision(True)
33746  *     def get_dt_mesh(self, mesh, nz, int offset):             # <<<<<<<<<<<<<<
33747  *         cdef np.ndarray[np.float64_t, ndim=3] t, dt
33748  *         cdef np.ndarray[np.float64_t, ndim=1] tr, dtr
33749  */
33750 
33751 /* Python wrapper */
33752 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_7get_dt_mesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
33753 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_7get_dt_mesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
33754   PyObject *__pyx_v_mesh = 0;
33755   PyObject *__pyx_v_nz = 0;
33756   int __pyx_v_offset;
33757   PyObject *__pyx_r = 0;
33758   __Pyx_RefNannyDeclarations
33759   __Pyx_RefNannySetupContext("get_dt_mesh (wrapper)", 0);
33760   {
33761     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mesh,&__pyx_n_s_nz,&__pyx_n_s_offset,0};
33762     PyObject* values[3] = {0,0,0};
33763     if (unlikely(__pyx_kwds)) {
33764       Py_ssize_t kw_args;
33765       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
33766       switch (pos_args) {
33767         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
33768         CYTHON_FALLTHROUGH;
33769         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
33770         CYTHON_FALLTHROUGH;
33771         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
33772         CYTHON_FALLTHROUGH;
33773         case  0: break;
33774         default: goto __pyx_L5_argtuple_error;
33775       }
33776       kw_args = PyDict_Size(__pyx_kwds);
33777       switch (pos_args) {
33778         case  0:
33779         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mesh)) != 0)) kw_args--;
33780         else goto __pyx_L5_argtuple_error;
33781         CYTHON_FALLTHROUGH;
33782         case  1:
33783         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_nz)) != 0)) kw_args--;
33784         else {
33785           __Pyx_RaiseArgtupleInvalid("get_dt_mesh", 1, 3, 3, 1); __PYX_ERR(12, 123, __pyx_L3_error)
33786         }
33787         CYTHON_FALLTHROUGH;
33788         case  2:
33789         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
33790         else {
33791           __Pyx_RaiseArgtupleInvalid("get_dt_mesh", 1, 3, 3, 2); __PYX_ERR(12, 123, __pyx_L3_error)
33792         }
33793       }
33794       if (unlikely(kw_args > 0)) {
33795         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "get_dt_mesh") < 0)) __PYX_ERR(12, 123, __pyx_L3_error)
33796       }
33797     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
33798       goto __pyx_L5_argtuple_error;
33799     } else {
33800       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
33801       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
33802       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
33803     }
33804     __pyx_v_mesh = values[0];
33805     __pyx_v_nz = values[1];
33806     __pyx_v_offset = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_offset == (int)-1) && PyErr_Occurred())) __PYX_ERR(12, 123, __pyx_L3_error)
33807   }
33808   goto __pyx_L4_argument_unpacking_done;
33809   __pyx_L5_argtuple_error:;
33810   __Pyx_RaiseArgtupleInvalid("get_dt_mesh", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(12, 123, __pyx_L3_error)
33811   __pyx_L3_error:;
33812   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.get_dt_mesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
33813   __Pyx_RefNannyFinishContext();
33814   return NULL;
33815   __pyx_L4_argument_unpacking_done:;
33816   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_6get_dt_mesh(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self), __pyx_v_mesh, __pyx_v_nz, __pyx_v_offset);
33817 
33818   /* function exit code */
33819   __Pyx_RefNannyFinishContext();
33820   return __pyx_r;
33821 }
33822 
33823 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_6get_dt_mesh(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_mesh, PyObject *__pyx_v_nz, int __pyx_v_offset) {
33824   PyArrayObject *__pyx_v_t = 0;
33825   PyArrayObject *__pyx_v_dt = 0;
33826   PyArrayObject *__pyx_v_tr = 0;
33827   PyArrayObject *__pyx_v_dtr = 0;
33828   PyArrayObject *__pyx_v_child_mask = 0;
33829   int __pyx_v_i;
33830   int __pyx_v_j;
33831   int __pyx_v_k;
33832   int __pyx_v_ni;
33833   __pyx_t_5numpy_float64_t __pyx_v_LE[3];
33834   __pyx_t_5numpy_float64_t __pyx_v_RE[3];
33835   __pyx_t_5numpy_float64_t __pyx_v_pos;
33836   struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator *__pyx_v_ia;
33837   PyArrayObject *__pyx_v_coords = 0;
33838   PyArrayObject *__pyx_v_indices = 0;
33839   int __pyx_v_nc;
33840   int __pyx_v_nv;
33841   struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer __pyx_v_vc;
33842   __Pyx_LocalBuf_ND __pyx_pybuffernd_child_mask;
33843   __Pyx_Buffer __pyx_pybuffer_child_mask;
33844   __Pyx_LocalBuf_ND __pyx_pybuffernd_coords;
33845   __Pyx_Buffer __pyx_pybuffer_coords;
33846   __Pyx_LocalBuf_ND __pyx_pybuffernd_dt;
33847   __Pyx_Buffer __pyx_pybuffer_dt;
33848   __Pyx_LocalBuf_ND __pyx_pybuffernd_dtr;
33849   __Pyx_Buffer __pyx_pybuffer_dtr;
33850   __Pyx_LocalBuf_ND __pyx_pybuffernd_indices;
33851   __Pyx_Buffer __pyx_pybuffer_indices;
33852   __Pyx_LocalBuf_ND __pyx_pybuffernd_t;
33853   __Pyx_Buffer __pyx_pybuffer_t;
33854   __Pyx_LocalBuf_ND __pyx_pybuffernd_tr;
33855   __Pyx_Buffer __pyx_pybuffer_tr;
33856   PyObject *__pyx_r = NULL;
33857   __Pyx_RefNannyDeclarations
33858   PyObject *__pyx_t_1 = NULL;
33859   PyArrayObject *__pyx_t_2 = NULL;
33860   int __pyx_t_3;
33861   PyObject *__pyx_t_4 = NULL;
33862   PyObject *__pyx_t_5 = NULL;
33863   PyObject *__pyx_t_6 = NULL;
33864   PyObject *__pyx_t_7 = NULL;
33865   PyArrayObject *__pyx_t_8 = NULL;
33866   int __pyx_t_9;
33867   PyObject *__pyx_t_10 = NULL;
33868   PyArrayObject *__pyx_t_11 = NULL;
33869   PyArrayObject *__pyx_t_12 = NULL;
33870   PyObject *__pyx_t_13 = NULL;
33871   PyArrayObject *__pyx_t_14 = NULL;
33872   int __pyx_t_15;
33873   int __pyx_t_16;
33874   int __pyx_t_17;
33875   int __pyx_t_18;
33876   int __pyx_t_19;
33877   int __pyx_t_20;
33878   Py_ssize_t __pyx_t_21;
33879   Py_ssize_t __pyx_t_22;
33880   __pyx_t_5numpy_int64_t __pyx_t_23;
33881   Py_ssize_t __pyx_t_24;
33882   Py_ssize_t __pyx_t_25;
33883   Py_ssize_t __pyx_t_26;
33884   Py_ssize_t __pyx_t_27;
33885   Py_ssize_t __pyx_t_28;
33886   Py_ssize_t __pyx_t_29;
33887   Py_ssize_t __pyx_t_30;
33888   Py_ssize_t __pyx_t_31;
33889   Py_ssize_t __pyx_t_32;
33890   Py_ssize_t __pyx_t_33;
33891   Py_ssize_t __pyx_t_34;
33892   Py_ssize_t __pyx_t_35;
33893   Py_ssize_t __pyx_t_36;
33894   Py_ssize_t __pyx_t_37;
33895   Py_ssize_t __pyx_t_38;
33896   Py_ssize_t __pyx_t_39;
33897   Py_ssize_t __pyx_t_40;
33898   Py_ssize_t __pyx_t_41;
33899   __Pyx_RefNannySetupContext("get_dt_mesh", 0);
33900   __pyx_pybuffer_t.pybuffer.buf = NULL;
33901   __pyx_pybuffer_t.refcount = 0;
33902   __pyx_pybuffernd_t.data = NULL;
33903   __pyx_pybuffernd_t.rcbuffer = &__pyx_pybuffer_t;
33904   __pyx_pybuffer_dt.pybuffer.buf = NULL;
33905   __pyx_pybuffer_dt.refcount = 0;
33906   __pyx_pybuffernd_dt.data = NULL;
33907   __pyx_pybuffernd_dt.rcbuffer = &__pyx_pybuffer_dt;
33908   __pyx_pybuffer_tr.pybuffer.buf = NULL;
33909   __pyx_pybuffer_tr.refcount = 0;
33910   __pyx_pybuffernd_tr.data = NULL;
33911   __pyx_pybuffernd_tr.rcbuffer = &__pyx_pybuffer_tr;
33912   __pyx_pybuffer_dtr.pybuffer.buf = NULL;
33913   __pyx_pybuffer_dtr.refcount = 0;
33914   __pyx_pybuffernd_dtr.data = NULL;
33915   __pyx_pybuffernd_dtr.rcbuffer = &__pyx_pybuffer_dtr;
33916   __pyx_pybuffer_child_mask.pybuffer.buf = NULL;
33917   __pyx_pybuffer_child_mask.refcount = 0;
33918   __pyx_pybuffernd_child_mask.data = NULL;
33919   __pyx_pybuffernd_child_mask.rcbuffer = &__pyx_pybuffer_child_mask;
33920   __pyx_pybuffer_coords.pybuffer.buf = NULL;
33921   __pyx_pybuffer_coords.refcount = 0;
33922   __pyx_pybuffernd_coords.data = NULL;
33923   __pyx_pybuffernd_coords.rcbuffer = &__pyx_pybuffer_coords;
33924   __pyx_pybuffer_indices.pybuffer.buf = NULL;
33925   __pyx_pybuffer_indices.refcount = 0;
33926   __pyx_pybuffernd_indices.data = NULL;
33927   __pyx_pybuffernd_indices.rcbuffer = &__pyx_pybuffer_indices;
33928 
33929   /* "yt/geometry/_selection_routines/ray_selector.pxi":132
33930  *         cdef np.float64_t pos
33931  *         cdef IntegrationAccumulator *ia
33932  *         ia = <IntegrationAccumulator *> malloc(sizeof(IntegrationAccumulator))             # <<<<<<<<<<<<<<
33933  *         cdef np.ndarray[np.float64_t, ndim=2] coords
33934  *         cdef np.ndarray[np.int64_t, ndim=2] indices
33935  */
33936   __pyx_v_ia = ((struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator *)malloc((sizeof(struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator))));
33937 
33938   /* "yt/geometry/_selection_routines/ray_selector.pxi":135
33939  *         cdef np.ndarray[np.float64_t, ndim=2] coords
33940  *         cdef np.ndarray[np.int64_t, ndim=2] indices
33941  *         indices = mesh.connectivity_indices             # <<<<<<<<<<<<<<
33942  *         coords = _ensure_code(mesh.connectivity_coords)
33943  *         cdef int nc = indices.shape[0]
33944  */
33945   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_connectivity_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 135, __pyx_L1_error)
33946   __Pyx_GOTREF(__pyx_t_1);
33947   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 135, __pyx_L1_error)
33948   __pyx_t_2 = ((PyArrayObject *)__pyx_t_1);
33949   {
33950     __Pyx_BufFmt_StackElem __pyx_stack[1];
33951     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indices.rcbuffer->pybuffer);
33952     __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indices.rcbuffer->pybuffer, (PyObject*)__pyx_t_2, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
33953     if (unlikely(__pyx_t_3 < 0)) {
33954       PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
33955       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_indices.rcbuffer->pybuffer, (PyObject*)__pyx_v_indices, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
33956         Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6);
33957         __Pyx_RaiseBufferFallbackError();
33958       } else {
33959         PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6);
33960       }
33961       __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0;
33962     }
33963     __pyx_pybuffernd_indices.diminfo[0].strides = __pyx_pybuffernd_indices.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_indices.diminfo[0].shape = __pyx_pybuffernd_indices.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_indices.diminfo[1].strides = __pyx_pybuffernd_indices.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_indices.diminfo[1].shape = __pyx_pybuffernd_indices.rcbuffer->pybuffer.shape[1];
33964     if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(12, 135, __pyx_L1_error)
33965   }
33966   __pyx_t_2 = 0;
33967   __pyx_v_indices = ((PyArrayObject *)__pyx_t_1);
33968   __pyx_t_1 = 0;
33969 
33970   /* "yt/geometry/_selection_routines/ray_selector.pxi":136
33971  *         cdef np.ndarray[np.int64_t, ndim=2] indices
33972  *         indices = mesh.connectivity_indices
33973  *         coords = _ensure_code(mesh.connectivity_coords)             # <<<<<<<<<<<<<<
33974  *         cdef int nc = indices.shape[0]
33975  *         cdef int nv = indices.shape[1]
33976  */
33977   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mesh, __pyx_n_s_connectivity_coords); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 136, __pyx_L1_error)
33978   __Pyx_GOTREF(__pyx_t_1);
33979   __pyx_t_7 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 136, __pyx_L1_error)
33980   __Pyx_GOTREF(__pyx_t_7);
33981   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
33982   if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 136, __pyx_L1_error)
33983   __pyx_t_8 = ((PyArrayObject *)__pyx_t_7);
33984   {
33985     __Pyx_BufFmt_StackElem __pyx_stack[1];
33986     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_coords.rcbuffer->pybuffer);
33987     __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_coords.rcbuffer->pybuffer, (PyObject*)__pyx_t_8, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack);
33988     if (unlikely(__pyx_t_3 < 0)) {
33989       PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4);
33990       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_coords.rcbuffer->pybuffer, (PyObject*)__pyx_v_coords, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) {
33991         Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4);
33992         __Pyx_RaiseBufferFallbackError();
33993       } else {
33994         PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4);
33995       }
33996       __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0;
33997     }
33998     __pyx_pybuffernd_coords.diminfo[0].strides = __pyx_pybuffernd_coords.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_coords.diminfo[0].shape = __pyx_pybuffernd_coords.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_coords.diminfo[1].strides = __pyx_pybuffernd_coords.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_coords.diminfo[1].shape = __pyx_pybuffernd_coords.rcbuffer->pybuffer.shape[1];
33999     if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(12, 136, __pyx_L1_error)
34000   }
34001   __pyx_t_8 = 0;
34002   __pyx_v_coords = ((PyArrayObject *)__pyx_t_7);
34003   __pyx_t_7 = 0;
34004 
34005   /* "yt/geometry/_selection_routines/ray_selector.pxi":137
34006  *         indices = mesh.connectivity_indices
34007  *         coords = _ensure_code(mesh.connectivity_coords)
34008  *         cdef int nc = indices.shape[0]             # <<<<<<<<<<<<<<
34009  *         cdef int nv = indices.shape[1]
34010  *         if nv != 8:
34011  */
34012   __pyx_v_nc = (__pyx_v_indices->dimensions[0]);
34013 
34014   /* "yt/geometry/_selection_routines/ray_selector.pxi":138
34015  *         coords = _ensure_code(mesh.connectivity_coords)
34016  *         cdef int nc = indices.shape[0]
34017  *         cdef int nv = indices.shape[1]             # <<<<<<<<<<<<<<
34018  *         if nv != 8:
34019  *             raise NotImplementedError
34020  */
34021   __pyx_v_nv = (__pyx_v_indices->dimensions[1]);
34022 
34023   /* "yt/geometry/_selection_routines/ray_selector.pxi":139
34024  *         cdef int nc = indices.shape[0]
34025  *         cdef int nv = indices.shape[1]
34026  *         if nv != 8:             # <<<<<<<<<<<<<<
34027  *             raise NotImplementedError
34028  *         cdef VolumeContainer vc
34029  */
34030   __pyx_t_9 = ((__pyx_v_nv != 8) != 0);
34031   if (unlikely(__pyx_t_9)) {
34032 
34033     /* "yt/geometry/_selection_routines/ray_selector.pxi":140
34034  *         cdef int nv = indices.shape[1]
34035  *         if nv != 8:
34036  *             raise NotImplementedError             # <<<<<<<<<<<<<<
34037  *         cdef VolumeContainer vc
34038  *         child_mask = np.ones((1,1,1), dtype="uint8")
34039  */
34040     __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
34041     __PYX_ERR(12, 140, __pyx_L1_error)
34042 
34043     /* "yt/geometry/_selection_routines/ray_selector.pxi":139
34044  *         cdef int nc = indices.shape[0]
34045  *         cdef int nv = indices.shape[1]
34046  *         if nv != 8:             # <<<<<<<<<<<<<<
34047  *             raise NotImplementedError
34048  *         cdef VolumeContainer vc
34049  */
34050   }
34051 
34052   /* "yt/geometry/_selection_routines/ray_selector.pxi":142
34053  *             raise NotImplementedError
34054  *         cdef VolumeContainer vc
34055  *         child_mask = np.ones((1,1,1), dtype="uint8")             # <<<<<<<<<<<<<<
34056  *         t = np.zeros((1,1,1), dtype="float64")
34057  *         dt = np.zeros((1,1,1), dtype="float64") - 1
34058  */
34059   __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_np); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 142, __pyx_L1_error)
34060   __Pyx_GOTREF(__pyx_t_7);
34061   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_ones); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 142, __pyx_L1_error)
34062   __Pyx_GOTREF(__pyx_t_1);
34063   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
34064   __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 142, __pyx_L1_error)
34065   __Pyx_GOTREF(__pyx_t_7);
34066   if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(12, 142, __pyx_L1_error)
34067   __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__34, __pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(12, 142, __pyx_L1_error)
34068   __Pyx_GOTREF(__pyx_t_10);
34069   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
34070   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
34071   if (!(likely(((__pyx_t_10) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_10, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 142, __pyx_L1_error)
34072   __pyx_t_11 = ((PyArrayObject *)__pyx_t_10);
34073   {
34074     __Pyx_BufFmt_StackElem __pyx_stack[1];
34075     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
34076     __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_11, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack);
34077     if (unlikely(__pyx_t_3 < 0)) {
34078       PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
34079       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_child_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 1, __pyx_stack) == -1)) {
34080         Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6);
34081         __Pyx_RaiseBufferFallbackError();
34082       } else {
34083         PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6);
34084       }
34085       __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0;
34086     }
34087     __pyx_pybuffernd_child_mask.diminfo[0].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_child_mask.diminfo[0].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_child_mask.diminfo[1].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_child_mask.diminfo[1].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_child_mask.diminfo[2].strides = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_child_mask.diminfo[2].shape = __pyx_pybuffernd_child_mask.rcbuffer->pybuffer.shape[2];
34088     if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(12, 142, __pyx_L1_error)
34089   }
34090   __pyx_t_11 = 0;
34091   __pyx_v_child_mask = ((PyArrayObject *)__pyx_t_10);
34092   __pyx_t_10 = 0;
34093 
34094   /* "yt/geometry/_selection_routines/ray_selector.pxi":143
34095  *         cdef VolumeContainer vc
34096  *         child_mask = np.ones((1,1,1), dtype="uint8")
34097  *         t = np.zeros((1,1,1), dtype="float64")             # <<<<<<<<<<<<<<
34098  *         dt = np.zeros((1,1,1), dtype="float64") - 1
34099  *         tr = np.zeros(nz, dtype="float64")
34100  */
34101   __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_np); if (unlikely(!__pyx_t_10)) __PYX_ERR(12, 143, __pyx_L1_error)
34102   __Pyx_GOTREF(__pyx_t_10);
34103   __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 143, __pyx_L1_error)
34104   __Pyx_GOTREF(__pyx_t_7);
34105   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
34106   __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(12, 143, __pyx_L1_error)
34107   __Pyx_GOTREF(__pyx_t_10);
34108   if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(12, 143, __pyx_L1_error)
34109   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__34, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 143, __pyx_L1_error)
34110   __Pyx_GOTREF(__pyx_t_1);
34111   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
34112   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
34113   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 143, __pyx_L1_error)
34114   __pyx_t_12 = ((PyArrayObject *)__pyx_t_1);
34115   {
34116     __Pyx_BufFmt_StackElem __pyx_stack[1];
34117     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t.rcbuffer->pybuffer);
34118     __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_t.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack);
34119     if (unlikely(__pyx_t_3 < 0)) {
34120       PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4);
34121       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_t.rcbuffer->pybuffer, (PyObject*)__pyx_v_t, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
34122         Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4);
34123         __Pyx_RaiseBufferFallbackError();
34124       } else {
34125         PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4);
34126       }
34127       __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0;
34128     }
34129     __pyx_pybuffernd_t.diminfo[0].strides = __pyx_pybuffernd_t.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_t.diminfo[0].shape = __pyx_pybuffernd_t.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_t.diminfo[1].strides = __pyx_pybuffernd_t.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_t.diminfo[1].shape = __pyx_pybuffernd_t.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_t.diminfo[2].strides = __pyx_pybuffernd_t.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_t.diminfo[2].shape = __pyx_pybuffernd_t.rcbuffer->pybuffer.shape[2];
34130     if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(12, 143, __pyx_L1_error)
34131   }
34132   __pyx_t_12 = 0;
34133   __pyx_v_t = ((PyArrayObject *)__pyx_t_1);
34134   __pyx_t_1 = 0;
34135 
34136   /* "yt/geometry/_selection_routines/ray_selector.pxi":144
34137  *         child_mask = np.ones((1,1,1), dtype="uint8")
34138  *         t = np.zeros((1,1,1), dtype="float64")
34139  *         dt = np.zeros((1,1,1), dtype="float64") - 1             # <<<<<<<<<<<<<<
34140  *         tr = np.zeros(nz, dtype="float64")
34141  *         dtr = np.zeros(nz, dtype="float64")
34142  */
34143   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 144, __pyx_L1_error)
34144   __Pyx_GOTREF(__pyx_t_1);
34145   __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_10)) __PYX_ERR(12, 144, __pyx_L1_error)
34146   __Pyx_GOTREF(__pyx_t_10);
34147   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
34148   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 144, __pyx_L1_error)
34149   __Pyx_GOTREF(__pyx_t_1);
34150   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(12, 144, __pyx_L1_error)
34151   __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__34, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 144, __pyx_L1_error)
34152   __Pyx_GOTREF(__pyx_t_7);
34153   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
34154   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
34155   __pyx_t_1 = __Pyx_PyInt_SubtractObjC(__pyx_t_7, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 144, __pyx_L1_error)
34156   __Pyx_GOTREF(__pyx_t_1);
34157   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
34158   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 144, __pyx_L1_error)
34159   __pyx_t_12 = ((PyArrayObject *)__pyx_t_1);
34160   {
34161     __Pyx_BufFmt_StackElem __pyx_stack[1];
34162     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
34163     __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_t_12, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack);
34164     if (unlikely(__pyx_t_3 < 0)) {
34165       PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
34166       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dt.rcbuffer->pybuffer, (PyObject*)__pyx_v_dt, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 3, 0, __pyx_stack) == -1)) {
34167         Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6);
34168         __Pyx_RaiseBufferFallbackError();
34169       } else {
34170         PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6);
34171       }
34172       __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0;
34173     }
34174     __pyx_pybuffernd_dt.diminfo[0].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dt.diminfo[0].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_dt.diminfo[1].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_dt.diminfo[1].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_dt.diminfo[2].strides = __pyx_pybuffernd_dt.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_dt.diminfo[2].shape = __pyx_pybuffernd_dt.rcbuffer->pybuffer.shape[2];
34175     if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(12, 144, __pyx_L1_error)
34176   }
34177   __pyx_t_12 = 0;
34178   __pyx_v_dt = ((PyArrayObject *)__pyx_t_1);
34179   __pyx_t_1 = 0;
34180 
34181   /* "yt/geometry/_selection_routines/ray_selector.pxi":145
34182  *         t = np.zeros((1,1,1), dtype="float64")
34183  *         dt = np.zeros((1,1,1), dtype="float64") - 1
34184  *         tr = np.zeros(nz, dtype="float64")             # <<<<<<<<<<<<<<
34185  *         dtr = np.zeros(nz, dtype="float64")
34186  *         ia.t = <np.float64_t *> t.data
34187  */
34188   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 145, __pyx_L1_error)
34189   __Pyx_GOTREF(__pyx_t_1);
34190   __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 145, __pyx_L1_error)
34191   __Pyx_GOTREF(__pyx_t_7);
34192   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
34193   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 145, __pyx_L1_error)
34194   __Pyx_GOTREF(__pyx_t_1);
34195   __Pyx_INCREF(__pyx_v_nz);
34196   __Pyx_GIVEREF(__pyx_v_nz);
34197   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_nz);
34198   __pyx_t_10 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_10)) __PYX_ERR(12, 145, __pyx_L1_error)
34199   __Pyx_GOTREF(__pyx_t_10);
34200   if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(12, 145, __pyx_L1_error)
34201   __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_1, __pyx_t_10); if (unlikely(!__pyx_t_13)) __PYX_ERR(12, 145, __pyx_L1_error)
34202   __Pyx_GOTREF(__pyx_t_13);
34203   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
34204   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
34205   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
34206   if (!(likely(((__pyx_t_13) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_13, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 145, __pyx_L1_error)
34207   __pyx_t_14 = ((PyArrayObject *)__pyx_t_13);
34208   {
34209     __Pyx_BufFmt_StackElem __pyx_stack[1];
34210     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_tr.rcbuffer->pybuffer);
34211     __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_tr.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
34212     if (unlikely(__pyx_t_3 < 0)) {
34213       PyErr_Fetch(&__pyx_t_6, &__pyx_t_5, &__pyx_t_4);
34214       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_tr.rcbuffer->pybuffer, (PyObject*)__pyx_v_tr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
34215         Py_XDECREF(__pyx_t_6); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_4);
34216         __Pyx_RaiseBufferFallbackError();
34217       } else {
34218         PyErr_Restore(__pyx_t_6, __pyx_t_5, __pyx_t_4);
34219       }
34220       __pyx_t_6 = __pyx_t_5 = __pyx_t_4 = 0;
34221     }
34222     __pyx_pybuffernd_tr.diminfo[0].strides = __pyx_pybuffernd_tr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_tr.diminfo[0].shape = __pyx_pybuffernd_tr.rcbuffer->pybuffer.shape[0];
34223     if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(12, 145, __pyx_L1_error)
34224   }
34225   __pyx_t_14 = 0;
34226   __pyx_v_tr = ((PyArrayObject *)__pyx_t_13);
34227   __pyx_t_13 = 0;
34228 
34229   /* "yt/geometry/_selection_routines/ray_selector.pxi":146
34230  *         dt = np.zeros((1,1,1), dtype="float64") - 1
34231  *         tr = np.zeros(nz, dtype="float64")
34232  *         dtr = np.zeros(nz, dtype="float64")             # <<<<<<<<<<<<<<
34233  *         ia.t = <np.float64_t *> t.data
34234  *         ia.dt = <np.float64_t *> dt.data
34235  */
34236   __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_np); if (unlikely(!__pyx_t_13)) __PYX_ERR(12, 146, __pyx_L1_error)
34237   __Pyx_GOTREF(__pyx_t_13);
34238   __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_zeros); if (unlikely(!__pyx_t_10)) __PYX_ERR(12, 146, __pyx_L1_error)
34239   __Pyx_GOTREF(__pyx_t_10);
34240   __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
34241   __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(12, 146, __pyx_L1_error)
34242   __Pyx_GOTREF(__pyx_t_13);
34243   __Pyx_INCREF(__pyx_v_nz);
34244   __Pyx_GIVEREF(__pyx_v_nz);
34245   PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_nz);
34246   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 146, __pyx_L1_error)
34247   __Pyx_GOTREF(__pyx_t_1);
34248   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_float64) < 0) __PYX_ERR(12, 146, __pyx_L1_error)
34249   __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_13, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 146, __pyx_L1_error)
34250   __Pyx_GOTREF(__pyx_t_7);
34251   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
34252   __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
34253   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
34254   if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(12, 146, __pyx_L1_error)
34255   __pyx_t_14 = ((PyArrayObject *)__pyx_t_7);
34256   {
34257     __Pyx_BufFmt_StackElem __pyx_stack[1];
34258     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dtr.rcbuffer->pybuffer);
34259     __pyx_t_3 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dtr.rcbuffer->pybuffer, (PyObject*)__pyx_t_14, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack);
34260     if (unlikely(__pyx_t_3 < 0)) {
34261       PyErr_Fetch(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
34262       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_dtr.rcbuffer->pybuffer, (PyObject*)__pyx_v_dtr, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
34263         Py_XDECREF(__pyx_t_4); Py_XDECREF(__pyx_t_5); Py_XDECREF(__pyx_t_6);
34264         __Pyx_RaiseBufferFallbackError();
34265       } else {
34266         PyErr_Restore(__pyx_t_4, __pyx_t_5, __pyx_t_6);
34267       }
34268       __pyx_t_4 = __pyx_t_5 = __pyx_t_6 = 0;
34269     }
34270     __pyx_pybuffernd_dtr.diminfo[0].strides = __pyx_pybuffernd_dtr.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_dtr.diminfo[0].shape = __pyx_pybuffernd_dtr.rcbuffer->pybuffer.shape[0];
34271     if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(12, 146, __pyx_L1_error)
34272   }
34273   __pyx_t_14 = 0;
34274   __pyx_v_dtr = ((PyArrayObject *)__pyx_t_7);
34275   __pyx_t_7 = 0;
34276 
34277   /* "yt/geometry/_selection_routines/ray_selector.pxi":147
34278  *         tr = np.zeros(nz, dtype="float64")
34279  *         dtr = np.zeros(nz, dtype="float64")
34280  *         ia.t = <np.float64_t *> t.data             # <<<<<<<<<<<<<<
34281  *         ia.dt = <np.float64_t *> dt.data
34282  *         ia.child_mask = <np.uint8_t *> child_mask.data
34283  */
34284   __pyx_v_ia->t = ((__pyx_t_5numpy_float64_t *)__pyx_v_t->data);
34285 
34286   /* "yt/geometry/_selection_routines/ray_selector.pxi":148
34287  *         dtr = np.zeros(nz, dtype="float64")
34288  *         ia.t = <np.float64_t *> t.data
34289  *         ia.dt = <np.float64_t *> dt.data             # <<<<<<<<<<<<<<
34290  *         ia.child_mask = <np.uint8_t *> child_mask.data
34291  *         ia.hits = 0
34292  */
34293   __pyx_v_ia->dt = ((__pyx_t_5numpy_float64_t *)__pyx_v_dt->data);
34294 
34295   /* "yt/geometry/_selection_routines/ray_selector.pxi":149
34296  *         ia.t = <np.float64_t *> t.data
34297  *         ia.dt = <np.float64_t *> dt.data
34298  *         ia.child_mask = <np.uint8_t *> child_mask.data             # <<<<<<<<<<<<<<
34299  *         ia.hits = 0
34300  *         ni = 0
34301  */
34302   __pyx_v_ia->child_mask = ((__pyx_t_5numpy_uint8_t *)__pyx_v_child_mask->data);
34303 
34304   /* "yt/geometry/_selection_routines/ray_selector.pxi":150
34305  *         ia.dt = <np.float64_t *> dt.data
34306  *         ia.child_mask = <np.uint8_t *> child_mask.data
34307  *         ia.hits = 0             # <<<<<<<<<<<<<<
34308  *         ni = 0
34309  *         for i in range(nc):
34310  */
34311   __pyx_v_ia->hits = 0;
34312 
34313   /* "yt/geometry/_selection_routines/ray_selector.pxi":151
34314  *         ia.child_mask = <np.uint8_t *> child_mask.data
34315  *         ia.hits = 0
34316  *         ni = 0             # <<<<<<<<<<<<<<
34317  *         for i in range(nc):
34318  *             for j in range(3):
34319  */
34320   __pyx_v_ni = 0;
34321 
34322   /* "yt/geometry/_selection_routines/ray_selector.pxi":152
34323  *         ia.hits = 0
34324  *         ni = 0
34325  *         for i in range(nc):             # <<<<<<<<<<<<<<
34326  *             for j in range(3):
34327  *                 LE[j] = 1e60
34328  */
34329   __pyx_t_3 = __pyx_v_nc;
34330   __pyx_t_15 = __pyx_t_3;
34331   for (__pyx_t_16 = 0; __pyx_t_16 < __pyx_t_15; __pyx_t_16+=1) {
34332     __pyx_v_i = __pyx_t_16;
34333 
34334     /* "yt/geometry/_selection_routines/ray_selector.pxi":153
34335  *         ni = 0
34336  *         for i in range(nc):
34337  *             for j in range(3):             # <<<<<<<<<<<<<<
34338  *                 LE[j] = 1e60
34339  *                 RE[j] = -1e60
34340  */
34341     for (__pyx_t_17 = 0; __pyx_t_17 < 3; __pyx_t_17+=1) {
34342       __pyx_v_j = __pyx_t_17;
34343 
34344       /* "yt/geometry/_selection_routines/ray_selector.pxi":154
34345  *         for i in range(nc):
34346  *             for j in range(3):
34347  *                 LE[j] = 1e60             # <<<<<<<<<<<<<<
34348  *                 RE[j] = -1e60
34349  *             for j in range(nv):
34350  */
34351       (__pyx_v_LE[__pyx_v_j]) = 1e60;
34352 
34353       /* "yt/geometry/_selection_routines/ray_selector.pxi":155
34354  *             for j in range(3):
34355  *                 LE[j] = 1e60
34356  *                 RE[j] = -1e60             # <<<<<<<<<<<<<<
34357  *             for j in range(nv):
34358  *                 for k in range(3):
34359  */
34360       (__pyx_v_RE[__pyx_v_j]) = -1e60;
34361     }
34362 
34363     /* "yt/geometry/_selection_routines/ray_selector.pxi":156
34364  *                 LE[j] = 1e60
34365  *                 RE[j] = -1e60
34366  *             for j in range(nv):             # <<<<<<<<<<<<<<
34367  *                 for k in range(3):
34368  *                     pos = coords[indices[i, j] - offset, k]
34369  */
34370     __pyx_t_17 = __pyx_v_nv;
34371     __pyx_t_18 = __pyx_t_17;
34372     for (__pyx_t_19 = 0; __pyx_t_19 < __pyx_t_18; __pyx_t_19+=1) {
34373       __pyx_v_j = __pyx_t_19;
34374 
34375       /* "yt/geometry/_selection_routines/ray_selector.pxi":157
34376  *                 RE[j] = -1e60
34377  *             for j in range(nv):
34378  *                 for k in range(3):             # <<<<<<<<<<<<<<
34379  *                     pos = coords[indices[i, j] - offset, k]
34380  *                     LE[k] = fmin(pos, LE[k])
34381  */
34382       for (__pyx_t_20 = 0; __pyx_t_20 < 3; __pyx_t_20+=1) {
34383         __pyx_v_k = __pyx_t_20;
34384 
34385         /* "yt/geometry/_selection_routines/ray_selector.pxi":158
34386  *             for j in range(nv):
34387  *                 for k in range(3):
34388  *                     pos = coords[indices[i, j] - offset, k]             # <<<<<<<<<<<<<<
34389  *                     LE[k] = fmin(pos, LE[k])
34390  *                     RE[k] = fmax(pos, RE[k])
34391  */
34392         __pyx_t_21 = __pyx_v_i;
34393         __pyx_t_22 = __pyx_v_j;
34394         __pyx_t_23 = ((*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_indices.rcbuffer->pybuffer.buf, __pyx_t_21, __pyx_pybuffernd_indices.diminfo[0].strides, __pyx_t_22, __pyx_pybuffernd_indices.diminfo[1].strides)) - __pyx_v_offset);
34395         __pyx_t_24 = __pyx_v_k;
34396         __pyx_v_pos = (*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_coords.rcbuffer->pybuffer.buf, __pyx_t_23, __pyx_pybuffernd_coords.diminfo[0].strides, __pyx_t_24, __pyx_pybuffernd_coords.diminfo[1].strides));
34397 
34398         /* "yt/geometry/_selection_routines/ray_selector.pxi":159
34399  *                 for k in range(3):
34400  *                     pos = coords[indices[i, j] - offset, k]
34401  *                     LE[k] = fmin(pos, LE[k])             # <<<<<<<<<<<<<<
34402  *                     RE[k] = fmax(pos, RE[k])
34403  *             for j in range(3):
34404  */
34405         (__pyx_v_LE[__pyx_v_k]) = __pyx_f_2yt_9utilities_3lib_8fp_utils_fmin(__pyx_v_pos, (__pyx_v_LE[__pyx_v_k]));
34406 
34407         /* "yt/geometry/_selection_routines/ray_selector.pxi":160
34408  *                     pos = coords[indices[i, j] - offset, k]
34409  *                     LE[k] = fmin(pos, LE[k])
34410  *                     RE[k] = fmax(pos, RE[k])             # <<<<<<<<<<<<<<
34411  *             for j in range(3):
34412  *                 vc.left_edge[j] = LE[j]
34413  */
34414         (__pyx_v_RE[__pyx_v_k]) = __pyx_f_2yt_9utilities_3lib_8fp_utils_fmax(__pyx_v_pos, (__pyx_v_RE[__pyx_v_k]));
34415       }
34416     }
34417 
34418     /* "yt/geometry/_selection_routines/ray_selector.pxi":161
34419  *                     LE[k] = fmin(pos, LE[k])
34420  *                     RE[k] = fmax(pos, RE[k])
34421  *             for j in range(3):             # <<<<<<<<<<<<<<
34422  *                 vc.left_edge[j] = LE[j]
34423  *                 vc.right_edge[j] = RE[j]
34424  */
34425     for (__pyx_t_17 = 0; __pyx_t_17 < 3; __pyx_t_17+=1) {
34426       __pyx_v_j = __pyx_t_17;
34427 
34428       /* "yt/geometry/_selection_routines/ray_selector.pxi":162
34429  *                     RE[k] = fmax(pos, RE[k])
34430  *             for j in range(3):
34431  *                 vc.left_edge[j] = LE[j]             # <<<<<<<<<<<<<<
34432  *                 vc.right_edge[j] = RE[j]
34433  *                 vc.dds[j] = RE[j] - LE[j]
34434  */
34435       (__pyx_v_vc.left_edge[__pyx_v_j]) = (__pyx_v_LE[__pyx_v_j]);
34436 
34437       /* "yt/geometry/_selection_routines/ray_selector.pxi":163
34438  *             for j in range(3):
34439  *                 vc.left_edge[j] = LE[j]
34440  *                 vc.right_edge[j] = RE[j]             # <<<<<<<<<<<<<<
34441  *                 vc.dds[j] = RE[j] - LE[j]
34442  *                 vc.idds[j] = 1.0/vc.dds[j]
34443  */
34444       (__pyx_v_vc.right_edge[__pyx_v_j]) = (__pyx_v_RE[__pyx_v_j]);
34445 
34446       /* "yt/geometry/_selection_routines/ray_selector.pxi":164
34447  *                 vc.left_edge[j] = LE[j]
34448  *                 vc.right_edge[j] = RE[j]
34449  *                 vc.dds[j] = RE[j] - LE[j]             # <<<<<<<<<<<<<<
34450  *                 vc.idds[j] = 1.0/vc.dds[j]
34451  *                 vc.dims[j] = 1
34452  */
34453       (__pyx_v_vc.dds[__pyx_v_j]) = ((__pyx_v_RE[__pyx_v_j]) - (__pyx_v_LE[__pyx_v_j]));
34454 
34455       /* "yt/geometry/_selection_routines/ray_selector.pxi":165
34456  *                 vc.right_edge[j] = RE[j]
34457  *                 vc.dds[j] = RE[j] - LE[j]
34458  *                 vc.idds[j] = 1.0/vc.dds[j]             # <<<<<<<<<<<<<<
34459  *                 vc.dims[j] = 1
34460  *             t[0,0,0] = dt[0,0,0] = -1
34461  */
34462       (__pyx_v_vc.idds[__pyx_v_j]) = (1.0 / (__pyx_v_vc.dds[__pyx_v_j]));
34463 
34464       /* "yt/geometry/_selection_routines/ray_selector.pxi":166
34465  *                 vc.dds[j] = RE[j] - LE[j]
34466  *                 vc.idds[j] = 1.0/vc.dds[j]
34467  *                 vc.dims[j] = 1             # <<<<<<<<<<<<<<
34468  *             t[0,0,0] = dt[0,0,0] = -1
34469  *             walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
34470  */
34471       (__pyx_v_vc.dims[__pyx_v_j]) = 1;
34472     }
34473 
34474     /* "yt/geometry/_selection_routines/ray_selector.pxi":167
34475  *                 vc.idds[j] = 1.0/vc.dds[j]
34476  *                 vc.dims[j] = 1
34477  *             t[0,0,0] = dt[0,0,0] = -1             # <<<<<<<<<<<<<<
34478  *             walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
34479  *             if dt[0,0,0] >= 0:
34480  */
34481     __pyx_t_25 = 0;
34482     __pyx_t_26 = 0;
34483     __pyx_t_27 = 0;
34484     *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_t.rcbuffer->pybuffer.buf, __pyx_t_25, __pyx_pybuffernd_t.diminfo[0].strides, __pyx_t_26, __pyx_pybuffernd_t.diminfo[1].strides, __pyx_t_27, __pyx_pybuffernd_t.diminfo[2].strides) = -1.0;
34485     __pyx_t_28 = 0;
34486     __pyx_t_29 = 0;
34487     __pyx_t_30 = 0;
34488     *__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_28, __pyx_pybuffernd_dt.diminfo[0].strides, __pyx_t_29, __pyx_pybuffernd_dt.diminfo[1].strides, __pyx_t_30, __pyx_pybuffernd_dt.diminfo[2].strides) = -1.0;
34489 
34490     /* "yt/geometry/_selection_routines/ray_selector.pxi":168
34491  *                 vc.dims[j] = 1
34492  *             t[0,0,0] = dt[0,0,0] = -1
34493  *             walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)             # <<<<<<<<<<<<<<
34494  *             if dt[0,0,0] >= 0:
34495  *                 tr[ni] = t[0,0,0]
34496  */
34497     (void)(__pyx_f_2yt_9utilities_3lib_14grid_traversal_walk_volume((&__pyx_v_vc), __pyx_v_self->p1, __pyx_v_self->vec, __pyx_f_2yt_8geometry_18selection_routines_dt_sampler, ((void *)__pyx_v_ia), NULL));
34498 
34499     /* "yt/geometry/_selection_routines/ray_selector.pxi":169
34500  *             t[0,0,0] = dt[0,0,0] = -1
34501  *             walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
34502  *             if dt[0,0,0] >= 0:             # <<<<<<<<<<<<<<
34503  *                 tr[ni] = t[0,0,0]
34504  *                 dtr[ni] = dt[0,0,0]
34505  */
34506     __pyx_t_31 = 0;
34507     __pyx_t_32 = 0;
34508     __pyx_t_33 = 0;
34509     __pyx_t_9 = (((*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_31, __pyx_pybuffernd_dt.diminfo[0].strides, __pyx_t_32, __pyx_pybuffernd_dt.diminfo[1].strides, __pyx_t_33, __pyx_pybuffernd_dt.diminfo[2].strides)) >= 0.0) != 0);
34510     if (__pyx_t_9) {
34511 
34512       /* "yt/geometry/_selection_routines/ray_selector.pxi":170
34513  *             walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
34514  *             if dt[0,0,0] >= 0:
34515  *                 tr[ni] = t[0,0,0]             # <<<<<<<<<<<<<<
34516  *                 dtr[ni] = dt[0,0,0]
34517  *                 ni += 1
34518  */
34519       __pyx_t_34 = 0;
34520       __pyx_t_35 = 0;
34521       __pyx_t_36 = 0;
34522       __pyx_t_37 = __pyx_v_ni;
34523       *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_tr.rcbuffer->pybuffer.buf, __pyx_t_37, __pyx_pybuffernd_tr.diminfo[0].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_t.rcbuffer->pybuffer.buf, __pyx_t_34, __pyx_pybuffernd_t.diminfo[0].strides, __pyx_t_35, __pyx_pybuffernd_t.diminfo[1].strides, __pyx_t_36, __pyx_pybuffernd_t.diminfo[2].strides));
34524 
34525       /* "yt/geometry/_selection_routines/ray_selector.pxi":171
34526  *             if dt[0,0,0] >= 0:
34527  *                 tr[ni] = t[0,0,0]
34528  *                 dtr[ni] = dt[0,0,0]             # <<<<<<<<<<<<<<
34529  *                 ni += 1
34530  *         free(ia)
34531  */
34532       __pyx_t_38 = 0;
34533       __pyx_t_39 = 0;
34534       __pyx_t_40 = 0;
34535       __pyx_t_41 = __pyx_v_ni;
34536       *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dtr.rcbuffer->pybuffer.buf, __pyx_t_41, __pyx_pybuffernd_dtr.diminfo[0].strides) = (*__Pyx_BufPtrStrided3d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_dt.rcbuffer->pybuffer.buf, __pyx_t_38, __pyx_pybuffernd_dt.diminfo[0].strides, __pyx_t_39, __pyx_pybuffernd_dt.diminfo[1].strides, __pyx_t_40, __pyx_pybuffernd_dt.diminfo[2].strides));
34537 
34538       /* "yt/geometry/_selection_routines/ray_selector.pxi":172
34539  *                 tr[ni] = t[0,0,0]
34540  *                 dtr[ni] = dt[0,0,0]
34541  *                 ni += 1             # <<<<<<<<<<<<<<
34542  *         free(ia)
34543  *         return dtr, tr
34544  */
34545       __pyx_v_ni = (__pyx_v_ni + 1);
34546 
34547       /* "yt/geometry/_selection_routines/ray_selector.pxi":169
34548  *             t[0,0,0] = dt[0,0,0] = -1
34549  *             walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
34550  *             if dt[0,0,0] >= 0:             # <<<<<<<<<<<<<<
34551  *                 tr[ni] = t[0,0,0]
34552  *                 dtr[ni] = dt[0,0,0]
34553  */
34554     }
34555   }
34556 
34557   /* "yt/geometry/_selection_routines/ray_selector.pxi":173
34558  *                 dtr[ni] = dt[0,0,0]
34559  *                 ni += 1
34560  *         free(ia)             # <<<<<<<<<<<<<<
34561  *         return dtr, tr
34562  *
34563  */
34564   free(__pyx_v_ia);
34565 
34566   /* "yt/geometry/_selection_routines/ray_selector.pxi":174
34567  *                 ni += 1
34568  *         free(ia)
34569  *         return dtr, tr             # <<<<<<<<<<<<<<
34570  *
34571  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
34572  */
34573   __Pyx_XDECREF(__pyx_r);
34574   __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 174, __pyx_L1_error)
34575   __Pyx_GOTREF(__pyx_t_7);
34576   __Pyx_INCREF(((PyObject *)__pyx_v_dtr));
34577   __Pyx_GIVEREF(((PyObject *)__pyx_v_dtr));
34578   PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_dtr));
34579   __Pyx_INCREF(((PyObject *)__pyx_v_tr));
34580   __Pyx_GIVEREF(((PyObject *)__pyx_v_tr));
34581   PyTuple_SET_ITEM(__pyx_t_7, 1, ((PyObject *)__pyx_v_tr));
34582   __pyx_r = __pyx_t_7;
34583   __pyx_t_7 = 0;
34584   goto __pyx_L0;
34585 
34586   /* "yt/geometry/_selection_routines/ray_selector.pxi":123
34587  *     @cython.wraparound(False)
34588  *     @cython.cdivision(True)
34589  *     def get_dt_mesh(self, mesh, nz, int offset):             # <<<<<<<<<<<<<<
34590  *         cdef np.ndarray[np.float64_t, ndim=3] t, dt
34591  *         cdef np.ndarray[np.float64_t, ndim=1] tr, dtr
34592  */
34593 
34594   /* function exit code */
34595   __pyx_L1_error:;
34596   __Pyx_XDECREF(__pyx_t_1);
34597   __Pyx_XDECREF(__pyx_t_7);
34598   __Pyx_XDECREF(__pyx_t_10);
34599   __Pyx_XDECREF(__pyx_t_13);
34600   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
34601     __Pyx_PyThreadState_declare
34602     __Pyx_PyThreadState_assign
34603     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
34604     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
34605     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_coords.rcbuffer->pybuffer);
34606     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
34607     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dtr.rcbuffer->pybuffer);
34608     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indices.rcbuffer->pybuffer);
34609     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t.rcbuffer->pybuffer);
34610     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_tr.rcbuffer->pybuffer);
34611   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
34612   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.get_dt_mesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
34613   __pyx_r = NULL;
34614   goto __pyx_L2;
34615   __pyx_L0:;
34616   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_child_mask.rcbuffer->pybuffer);
34617   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_coords.rcbuffer->pybuffer);
34618   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dt.rcbuffer->pybuffer);
34619   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_dtr.rcbuffer->pybuffer);
34620   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_indices.rcbuffer->pybuffer);
34621   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_t.rcbuffer->pybuffer);
34622   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_tr.rcbuffer->pybuffer);
34623   __pyx_L2:;
34624   __Pyx_XDECREF((PyObject *)__pyx_v_t);
34625   __Pyx_XDECREF((PyObject *)__pyx_v_dt);
34626   __Pyx_XDECREF((PyObject *)__pyx_v_tr);
34627   __Pyx_XDECREF((PyObject *)__pyx_v_dtr);
34628   __Pyx_XDECREF((PyObject *)__pyx_v_child_mask);
34629   __Pyx_XDECREF((PyObject *)__pyx_v_coords);
34630   __Pyx_XDECREF((PyObject *)__pyx_v_indices);
34631   __Pyx_XGIVEREF(__pyx_r);
34632   __Pyx_RefNannyFinishContext();
34633   return __pyx_r;
34634 }
34635 
34636 /* "yt/geometry/_selection_routines/ray_selector.pxi":176
34637  *         return dtr, tr
34638  *
34639  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
34640  *         # two 0-volume constructs don't intersect
34641  *         return 0
34642  */
34643 
34644 static int __pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos) {
34645   int __pyx_r;
34646 
34647   /* "yt/geometry/_selection_routines/ray_selector.pxi":178
34648  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
34649  *         # two 0-volume constructs don't intersect
34650  *         return 0             # <<<<<<<<<<<<<<
34651  *
34652  *     @cython.boundscheck(False)
34653  */
34654   __pyx_r = 0;
34655   goto __pyx_L0;
34656 
34657   /* "yt/geometry/_selection_routines/ray_selector.pxi":176
34658  *         return dtr, tr
34659  *
34660  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
34661  *         # two 0-volume constructs don't intersect
34662  *         return 0
34663  */
34664 
34665   /* function exit code */
34666   __pyx_L0:;
34667   return __pyx_r;
34668 }
34669 
34670 /* "yt/geometry/_selection_routines/ray_selector.pxi":183
34671  *     @cython.wraparound(False)
34672  *     @cython.cdivision(True)
34673  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
34674  *
34675  *         cdef int i
34676  */
34677 
34678 static int __pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
34679   int __pyx_v_i;
34680   __pyx_t_5numpy_float64_t __pyx_v_length;
34681   __pyx_t_5numpy_float64_t __pyx_v_r[3];
34682   __pyx_t_5numpy_float64_t __pyx_v_l;
34683   __pyx_t_5numpy_float64_t __pyx_v_b_sqr;
34684   int __pyx_r;
34685   int __pyx_t_1;
34686   int __pyx_t_2;
34687   int __pyx_t_3;
34688 
34689   /* "yt/geometry/_selection_routines/ray_selector.pxi":186
34690  *
34691  *         cdef int i
34692  *         cdef np.float64_t length = norm(self.vec)             # <<<<<<<<<<<<<<
34693  *         cdef np.float64_t r[3]
34694  *         for i in range(3):
34695  */
34696   __pyx_v_length = __pyx_f_2yt_8geometry_18selection_routines_norm(__pyx_v_self->vec);
34697 
34698   /* "yt/geometry/_selection_routines/ray_selector.pxi":188
34699  *         cdef np.float64_t length = norm(self.vec)
34700  *         cdef np.float64_t r[3]
34701  *         for i in range(3):             # <<<<<<<<<<<<<<
34702  *             r[i] = pos[i] - self.p1[i]
34703  *         # the projected position of the sphere along the ray
34704  */
34705   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
34706     __pyx_v_i = __pyx_t_1;
34707 
34708     /* "yt/geometry/_selection_routines/ray_selector.pxi":189
34709  *         cdef np.float64_t r[3]
34710  *         for i in range(3):
34711  *             r[i] = pos[i] - self.p1[i]             # <<<<<<<<<<<<<<
34712  *         # the projected position of the sphere along the ray
34713  *         cdef np.float64_t l = dot(r, self.vec) / length
34714  */
34715     (__pyx_v_r[__pyx_v_i]) = ((__pyx_v_pos[__pyx_v_i]) - (__pyx_v_self->p1[__pyx_v_i]));
34716   }
34717 
34718   /* "yt/geometry/_selection_routines/ray_selector.pxi":191
34719  *             r[i] = pos[i] - self.p1[i]
34720  *         # the projected position of the sphere along the ray
34721  *         cdef np.float64_t l = dot(r, self.vec) / length             # <<<<<<<<<<<<<<
34722  *         # the square of the impact parameter
34723  *         cdef np.float64_t b_sqr = dot(r, r) - l*l
34724  */
34725   __pyx_v_l = (__pyx_f_2yt_8geometry_18selection_routines_dot(__pyx_v_r, __pyx_v_self->vec) / __pyx_v_length);
34726 
34727   /* "yt/geometry/_selection_routines/ray_selector.pxi":193
34728  *         cdef np.float64_t l = dot(r, self.vec) / length
34729  *         # the square of the impact parameter
34730  *         cdef np.float64_t b_sqr = dot(r, r) - l*l             # <<<<<<<<<<<<<<
34731  *
34732  *         # only accept spheres with radii larger than the impact parameter and
34733  */
34734   __pyx_v_b_sqr = (__pyx_f_2yt_8geometry_18selection_routines_dot(__pyx_v_r, __pyx_v_r) - (__pyx_v_l * __pyx_v_l));
34735 
34736   /* "yt/geometry/_selection_routines/ray_selector.pxi":198
34737  *         # with a projected position along the ray no more than a radius away
34738  *         # from the ray
34739  *         if -radius < l and l < (length+radius) and b_sqr < radius*radius:             # <<<<<<<<<<<<<<
34740  *             return 1
34741  *
34742  */
34743   __pyx_t_3 = (((-__pyx_v_radius) < __pyx_v_l) != 0);
34744   if (__pyx_t_3) {
34745   } else {
34746     __pyx_t_2 = __pyx_t_3;
34747     goto __pyx_L6_bool_binop_done;
34748   }
34749   __pyx_t_3 = ((__pyx_v_l < (__pyx_v_length + __pyx_v_radius)) != 0);
34750   if (__pyx_t_3) {
34751   } else {
34752     __pyx_t_2 = __pyx_t_3;
34753     goto __pyx_L6_bool_binop_done;
34754   }
34755   __pyx_t_3 = ((__pyx_v_b_sqr < (__pyx_v_radius * __pyx_v_radius)) != 0);
34756   __pyx_t_2 = __pyx_t_3;
34757   __pyx_L6_bool_binop_done:;
34758   if (__pyx_t_2) {
34759 
34760     /* "yt/geometry/_selection_routines/ray_selector.pxi":199
34761  *         # from the ray
34762  *         if -radius < l and l < (length+radius) and b_sqr < radius*radius:
34763  *             return 1             # <<<<<<<<<<<<<<
34764  *
34765  *         return 0
34766  */
34767     __pyx_r = 1;
34768     goto __pyx_L0;
34769 
34770     /* "yt/geometry/_selection_routines/ray_selector.pxi":198
34771  *         # with a projected position along the ray no more than a radius away
34772  *         # from the ray
34773  *         if -radius < l and l < (length+radius) and b_sqr < radius*radius:             # <<<<<<<<<<<<<<
34774  *             return 1
34775  *
34776  */
34777   }
34778 
34779   /* "yt/geometry/_selection_routines/ray_selector.pxi":201
34780  *             return 1
34781  *
34782  *         return 0             # <<<<<<<<<<<<<<
34783  *
34784  *     @cython.boundscheck(False)
34785  */
34786   __pyx_r = 0;
34787   goto __pyx_L0;
34788 
34789   /* "yt/geometry/_selection_routines/ray_selector.pxi":183
34790  *     @cython.wraparound(False)
34791  *     @cython.cdivision(True)
34792  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
34793  *
34794  *         cdef int i
34795  */
34796 
34797   /* function exit code */
34798   __pyx_L0:;
34799   return __pyx_r;
34800 }
34801 
34802 /* "yt/geometry/_selection_routines/ray_selector.pxi":206
34803  *     @cython.wraparound(False)
34804  *     @cython.cdivision(True)
34805  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
34806  *                                np.float64_t right_edge[3]) nogil:
34807  *         cdef int i, rv
34808  */
34809 
34810 static int __pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
34811   int __pyx_v_i;
34812   int __pyx_v_rv;
34813   struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer __pyx_v_vc;
34814   struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator *__pyx_v_ia;
34815   __pyx_t_5numpy_float64_t __pyx_v_dt[1];
34816   __pyx_t_5numpy_float64_t __pyx_v_t[1];
34817   __pyx_t_5numpy_uint8_t __pyx_v_cm[1];
34818   int __pyx_r;
34819   int __pyx_t_1;
34820   int __pyx_t_2;
34821 
34822   /* "yt/geometry/_selection_routines/ray_selector.pxi":211
34823  *         cdef VolumeContainer vc
34824  *         cdef IntegrationAccumulator *ia
34825  *         ia = <IntegrationAccumulator *> malloc(sizeof(IntegrationAccumulator))             # <<<<<<<<<<<<<<
34826  *         cdef np.float64_t dt[1]
34827  *         cdef np.float64_t t[1]
34828  */
34829   __pyx_v_ia = ((struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator *)malloc((sizeof(struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator))));
34830 
34831   /* "yt/geometry/_selection_routines/ray_selector.pxi":215
34832  *         cdef np.float64_t t[1]
34833  *         cdef np.uint8_t cm[1]
34834  *         for i in range(3):             # <<<<<<<<<<<<<<
34835  *             vc.left_edge[i] = left_edge[i]
34836  *             vc.right_edge[i] = right_edge[i]
34837  */
34838   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
34839     __pyx_v_i = __pyx_t_1;
34840 
34841     /* "yt/geometry/_selection_routines/ray_selector.pxi":216
34842  *         cdef np.uint8_t cm[1]
34843  *         for i in range(3):
34844  *             vc.left_edge[i] = left_edge[i]             # <<<<<<<<<<<<<<
34845  *             vc.right_edge[i] = right_edge[i]
34846  *             vc.dds[i] = right_edge[i] - left_edge[i]
34847  */
34848     (__pyx_v_vc.left_edge[__pyx_v_i]) = (__pyx_v_left_edge[__pyx_v_i]);
34849 
34850     /* "yt/geometry/_selection_routines/ray_selector.pxi":217
34851  *         for i in range(3):
34852  *             vc.left_edge[i] = left_edge[i]
34853  *             vc.right_edge[i] = right_edge[i]             # <<<<<<<<<<<<<<
34854  *             vc.dds[i] = right_edge[i] - left_edge[i]
34855  *             vc.idds[i] = 1.0/vc.dds[i]
34856  */
34857     (__pyx_v_vc.right_edge[__pyx_v_i]) = (__pyx_v_right_edge[__pyx_v_i]);
34858 
34859     /* "yt/geometry/_selection_routines/ray_selector.pxi":218
34860  *             vc.left_edge[i] = left_edge[i]
34861  *             vc.right_edge[i] = right_edge[i]
34862  *             vc.dds[i] = right_edge[i] - left_edge[i]             # <<<<<<<<<<<<<<
34863  *             vc.idds[i] = 1.0/vc.dds[i]
34864  *             vc.dims[i] = 1
34865  */
34866     (__pyx_v_vc.dds[__pyx_v_i]) = ((__pyx_v_right_edge[__pyx_v_i]) - (__pyx_v_left_edge[__pyx_v_i]));
34867 
34868     /* "yt/geometry/_selection_routines/ray_selector.pxi":219
34869  *             vc.right_edge[i] = right_edge[i]
34870  *             vc.dds[i] = right_edge[i] - left_edge[i]
34871  *             vc.idds[i] = 1.0/vc.dds[i]             # <<<<<<<<<<<<<<
34872  *             vc.dims[i] = 1
34873  *         t[0] = dt[0] = 0.0
34874  */
34875     (__pyx_v_vc.idds[__pyx_v_i]) = (1.0 / (__pyx_v_vc.dds[__pyx_v_i]));
34876 
34877     /* "yt/geometry/_selection_routines/ray_selector.pxi":220
34878  *             vc.dds[i] = right_edge[i] - left_edge[i]
34879  *             vc.idds[i] = 1.0/vc.dds[i]
34880  *             vc.dims[i] = 1             # <<<<<<<<<<<<<<
34881  *         t[0] = dt[0] = 0.0
34882  *         cm[0] = 1
34883  */
34884     (__pyx_v_vc.dims[__pyx_v_i]) = 1;
34885   }
34886 
34887   /* "yt/geometry/_selection_routines/ray_selector.pxi":221
34888  *             vc.idds[i] = 1.0/vc.dds[i]
34889  *             vc.dims[i] = 1
34890  *         t[0] = dt[0] = 0.0             # <<<<<<<<<<<<<<
34891  *         cm[0] = 1
34892  *         ia.t = t
34893  */
34894   (__pyx_v_t[0]) = 0.0;
34895   (__pyx_v_dt[0]) = 0.0;
34896 
34897   /* "yt/geometry/_selection_routines/ray_selector.pxi":222
34898  *             vc.dims[i] = 1
34899  *         t[0] = dt[0] = 0.0
34900  *         cm[0] = 1             # <<<<<<<<<<<<<<
34901  *         ia.t = t
34902  *         ia.dt = dt
34903  */
34904   (__pyx_v_cm[0]) = 1;
34905 
34906   /* "yt/geometry/_selection_routines/ray_selector.pxi":223
34907  *         t[0] = dt[0] = 0.0
34908  *         cm[0] = 1
34909  *         ia.t = t             # <<<<<<<<<<<<<<
34910  *         ia.dt = dt
34911  *         ia.child_mask = cm
34912  */
34913   __pyx_v_ia->t = __pyx_v_t;
34914 
34915   /* "yt/geometry/_selection_routines/ray_selector.pxi":224
34916  *         cm[0] = 1
34917  *         ia.t = t
34918  *         ia.dt = dt             # <<<<<<<<<<<<<<
34919  *         ia.child_mask = cm
34920  *         ia.hits = 0
34921  */
34922   __pyx_v_ia->dt = __pyx_v_dt;
34923 
34924   /* "yt/geometry/_selection_routines/ray_selector.pxi":225
34925  *         ia.t = t
34926  *         ia.dt = dt
34927  *         ia.child_mask = cm             # <<<<<<<<<<<<<<
34928  *         ia.hits = 0
34929  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
34930  */
34931   __pyx_v_ia->child_mask = __pyx_v_cm;
34932 
34933   /* "yt/geometry/_selection_routines/ray_selector.pxi":226
34934  *         ia.dt = dt
34935  *         ia.child_mask = cm
34936  *         ia.hits = 0             # <<<<<<<<<<<<<<
34937  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
34938  *         rv = 0
34939  */
34940   __pyx_v_ia->hits = 0;
34941 
34942   /* "yt/geometry/_selection_routines/ray_selector.pxi":227
34943  *         ia.child_mask = cm
34944  *         ia.hits = 0
34945  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)             # <<<<<<<<<<<<<<
34946  *         rv = 0
34947  *         if ia.hits > 0:
34948  */
34949   (void)(__pyx_f_2yt_9utilities_3lib_14grid_traversal_walk_volume((&__pyx_v_vc), __pyx_v_self->p1, __pyx_v_self->vec, __pyx_f_2yt_8geometry_18selection_routines_dt_sampler, ((void *)__pyx_v_ia), NULL));
34950 
34951   /* "yt/geometry/_selection_routines/ray_selector.pxi":228
34952  *         ia.hits = 0
34953  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
34954  *         rv = 0             # <<<<<<<<<<<<<<
34955  *         if ia.hits > 0:
34956  *             rv = 1
34957  */
34958   __pyx_v_rv = 0;
34959 
34960   /* "yt/geometry/_selection_routines/ray_selector.pxi":229
34961  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
34962  *         rv = 0
34963  *         if ia.hits > 0:             # <<<<<<<<<<<<<<
34964  *             rv = 1
34965  *         free(ia)
34966  */
34967   __pyx_t_2 = ((__pyx_v_ia->hits > 0) != 0);
34968   if (__pyx_t_2) {
34969 
34970     /* "yt/geometry/_selection_routines/ray_selector.pxi":230
34971  *         rv = 0
34972  *         if ia.hits > 0:
34973  *             rv = 1             # <<<<<<<<<<<<<<
34974  *         free(ia)
34975  *         return rv
34976  */
34977     __pyx_v_rv = 1;
34978 
34979     /* "yt/geometry/_selection_routines/ray_selector.pxi":229
34980  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> ia)
34981  *         rv = 0
34982  *         if ia.hits > 0:             # <<<<<<<<<<<<<<
34983  *             rv = 1
34984  *         free(ia)
34985  */
34986   }
34987 
34988   /* "yt/geometry/_selection_routines/ray_selector.pxi":231
34989  *         if ia.hits > 0:
34990  *             rv = 1
34991  *         free(ia)             # <<<<<<<<<<<<<<
34992  *         return rv
34993  *
34994  */
34995   free(__pyx_v_ia);
34996 
34997   /* "yt/geometry/_selection_routines/ray_selector.pxi":232
34998  *             rv = 1
34999  *         free(ia)
35000  *         return rv             # <<<<<<<<<<<<<<
35001  *
35002  *     @cython.boundscheck(False)
35003  */
35004   __pyx_r = __pyx_v_rv;
35005   goto __pyx_L0;
35006 
35007   /* "yt/geometry/_selection_routines/ray_selector.pxi":206
35008  *     @cython.wraparound(False)
35009  *     @cython.cdivision(True)
35010  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
35011  *                                np.float64_t right_edge[3]) nogil:
35012  *         cdef int i, rv
35013  */
35014 
35015   /* function exit code */
35016   __pyx_L0:;
35017   return __pyx_r;
35018 }
35019 
35020 /* "yt/geometry/_selection_routines/ray_selector.pxi":237
35021  *     @cython.wraparound(False)
35022  *     @cython.cdivision(True)
35023  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
35024  *                                np.float64_t right_edge[3]) nogil:
35025  *         cdef int i
35026  */
35027 
35028 static int __pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
35029   int __pyx_v_i;
35030   __pyx_t_5numpy_uint8_t __pyx_v_cm;
35031   struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer __pyx_v_vc;
35032   struct __pyx_t_2yt_8geometry_18selection_routines_IntegrationAccumulator __pyx_v_ia;
35033   __pyx_t_5numpy_float64_t __pyx_v_dt;
35034   __pyx_t_5numpy_float64_t __pyx_v_t;
35035   int __pyx_r;
35036   int __pyx_t_1;
35037   int __pyx_t_2;
35038 
35039   /* "yt/geometry/_selection_routines/ray_selector.pxi":240
35040  *                                np.float64_t right_edge[3]) nogil:
35041  *         cdef int i
35042  *         cdef np.uint8_t cm = 1             # <<<<<<<<<<<<<<
35043  *         cdef VolumeContainer vc
35044  *         cdef IntegrationAccumulator ia
35045  */
35046   __pyx_v_cm = 1;
35047 
35048   /* "yt/geometry/_selection_routines/ray_selector.pxi":244
35049  *         cdef IntegrationAccumulator ia
35050  *         cdef np.float64_t dt, t
35051  *         for i in range(3):             # <<<<<<<<<<<<<<
35052  *             vc.left_edge[i] = left_edge[i]
35053  *             vc.right_edge[i] = right_edge[i]
35054  */
35055   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
35056     __pyx_v_i = __pyx_t_1;
35057 
35058     /* "yt/geometry/_selection_routines/ray_selector.pxi":245
35059  *         cdef np.float64_t dt, t
35060  *         for i in range(3):
35061  *             vc.left_edge[i] = left_edge[i]             # <<<<<<<<<<<<<<
35062  *             vc.right_edge[i] = right_edge[i]
35063  *             vc.dds[i] = right_edge[i] - left_edge[i]
35064  */
35065     (__pyx_v_vc.left_edge[__pyx_v_i]) = (__pyx_v_left_edge[__pyx_v_i]);
35066 
35067     /* "yt/geometry/_selection_routines/ray_selector.pxi":246
35068  *         for i in range(3):
35069  *             vc.left_edge[i] = left_edge[i]
35070  *             vc.right_edge[i] = right_edge[i]             # <<<<<<<<<<<<<<
35071  *             vc.dds[i] = right_edge[i] - left_edge[i]
35072  *             vc.idds[i] = 1.0/vc.dds[i]
35073  */
35074     (__pyx_v_vc.right_edge[__pyx_v_i]) = (__pyx_v_right_edge[__pyx_v_i]);
35075 
35076     /* "yt/geometry/_selection_routines/ray_selector.pxi":247
35077  *             vc.left_edge[i] = left_edge[i]
35078  *             vc.right_edge[i] = right_edge[i]
35079  *             vc.dds[i] = right_edge[i] - left_edge[i]             # <<<<<<<<<<<<<<
35080  *             vc.idds[i] = 1.0/vc.dds[i]
35081  *             vc.dims[i] = 1
35082  */
35083     (__pyx_v_vc.dds[__pyx_v_i]) = ((__pyx_v_right_edge[__pyx_v_i]) - (__pyx_v_left_edge[__pyx_v_i]));
35084 
35085     /* "yt/geometry/_selection_routines/ray_selector.pxi":248
35086  *             vc.right_edge[i] = right_edge[i]
35087  *             vc.dds[i] = right_edge[i] - left_edge[i]
35088  *             vc.idds[i] = 1.0/vc.dds[i]             # <<<<<<<<<<<<<<
35089  *             vc.dims[i] = 1
35090  *         t = dt = 0.0
35091  */
35092     (__pyx_v_vc.idds[__pyx_v_i]) = (1.0 / (__pyx_v_vc.dds[__pyx_v_i]));
35093 
35094     /* "yt/geometry/_selection_routines/ray_selector.pxi":249
35095  *             vc.dds[i] = right_edge[i] - left_edge[i]
35096  *             vc.idds[i] = 1.0/vc.dds[i]
35097  *             vc.dims[i] = 1             # <<<<<<<<<<<<<<
35098  *         t = dt = 0.0
35099  *         ia.t = &t
35100  */
35101     (__pyx_v_vc.dims[__pyx_v_i]) = 1;
35102   }
35103 
35104   /* "yt/geometry/_selection_routines/ray_selector.pxi":250
35105  *             vc.idds[i] = 1.0/vc.dds[i]
35106  *             vc.dims[i] = 1
35107  *         t = dt = 0.0             # <<<<<<<<<<<<<<
35108  *         ia.t = &t
35109  *         ia.dt = &dt
35110  */
35111   __pyx_v_t = 0.0;
35112   __pyx_v_dt = 0.0;
35113 
35114   /* "yt/geometry/_selection_routines/ray_selector.pxi":251
35115  *             vc.dims[i] = 1
35116  *         t = dt = 0.0
35117  *         ia.t = &t             # <<<<<<<<<<<<<<
35118  *         ia.dt = &dt
35119  *         ia.child_mask = &cm
35120  */
35121   __pyx_v_ia.t = (&__pyx_v_t);
35122 
35123   /* "yt/geometry/_selection_routines/ray_selector.pxi":252
35124  *         t = dt = 0.0
35125  *         ia.t = &t
35126  *         ia.dt = &dt             # <<<<<<<<<<<<<<
35127  *         ia.child_mask = &cm
35128  *         ia.hits = 0
35129  */
35130   __pyx_v_ia.dt = (&__pyx_v_dt);
35131 
35132   /* "yt/geometry/_selection_routines/ray_selector.pxi":253
35133  *         ia.t = &t
35134  *         ia.dt = &dt
35135  *         ia.child_mask = &cm             # <<<<<<<<<<<<<<
35136  *         ia.hits = 0
35137  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> &ia)
35138  */
35139   __pyx_v_ia.child_mask = (&__pyx_v_cm);
35140 
35141   /* "yt/geometry/_selection_routines/ray_selector.pxi":254
35142  *         ia.dt = &dt
35143  *         ia.child_mask = &cm
35144  *         ia.hits = 0             # <<<<<<<<<<<<<<
35145  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> &ia)
35146  *         if ia.hits > 0:
35147  */
35148   __pyx_v_ia.hits = 0;
35149 
35150   /* "yt/geometry/_selection_routines/ray_selector.pxi":255
35151  *         ia.child_mask = &cm
35152  *         ia.hits = 0
35153  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> &ia)             # <<<<<<<<<<<<<<
35154  *         if ia.hits > 0:
35155  *             return 2 # a box of non-zero volume cannot be inside a ray
35156  */
35157   (void)(__pyx_f_2yt_9utilities_3lib_14grid_traversal_walk_volume((&__pyx_v_vc), __pyx_v_self->p1, __pyx_v_self->vec, __pyx_f_2yt_8geometry_18selection_routines_dt_sampler, ((void *)(&__pyx_v_ia)), NULL));
35158 
35159   /* "yt/geometry/_selection_routines/ray_selector.pxi":256
35160  *         ia.hits = 0
35161  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> &ia)
35162  *         if ia.hits > 0:             # <<<<<<<<<<<<<<
35163  *             return 2 # a box of non-zero volume cannot be inside a ray
35164  *         return 0
35165  */
35166   __pyx_t_2 = ((__pyx_v_ia.hits > 0) != 0);
35167   if (__pyx_t_2) {
35168 
35169     /* "yt/geometry/_selection_routines/ray_selector.pxi":257
35170  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> &ia)
35171  *         if ia.hits > 0:
35172  *             return 2 # a box of non-zero volume cannot be inside a ray             # <<<<<<<<<<<<<<
35173  *         return 0
35174  *
35175  */
35176     __pyx_r = 2;
35177     goto __pyx_L0;
35178 
35179     /* "yt/geometry/_selection_routines/ray_selector.pxi":256
35180  *         ia.hits = 0
35181  *         walk_volume(&vc, self.p1, self.vec, dt_sampler, <void*> &ia)
35182  *         if ia.hits > 0:             # <<<<<<<<<<<<<<
35183  *             return 2 # a box of non-zero volume cannot be inside a ray
35184  *         return 0
35185  */
35186   }
35187 
35188   /* "yt/geometry/_selection_routines/ray_selector.pxi":258
35189  *         if ia.hits > 0:
35190  *             return 2 # a box of non-zero volume cannot be inside a ray
35191  *         return 0             # <<<<<<<<<<<<<<
35192  *
35193  *     @cython.boundscheck(False)
35194  */
35195   __pyx_r = 0;
35196   goto __pyx_L0;
35197 
35198   /* "yt/geometry/_selection_routines/ray_selector.pxi":237
35199  *     @cython.wraparound(False)
35200  *     @cython.cdivision(True)
35201  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
35202  *                                np.float64_t right_edge[3]) nogil:
35203  *         cdef int i
35204  */
35205 
35206   /* function exit code */
35207   __pyx_L0:;
35208   return __pyx_r;
35209 }
35210 
35211 /* "yt/geometry/_selection_routines/ray_selector.pxi":263
35212  *     @cython.wraparound(False)
35213  *     @cython.cdivision(True)
35214  *     cdef int select_cell(self, np.float64_t pos[3],             # <<<<<<<<<<<<<<
35215  *                                np.float64_t dds[3]) nogil:
35216  *         # This is terribly inefficient for Octrees.  For grids, it will never
35217  */
35218 
35219 static int __pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
35220   int __pyx_v_i;
35221   __pyx_t_5numpy_float64_t __pyx_v_left_edge[3];
35222   __pyx_t_5numpy_float64_t __pyx_v_right_edge[3];
35223   int __pyx_r;
35224   int __pyx_t_1;
35225 
35226   /* "yt/geometry/_selection_routines/ray_selector.pxi":270
35227  *         cdef np.float64_t left_edge[3]
35228  *         cdef np.float64_t right_edge[3]
35229  *         for i in range(3):             # <<<<<<<<<<<<<<
35230  *             left_edge[i] = pos[i] - dds[i]/2.0
35231  *             right_edge[i] = pos[i] + dds[i]/2.0
35232  */
35233   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
35234     __pyx_v_i = __pyx_t_1;
35235 
35236     /* "yt/geometry/_selection_routines/ray_selector.pxi":271
35237  *         cdef np.float64_t right_edge[3]
35238  *         for i in range(3):
35239  *             left_edge[i] = pos[i] - dds[i]/2.0             # <<<<<<<<<<<<<<
35240  *             right_edge[i] = pos[i] + dds[i]/2.0
35241  *         return self.select_bbox(left_edge, right_edge)
35242  */
35243     (__pyx_v_left_edge[__pyx_v_i]) = ((__pyx_v_pos[__pyx_v_i]) - ((__pyx_v_dds[__pyx_v_i]) / 2.0));
35244 
35245     /* "yt/geometry/_selection_routines/ray_selector.pxi":272
35246  *         for i in range(3):
35247  *             left_edge[i] = pos[i] - dds[i]/2.0
35248  *             right_edge[i] = pos[i] + dds[i]/2.0             # <<<<<<<<<<<<<<
35249  *         return self.select_bbox(left_edge, right_edge)
35250  *
35251  */
35252     (__pyx_v_right_edge[__pyx_v_i]) = ((__pyx_v_pos[__pyx_v_i]) + ((__pyx_v_dds[__pyx_v_i]) / 2.0));
35253   }
35254 
35255   /* "yt/geometry/_selection_routines/ray_selector.pxi":273
35256  *             left_edge[i] = pos[i] - dds[i]/2.0
35257  *             right_edge[i] = pos[i] + dds[i]/2.0
35258  *         return self.select_bbox(left_edge, right_edge)             # <<<<<<<<<<<<<<
35259  *
35260  *     def _hash_vals(self):
35261  */
35262   __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.select_bbox(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_left_edge, __pyx_v_right_edge);
35263   goto __pyx_L0;
35264 
35265   /* "yt/geometry/_selection_routines/ray_selector.pxi":263
35266  *     @cython.wraparound(False)
35267  *     @cython.cdivision(True)
35268  *     cdef int select_cell(self, np.float64_t pos[3],             # <<<<<<<<<<<<<<
35269  *                                np.float64_t dds[3]) nogil:
35270  *         # This is terribly inefficient for Octrees.  For grids, it will never
35271  */
35272 
35273   /* function exit code */
35274   __pyx_L0:;
35275   return __pyx_r;
35276 }
35277 
35278 /* "yt/geometry/_selection_routines/ray_selector.pxi":275
35279  *         return self.select_bbox(left_edge, right_edge)
35280  *
35281  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
35282  *         return (("p1[0]", self.p1[0]),
35283  *                 ("p1[1]", self.p1[1]),
35284  */
35285 
35286 /* Python wrapper */
35287 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_9_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
35288 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_9_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
35289   PyObject *__pyx_r = 0;
35290   __Pyx_RefNannyDeclarations
35291   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
35292   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_8_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self));
35293 
35294   /* function exit code */
35295   __Pyx_RefNannyFinishContext();
35296   return __pyx_r;
35297 }
35298 
35299 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_8_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self) {
35300   PyObject *__pyx_r = NULL;
35301   __Pyx_RefNannyDeclarations
35302   PyObject *__pyx_t_1 = NULL;
35303   PyObject *__pyx_t_2 = NULL;
35304   PyObject *__pyx_t_3 = NULL;
35305   PyObject *__pyx_t_4 = NULL;
35306   PyObject *__pyx_t_5 = NULL;
35307   PyObject *__pyx_t_6 = NULL;
35308   PyObject *__pyx_t_7 = NULL;
35309   PyObject *__pyx_t_8 = NULL;
35310   PyObject *__pyx_t_9 = NULL;
35311   PyObject *__pyx_t_10 = NULL;
35312   __Pyx_RefNannySetupContext("_hash_vals", 0);
35313 
35314   /* "yt/geometry/_selection_routines/ray_selector.pxi":276
35315  *
35316  *     def _hash_vals(self):
35317  *         return (("p1[0]", self.p1[0]),             # <<<<<<<<<<<<<<
35318  *                 ("p1[1]", self.p1[1]),
35319  *                 ("p1[2]", self.p1[2]),
35320  */
35321   __Pyx_XDECREF(__pyx_r);
35322   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->p1[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 276, __pyx_L1_error)
35323   __Pyx_GOTREF(__pyx_t_1);
35324   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 276, __pyx_L1_error)
35325   __Pyx_GOTREF(__pyx_t_2);
35326   __Pyx_INCREF(__pyx_kp_s_p1_0);
35327   __Pyx_GIVEREF(__pyx_kp_s_p1_0);
35328   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_s_p1_0);
35329   __Pyx_GIVEREF(__pyx_t_1);
35330   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
35331   __pyx_t_1 = 0;
35332 
35333   /* "yt/geometry/_selection_routines/ray_selector.pxi":277
35334  *     def _hash_vals(self):
35335  *         return (("p1[0]", self.p1[0]),
35336  *                 ("p1[1]", self.p1[1]),             # <<<<<<<<<<<<<<
35337  *                 ("p1[2]", self.p1[2]),
35338  *                 ("p2[0]", self.p2[0]),
35339  */
35340   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->p1[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 277, __pyx_L1_error)
35341   __Pyx_GOTREF(__pyx_t_1);
35342   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 277, __pyx_L1_error)
35343   __Pyx_GOTREF(__pyx_t_3);
35344   __Pyx_INCREF(__pyx_kp_s_p1_1);
35345   __Pyx_GIVEREF(__pyx_kp_s_p1_1);
35346   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_p1_1);
35347   __Pyx_GIVEREF(__pyx_t_1);
35348   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
35349   __pyx_t_1 = 0;
35350 
35351   /* "yt/geometry/_selection_routines/ray_selector.pxi":278
35352  *         return (("p1[0]", self.p1[0]),
35353  *                 ("p1[1]", self.p1[1]),
35354  *                 ("p1[2]", self.p1[2]),             # <<<<<<<<<<<<<<
35355  *                 ("p2[0]", self.p2[0]),
35356  *                 ("p2[1]", self.p2[1]),
35357  */
35358   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->p1[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 278, __pyx_L1_error)
35359   __Pyx_GOTREF(__pyx_t_1);
35360   __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 278, __pyx_L1_error)
35361   __Pyx_GOTREF(__pyx_t_4);
35362   __Pyx_INCREF(__pyx_kp_s_p1_2);
35363   __Pyx_GIVEREF(__pyx_kp_s_p1_2);
35364   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_s_p1_2);
35365   __Pyx_GIVEREF(__pyx_t_1);
35366   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
35367   __pyx_t_1 = 0;
35368 
35369   /* "yt/geometry/_selection_routines/ray_selector.pxi":279
35370  *                 ("p1[1]", self.p1[1]),
35371  *                 ("p1[2]", self.p1[2]),
35372  *                 ("p2[0]", self.p2[0]),             # <<<<<<<<<<<<<<
35373  *                 ("p2[1]", self.p2[1]),
35374  *                 ("p2[2]", self.p2[2]),
35375  */
35376   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->p2[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 279, __pyx_L1_error)
35377   __Pyx_GOTREF(__pyx_t_1);
35378   __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 279, __pyx_L1_error)
35379   __Pyx_GOTREF(__pyx_t_5);
35380   __Pyx_INCREF(__pyx_kp_s_p2_0);
35381   __Pyx_GIVEREF(__pyx_kp_s_p2_0);
35382   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_s_p2_0);
35383   __Pyx_GIVEREF(__pyx_t_1);
35384   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
35385   __pyx_t_1 = 0;
35386 
35387   /* "yt/geometry/_selection_routines/ray_selector.pxi":280
35388  *                 ("p1[2]", self.p1[2]),
35389  *                 ("p2[0]", self.p2[0]),
35390  *                 ("p2[1]", self.p2[1]),             # <<<<<<<<<<<<<<
35391  *                 ("p2[2]", self.p2[2]),
35392  *                 ("vec[0]", self.vec[0]),
35393  */
35394   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->p2[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 280, __pyx_L1_error)
35395   __Pyx_GOTREF(__pyx_t_1);
35396   __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(12, 280, __pyx_L1_error)
35397   __Pyx_GOTREF(__pyx_t_6);
35398   __Pyx_INCREF(__pyx_kp_s_p2_1);
35399   __Pyx_GIVEREF(__pyx_kp_s_p2_1);
35400   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_s_p2_1);
35401   __Pyx_GIVEREF(__pyx_t_1);
35402   PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
35403   __pyx_t_1 = 0;
35404 
35405   /* "yt/geometry/_selection_routines/ray_selector.pxi":281
35406  *                 ("p2[0]", self.p2[0]),
35407  *                 ("p2[1]", self.p2[1]),
35408  *                 ("p2[2]", self.p2[2]),             # <<<<<<<<<<<<<<
35409  *                 ("vec[0]", self.vec[0]),
35410  *                 ("vec[1]", self.vec[1]),
35411  */
35412   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->p2[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 281, __pyx_L1_error)
35413   __Pyx_GOTREF(__pyx_t_1);
35414   __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 281, __pyx_L1_error)
35415   __Pyx_GOTREF(__pyx_t_7);
35416   __Pyx_INCREF(__pyx_kp_s_p2_2);
35417   __Pyx_GIVEREF(__pyx_kp_s_p2_2);
35418   PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_s_p2_2);
35419   __Pyx_GIVEREF(__pyx_t_1);
35420   PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
35421   __pyx_t_1 = 0;
35422 
35423   /* "yt/geometry/_selection_routines/ray_selector.pxi":282
35424  *                 ("p2[1]", self.p2[1]),
35425  *                 ("p2[2]", self.p2[2]),
35426  *                 ("vec[0]", self.vec[0]),             # <<<<<<<<<<<<<<
35427  *                 ("vec[1]", self.vec[1]),
35428  *                 ("vec[2]", self.vec[2]))
35429  */
35430   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->vec[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 282, __pyx_L1_error)
35431   __Pyx_GOTREF(__pyx_t_1);
35432   __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(12, 282, __pyx_L1_error)
35433   __Pyx_GOTREF(__pyx_t_8);
35434   __Pyx_INCREF(__pyx_kp_s_vec_0);
35435   __Pyx_GIVEREF(__pyx_kp_s_vec_0);
35436   PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_s_vec_0);
35437   __Pyx_GIVEREF(__pyx_t_1);
35438   PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1);
35439   __pyx_t_1 = 0;
35440 
35441   /* "yt/geometry/_selection_routines/ray_selector.pxi":283
35442  *                 ("p2[2]", self.p2[2]),
35443  *                 ("vec[0]", self.vec[0]),
35444  *                 ("vec[1]", self.vec[1]),             # <<<<<<<<<<<<<<
35445  *                 ("vec[2]", self.vec[2]))
35446  *
35447  */
35448   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->vec[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 283, __pyx_L1_error)
35449   __Pyx_GOTREF(__pyx_t_1);
35450   __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(12, 283, __pyx_L1_error)
35451   __Pyx_GOTREF(__pyx_t_9);
35452   __Pyx_INCREF(__pyx_kp_s_vec_1);
35453   __Pyx_GIVEREF(__pyx_kp_s_vec_1);
35454   PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_s_vec_1);
35455   __Pyx_GIVEREF(__pyx_t_1);
35456   PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1);
35457   __pyx_t_1 = 0;
35458 
35459   /* "yt/geometry/_selection_routines/ray_selector.pxi":284
35460  *                 ("vec[0]", self.vec[0]),
35461  *                 ("vec[1]", self.vec[1]),
35462  *                 ("vec[2]", self.vec[2]))             # <<<<<<<<<<<<<<
35463  *
35464  *     def _get_state_attnames(self):
35465  */
35466   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->vec[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 284, __pyx_L1_error)
35467   __Pyx_GOTREF(__pyx_t_1);
35468   __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(12, 284, __pyx_L1_error)
35469   __Pyx_GOTREF(__pyx_t_10);
35470   __Pyx_INCREF(__pyx_kp_s_vec_2);
35471   __Pyx_GIVEREF(__pyx_kp_s_vec_2);
35472   PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_s_vec_2);
35473   __Pyx_GIVEREF(__pyx_t_1);
35474   PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_1);
35475   __pyx_t_1 = 0;
35476 
35477   /* "yt/geometry/_selection_routines/ray_selector.pxi":276
35478  *
35479  *     def _hash_vals(self):
35480  *         return (("p1[0]", self.p1[0]),             # <<<<<<<<<<<<<<
35481  *                 ("p1[1]", self.p1[1]),
35482  *                 ("p1[2]", self.p1[2]),
35483  */
35484   __pyx_t_1 = PyTuple_New(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 276, __pyx_L1_error)
35485   __Pyx_GOTREF(__pyx_t_1);
35486   __Pyx_GIVEREF(__pyx_t_2);
35487   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
35488   __Pyx_GIVEREF(__pyx_t_3);
35489   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
35490   __Pyx_GIVEREF(__pyx_t_4);
35491   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
35492   __Pyx_GIVEREF(__pyx_t_5);
35493   PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_5);
35494   __Pyx_GIVEREF(__pyx_t_6);
35495   PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_6);
35496   __Pyx_GIVEREF(__pyx_t_7);
35497   PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_7);
35498   __Pyx_GIVEREF(__pyx_t_8);
35499   PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_t_8);
35500   __Pyx_GIVEREF(__pyx_t_9);
35501   PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_t_9);
35502   __Pyx_GIVEREF(__pyx_t_10);
35503   PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_t_10);
35504   __pyx_t_2 = 0;
35505   __pyx_t_3 = 0;
35506   __pyx_t_4 = 0;
35507   __pyx_t_5 = 0;
35508   __pyx_t_6 = 0;
35509   __pyx_t_7 = 0;
35510   __pyx_t_8 = 0;
35511   __pyx_t_9 = 0;
35512   __pyx_t_10 = 0;
35513   __pyx_r = __pyx_t_1;
35514   __pyx_t_1 = 0;
35515   goto __pyx_L0;
35516 
35517   /* "yt/geometry/_selection_routines/ray_selector.pxi":275
35518  *         return self.select_bbox(left_edge, right_edge)
35519  *
35520  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
35521  *         return (("p1[0]", self.p1[0]),
35522  *                 ("p1[1]", self.p1[1]),
35523  */
35524 
35525   /* function exit code */
35526   __pyx_L1_error:;
35527   __Pyx_XDECREF(__pyx_t_1);
35528   __Pyx_XDECREF(__pyx_t_2);
35529   __Pyx_XDECREF(__pyx_t_3);
35530   __Pyx_XDECREF(__pyx_t_4);
35531   __Pyx_XDECREF(__pyx_t_5);
35532   __Pyx_XDECREF(__pyx_t_6);
35533   __Pyx_XDECREF(__pyx_t_7);
35534   __Pyx_XDECREF(__pyx_t_8);
35535   __Pyx_XDECREF(__pyx_t_9);
35536   __Pyx_XDECREF(__pyx_t_10);
35537   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
35538   __pyx_r = NULL;
35539   __pyx_L0:;
35540   __Pyx_XGIVEREF(__pyx_r);
35541   __Pyx_RefNannyFinishContext();
35542   return __pyx_r;
35543 }
35544 
35545 /* "yt/geometry/_selection_routines/ray_selector.pxi":286
35546  *                 ("vec[2]", self.vec[2]))
35547  *
35548  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
35549  *         return ("p1", "p2", "vec")
35550  *
35551  */
35552 
35553 /* Python wrapper */
35554 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_11_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
35555 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_11_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
35556   PyObject *__pyx_r = 0;
35557   __Pyx_RefNannyDeclarations
35558   __Pyx_RefNannySetupContext("_get_state_attnames (wrapper)", 0);
35559   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_10_get_state_attnames(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self));
35560 
35561   /* function exit code */
35562   __Pyx_RefNannyFinishContext();
35563   return __pyx_r;
35564 }
35565 
35566 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_10_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self) {
35567   PyObject *__pyx_r = NULL;
35568   __Pyx_RefNannyDeclarations
35569   __Pyx_RefNannySetupContext("_get_state_attnames", 0);
35570 
35571   /* "yt/geometry/_selection_routines/ray_selector.pxi":287
35572  *
35573  *     def _get_state_attnames(self):
35574  *         return ("p1", "p2", "vec")             # <<<<<<<<<<<<<<
35575  *
35576  * ray_selector = RaySelector
35577  */
35578   __Pyx_XDECREF(__pyx_r);
35579   __Pyx_INCREF(__pyx_tuple__35);
35580   __pyx_r = __pyx_tuple__35;
35581   goto __pyx_L0;
35582 
35583   /* "yt/geometry/_selection_routines/ray_selector.pxi":286
35584  *                 ("vec[2]", self.vec[2]))
35585  *
35586  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
35587  *         return ("p1", "p2", "vec")
35588  *
35589  */
35590 
35591   /* function exit code */
35592   __pyx_L0:;
35593   __Pyx_XGIVEREF(__pyx_r);
35594   __Pyx_RefNannyFinishContext();
35595   return __pyx_r;
35596 }
35597 
35598 /* "yt/geometry/_selection_routines/ray_selector.pxi":25
35599  * cdef class RaySelector(SelectorObject):
35600  *
35601  *     cdef public np.float64_t p1[3]             # <<<<<<<<<<<<<<
35602  *     cdef public np.float64_t p2[3]
35603  *     cdef public np.float64_t vec[3]
35604  */
35605 
35606 /* Python wrapper */
35607 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_2p1_1__get__(PyObject *__pyx_v_self); /*proto*/
35608 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_2p1_1__get__(PyObject *__pyx_v_self) {
35609   PyObject *__pyx_r = 0;
35610   __Pyx_RefNannyDeclarations
35611   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
35612   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2p1___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self));
35613 
35614   /* function exit code */
35615   __Pyx_RefNannyFinishContext();
35616   return __pyx_r;
35617 }
35618 
35619 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2p1___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self) {
35620   PyObject *__pyx_r = NULL;
35621   __Pyx_RefNannyDeclarations
35622   PyObject *__pyx_t_1 = NULL;
35623   __Pyx_RefNannySetupContext("__get__", 0);
35624   __Pyx_XDECREF(__pyx_r);
35625   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->p1, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 25, __pyx_L1_error)
35626   __Pyx_GOTREF(__pyx_t_1);
35627   __pyx_r = __pyx_t_1;
35628   __pyx_t_1 = 0;
35629   goto __pyx_L0;
35630 
35631   /* function exit code */
35632   __pyx_L1_error:;
35633   __Pyx_XDECREF(__pyx_t_1);
35634   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.p1.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
35635   __pyx_r = NULL;
35636   __pyx_L0:;
35637   __Pyx_XGIVEREF(__pyx_r);
35638   __Pyx_RefNannyFinishContext();
35639   return __pyx_r;
35640 }
35641 
35642 /* Python wrapper */
35643 static int __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_2p1_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
35644 static int __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_2p1_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
35645   int __pyx_r;
35646   __Pyx_RefNannyDeclarations
35647   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
35648   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2p1_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
35649 
35650   /* function exit code */
35651   __Pyx_RefNannyFinishContext();
35652   return __pyx_r;
35653 }
35654 
35655 static int __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2p1_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_value) {
35656   int __pyx_r;
35657   __Pyx_RefNannyDeclarations
35658   __pyx_t_5numpy_float64_t __pyx_t_1[3];
35659   __Pyx_RefNannySetupContext("__set__", 0);
35660   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(12, 25, __pyx_L1_error)
35661   memcpy(&(__pyx_v_self->p1[0]), __pyx_t_1, sizeof(__pyx_v_self->p1[0]) * (3));
35662 
35663   /* function exit code */
35664   __pyx_r = 0;
35665   goto __pyx_L0;
35666   __pyx_L1_error:;
35667   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.p1.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
35668   __pyx_r = -1;
35669   __pyx_L0:;
35670   __Pyx_RefNannyFinishContext();
35671   return __pyx_r;
35672 }
35673 
35674 /* "yt/geometry/_selection_routines/ray_selector.pxi":26
35675  *
35676  *     cdef public np.float64_t p1[3]
35677  *     cdef public np.float64_t p2[3]             # <<<<<<<<<<<<<<
35678  *     cdef public np.float64_t vec[3]
35679  *
35680  */
35681 
35682 /* Python wrapper */
35683 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_2p2_1__get__(PyObject *__pyx_v_self); /*proto*/
35684 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_2p2_1__get__(PyObject *__pyx_v_self) {
35685   PyObject *__pyx_r = 0;
35686   __Pyx_RefNannyDeclarations
35687   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
35688   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2p2___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self));
35689 
35690   /* function exit code */
35691   __Pyx_RefNannyFinishContext();
35692   return __pyx_r;
35693 }
35694 
35695 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2p2___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self) {
35696   PyObject *__pyx_r = NULL;
35697   __Pyx_RefNannyDeclarations
35698   PyObject *__pyx_t_1 = NULL;
35699   __Pyx_RefNannySetupContext("__get__", 0);
35700   __Pyx_XDECREF(__pyx_r);
35701   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->p2, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 26, __pyx_L1_error)
35702   __Pyx_GOTREF(__pyx_t_1);
35703   __pyx_r = __pyx_t_1;
35704   __pyx_t_1 = 0;
35705   goto __pyx_L0;
35706 
35707   /* function exit code */
35708   __pyx_L1_error:;
35709   __Pyx_XDECREF(__pyx_t_1);
35710   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.p2.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
35711   __pyx_r = NULL;
35712   __pyx_L0:;
35713   __Pyx_XGIVEREF(__pyx_r);
35714   __Pyx_RefNannyFinishContext();
35715   return __pyx_r;
35716 }
35717 
35718 /* Python wrapper */
35719 static int __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_2p2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
35720 static int __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_2p2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
35721   int __pyx_r;
35722   __Pyx_RefNannyDeclarations
35723   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
35724   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2p2_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
35725 
35726   /* function exit code */
35727   __Pyx_RefNannyFinishContext();
35728   return __pyx_r;
35729 }
35730 
35731 static int __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_2p2_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_value) {
35732   int __pyx_r;
35733   __Pyx_RefNannyDeclarations
35734   __pyx_t_5numpy_float64_t __pyx_t_1[3];
35735   __Pyx_RefNannySetupContext("__set__", 0);
35736   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(12, 26, __pyx_L1_error)
35737   memcpy(&(__pyx_v_self->p2[0]), __pyx_t_1, sizeof(__pyx_v_self->p2[0]) * (3));
35738 
35739   /* function exit code */
35740   __pyx_r = 0;
35741   goto __pyx_L0;
35742   __pyx_L1_error:;
35743   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.p2.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
35744   __pyx_r = -1;
35745   __pyx_L0:;
35746   __Pyx_RefNannyFinishContext();
35747   return __pyx_r;
35748 }
35749 
35750 /* "yt/geometry/_selection_routines/ray_selector.pxi":27
35751  *     cdef public np.float64_t p1[3]
35752  *     cdef public np.float64_t p2[3]
35753  *     cdef public np.float64_t vec[3]             # <<<<<<<<<<<<<<
35754  *
35755  *     def __init__(self, dobj):
35756  */
35757 
35758 /* Python wrapper */
35759 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_3vec_1__get__(PyObject *__pyx_v_self); /*proto*/
35760 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_3vec_1__get__(PyObject *__pyx_v_self) {
35761   PyObject *__pyx_r = 0;
35762   __Pyx_RefNannyDeclarations
35763   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
35764   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_3vec___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self));
35765 
35766   /* function exit code */
35767   __Pyx_RefNannyFinishContext();
35768   return __pyx_r;
35769 }
35770 
35771 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_3vec___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self) {
35772   PyObject *__pyx_r = NULL;
35773   __Pyx_RefNannyDeclarations
35774   PyObject *__pyx_t_1 = NULL;
35775   __Pyx_RefNannySetupContext("__get__", 0);
35776   __Pyx_XDECREF(__pyx_r);
35777   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->vec, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 27, __pyx_L1_error)
35778   __Pyx_GOTREF(__pyx_t_1);
35779   __pyx_r = __pyx_t_1;
35780   __pyx_t_1 = 0;
35781   goto __pyx_L0;
35782 
35783   /* function exit code */
35784   __pyx_L1_error:;
35785   __Pyx_XDECREF(__pyx_t_1);
35786   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.vec.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
35787   __pyx_r = NULL;
35788   __pyx_L0:;
35789   __Pyx_XGIVEREF(__pyx_r);
35790   __Pyx_RefNannyFinishContext();
35791   return __pyx_r;
35792 }
35793 
35794 /* Python wrapper */
35795 static int __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_3vec_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
35796 static int __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_3vec_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
35797   int __pyx_r;
35798   __Pyx_RefNannyDeclarations
35799   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
35800   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_3vec_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
35801 
35802   /* function exit code */
35803   __Pyx_RefNannyFinishContext();
35804   return __pyx_r;
35805 }
35806 
35807 static int __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_3vec_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, PyObject *__pyx_v_value) {
35808   int __pyx_r;
35809   __Pyx_RefNannyDeclarations
35810   __pyx_t_5numpy_float64_t __pyx_t_1[3];
35811   __Pyx_RefNannySetupContext("__set__", 0);
35812   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(12, 27, __pyx_L1_error)
35813   memcpy(&(__pyx_v_self->vec[0]), __pyx_t_1, sizeof(__pyx_v_self->vec[0]) * (3));
35814 
35815   /* function exit code */
35816   __pyx_r = 0;
35817   goto __pyx_L0;
35818   __pyx_L1_error:;
35819   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.vec.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
35820   __pyx_r = -1;
35821   __pyx_L0:;
35822   __Pyx_RefNannyFinishContext();
35823   return __pyx_r;
35824 }
35825 
35826 /* "(tree fragment)":1
35827  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
35828  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
35829  * def __setstate_cython__(self, __pyx_state):
35830  */
35831 
35832 /* Python wrapper */
35833 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_13__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
35834 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_13__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
35835   PyObject *__pyx_r = 0;
35836   __Pyx_RefNannyDeclarations
35837   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
35838   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_12__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self));
35839 
35840   /* function exit code */
35841   __Pyx_RefNannyFinishContext();
35842   return __pyx_r;
35843 }
35844 
35845 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_12__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self) {
35846   PyObject *__pyx_r = NULL;
35847   __Pyx_RefNannyDeclarations
35848   PyObject *__pyx_t_1 = NULL;
35849   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
35850 
35851   /* "(tree fragment)":2
35852  * def __reduce_cython__(self):
35853  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
35854  * def __setstate_cython__(self, __pyx_state):
35855  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
35856  */
35857   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
35858   __Pyx_GOTREF(__pyx_t_1);
35859   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
35860   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
35861   __PYX_ERR(5, 2, __pyx_L1_error)
35862 
35863   /* "(tree fragment)":1
35864  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
35865  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
35866  * def __setstate_cython__(self, __pyx_state):
35867  */
35868 
35869   /* function exit code */
35870   __pyx_L1_error:;
35871   __Pyx_XDECREF(__pyx_t_1);
35872   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
35873   __pyx_r = NULL;
35874   __Pyx_XGIVEREF(__pyx_r);
35875   __Pyx_RefNannyFinishContext();
35876   return __pyx_r;
35877 }
35878 
35879 /* "(tree fragment)":3
35880  * def __reduce_cython__(self):
35881  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
35882  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
35883  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
35884  */
35885 
35886 /* Python wrapper */
35887 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_15__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
35888 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_15__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
35889   PyObject *__pyx_r = 0;
35890   __Pyx_RefNannyDeclarations
35891   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
35892   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_14__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
35893 
35894   /* function exit code */
35895   __Pyx_RefNannyFinishContext();
35896   return __pyx_r;
35897 }
35898 
35899 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_11RaySelector_14__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
35900   PyObject *__pyx_r = NULL;
35901   __Pyx_RefNannyDeclarations
35902   PyObject *__pyx_t_1 = NULL;
35903   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
35904 
35905   /* "(tree fragment)":4
35906  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
35907  * def __setstate_cython__(self, __pyx_state):
35908  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
35909  */
35910   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
35911   __Pyx_GOTREF(__pyx_t_1);
35912   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
35913   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
35914   __PYX_ERR(5, 4, __pyx_L1_error)
35915 
35916   /* "(tree fragment)":3
35917  * def __reduce_cython__(self):
35918  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
35919  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
35920  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
35921  */
35922 
35923   /* function exit code */
35924   __pyx_L1_error:;
35925   __Pyx_XDECREF(__pyx_t_1);
35926   __Pyx_AddTraceback("yt.geometry.selection_routines.RaySelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
35927   __pyx_r = NULL;
35928   __Pyx_XGIVEREF(__pyx_r);
35929   __Pyx_RefNannyFinishContext();
35930   return __pyx_r;
35931 }
35932 
35933 /* "yt/geometry/_selection_routines/data_collection_selector.pxi":5
35934  *     cdef np.int64_t nids
35935  *
35936  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
35937  *         self.obj_ids = dobj._obj_ids
35938  *         self.nids = self.obj_ids.shape[0]
35939  */
35940 
35941 /* Python wrapper */
35942 static int __pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
35943 static int __pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
35944   PyObject *__pyx_v_dobj = 0;
35945   int __pyx_r;
35946   __Pyx_RefNannyDeclarations
35947   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
35948   {
35949     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
35950     PyObject* values[1] = {0};
35951     if (unlikely(__pyx_kwds)) {
35952       Py_ssize_t kw_args;
35953       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
35954       switch (pos_args) {
35955         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
35956         CYTHON_FALLTHROUGH;
35957         case  0: break;
35958         default: goto __pyx_L5_argtuple_error;
35959       }
35960       kw_args = PyDict_Size(__pyx_kwds);
35961       switch (pos_args) {
35962         case  0:
35963         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
35964         else goto __pyx_L5_argtuple_error;
35965       }
35966       if (unlikely(kw_args > 0)) {
35967         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(13, 5, __pyx_L3_error)
35968       }
35969     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
35970       goto __pyx_L5_argtuple_error;
35971     } else {
35972       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
35973     }
35974     __pyx_v_dobj = values[0];
35975   }
35976   goto __pyx_L4_argument_unpacking_done;
35977   __pyx_L5_argtuple_error:;
35978   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 5, __pyx_L3_error)
35979   __pyx_L3_error:;
35980   __Pyx_AddTraceback("yt.geometry.selection_routines.DataCollectionSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
35981   __Pyx_RefNannyFinishContext();
35982   return -1;
35983   __pyx_L4_argument_unpacking_done:;
35984   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *)__pyx_v_self), __pyx_v_dobj);
35985 
35986   /* function exit code */
35987   __Pyx_RefNannyFinishContext();
35988   return __pyx_r;
35989 }
35990 
35991 static int __pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
35992   int __pyx_r;
35993   __Pyx_RefNannyDeclarations
35994   PyObject *__pyx_t_1 = NULL;
35995   PyObject *__pyx_t_2 = NULL;
35996   __pyx_t_5numpy_int64_t __pyx_t_3;
35997   __Pyx_RefNannySetupContext("__init__", 0);
35998 
35999   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":6
36000  *
36001  *     def __init__(self, dobj):
36002  *         self.obj_ids = dobj._obj_ids             # <<<<<<<<<<<<<<
36003  *         self.nids = self.obj_ids.shape[0]
36004  *
36005  */
36006   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_obj_ids); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 6, __pyx_L1_error)
36007   __Pyx_GOTREF(__pyx_t_1);
36008   __Pyx_GIVEREF(__pyx_t_1);
36009   __Pyx_GOTREF(__pyx_v_self->obj_ids);
36010   __Pyx_DECREF(__pyx_v_self->obj_ids);
36011   __pyx_v_self->obj_ids = __pyx_t_1;
36012   __pyx_t_1 = 0;
36013 
36014   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":7
36015  *     def __init__(self, dobj):
36016  *         self.obj_ids = dobj._obj_ids
36017  *         self.nids = self.obj_ids.shape[0]             # <<<<<<<<<<<<<<
36018  *
36019  *     @cython.boundscheck(False)
36020  */
36021   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->obj_ids, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 7, __pyx_L1_error)
36022   __Pyx_GOTREF(__pyx_t_1);
36023   __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 7, __pyx_L1_error)
36024   __Pyx_GOTREF(__pyx_t_2);
36025   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36026   __pyx_t_3 = __Pyx_PyInt_As_npy_int64(__pyx_t_2); if (unlikely((__pyx_t_3 == ((npy_int64)-1)) && PyErr_Occurred())) __PYX_ERR(13, 7, __pyx_L1_error)
36027   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36028   __pyx_v_self->nids = __pyx_t_3;
36029 
36030   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":5
36031  *     cdef np.int64_t nids
36032  *
36033  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
36034  *         self.obj_ids = dobj._obj_ids
36035  *         self.nids = self.obj_ids.shape[0]
36036  */
36037 
36038   /* function exit code */
36039   __pyx_r = 0;
36040   goto __pyx_L0;
36041   __pyx_L1_error:;
36042   __Pyx_XDECREF(__pyx_t_1);
36043   __Pyx_XDECREF(__pyx_t_2);
36044   __Pyx_AddTraceback("yt.geometry.selection_routines.DataCollectionSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
36045   __pyx_r = -1;
36046   __pyx_L0:;
36047   __Pyx_RefNannyFinishContext();
36048   return __pyx_r;
36049 }
36050 
36051 /* "yt/geometry/_selection_routines/data_collection_selector.pxi":12
36052  *     @cython.wraparound(False)
36053  *     @cython.cdivision(True)
36054  *     def select_grids(self,             # <<<<<<<<<<<<<<
36055  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
36056  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
36057  */
36058 
36059 /* Python wrapper */
36060 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_3select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
36061 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_3select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
36062   PyArrayObject *__pyx_v_left_edges = 0;
36063   CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges = 0;
36064   CYTHON_UNUSED PyArrayObject *__pyx_v_levels = 0;
36065   PyObject *__pyx_r = 0;
36066   __Pyx_RefNannyDeclarations
36067   __Pyx_RefNannySetupContext("select_grids (wrapper)", 0);
36068   {
36069     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_left_edges,&__pyx_n_s_right_edges,&__pyx_n_s_levels,0};
36070     PyObject* values[3] = {0,0,0};
36071     if (unlikely(__pyx_kwds)) {
36072       Py_ssize_t kw_args;
36073       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
36074       switch (pos_args) {
36075         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
36076         CYTHON_FALLTHROUGH;
36077         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
36078         CYTHON_FALLTHROUGH;
36079         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
36080         CYTHON_FALLTHROUGH;
36081         case  0: break;
36082         default: goto __pyx_L5_argtuple_error;
36083       }
36084       kw_args = PyDict_Size(__pyx_kwds);
36085       switch (pos_args) {
36086         case  0:
36087         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_left_edges)) != 0)) kw_args--;
36088         else goto __pyx_L5_argtuple_error;
36089         CYTHON_FALLTHROUGH;
36090         case  1:
36091         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_right_edges)) != 0)) kw_args--;
36092         else {
36093           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 1); __PYX_ERR(13, 12, __pyx_L3_error)
36094         }
36095         CYTHON_FALLTHROUGH;
36096         case  2:
36097         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_levels)) != 0)) kw_args--;
36098         else {
36099           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 2); __PYX_ERR(13, 12, __pyx_L3_error)
36100         }
36101       }
36102       if (unlikely(kw_args > 0)) {
36103         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_grids") < 0)) __PYX_ERR(13, 12, __pyx_L3_error)
36104       }
36105     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
36106       goto __pyx_L5_argtuple_error;
36107     } else {
36108       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
36109       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
36110       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
36111     }
36112     __pyx_v_left_edges = ((PyArrayObject *)values[0]);
36113     __pyx_v_right_edges = ((PyArrayObject *)values[1]);
36114     __pyx_v_levels = ((PyArrayObject *)values[2]);
36115   }
36116   goto __pyx_L4_argument_unpacking_done;
36117   __pyx_L5_argtuple_error:;
36118   __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(13, 12, __pyx_L3_error)
36119   __pyx_L3_error:;
36120   __Pyx_AddTraceback("yt.geometry.selection_routines.DataCollectionSelector.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
36121   __Pyx_RefNannyFinishContext();
36122   return NULL;
36123   __pyx_L4_argument_unpacking_done:;
36124   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_left_edges), __pyx_ptype_5numpy_ndarray, 1, "left_edges", 0))) __PYX_ERR(13, 13, __pyx_L1_error)
36125   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_right_edges), __pyx_ptype_5numpy_ndarray, 1, "right_edges", 0))) __PYX_ERR(13, 14, __pyx_L1_error)
36126   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_levels), __pyx_ptype_5numpy_ndarray, 1, "levels", 0))) __PYX_ERR(13, 15, __pyx_L1_error)
36127   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_2select_grids(((struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *)__pyx_v_self), __pyx_v_left_edges, __pyx_v_right_edges, __pyx_v_levels);
36128 
36129   /* function exit code */
36130   goto __pyx_L0;
36131   __pyx_L1_error:;
36132   __pyx_r = NULL;
36133   __pyx_L0:;
36134   __Pyx_RefNannyFinishContext();
36135   return __pyx_r;
36136 }
36137 
36138 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_2select_grids(struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_v_self, PyArrayObject *__pyx_v_left_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_levels) {
36139   int __pyx_v_n;
36140   int __pyx_v_ng;
36141   PyArrayObject *__pyx_v_gridi = 0;
36142   PyArrayObject *__pyx_v_oids = 0;
36143   __Pyx_LocalBuf_ND __pyx_pybuffernd_gridi;
36144   __Pyx_Buffer __pyx_pybuffer_gridi;
36145   __Pyx_LocalBuf_ND __pyx_pybuffernd_left_edges;
36146   __Pyx_Buffer __pyx_pybuffer_left_edges;
36147   __Pyx_LocalBuf_ND __pyx_pybuffernd_levels;
36148   __Pyx_Buffer __pyx_pybuffer_levels;
36149   __Pyx_LocalBuf_ND __pyx_pybuffernd_oids;
36150   __Pyx_Buffer __pyx_pybuffer_oids;
36151   __Pyx_LocalBuf_ND __pyx_pybuffernd_right_edges;
36152   __Pyx_Buffer __pyx_pybuffer_right_edges;
36153   PyObject *__pyx_r = NULL;
36154   __Pyx_RefNannyDeclarations
36155   PyObject *__pyx_t_1 = NULL;
36156   PyObject *__pyx_t_2 = NULL;
36157   PyObject *__pyx_t_3 = NULL;
36158   PyObject *__pyx_t_4 = NULL;
36159   PyArrayObject *__pyx_t_5 = NULL;
36160   __pyx_t_5numpy_int64_t __pyx_t_6;
36161   __pyx_t_5numpy_int64_t __pyx_t_7;
36162   int __pyx_t_8;
36163   Py_ssize_t __pyx_t_9;
36164   __pyx_t_5numpy_int64_t __pyx_t_10;
36165   __Pyx_RefNannySetupContext("select_grids", 0);
36166   __pyx_pybuffer_gridi.pybuffer.buf = NULL;
36167   __pyx_pybuffer_gridi.refcount = 0;
36168   __pyx_pybuffernd_gridi.data = NULL;
36169   __pyx_pybuffernd_gridi.rcbuffer = &__pyx_pybuffer_gridi;
36170   __pyx_pybuffer_oids.pybuffer.buf = NULL;
36171   __pyx_pybuffer_oids.refcount = 0;
36172   __pyx_pybuffernd_oids.data = NULL;
36173   __pyx_pybuffernd_oids.rcbuffer = &__pyx_pybuffer_oids;
36174   __pyx_pybuffer_left_edges.pybuffer.buf = NULL;
36175   __pyx_pybuffer_left_edges.refcount = 0;
36176   __pyx_pybuffernd_left_edges.data = NULL;
36177   __pyx_pybuffernd_left_edges.rcbuffer = &__pyx_pybuffer_left_edges;
36178   __pyx_pybuffer_right_edges.pybuffer.buf = NULL;
36179   __pyx_pybuffer_right_edges.refcount = 0;
36180   __pyx_pybuffernd_right_edges.data = NULL;
36181   __pyx_pybuffernd_right_edges.rcbuffer = &__pyx_pybuffer_right_edges;
36182   __pyx_pybuffer_levels.pybuffer.buf = NULL;
36183   __pyx_pybuffer_levels.refcount = 0;
36184   __pyx_pybuffernd_levels.data = NULL;
36185   __pyx_pybuffernd_levels.rcbuffer = &__pyx_pybuffer_levels;
36186   {
36187     __Pyx_BufFmt_StackElem __pyx_stack[1];
36188     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_left_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(13, 12, __pyx_L1_error)
36189   }
36190   __pyx_pybuffernd_left_edges.diminfo[0].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_left_edges.diminfo[0].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_left_edges.diminfo[1].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_left_edges.diminfo[1].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[1];
36191   {
36192     __Pyx_BufFmt_StackElem __pyx_stack[1];
36193     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_right_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(13, 12, __pyx_L1_error)
36194   }
36195   __pyx_pybuffernd_right_edges.diminfo[0].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_right_edges.diminfo[0].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_right_edges.diminfo[1].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_right_edges.diminfo[1].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[1];
36196   {
36197     __Pyx_BufFmt_StackElem __pyx_stack[1];
36198     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_levels.rcbuffer->pybuffer, (PyObject*)__pyx_v_levels, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(13, 12, __pyx_L1_error)
36199   }
36200   __pyx_pybuffernd_levels.diminfo[0].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_levels.diminfo[0].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_levels.diminfo[1].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_levels.diminfo[1].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[1];
36201 
36202   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":17
36203  *                      np.ndarray[np.int32_t, ndim=2] levels):
36204  *         cdef int n
36205  *         cdef int ng = left_edges.shape[0]             # <<<<<<<<<<<<<<
36206  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.zeros(ng, dtype='uint8')
36207  *         cdef np.ndarray[np.int64_t, ndim=1] oids = self.obj_ids
36208  */
36209   __pyx_v_ng = (__pyx_v_left_edges->dimensions[0]);
36210 
36211   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":18
36212  *         cdef int n
36213  *         cdef int ng = left_edges.shape[0]
36214  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.zeros(ng, dtype='uint8')             # <<<<<<<<<<<<<<
36215  *         cdef np.ndarray[np.int64_t, ndim=1] oids = self.obj_ids
36216  *         with nogil:
36217  */
36218   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 18, __pyx_L1_error)
36219   __Pyx_GOTREF(__pyx_t_1);
36220   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 18, __pyx_L1_error)
36221   __Pyx_GOTREF(__pyx_t_2);
36222   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36223   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ng); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 18, __pyx_L1_error)
36224   __Pyx_GOTREF(__pyx_t_1);
36225   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 18, __pyx_L1_error)
36226   __Pyx_GOTREF(__pyx_t_3);
36227   __Pyx_GIVEREF(__pyx_t_1);
36228   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
36229   __pyx_t_1 = 0;
36230   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 18, __pyx_L1_error)
36231   __Pyx_GOTREF(__pyx_t_1);
36232   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(13, 18, __pyx_L1_error)
36233   __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 18, __pyx_L1_error)
36234   __Pyx_GOTREF(__pyx_t_4);
36235   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36236   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
36237   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36238   if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(13, 18, __pyx_L1_error)
36239   __pyx_t_5 = ((PyArrayObject *)__pyx_t_4);
36240   {
36241     __Pyx_BufFmt_StackElem __pyx_stack[1];
36242     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_gridi.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) {
36243       __pyx_v_gridi = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_gridi.rcbuffer->pybuffer.buf = NULL;
36244       __PYX_ERR(13, 18, __pyx_L1_error)
36245     } else {__pyx_pybuffernd_gridi.diminfo[0].strides = __pyx_pybuffernd_gridi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_gridi.diminfo[0].shape = __pyx_pybuffernd_gridi.rcbuffer->pybuffer.shape[0];
36246     }
36247   }
36248   __pyx_t_5 = 0;
36249   __pyx_v_gridi = ((PyArrayObject *)__pyx_t_4);
36250   __pyx_t_4 = 0;
36251 
36252   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":19
36253  *         cdef int ng = left_edges.shape[0]
36254  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.zeros(ng, dtype='uint8')
36255  *         cdef np.ndarray[np.int64_t, ndim=1] oids = self.obj_ids             # <<<<<<<<<<<<<<
36256  *         with nogil:
36257  *             for n in range(self.nids):
36258  */
36259   if (!(likely(((__pyx_v_self->obj_ids) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self->obj_ids, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(13, 19, __pyx_L1_error)
36260   __pyx_t_4 = __pyx_v_self->obj_ids;
36261   __Pyx_INCREF(__pyx_t_4);
36262   {
36263     __Pyx_BufFmt_StackElem __pyx_stack[1];
36264     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_oids.rcbuffer->pybuffer, (PyObject*)((PyArrayObject *)__pyx_t_4), &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
36265       __pyx_v_oids = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_oids.rcbuffer->pybuffer.buf = NULL;
36266       __PYX_ERR(13, 19, __pyx_L1_error)
36267     } else {__pyx_pybuffernd_oids.diminfo[0].strides = __pyx_pybuffernd_oids.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_oids.diminfo[0].shape = __pyx_pybuffernd_oids.rcbuffer->pybuffer.shape[0];
36268     }
36269   }
36270   __pyx_v_oids = ((PyArrayObject *)__pyx_t_4);
36271   __pyx_t_4 = 0;
36272 
36273   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":20
36274  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.zeros(ng, dtype='uint8')
36275  *         cdef np.ndarray[np.int64_t, ndim=1] oids = self.obj_ids
36276  *         with nogil:             # <<<<<<<<<<<<<<
36277  *             for n in range(self.nids):
36278  *                 gridi[oids[n]] = 1
36279  */
36280   {
36281       #ifdef WITH_THREAD
36282       PyThreadState *_save;
36283       Py_UNBLOCK_THREADS
36284       __Pyx_FastGIL_Remember();
36285       #endif
36286       /*try:*/ {
36287 
36288         /* "yt/geometry/_selection_routines/data_collection_selector.pxi":21
36289  *         cdef np.ndarray[np.int64_t, ndim=1] oids = self.obj_ids
36290  *         with nogil:
36291  *             for n in range(self.nids):             # <<<<<<<<<<<<<<
36292  *                 gridi[oids[n]] = 1
36293  *         return gridi.astype("bool")
36294  */
36295         __pyx_t_6 = __pyx_v_self->nids;
36296         __pyx_t_7 = __pyx_t_6;
36297         for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
36298           __pyx_v_n = __pyx_t_8;
36299 
36300           /* "yt/geometry/_selection_routines/data_collection_selector.pxi":22
36301  *         with nogil:
36302  *             for n in range(self.nids):
36303  *                 gridi[oids[n]] = 1             # <<<<<<<<<<<<<<
36304  *         return gridi.astype("bool")
36305  *
36306  */
36307           __pyx_t_9 = __pyx_v_n;
36308           __pyx_t_10 = (*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_oids.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_oids.diminfo[0].strides));
36309           *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_gridi.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_gridi.diminfo[0].strides) = 1;
36310         }
36311       }
36312 
36313       /* "yt/geometry/_selection_routines/data_collection_selector.pxi":20
36314  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.zeros(ng, dtype='uint8')
36315  *         cdef np.ndarray[np.int64_t, ndim=1] oids = self.obj_ids
36316  *         with nogil:             # <<<<<<<<<<<<<<
36317  *             for n in range(self.nids):
36318  *                 gridi[oids[n]] = 1
36319  */
36320       /*finally:*/ {
36321         /*normal exit:*/{
36322           #ifdef WITH_THREAD
36323           __Pyx_FastGIL_Forget();
36324           Py_BLOCK_THREADS
36325           #endif
36326           goto __pyx_L5;
36327         }
36328         __pyx_L5:;
36329       }
36330   }
36331 
36332   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":23
36333  *             for n in range(self.nids):
36334  *                 gridi[oids[n]] = 1
36335  *         return gridi.astype("bool")             # <<<<<<<<<<<<<<
36336  *
36337  *     @cython.boundscheck(False)
36338  */
36339   __Pyx_XDECREF(__pyx_r);
36340   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_gridi), __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 23, __pyx_L1_error)
36341   __Pyx_GOTREF(__pyx_t_1);
36342   __pyx_t_3 = NULL;
36343   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
36344     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
36345     if (likely(__pyx_t_3)) {
36346       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
36347       __Pyx_INCREF(__pyx_t_3);
36348       __Pyx_INCREF(function);
36349       __Pyx_DECREF_SET(__pyx_t_1, function);
36350     }
36351   }
36352   __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_n_s_bool);
36353   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
36354   if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 23, __pyx_L1_error)
36355   __Pyx_GOTREF(__pyx_t_4);
36356   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36357   __pyx_r = __pyx_t_4;
36358   __pyx_t_4 = 0;
36359   goto __pyx_L0;
36360 
36361   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":12
36362  *     @cython.wraparound(False)
36363  *     @cython.cdivision(True)
36364  *     def select_grids(self,             # <<<<<<<<<<<<<<
36365  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
36366  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
36367  */
36368 
36369   /* function exit code */
36370   __pyx_L1_error:;
36371   __Pyx_XDECREF(__pyx_t_1);
36372   __Pyx_XDECREF(__pyx_t_2);
36373   __Pyx_XDECREF(__pyx_t_3);
36374   __Pyx_XDECREF(__pyx_t_4);
36375   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
36376     __Pyx_PyThreadState_declare
36377     __Pyx_PyThreadState_assign
36378     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
36379     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_gridi.rcbuffer->pybuffer);
36380     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
36381     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
36382     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_oids.rcbuffer->pybuffer);
36383     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
36384   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
36385   __Pyx_AddTraceback("yt.geometry.selection_routines.DataCollectionSelector.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
36386   __pyx_r = NULL;
36387   goto __pyx_L2;
36388   __pyx_L0:;
36389   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_gridi.rcbuffer->pybuffer);
36390   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
36391   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
36392   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_oids.rcbuffer->pybuffer);
36393   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
36394   __pyx_L2:;
36395   __Pyx_XDECREF((PyObject *)__pyx_v_gridi);
36396   __Pyx_XDECREF((PyObject *)__pyx_v_oids);
36397   __Pyx_XGIVEREF(__pyx_r);
36398   __Pyx_RefNannyFinishContext();
36399   return __pyx_r;
36400 }
36401 
36402 /* "yt/geometry/_selection_routines/data_collection_selector.pxi":28
36403  *     @cython.wraparound(False)
36404  *     @cython.cdivision(True)
36405  *     def fill_mask(self, gobj):             # <<<<<<<<<<<<<<
36406  *         cdef np.ndarray[np.uint8_t, ndim=3] mask
36407  *         mask = np.ones(gobj.ActiveDimensions, dtype='uint8')
36408  */
36409 
36410 /* Python wrapper */
36411 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_5fill_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj); /*proto*/
36412 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_5fill_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj) {
36413   PyObject *__pyx_r = 0;
36414   __Pyx_RefNannyDeclarations
36415   __Pyx_RefNannySetupContext("fill_mask (wrapper)", 0);
36416   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_4fill_mask(((struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *)__pyx_v_self), ((PyObject *)__pyx_v_gobj));
36417 
36418   /* function exit code */
36419   __Pyx_RefNannyFinishContext();
36420   return __pyx_r;
36421 }
36422 
36423 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_4fill_mask(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_v_self, PyObject *__pyx_v_gobj) {
36424   PyArrayObject *__pyx_v_mask = 0;
36425   __Pyx_LocalBuf_ND __pyx_pybuffernd_mask;
36426   __Pyx_Buffer __pyx_pybuffer_mask;
36427   PyObject *__pyx_r = NULL;
36428   __Pyx_RefNannyDeclarations
36429   PyObject *__pyx_t_1 = NULL;
36430   PyObject *__pyx_t_2 = NULL;
36431   PyObject *__pyx_t_3 = NULL;
36432   PyObject *__pyx_t_4 = NULL;
36433   PyArrayObject *__pyx_t_5 = NULL;
36434   int __pyx_t_6;
36435   PyObject *__pyx_t_7 = NULL;
36436   PyObject *__pyx_t_8 = NULL;
36437   PyObject *__pyx_t_9 = NULL;
36438   __Pyx_RefNannySetupContext("fill_mask", 0);
36439   __pyx_pybuffer_mask.pybuffer.buf = NULL;
36440   __pyx_pybuffer_mask.refcount = 0;
36441   __pyx_pybuffernd_mask.data = NULL;
36442   __pyx_pybuffernd_mask.rcbuffer = &__pyx_pybuffer_mask;
36443 
36444   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":30
36445  *     def fill_mask(self, gobj):
36446  *         cdef np.ndarray[np.uint8_t, ndim=3] mask
36447  *         mask = np.ones(gobj.ActiveDimensions, dtype='uint8')             # <<<<<<<<<<<<<<
36448  *         return mask.astype("bool")
36449  *
36450  */
36451   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 30, __pyx_L1_error)
36452   __Pyx_GOTREF(__pyx_t_1);
36453   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 30, __pyx_L1_error)
36454   __Pyx_GOTREF(__pyx_t_2);
36455   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36456   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 30, __pyx_L1_error)
36457   __Pyx_GOTREF(__pyx_t_1);
36458   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 30, __pyx_L1_error)
36459   __Pyx_GOTREF(__pyx_t_3);
36460   __Pyx_GIVEREF(__pyx_t_1);
36461   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
36462   __pyx_t_1 = 0;
36463   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 30, __pyx_L1_error)
36464   __Pyx_GOTREF(__pyx_t_1);
36465   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(13, 30, __pyx_L1_error)
36466   __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 30, __pyx_L1_error)
36467   __Pyx_GOTREF(__pyx_t_4);
36468   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36469   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
36470   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36471   if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(13, 30, __pyx_L1_error)
36472   __pyx_t_5 = ((PyArrayObject *)__pyx_t_4);
36473   {
36474     __Pyx_BufFmt_StackElem __pyx_stack[1];
36475     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
36476     __pyx_t_6 = __Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack);
36477     if (unlikely(__pyx_t_6 < 0)) {
36478       PyErr_Fetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
36479       if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_mask.rcbuffer->pybuffer, (PyObject*)__pyx_v_mask, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 3, 0, __pyx_stack) == -1)) {
36480         Py_XDECREF(__pyx_t_7); Py_XDECREF(__pyx_t_8); Py_XDECREF(__pyx_t_9);
36481         __Pyx_RaiseBufferFallbackError();
36482       } else {
36483         PyErr_Restore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
36484       }
36485       __pyx_t_7 = __pyx_t_8 = __pyx_t_9 = 0;
36486     }
36487     __pyx_pybuffernd_mask.diminfo[0].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_mask.diminfo[0].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_mask.diminfo[1].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_mask.diminfo[1].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[1]; __pyx_pybuffernd_mask.diminfo[2].strides = __pyx_pybuffernd_mask.rcbuffer->pybuffer.strides[2]; __pyx_pybuffernd_mask.diminfo[2].shape = __pyx_pybuffernd_mask.rcbuffer->pybuffer.shape[2];
36488     if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(13, 30, __pyx_L1_error)
36489   }
36490   __pyx_t_5 = 0;
36491   __pyx_v_mask = ((PyArrayObject *)__pyx_t_4);
36492   __pyx_t_4 = 0;
36493 
36494   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":31
36495  *         cdef np.ndarray[np.uint8_t, ndim=3] mask
36496  *         mask = np.ones(gobj.ActiveDimensions, dtype='uint8')
36497  *         return mask.astype("bool")             # <<<<<<<<<<<<<<
36498  *
36499  *     def _hash_vals(self):
36500  */
36501   __Pyx_XDECREF(__pyx_r);
36502   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_mask), __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 31, __pyx_L1_error)
36503   __Pyx_GOTREF(__pyx_t_1);
36504   __pyx_t_3 = NULL;
36505   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
36506     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
36507     if (likely(__pyx_t_3)) {
36508       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
36509       __Pyx_INCREF(__pyx_t_3);
36510       __Pyx_INCREF(function);
36511       __Pyx_DECREF_SET(__pyx_t_1, function);
36512     }
36513   }
36514   __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_n_s_bool);
36515   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
36516   if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 31, __pyx_L1_error)
36517   __Pyx_GOTREF(__pyx_t_4);
36518   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36519   __pyx_r = __pyx_t_4;
36520   __pyx_t_4 = 0;
36521   goto __pyx_L0;
36522 
36523   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":28
36524  *     @cython.wraparound(False)
36525  *     @cython.cdivision(True)
36526  *     def fill_mask(self, gobj):             # <<<<<<<<<<<<<<
36527  *         cdef np.ndarray[np.uint8_t, ndim=3] mask
36528  *         mask = np.ones(gobj.ActiveDimensions, dtype='uint8')
36529  */
36530 
36531   /* function exit code */
36532   __pyx_L1_error:;
36533   __Pyx_XDECREF(__pyx_t_1);
36534   __Pyx_XDECREF(__pyx_t_2);
36535   __Pyx_XDECREF(__pyx_t_3);
36536   __Pyx_XDECREF(__pyx_t_4);
36537   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
36538     __Pyx_PyThreadState_declare
36539     __Pyx_PyThreadState_assign
36540     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
36541     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
36542   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
36543   __Pyx_AddTraceback("yt.geometry.selection_routines.DataCollectionSelector.fill_mask", __pyx_clineno, __pyx_lineno, __pyx_filename);
36544   __pyx_r = NULL;
36545   goto __pyx_L2;
36546   __pyx_L0:;
36547   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_mask.rcbuffer->pybuffer);
36548   __pyx_L2:;
36549   __Pyx_XDECREF((PyObject *)__pyx_v_mask);
36550   __Pyx_XGIVEREF(__pyx_r);
36551   __Pyx_RefNannyFinishContext();
36552   return __pyx_r;
36553 }
36554 
36555 /* "yt/geometry/_selection_routines/data_collection_selector.pxi":33
36556  *         return mask.astype("bool")
36557  *
36558  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
36559  *         return (hash(self.obj_ids.tobytes()), self.nids)
36560  *
36561  */
36562 
36563 /* Python wrapper */
36564 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_7_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
36565 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_7_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
36566   PyObject *__pyx_r = 0;
36567   __Pyx_RefNannyDeclarations
36568   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
36569   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_6_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *)__pyx_v_self));
36570 
36571   /* function exit code */
36572   __Pyx_RefNannyFinishContext();
36573   return __pyx_r;
36574 }
36575 
36576 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_6_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_v_self) {
36577   PyObject *__pyx_r = NULL;
36578   __Pyx_RefNannyDeclarations
36579   PyObject *__pyx_t_1 = NULL;
36580   PyObject *__pyx_t_2 = NULL;
36581   PyObject *__pyx_t_3 = NULL;
36582   Py_hash_t __pyx_t_4;
36583   __Pyx_RefNannySetupContext("_hash_vals", 0);
36584 
36585   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":34
36586  *
36587  *     def _hash_vals(self):
36588  *         return (hash(self.obj_ids.tobytes()), self.nids)             # <<<<<<<<<<<<<<
36589  *
36590  * data_collection_selector = DataCollectionSelector
36591  */
36592   __Pyx_XDECREF(__pyx_r);
36593   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->obj_ids, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 34, __pyx_L1_error)
36594   __Pyx_GOTREF(__pyx_t_2);
36595   __pyx_t_3 = NULL;
36596   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
36597     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
36598     if (likely(__pyx_t_3)) {
36599       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
36600       __Pyx_INCREF(__pyx_t_3);
36601       __Pyx_INCREF(function);
36602       __Pyx_DECREF_SET(__pyx_t_2, function);
36603     }
36604   }
36605   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
36606   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
36607   if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 34, __pyx_L1_error)
36608   __Pyx_GOTREF(__pyx_t_1);
36609   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36610   __pyx_t_4 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_4 == ((Py_hash_t)-1))) __PYX_ERR(13, 34, __pyx_L1_error)
36611   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36612   __pyx_t_1 = __Pyx_PyInt_FromHash_t(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(13, 34, __pyx_L1_error)
36613   __Pyx_GOTREF(__pyx_t_1);
36614   __pyx_t_2 = __Pyx_PyInt_From_npy_int64(__pyx_v_self->nids); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 34, __pyx_L1_error)
36615   __Pyx_GOTREF(__pyx_t_2);
36616   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 34, __pyx_L1_error)
36617   __Pyx_GOTREF(__pyx_t_3);
36618   __Pyx_GIVEREF(__pyx_t_1);
36619   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
36620   __Pyx_GIVEREF(__pyx_t_2);
36621   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
36622   __pyx_t_1 = 0;
36623   __pyx_t_2 = 0;
36624   __pyx_r = __pyx_t_3;
36625   __pyx_t_3 = 0;
36626   goto __pyx_L0;
36627 
36628   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":33
36629  *         return mask.astype("bool")
36630  *
36631  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
36632  *         return (hash(self.obj_ids.tobytes()), self.nids)
36633  *
36634  */
36635 
36636   /* function exit code */
36637   __pyx_L1_error:;
36638   __Pyx_XDECREF(__pyx_t_1);
36639   __Pyx_XDECREF(__pyx_t_2);
36640   __Pyx_XDECREF(__pyx_t_3);
36641   __Pyx_AddTraceback("yt.geometry.selection_routines.DataCollectionSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
36642   __pyx_r = NULL;
36643   __pyx_L0:;
36644   __Pyx_XGIVEREF(__pyx_r);
36645   __Pyx_RefNannyFinishContext();
36646   return __pyx_r;
36647 }
36648 
36649 /* "(tree fragment)":1
36650  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
36651  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
36652  * def __setstate_cython__(self, __pyx_state):
36653  */
36654 
36655 /* Python wrapper */
36656 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
36657 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
36658   PyObject *__pyx_r = 0;
36659   __Pyx_RefNannyDeclarations
36660   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
36661   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_8__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *)__pyx_v_self));
36662 
36663   /* function exit code */
36664   __Pyx_RefNannyFinishContext();
36665   return __pyx_r;
36666 }
36667 
36668 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_v_self) {
36669   PyObject *__pyx_r = NULL;
36670   __Pyx_RefNannyDeclarations
36671   PyObject *__pyx_t_1 = NULL;
36672   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
36673 
36674   /* "(tree fragment)":2
36675  * def __reduce_cython__(self):
36676  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
36677  * def __setstate_cython__(self, __pyx_state):
36678  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
36679  */
36680   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
36681   __Pyx_GOTREF(__pyx_t_1);
36682   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
36683   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36684   __PYX_ERR(5, 2, __pyx_L1_error)
36685 
36686   /* "(tree fragment)":1
36687  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
36688  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
36689  * def __setstate_cython__(self, __pyx_state):
36690  */
36691 
36692   /* function exit code */
36693   __pyx_L1_error:;
36694   __Pyx_XDECREF(__pyx_t_1);
36695   __Pyx_AddTraceback("yt.geometry.selection_routines.DataCollectionSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
36696   __pyx_r = NULL;
36697   __Pyx_XGIVEREF(__pyx_r);
36698   __Pyx_RefNannyFinishContext();
36699   return __pyx_r;
36700 }
36701 
36702 /* "(tree fragment)":3
36703  * def __reduce_cython__(self):
36704  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
36705  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
36706  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
36707  */
36708 
36709 /* Python wrapper */
36710 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
36711 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
36712   PyObject *__pyx_r = 0;
36713   __Pyx_RefNannyDeclarations
36714   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
36715   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_10__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
36716 
36717   /* function exit code */
36718   __Pyx_RefNannyFinishContext();
36719   return __pyx_r;
36720 }
36721 
36722 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22DataCollectionSelector_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
36723   PyObject *__pyx_r = NULL;
36724   __Pyx_RefNannyDeclarations
36725   PyObject *__pyx_t_1 = NULL;
36726   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
36727 
36728   /* "(tree fragment)":4
36729  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
36730  * def __setstate_cython__(self, __pyx_state):
36731  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
36732  */
36733   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
36734   __Pyx_GOTREF(__pyx_t_1);
36735   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
36736   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36737   __PYX_ERR(5, 4, __pyx_L1_error)
36738 
36739   /* "(tree fragment)":3
36740  * def __reduce_cython__(self):
36741  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
36742  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
36743  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
36744  */
36745 
36746   /* function exit code */
36747   __pyx_L1_error:;
36748   __Pyx_XDECREF(__pyx_t_1);
36749   __Pyx_AddTraceback("yt.geometry.selection_routines.DataCollectionSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
36750   __pyx_r = NULL;
36751   __Pyx_XGIVEREF(__pyx_r);
36752   __Pyx_RefNannyFinishContext();
36753   return __pyx_r;
36754 }
36755 
36756 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":6
36757  *     cdef public np.float64_t center[3]
36758  *
36759  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
36760  *         cdef int i
36761  *         _ensure_code(dobj.center)
36762  */
36763 
36764 /* Python wrapper */
36765 static int __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
36766 static int __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
36767   PyObject *__pyx_v_dobj = 0;
36768   int __pyx_r;
36769   __Pyx_RefNannyDeclarations
36770   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
36771   {
36772     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
36773     PyObject* values[1] = {0};
36774     if (unlikely(__pyx_kwds)) {
36775       Py_ssize_t kw_args;
36776       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
36777       switch (pos_args) {
36778         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
36779         CYTHON_FALLTHROUGH;
36780         case  0: break;
36781         default: goto __pyx_L5_argtuple_error;
36782       }
36783       kw_args = PyDict_Size(__pyx_kwds);
36784       switch (pos_args) {
36785         case  0:
36786         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
36787         else goto __pyx_L5_argtuple_error;
36788       }
36789       if (unlikely(kw_args > 0)) {
36790         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(14, 6, __pyx_L3_error)
36791       }
36792     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
36793       goto __pyx_L5_argtuple_error;
36794     } else {
36795       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
36796     }
36797     __pyx_v_dobj = values[0];
36798   }
36799   goto __pyx_L4_argument_unpacking_done;
36800   __pyx_L5_argtuple_error:;
36801   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(14, 6, __pyx_L3_error)
36802   __pyx_L3_error:;
36803   __Pyx_AddTraceback("yt.geometry.selection_routines.EllipsoidSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
36804   __Pyx_RefNannyFinishContext();
36805   return -1;
36806   __pyx_L4_argument_unpacking_done:;
36807   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self), __pyx_v_dobj);
36808 
36809   /* function exit code */
36810   __Pyx_RefNannyFinishContext();
36811   return __pyx_r;
36812 }
36813 
36814 static int __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
36815   int __pyx_v_i;
36816   int __pyx_r;
36817   __Pyx_RefNannyDeclarations
36818   PyObject *__pyx_t_1 = NULL;
36819   PyObject *__pyx_t_2 = NULL;
36820   int __pyx_t_3;
36821   __pyx_t_5numpy_float64_t __pyx_t_4;
36822   __Pyx_RefNannySetupContext("__init__", 0);
36823 
36824   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":8
36825  *     def __init__(self, dobj):
36826  *         cdef int i
36827  *         _ensure_code(dobj.center)             # <<<<<<<<<<<<<<
36828  *         _ensure_code(dobj._e0)
36829  *         _ensure_code(dobj._e1)
36830  */
36831   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_center); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 8, __pyx_L1_error)
36832   __Pyx_GOTREF(__pyx_t_1);
36833   __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 8, __pyx_L1_error)
36834   __Pyx_GOTREF(__pyx_t_2);
36835   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36836   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36837 
36838   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":9
36839  *         cdef int i
36840  *         _ensure_code(dobj.center)
36841  *         _ensure_code(dobj._e0)             # <<<<<<<<<<<<<<
36842  *         _ensure_code(dobj._e1)
36843  *         _ensure_code(dobj._e2)
36844  */
36845   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_e0); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 9, __pyx_L1_error)
36846   __Pyx_GOTREF(__pyx_t_2);
36847   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 9, __pyx_L1_error)
36848   __Pyx_GOTREF(__pyx_t_1);
36849   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36850   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36851 
36852   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":10
36853  *         _ensure_code(dobj.center)
36854  *         _ensure_code(dobj._e0)
36855  *         _ensure_code(dobj._e1)             # <<<<<<<<<<<<<<
36856  *         _ensure_code(dobj._e2)
36857  *         _ensure_code(dobj._A)
36858  */
36859   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_e1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 10, __pyx_L1_error)
36860   __Pyx_GOTREF(__pyx_t_1);
36861   __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 10, __pyx_L1_error)
36862   __Pyx_GOTREF(__pyx_t_2);
36863   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36864   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36865 
36866   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":11
36867  *         _ensure_code(dobj._e0)
36868  *         _ensure_code(dobj._e1)
36869  *         _ensure_code(dobj._e2)             # <<<<<<<<<<<<<<
36870  *         _ensure_code(dobj._A)
36871  *         _ensure_code(dobj._B)
36872  */
36873   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_e2); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 11, __pyx_L1_error)
36874   __Pyx_GOTREF(__pyx_t_2);
36875   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 11, __pyx_L1_error)
36876   __Pyx_GOTREF(__pyx_t_1);
36877   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36878   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36879 
36880   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":12
36881  *         _ensure_code(dobj._e1)
36882  *         _ensure_code(dobj._e2)
36883  *         _ensure_code(dobj._A)             # <<<<<<<<<<<<<<
36884  *         _ensure_code(dobj._B)
36885  *         _ensure_code(dobj._C)
36886  */
36887   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_A); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 12, __pyx_L1_error)
36888   __Pyx_GOTREF(__pyx_t_1);
36889   __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 12, __pyx_L1_error)
36890   __Pyx_GOTREF(__pyx_t_2);
36891   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36892   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36893 
36894   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":13
36895  *         _ensure_code(dobj._e2)
36896  *         _ensure_code(dobj._A)
36897  *         _ensure_code(dobj._B)             # <<<<<<<<<<<<<<
36898  *         _ensure_code(dobj._C)
36899  *         for i in range(3):
36900  */
36901   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_B); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 13, __pyx_L1_error)
36902   __Pyx_GOTREF(__pyx_t_2);
36903   __pyx_t_1 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 13, __pyx_L1_error)
36904   __Pyx_GOTREF(__pyx_t_1);
36905   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36906   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36907 
36908   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":14
36909  *         _ensure_code(dobj._A)
36910  *         _ensure_code(dobj._B)
36911  *         _ensure_code(dobj._C)             # <<<<<<<<<<<<<<
36912  *         for i in range(3):
36913  *             self.center[i] = dobj.center[i]
36914  */
36915   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_C); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 14, __pyx_L1_error)
36916   __Pyx_GOTREF(__pyx_t_1);
36917   __pyx_t_2 = __pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 14, __pyx_L1_error)
36918   __Pyx_GOTREF(__pyx_t_2);
36919   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36920   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36921 
36922   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":15
36923  *         _ensure_code(dobj._B)
36924  *         _ensure_code(dobj._C)
36925  *         for i in range(3):             # <<<<<<<<<<<<<<
36926  *             self.center[i] = dobj.center[i]
36927  *             self.vec[0][i] = dobj._e0[i]
36928  */
36929   for (__pyx_t_3 = 0; __pyx_t_3 < 3; __pyx_t_3+=1) {
36930     __pyx_v_i = __pyx_t_3;
36931 
36932     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":16
36933  *         _ensure_code(dobj._C)
36934  *         for i in range(3):
36935  *             self.center[i] = dobj.center[i]             # <<<<<<<<<<<<<<
36936  *             self.vec[0][i] = dobj._e0[i]
36937  *             self.vec[1][i] = dobj._e1[i]
36938  */
36939     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_center); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 16, __pyx_L1_error)
36940     __Pyx_GOTREF(__pyx_t_2);
36941     __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 16, __pyx_L1_error)
36942     __Pyx_GOTREF(__pyx_t_1);
36943     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36944     __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(14, 16, __pyx_L1_error)
36945     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36946     (__pyx_v_self->center[__pyx_v_i]) = __pyx_t_4;
36947 
36948     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":17
36949  *         for i in range(3):
36950  *             self.center[i] = dobj.center[i]
36951  *             self.vec[0][i] = dobj._e0[i]             # <<<<<<<<<<<<<<
36952  *             self.vec[1][i] = dobj._e1[i]
36953  *             self.vec[2][i] = dobj._e2[i]
36954  */
36955     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_e0); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 17, __pyx_L1_error)
36956     __Pyx_GOTREF(__pyx_t_1);
36957     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 17, __pyx_L1_error)
36958     __Pyx_GOTREF(__pyx_t_2);
36959     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36960     __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(14, 17, __pyx_L1_error)
36961     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36962     ((__pyx_v_self->vec[0])[__pyx_v_i]) = __pyx_t_4;
36963 
36964     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":18
36965  *             self.center[i] = dobj.center[i]
36966  *             self.vec[0][i] = dobj._e0[i]
36967  *             self.vec[1][i] = dobj._e1[i]             # <<<<<<<<<<<<<<
36968  *             self.vec[2][i] = dobj._e2[i]
36969  *         self.mag[0] = dobj._A
36970  */
36971     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_e1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 18, __pyx_L1_error)
36972     __Pyx_GOTREF(__pyx_t_2);
36973     __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 18, __pyx_L1_error)
36974     __Pyx_GOTREF(__pyx_t_1);
36975     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36976     __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(14, 18, __pyx_L1_error)
36977     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36978     ((__pyx_v_self->vec[1])[__pyx_v_i]) = __pyx_t_4;
36979 
36980     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":19
36981  *             self.vec[0][i] = dobj._e0[i]
36982  *             self.vec[1][i] = dobj._e1[i]
36983  *             self.vec[2][i] = dobj._e2[i]             # <<<<<<<<<<<<<<
36984  *         self.mag[0] = dobj._A
36985  *         self.mag[1] = dobj._B
36986  */
36987     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_e2); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 19, __pyx_L1_error)
36988     __Pyx_GOTREF(__pyx_t_1);
36989     __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 19, __pyx_L1_error)
36990     __Pyx_GOTREF(__pyx_t_2);
36991     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
36992     __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(14, 19, __pyx_L1_error)
36993     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
36994     ((__pyx_v_self->vec[2])[__pyx_v_i]) = __pyx_t_4;
36995   }
36996 
36997   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":20
36998  *             self.vec[1][i] = dobj._e1[i]
36999  *             self.vec[2][i] = dobj._e2[i]
37000  *         self.mag[0] = dobj._A             # <<<<<<<<<<<<<<
37001  *         self.mag[1] = dobj._B
37002  *         self.mag[2] = dobj._C
37003  */
37004   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_A); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 20, __pyx_L1_error)
37005   __Pyx_GOTREF(__pyx_t_2);
37006   __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(14, 20, __pyx_L1_error)
37007   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
37008   (__pyx_v_self->mag[0]) = __pyx_t_4;
37009 
37010   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":21
37011  *             self.vec[2][i] = dobj._e2[i]
37012  *         self.mag[0] = dobj._A
37013  *         self.mag[1] = dobj._B             # <<<<<<<<<<<<<<
37014  *         self.mag[2] = dobj._C
37015  *
37016  */
37017   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_B); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 21, __pyx_L1_error)
37018   __Pyx_GOTREF(__pyx_t_2);
37019   __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(14, 21, __pyx_L1_error)
37020   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
37021   (__pyx_v_self->mag[1]) = __pyx_t_4;
37022 
37023   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":22
37024  *         self.mag[0] = dobj._A
37025  *         self.mag[1] = dobj._B
37026  *         self.mag[2] = dobj._C             # <<<<<<<<<<<<<<
37027  *
37028  *     @cython.boundscheck(False)
37029  */
37030   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_C); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 22, __pyx_L1_error)
37031   __Pyx_GOTREF(__pyx_t_2);
37032   __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(14, 22, __pyx_L1_error)
37033   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
37034   (__pyx_v_self->mag[2]) = __pyx_t_4;
37035 
37036   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":6
37037  *     cdef public np.float64_t center[3]
37038  *
37039  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
37040  *         cdef int i
37041  *         _ensure_code(dobj.center)
37042  */
37043 
37044   /* function exit code */
37045   __pyx_r = 0;
37046   goto __pyx_L0;
37047   __pyx_L1_error:;
37048   __Pyx_XDECREF(__pyx_t_1);
37049   __Pyx_XDECREF(__pyx_t_2);
37050   __Pyx_AddTraceback("yt.geometry.selection_routines.EllipsoidSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
37051   __pyx_r = -1;
37052   __pyx_L0:;
37053   __Pyx_RefNannyFinishContext();
37054   return __pyx_r;
37055 }
37056 
37057 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":27
37058  *     @cython.wraparound(False)
37059  *     @cython.cdivision(True)
37060  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
37061  *         return self.select_point(pos)
37062  *
37063  */
37064 
37065 static int __pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds) {
37066   int __pyx_r;
37067 
37068   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":28
37069  *     @cython.cdivision(True)
37070  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
37071  *         return self.select_point(pos)             # <<<<<<<<<<<<<<
37072  *
37073  *     @cython.boundscheck(False)
37074  */
37075   __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.select_point(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_pos);
37076   goto __pyx_L0;
37077 
37078   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":27
37079  *     @cython.wraparound(False)
37080  *     @cython.cdivision(True)
37081  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
37082  *         return self.select_point(pos)
37083  *
37084  */
37085 
37086   /* function exit code */
37087   __pyx_L0:;
37088   return __pyx_r;
37089 }
37090 
37091 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":33
37092  *     @cython.wraparound(False)
37093  *     @cython.cdivision(True)
37094  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
37095  *         cdef np.float64_t dot_evec[3]
37096  *         cdef np.float64_t dist
37097  */
37098 
37099 static int __pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
37100   __pyx_t_5numpy_float64_t __pyx_v_dot_evec[3];
37101   __pyx_t_5numpy_float64_t __pyx_v_dist;
37102   int __pyx_v_i;
37103   int __pyx_v_j;
37104   int __pyx_r;
37105   int __pyx_t_1;
37106   int __pyx_t_2;
37107   int __pyx_t_3;
37108   int __pyx_t_4;
37109 
37110   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":37
37111  *         cdef np.float64_t dist
37112  *         cdef int i, j
37113  *         dot_evec[0] = dot_evec[1] = dot_evec[2] = 0             # <<<<<<<<<<<<<<
37114  *         # Calculate the rotated dot product
37115  *         for i in range(3): # axis
37116  */
37117   (__pyx_v_dot_evec[0]) = 0.0;
37118   (__pyx_v_dot_evec[1]) = 0.0;
37119   (__pyx_v_dot_evec[2]) = 0.0;
37120 
37121   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":39
37122  *         dot_evec[0] = dot_evec[1] = dot_evec[2] = 0
37123  *         # Calculate the rotated dot product
37124  *         for i in range(3): # axis             # <<<<<<<<<<<<<<
37125  *             dist = self.periodic_difference(pos[i], self.center[i], i)
37126  *             for j in range(3):
37127  */
37128   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
37129     __pyx_v_i = __pyx_t_1;
37130 
37131     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":40
37132  *         # Calculate the rotated dot product
37133  *         for i in range(3): # axis
37134  *             dist = self.periodic_difference(pos[i], self.center[i], i)             # <<<<<<<<<<<<<<
37135  *             for j in range(3):
37136  *                 dot_evec[j] += dist * self.vec[j][i]
37137  */
37138     __pyx_v_dist = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), (__pyx_v_pos[__pyx_v_i]), (__pyx_v_self->center[__pyx_v_i]), __pyx_v_i);
37139 
37140     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":41
37141  *         for i in range(3): # axis
37142  *             dist = self.periodic_difference(pos[i], self.center[i], i)
37143  *             for j in range(3):             # <<<<<<<<<<<<<<
37144  *                 dot_evec[j] += dist * self.vec[j][i]
37145  *         dist = 0.0
37146  */
37147     for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
37148       __pyx_v_j = __pyx_t_2;
37149 
37150       /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":42
37151  *             dist = self.periodic_difference(pos[i], self.center[i], i)
37152  *             for j in range(3):
37153  *                 dot_evec[j] += dist * self.vec[j][i]             # <<<<<<<<<<<<<<
37154  *         dist = 0.0
37155  *         for i in range(3):
37156  */
37157       __pyx_t_3 = __pyx_v_j;
37158       (__pyx_v_dot_evec[__pyx_t_3]) = ((__pyx_v_dot_evec[__pyx_t_3]) + (__pyx_v_dist * ((__pyx_v_self->vec[__pyx_v_j])[__pyx_v_i])));
37159     }
37160   }
37161 
37162   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":43
37163  *             for j in range(3):
37164  *                 dot_evec[j] += dist * self.vec[j][i]
37165  *         dist = 0.0             # <<<<<<<<<<<<<<
37166  *         for i in range(3):
37167  *             dist += (dot_evec[i] * dot_evec[i])/(self.mag[i] * self.mag[i])
37168  */
37169   __pyx_v_dist = 0.0;
37170 
37171   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":44
37172  *                 dot_evec[j] += dist * self.vec[j][i]
37173  *         dist = 0.0
37174  *         for i in range(3):             # <<<<<<<<<<<<<<
37175  *             dist += (dot_evec[i] * dot_evec[i])/(self.mag[i] * self.mag[i])
37176  *         if dist <= 1.0: return 1
37177  */
37178   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
37179     __pyx_v_i = __pyx_t_1;
37180 
37181     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":45
37182  *         dist = 0.0
37183  *         for i in range(3):
37184  *             dist += (dot_evec[i] * dot_evec[i])/(self.mag[i] * self.mag[i])             # <<<<<<<<<<<<<<
37185  *         if dist <= 1.0: return 1
37186  *         return 0
37187  */
37188     __pyx_v_dist = (__pyx_v_dist + (((__pyx_v_dot_evec[__pyx_v_i]) * (__pyx_v_dot_evec[__pyx_v_i])) / ((__pyx_v_self->mag[__pyx_v_i]) * (__pyx_v_self->mag[__pyx_v_i]))));
37189   }
37190 
37191   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":46
37192  *         for i in range(3):
37193  *             dist += (dot_evec[i] * dot_evec[i])/(self.mag[i] * self.mag[i])
37194  *         if dist <= 1.0: return 1             # <<<<<<<<<<<<<<
37195  *         return 0
37196  *
37197  */
37198   __pyx_t_4 = ((__pyx_v_dist <= 1.0) != 0);
37199   if (__pyx_t_4) {
37200     __pyx_r = 1;
37201     goto __pyx_L0;
37202   }
37203 
37204   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":47
37205  *             dist += (dot_evec[i] * dot_evec[i])/(self.mag[i] * self.mag[i])
37206  *         if dist <= 1.0: return 1
37207  *         return 0             # <<<<<<<<<<<<<<
37208  *
37209  *     @cython.boundscheck(False)
37210  */
37211   __pyx_r = 0;
37212   goto __pyx_L0;
37213 
37214   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":33
37215  *     @cython.wraparound(False)
37216  *     @cython.cdivision(True)
37217  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
37218  *         cdef np.float64_t dot_evec[3]
37219  *         cdef np.float64_t dist
37220  */
37221 
37222   /* function exit code */
37223   __pyx_L0:;
37224   return __pyx_r;
37225 }
37226 
37227 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":52
37228  *     @cython.wraparound(False)
37229  *     @cython.cdivision(True)
37230  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
37231  *         # this is the sphere selection
37232  *         cdef int i
37233  */
37234 
37235 static int __pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
37236   int __pyx_v_i;
37237   __pyx_t_5numpy_float64_t __pyx_v_dist;
37238   __pyx_t_5numpy_float64_t __pyx_v_dist2_max;
37239   __pyx_t_5numpy_float64_t __pyx_v_dist2;
37240   int __pyx_r;
37241   int __pyx_t_1;
37242   int __pyx_t_2;
37243 
37244   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":55
37245  *         # this is the sphere selection
37246  *         cdef int i
37247  *         cdef np.float64_t dist, dist2_max, dist2 = 0             # <<<<<<<<<<<<<<
37248  *         for i in range(3):
37249  *             dist = self.periodic_difference(pos[i], self.center[i], i)
37250  */
37251   __pyx_v_dist2 = 0.0;
37252 
37253   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":56
37254  *         cdef int i
37255  *         cdef np.float64_t dist, dist2_max, dist2 = 0
37256  *         for i in range(3):             # <<<<<<<<<<<<<<
37257  *             dist = self.periodic_difference(pos[i], self.center[i], i)
37258  *             dist2 += dist * dist
37259  */
37260   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
37261     __pyx_v_i = __pyx_t_1;
37262 
37263     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":57
37264  *         cdef np.float64_t dist, dist2_max, dist2 = 0
37265  *         for i in range(3):
37266  *             dist = self.periodic_difference(pos[i], self.center[i], i)             # <<<<<<<<<<<<<<
37267  *             dist2 += dist * dist
37268  *         dist2_max = (self.mag[0] + radius) * (self.mag[0] + radius)
37269  */
37270     __pyx_v_dist = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), (__pyx_v_pos[__pyx_v_i]), (__pyx_v_self->center[__pyx_v_i]), __pyx_v_i);
37271 
37272     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":58
37273  *         for i in range(3):
37274  *             dist = self.periodic_difference(pos[i], self.center[i], i)
37275  *             dist2 += dist * dist             # <<<<<<<<<<<<<<
37276  *         dist2_max = (self.mag[0] + radius) * (self.mag[0] + radius)
37277  *         if dist2 <= dist2_max:
37278  */
37279     __pyx_v_dist2 = (__pyx_v_dist2 + (__pyx_v_dist * __pyx_v_dist));
37280   }
37281 
37282   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":59
37283  *             dist = self.periodic_difference(pos[i], self.center[i], i)
37284  *             dist2 += dist * dist
37285  *         dist2_max = (self.mag[0] + radius) * (self.mag[0] + radius)             # <<<<<<<<<<<<<<
37286  *         if dist2 <= dist2_max:
37287  *             return 1
37288  */
37289   __pyx_v_dist2_max = (((__pyx_v_self->mag[0]) + __pyx_v_radius) * ((__pyx_v_self->mag[0]) + __pyx_v_radius));
37290 
37291   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":60
37292  *             dist2 += dist * dist
37293  *         dist2_max = (self.mag[0] + radius) * (self.mag[0] + radius)
37294  *         if dist2 <= dist2_max:             # <<<<<<<<<<<<<<
37295  *             return 1
37296  *         return 0
37297  */
37298   __pyx_t_2 = ((__pyx_v_dist2 <= __pyx_v_dist2_max) != 0);
37299   if (__pyx_t_2) {
37300 
37301     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":61
37302  *         dist2_max = (self.mag[0] + radius) * (self.mag[0] + radius)
37303  *         if dist2 <= dist2_max:
37304  *             return 1             # <<<<<<<<<<<<<<
37305  *         return 0
37306  *
37307  */
37308     __pyx_r = 1;
37309     goto __pyx_L0;
37310 
37311     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":60
37312  *             dist2 += dist * dist
37313  *         dist2_max = (self.mag[0] + radius) * (self.mag[0] + radius)
37314  *         if dist2 <= dist2_max:             # <<<<<<<<<<<<<<
37315  *             return 1
37316  *         return 0
37317  */
37318   }
37319 
37320   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":62
37321  *         if dist2 <= dist2_max:
37322  *             return 1
37323  *         return 0             # <<<<<<<<<<<<<<
37324  *
37325  *     @cython.boundscheck(False)
37326  */
37327   __pyx_r = 0;
37328   goto __pyx_L0;
37329 
37330   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":52
37331  *     @cython.wraparound(False)
37332  *     @cython.cdivision(True)
37333  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
37334  *         # this is the sphere selection
37335  *         cdef int i
37336  */
37337 
37338   /* function exit code */
37339   __pyx_L0:;
37340   return __pyx_r;
37341 }
37342 
37343 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":67
37344  *     @cython.wraparound(False)
37345  *     @cython.cdivision(True)
37346  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
37347  *                                np.float64_t right_edge[3]) nogil:
37348  *         # This is the sphere selection
37349  */
37350 
37351 static int __pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
37352   int __pyx_v_i;
37353   __pyx_t_5numpy_float64_t __pyx_v_box_center;
37354   __pyx_t_5numpy_float64_t __pyx_v_relcenter;
37355   __pyx_t_5numpy_float64_t __pyx_v_closest;
37356   __pyx_t_5numpy_float64_t __pyx_v_dist;
37357   __pyx_t_5numpy_float64_t __pyx_v_edge;
37358   __pyx_t_5numpy_float64_t __pyx_v_dist_max;
37359   int __pyx_r;
37360   int __pyx_t_1;
37361   int __pyx_t_2;
37362   int __pyx_t_3;
37363   int __pyx_t_4;
37364 
37365   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":72
37366  *         cdef int i
37367  *         cdef np.float64_t box_center, relcenter, closest, dist, edge, dist_max
37368  *         if left_edge[0] <= self.center[0] <= right_edge[0] and \             # <<<<<<<<<<<<<<
37369  *            left_edge[1] <= self.center[1] <= right_edge[1] and \
37370  *            left_edge[2] <= self.center[2] <= right_edge[2]:
37371  */
37372   __pyx_t_2 = ((__pyx_v_left_edge[0]) <= (__pyx_v_self->center[0]));
37373   if (__pyx_t_2) {
37374     __pyx_t_2 = ((__pyx_v_self->center[0]) <= (__pyx_v_right_edge[0]));
37375   }
37376   __pyx_t_3 = (__pyx_t_2 != 0);
37377   if (__pyx_t_3) {
37378   } else {
37379     __pyx_t_1 = __pyx_t_3;
37380     goto __pyx_L4_bool_binop_done;
37381   }
37382 
37383   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":73
37384  *         cdef np.float64_t box_center, relcenter, closest, dist, edge, dist_max
37385  *         if left_edge[0] <= self.center[0] <= right_edge[0] and \
37386  *            left_edge[1] <= self.center[1] <= right_edge[1] and \             # <<<<<<<<<<<<<<
37387  *            left_edge[2] <= self.center[2] <= right_edge[2]:
37388  *             return 1
37389  */
37390   __pyx_t_3 = ((__pyx_v_left_edge[1]) <= (__pyx_v_self->center[1]));
37391   if (__pyx_t_3) {
37392     __pyx_t_3 = ((__pyx_v_self->center[1]) <= (__pyx_v_right_edge[1]));
37393   }
37394   __pyx_t_2 = (__pyx_t_3 != 0);
37395   if (__pyx_t_2) {
37396   } else {
37397     __pyx_t_1 = __pyx_t_2;
37398     goto __pyx_L4_bool_binop_done;
37399   }
37400 
37401   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":74
37402  *         if left_edge[0] <= self.center[0] <= right_edge[0] and \
37403  *            left_edge[1] <= self.center[1] <= right_edge[1] and \
37404  *            left_edge[2] <= self.center[2] <= right_edge[2]:             # <<<<<<<<<<<<<<
37405  *             return 1
37406  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
37407  */
37408   __pyx_t_2 = ((__pyx_v_left_edge[2]) <= (__pyx_v_self->center[2]));
37409   if (__pyx_t_2) {
37410     __pyx_t_2 = ((__pyx_v_self->center[2]) <= (__pyx_v_right_edge[2]));
37411   }
37412   __pyx_t_3 = (__pyx_t_2 != 0);
37413   __pyx_t_1 = __pyx_t_3;
37414   __pyx_L4_bool_binop_done:;
37415 
37416   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":72
37417  *         cdef int i
37418  *         cdef np.float64_t box_center, relcenter, closest, dist, edge, dist_max
37419  *         if left_edge[0] <= self.center[0] <= right_edge[0] and \             # <<<<<<<<<<<<<<
37420  *            left_edge[1] <= self.center[1] <= right_edge[1] and \
37421  *            left_edge[2] <= self.center[2] <= right_edge[2]:
37422  */
37423   if (__pyx_t_1) {
37424 
37425     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":75
37426  *            left_edge[1] <= self.center[1] <= right_edge[1] and \
37427  *            left_edge[2] <= self.center[2] <= right_edge[2]:
37428  *             return 1             # <<<<<<<<<<<<<<
37429  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
37430  *         dist = 0
37431  */
37432     __pyx_r = 1;
37433     goto __pyx_L0;
37434 
37435     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":72
37436  *         cdef int i
37437  *         cdef np.float64_t box_center, relcenter, closest, dist, edge, dist_max
37438  *         if left_edge[0] <= self.center[0] <= right_edge[0] and \             # <<<<<<<<<<<<<<
37439  *            left_edge[1] <= self.center[1] <= right_edge[1] and \
37440  *            left_edge[2] <= self.center[2] <= right_edge[2]:
37441  */
37442   }
37443 
37444   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":77
37445  *             return 1
37446  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
37447  *         dist = 0             # <<<<<<<<<<<<<<
37448  *         for i in range(3):
37449  *             box_center = (right_edge[i] + left_edge[i])/2.0
37450  */
37451   __pyx_v_dist = 0.0;
37452 
37453   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":78
37454  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
37455  *         dist = 0
37456  *         for i in range(3):             # <<<<<<<<<<<<<<
37457  *             box_center = (right_edge[i] + left_edge[i])/2.0
37458  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
37459  */
37460   for (__pyx_t_4 = 0; __pyx_t_4 < 3; __pyx_t_4+=1) {
37461     __pyx_v_i = __pyx_t_4;
37462 
37463     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":79
37464  *         dist = 0
37465  *         for i in range(3):
37466  *             box_center = (right_edge[i] + left_edge[i])/2.0             # <<<<<<<<<<<<<<
37467  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
37468  *             edge = right_edge[i] - left_edge[i]
37469  */
37470     __pyx_v_box_center = (((__pyx_v_right_edge[__pyx_v_i]) + (__pyx_v_left_edge[__pyx_v_i])) / 2.0);
37471 
37472     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":80
37473  *         for i in range(3):
37474  *             box_center = (right_edge[i] + left_edge[i])/2.0
37475  *             relcenter = self.periodic_difference(box_center, self.center[i], i)             # <<<<<<<<<<<<<<
37476  *             edge = right_edge[i] - left_edge[i]
37477  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
37478  */
37479     __pyx_v_relcenter = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_box_center, (__pyx_v_self->center[__pyx_v_i]), __pyx_v_i);
37480 
37481     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":81
37482  *             box_center = (right_edge[i] + left_edge[i])/2.0
37483  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
37484  *             edge = right_edge[i] - left_edge[i]             # <<<<<<<<<<<<<<
37485  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
37486  *             dist += closest * closest
37487  */
37488     __pyx_v_edge = ((__pyx_v_right_edge[__pyx_v_i]) - (__pyx_v_left_edge[__pyx_v_i]));
37489 
37490     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":82
37491  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
37492  *             edge = right_edge[i] - left_edge[i]
37493  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)             # <<<<<<<<<<<<<<
37494  *             dist += closest * closest
37495  *         dist_max = self.mag[0] * self.mag[0]
37496  */
37497     __pyx_v_closest = (__pyx_v_relcenter - __pyx_f_2yt_9utilities_3lib_8fp_utils_fclip(__pyx_v_relcenter, ((-__pyx_v_edge) / 2.0), (__pyx_v_edge / 2.0)));
37498 
37499     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":83
37500  *             edge = right_edge[i] - left_edge[i]
37501  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
37502  *             dist += closest * closest             # <<<<<<<<<<<<<<
37503  *         dist_max = self.mag[0] * self.mag[0]
37504  *         if dist <= dist_max:
37505  */
37506     __pyx_v_dist = (__pyx_v_dist + (__pyx_v_closest * __pyx_v_closest));
37507   }
37508 
37509   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":84
37510  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
37511  *             dist += closest * closest
37512  *         dist_max = self.mag[0] * self.mag[0]             # <<<<<<<<<<<<<<
37513  *         if dist <= dist_max:
37514  *             return 1
37515  */
37516   __pyx_v_dist_max = ((__pyx_v_self->mag[0]) * (__pyx_v_self->mag[0]));
37517 
37518   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":85
37519  *             dist += closest * closest
37520  *         dist_max = self.mag[0] * self.mag[0]
37521  *         if dist <= dist_max:             # <<<<<<<<<<<<<<
37522  *             return 1
37523  *         return 0
37524  */
37525   __pyx_t_1 = ((__pyx_v_dist <= __pyx_v_dist_max) != 0);
37526   if (__pyx_t_1) {
37527 
37528     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":86
37529  *         dist_max = self.mag[0] * self.mag[0]
37530  *         if dist <= dist_max:
37531  *             return 1             # <<<<<<<<<<<<<<
37532  *         return 0
37533  *
37534  */
37535     __pyx_r = 1;
37536     goto __pyx_L0;
37537 
37538     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":85
37539  *             dist += closest * closest
37540  *         dist_max = self.mag[0] * self.mag[0]
37541  *         if dist <= dist_max:             # <<<<<<<<<<<<<<
37542  *             return 1
37543  *         return 0
37544  */
37545   }
37546 
37547   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":87
37548  *         if dist <= dist_max:
37549  *             return 1
37550  *         return 0             # <<<<<<<<<<<<<<
37551  *
37552  *     @cython.boundscheck(False)
37553  */
37554   __pyx_r = 0;
37555   goto __pyx_L0;
37556 
37557   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":67
37558  *     @cython.wraparound(False)
37559  *     @cython.cdivision(True)
37560  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
37561  *                                np.float64_t right_edge[3]) nogil:
37562  *         # This is the sphere selection
37563  */
37564 
37565   /* function exit code */
37566   __pyx_L0:;
37567   return __pyx_r;
37568 }
37569 
37570 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":92
37571  *     @cython.wraparound(False)
37572  *     @cython.cdivision(True)
37573  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
37574  *                                np.float64_t right_edge[3]) nogil:
37575  *         # This is the sphere selection
37576  */
37577 
37578 static int __pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
37579   int __pyx_v_i;
37580   __pyx_t_5numpy_float64_t __pyx_v_box_center;
37581   __pyx_t_5numpy_float64_t __pyx_v_relcenter;
37582   __pyx_t_5numpy_float64_t __pyx_v_closest;
37583   __pyx_t_5numpy_float64_t __pyx_v_farthest;
37584   __pyx_t_5numpy_float64_t __pyx_v_cdist;
37585   __pyx_t_5numpy_float64_t __pyx_v_fdist;
37586   __pyx_t_5numpy_float64_t __pyx_v_edge;
37587   int __pyx_r;
37588   int __pyx_t_1;
37589   int __pyx_t_2;
37590   int __pyx_t_3;
37591   int __pyx_t_4;
37592 
37593   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":97
37594  *         cdef int i
37595  *         cdef np.float64_t box_center, relcenter, closest, farthest, cdist, fdist, edge
37596  *         if left_edge[0] <= self.center[0] <= right_edge[0] and \             # <<<<<<<<<<<<<<
37597  *            left_edge[1] <= self.center[1] <= right_edge[1] and \
37598  *            left_edge[2] <= self.center[2] <= right_edge[2]:
37599  */
37600   __pyx_t_2 = ((__pyx_v_left_edge[0]) <= (__pyx_v_self->center[0]));
37601   if (__pyx_t_2) {
37602     __pyx_t_2 = ((__pyx_v_self->center[0]) <= (__pyx_v_right_edge[0]));
37603   }
37604   __pyx_t_3 = (__pyx_t_2 != 0);
37605   if (__pyx_t_3) {
37606   } else {
37607     __pyx_t_1 = __pyx_t_3;
37608     goto __pyx_L4_bool_binop_done;
37609   }
37610 
37611   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":98
37612  *         cdef np.float64_t box_center, relcenter, closest, farthest, cdist, fdist, edge
37613  *         if left_edge[0] <= self.center[0] <= right_edge[0] and \
37614  *            left_edge[1] <= self.center[1] <= right_edge[1] and \             # <<<<<<<<<<<<<<
37615  *            left_edge[2] <= self.center[2] <= right_edge[2]:
37616  *             fdist = 0
37617  */
37618   __pyx_t_3 = ((__pyx_v_left_edge[1]) <= (__pyx_v_self->center[1]));
37619   if (__pyx_t_3) {
37620     __pyx_t_3 = ((__pyx_v_self->center[1]) <= (__pyx_v_right_edge[1]));
37621   }
37622   __pyx_t_2 = (__pyx_t_3 != 0);
37623   if (__pyx_t_2) {
37624   } else {
37625     __pyx_t_1 = __pyx_t_2;
37626     goto __pyx_L4_bool_binop_done;
37627   }
37628 
37629   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":99
37630  *         if left_edge[0] <= self.center[0] <= right_edge[0] and \
37631  *            left_edge[1] <= self.center[1] <= right_edge[1] and \
37632  *            left_edge[2] <= self.center[2] <= right_edge[2]:             # <<<<<<<<<<<<<<
37633  *             fdist = 0
37634  *             for i in range(3):
37635  */
37636   __pyx_t_2 = ((__pyx_v_left_edge[2]) <= (__pyx_v_self->center[2]));
37637   if (__pyx_t_2) {
37638     __pyx_t_2 = ((__pyx_v_self->center[2]) <= (__pyx_v_right_edge[2]));
37639   }
37640   __pyx_t_3 = (__pyx_t_2 != 0);
37641   __pyx_t_1 = __pyx_t_3;
37642   __pyx_L4_bool_binop_done:;
37643 
37644   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":97
37645  *         cdef int i
37646  *         cdef np.float64_t box_center, relcenter, closest, farthest, cdist, fdist, edge
37647  *         if left_edge[0] <= self.center[0] <= right_edge[0] and \             # <<<<<<<<<<<<<<
37648  *            left_edge[1] <= self.center[1] <= right_edge[1] and \
37649  *            left_edge[2] <= self.center[2] <= right_edge[2]:
37650  */
37651   if (__pyx_t_1) {
37652 
37653     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":100
37654  *            left_edge[1] <= self.center[1] <= right_edge[1] and \
37655  *            left_edge[2] <= self.center[2] <= right_edge[2]:
37656  *             fdist = 0             # <<<<<<<<<<<<<<
37657  *             for i in range(3):
37658  *                 edge = right_edge[i] - left_edge[i]
37659  */
37660     __pyx_v_fdist = 0.0;
37661 
37662     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":101
37663  *            left_edge[2] <= self.center[2] <= right_edge[2]:
37664  *             fdist = 0
37665  *             for i in range(3):             # <<<<<<<<<<<<<<
37666  *                 edge = right_edge[i] - left_edge[i]
37667  *                 box_center = (right_edge[i] + left_edge[i])/2.0
37668  */
37669     for (__pyx_t_4 = 0; __pyx_t_4 < 3; __pyx_t_4+=1) {
37670       __pyx_v_i = __pyx_t_4;
37671 
37672       /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":102
37673  *             fdist = 0
37674  *             for i in range(3):
37675  *                 edge = right_edge[i] - left_edge[i]             # <<<<<<<<<<<<<<
37676  *                 box_center = (right_edge[i] + left_edge[i])/2.0
37677  *                 relcenter = self.periodic_difference(
37678  */
37679       __pyx_v_edge = ((__pyx_v_right_edge[__pyx_v_i]) - (__pyx_v_left_edge[__pyx_v_i]));
37680 
37681       /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":103
37682  *             for i in range(3):
37683  *                 edge = right_edge[i] - left_edge[i]
37684  *                 box_center = (right_edge[i] + left_edge[i])/2.0             # <<<<<<<<<<<<<<
37685  *                 relcenter = self.periodic_difference(
37686  *                     box_center, self.center[i], i)
37687  */
37688       __pyx_v_box_center = (((__pyx_v_right_edge[__pyx_v_i]) + (__pyx_v_left_edge[__pyx_v_i])) / 2.0);
37689 
37690       /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":104
37691  *                 edge = right_edge[i] - left_edge[i]
37692  *                 box_center = (right_edge[i] + left_edge[i])/2.0
37693  *                 relcenter = self.periodic_difference(             # <<<<<<<<<<<<<<
37694  *                     box_center, self.center[i], i)
37695  *                 farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
37696  */
37697       __pyx_v_relcenter = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_box_center, (__pyx_v_self->center[__pyx_v_i]), __pyx_v_i);
37698 
37699       /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":106
37700  *                 relcenter = self.periodic_difference(
37701  *                     box_center, self.center[i], i)
37702  *                 farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)             # <<<<<<<<<<<<<<
37703  *                 fdist += farthest*farthest
37704  *                 if fdist >= self.mag[0]**2: return 2
37705  */
37706       __pyx_v_farthest = (__pyx_v_relcenter + __pyx_f_2yt_9utilities_3lib_8fp_utils_fclip(__pyx_v_relcenter, ((-__pyx_v_edge) / 2.0), (__pyx_v_edge / 2.0)));
37707 
37708       /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":107
37709  *                     box_center, self.center[i], i)
37710  *                 farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
37711  *                 fdist += farthest*farthest             # <<<<<<<<<<<<<<
37712  *                 if fdist >= self.mag[0]**2: return 2
37713  *             return 1
37714  */
37715       __pyx_v_fdist = (__pyx_v_fdist + (__pyx_v_farthest * __pyx_v_farthest));
37716 
37717       /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":108
37718  *                 farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
37719  *                 fdist += farthest*farthest
37720  *                 if fdist >= self.mag[0]**2: return 2             # <<<<<<<<<<<<<<
37721  *             return 1
37722  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
37723  */
37724       __pyx_t_1 = ((__pyx_v_fdist >= pow((__pyx_v_self->mag[0]), 2.0)) != 0);
37725       if (__pyx_t_1) {
37726         __pyx_r = 2;
37727         goto __pyx_L0;
37728       }
37729     }
37730 
37731     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":109
37732  *                 fdist += farthest*farthest
37733  *                 if fdist >= self.mag[0]**2: return 2
37734  *             return 1             # <<<<<<<<<<<<<<
37735  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
37736  *         cdist = 0
37737  */
37738     __pyx_r = 1;
37739     goto __pyx_L0;
37740 
37741     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":97
37742  *         cdef int i
37743  *         cdef np.float64_t box_center, relcenter, closest, farthest, cdist, fdist, edge
37744  *         if left_edge[0] <= self.center[0] <= right_edge[0] and \             # <<<<<<<<<<<<<<
37745  *            left_edge[1] <= self.center[1] <= right_edge[1] and \
37746  *            left_edge[2] <= self.center[2] <= right_edge[2]:
37747  */
37748   }
37749 
37750   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":111
37751  *             return 1
37752  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
37753  *         cdist = 0             # <<<<<<<<<<<<<<
37754  *         fdist = 0
37755  *         for i in range(3):
37756  */
37757   __pyx_v_cdist = 0.0;
37758 
37759   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":112
37760  *         # http://www.gamedev.net/topic/335465-is-this-the-simplest-sphere-aabb-collision-test/
37761  *         cdist = 0
37762  *         fdist = 0             # <<<<<<<<<<<<<<
37763  *         for i in range(3):
37764  *             box_center = (right_edge[i] + left_edge[i])/2.0
37765  */
37766   __pyx_v_fdist = 0.0;
37767 
37768   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":113
37769  *         cdist = 0
37770  *         fdist = 0
37771  *         for i in range(3):             # <<<<<<<<<<<<<<
37772  *             box_center = (right_edge[i] + left_edge[i])/2.0
37773  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
37774  */
37775   for (__pyx_t_4 = 0; __pyx_t_4 < 3; __pyx_t_4+=1) {
37776     __pyx_v_i = __pyx_t_4;
37777 
37778     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":114
37779  *         fdist = 0
37780  *         for i in range(3):
37781  *             box_center = (right_edge[i] + left_edge[i])/2.0             # <<<<<<<<<<<<<<
37782  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
37783  *             edge = right_edge[i] - left_edge[i]
37784  */
37785     __pyx_v_box_center = (((__pyx_v_right_edge[__pyx_v_i]) + (__pyx_v_left_edge[__pyx_v_i])) / 2.0);
37786 
37787     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":115
37788  *         for i in range(3):
37789  *             box_center = (right_edge[i] + left_edge[i])/2.0
37790  *             relcenter = self.periodic_difference(box_center, self.center[i], i)             # <<<<<<<<<<<<<<
37791  *             edge = right_edge[i] - left_edge[i]
37792  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
37793  */
37794     __pyx_v_relcenter = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.periodic_difference(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self), __pyx_v_box_center, (__pyx_v_self->center[__pyx_v_i]), __pyx_v_i);
37795 
37796     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":116
37797  *             box_center = (right_edge[i] + left_edge[i])/2.0
37798  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
37799  *             edge = right_edge[i] - left_edge[i]             # <<<<<<<<<<<<<<
37800  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
37801  *             farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
37802  */
37803     __pyx_v_edge = ((__pyx_v_right_edge[__pyx_v_i]) - (__pyx_v_left_edge[__pyx_v_i]));
37804 
37805     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":117
37806  *             relcenter = self.periodic_difference(box_center, self.center[i], i)
37807  *             edge = right_edge[i] - left_edge[i]
37808  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)             # <<<<<<<<<<<<<<
37809  *             farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
37810  *             cdist += closest * closest
37811  */
37812     __pyx_v_closest = (__pyx_v_relcenter - __pyx_f_2yt_9utilities_3lib_8fp_utils_fclip(__pyx_v_relcenter, ((-__pyx_v_edge) / 2.0), (__pyx_v_edge / 2.0)));
37813 
37814     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":118
37815  *             edge = right_edge[i] - left_edge[i]
37816  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
37817  *             farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)             # <<<<<<<<<<<<<<
37818  *             cdist += closest * closest
37819  *             fdist += farthest * farthest
37820  */
37821     __pyx_v_farthest = (__pyx_v_relcenter + __pyx_f_2yt_9utilities_3lib_8fp_utils_fclip(__pyx_v_relcenter, ((-__pyx_v_edge) / 2.0), (__pyx_v_edge / 2.0)));
37822 
37823     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":119
37824  *             closest = relcenter - fclip(relcenter, -edge/2.0, edge/2.0)
37825  *             farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
37826  *             cdist += closest * closest             # <<<<<<<<<<<<<<
37827  *             fdist += farthest * farthest
37828  *             if cdist > self.mag[0]**2: return 0
37829  */
37830     __pyx_v_cdist = (__pyx_v_cdist + (__pyx_v_closest * __pyx_v_closest));
37831 
37832     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":120
37833  *             farthest = relcenter + fclip(relcenter, -edge/2.0, edge/2.0)
37834  *             cdist += closest * closest
37835  *             fdist += farthest * farthest             # <<<<<<<<<<<<<<
37836  *             if cdist > self.mag[0]**2: return 0
37837  *         if fdist < self.mag[0]**2:
37838  */
37839     __pyx_v_fdist = (__pyx_v_fdist + (__pyx_v_farthest * __pyx_v_farthest));
37840 
37841     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":121
37842  *             cdist += closest * closest
37843  *             fdist += farthest * farthest
37844  *             if cdist > self.mag[0]**2: return 0             # <<<<<<<<<<<<<<
37845  *         if fdist < self.mag[0]**2:
37846  *             return 1
37847  */
37848     __pyx_t_1 = ((__pyx_v_cdist > pow((__pyx_v_self->mag[0]), 2.0)) != 0);
37849     if (__pyx_t_1) {
37850       __pyx_r = 0;
37851       goto __pyx_L0;
37852     }
37853   }
37854 
37855   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":122
37856  *             fdist += farthest * farthest
37857  *             if cdist > self.mag[0]**2: return 0
37858  *         if fdist < self.mag[0]**2:             # <<<<<<<<<<<<<<
37859  *             return 1
37860  *         else:
37861  */
37862   __pyx_t_1 = ((__pyx_v_fdist < pow((__pyx_v_self->mag[0]), 2.0)) != 0);
37863   if (__pyx_t_1) {
37864 
37865     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":123
37866  *             if cdist > self.mag[0]**2: return 0
37867  *         if fdist < self.mag[0]**2:
37868  *             return 1             # <<<<<<<<<<<<<<
37869  *         else:
37870  *             return 2
37871  */
37872     __pyx_r = 1;
37873     goto __pyx_L0;
37874 
37875     /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":122
37876  *             fdist += farthest * farthest
37877  *             if cdist > self.mag[0]**2: return 0
37878  *         if fdist < self.mag[0]**2:             # <<<<<<<<<<<<<<
37879  *             return 1
37880  *         else:
37881  */
37882   }
37883 
37884   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":125
37885  *             return 1
37886  *         else:
37887  *             return 2             # <<<<<<<<<<<<<<
37888  *
37889  *     def _hash_vals(self):
37890  */
37891   /*else*/ {
37892     __pyx_r = 2;
37893     goto __pyx_L0;
37894   }
37895 
37896   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":92
37897  *     @cython.wraparound(False)
37898  *     @cython.cdivision(True)
37899  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
37900  *                                np.float64_t right_edge[3]) nogil:
37901  *         # This is the sphere selection
37902  */
37903 
37904   /* function exit code */
37905   __pyx_L0:;
37906   return __pyx_r;
37907 }
37908 
37909 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":127
37910  *             return 2
37911  *
37912  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
37913  *         return (("vec[0][0]", self.vec[0][0]),
37914  *                 ("vec[0][1]", self.vec[0][1]),
37915  */
37916 
37917 /* Python wrapper */
37918 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
37919 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
37920   PyObject *__pyx_r = 0;
37921   __Pyx_RefNannyDeclarations
37922   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
37923   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_2_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self));
37924 
37925   /* function exit code */
37926   __Pyx_RefNannyFinishContext();
37927   return __pyx_r;
37928 }
37929 
37930 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self) {
37931   PyObject *__pyx_r = NULL;
37932   __Pyx_RefNannyDeclarations
37933   PyObject *__pyx_t_1 = NULL;
37934   PyObject *__pyx_t_2 = NULL;
37935   PyObject *__pyx_t_3 = NULL;
37936   PyObject *__pyx_t_4 = NULL;
37937   PyObject *__pyx_t_5 = NULL;
37938   PyObject *__pyx_t_6 = NULL;
37939   PyObject *__pyx_t_7 = NULL;
37940   PyObject *__pyx_t_8 = NULL;
37941   PyObject *__pyx_t_9 = NULL;
37942   PyObject *__pyx_t_10 = NULL;
37943   PyObject *__pyx_t_11 = NULL;
37944   PyObject *__pyx_t_12 = NULL;
37945   PyObject *__pyx_t_13 = NULL;
37946   PyObject *__pyx_t_14 = NULL;
37947   PyObject *__pyx_t_15 = NULL;
37948   PyObject *__pyx_t_16 = NULL;
37949   __Pyx_RefNannySetupContext("_hash_vals", 0);
37950 
37951   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":128
37952  *
37953  *     def _hash_vals(self):
37954  *         return (("vec[0][0]", self.vec[0][0]),             # <<<<<<<<<<<<<<
37955  *                 ("vec[0][1]", self.vec[0][1]),
37956  *                 ("vec[0][2]", self.vec[0][2]),
37957  */
37958   __Pyx_XDECREF(__pyx_r);
37959   __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_self->vec[0])[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 128, __pyx_L1_error)
37960   __Pyx_GOTREF(__pyx_t_1);
37961   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(14, 128, __pyx_L1_error)
37962   __Pyx_GOTREF(__pyx_t_2);
37963   __Pyx_INCREF(__pyx_kp_s_vec_0_0);
37964   __Pyx_GIVEREF(__pyx_kp_s_vec_0_0);
37965   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_s_vec_0_0);
37966   __Pyx_GIVEREF(__pyx_t_1);
37967   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
37968   __pyx_t_1 = 0;
37969 
37970   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":129
37971  *     def _hash_vals(self):
37972  *         return (("vec[0][0]", self.vec[0][0]),
37973  *                 ("vec[0][1]", self.vec[0][1]),             # <<<<<<<<<<<<<<
37974  *                 ("vec[0][2]", self.vec[0][2]),
37975  *                 ("vec[1][0]", self.vec[1][0]),
37976  */
37977   __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_self->vec[0])[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 129, __pyx_L1_error)
37978   __Pyx_GOTREF(__pyx_t_1);
37979   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(14, 129, __pyx_L1_error)
37980   __Pyx_GOTREF(__pyx_t_3);
37981   __Pyx_INCREF(__pyx_kp_s_vec_0_1);
37982   __Pyx_GIVEREF(__pyx_kp_s_vec_0_1);
37983   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_vec_0_1);
37984   __Pyx_GIVEREF(__pyx_t_1);
37985   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
37986   __pyx_t_1 = 0;
37987 
37988   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":130
37989  *         return (("vec[0][0]", self.vec[0][0]),
37990  *                 ("vec[0][1]", self.vec[0][1]),
37991  *                 ("vec[0][2]", self.vec[0][2]),             # <<<<<<<<<<<<<<
37992  *                 ("vec[1][0]", self.vec[1][0]),
37993  *                 ("vec[1][1]", self.vec[1][1]),
37994  */
37995   __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_self->vec[0])[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 130, __pyx_L1_error)
37996   __Pyx_GOTREF(__pyx_t_1);
37997   __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(14, 130, __pyx_L1_error)
37998   __Pyx_GOTREF(__pyx_t_4);
37999   __Pyx_INCREF(__pyx_kp_s_vec_0_2);
38000   __Pyx_GIVEREF(__pyx_kp_s_vec_0_2);
38001   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_s_vec_0_2);
38002   __Pyx_GIVEREF(__pyx_t_1);
38003   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
38004   __pyx_t_1 = 0;
38005 
38006   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":131
38007  *                 ("vec[0][1]", self.vec[0][1]),
38008  *                 ("vec[0][2]", self.vec[0][2]),
38009  *                 ("vec[1][0]", self.vec[1][0]),             # <<<<<<<<<<<<<<
38010  *                 ("vec[1][1]", self.vec[1][1]),
38011  *                 ("vec[1][2]", self.vec[1][2]),
38012  */
38013   __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_self->vec[1])[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 131, __pyx_L1_error)
38014   __Pyx_GOTREF(__pyx_t_1);
38015   __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(14, 131, __pyx_L1_error)
38016   __Pyx_GOTREF(__pyx_t_5);
38017   __Pyx_INCREF(__pyx_kp_s_vec_1_0);
38018   __Pyx_GIVEREF(__pyx_kp_s_vec_1_0);
38019   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_s_vec_1_0);
38020   __Pyx_GIVEREF(__pyx_t_1);
38021   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
38022   __pyx_t_1 = 0;
38023 
38024   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":132
38025  *                 ("vec[0][2]", self.vec[0][2]),
38026  *                 ("vec[1][0]", self.vec[1][0]),
38027  *                 ("vec[1][1]", self.vec[1][1]),             # <<<<<<<<<<<<<<
38028  *                 ("vec[1][2]", self.vec[1][2]),
38029  *                 ("vec[2][0]", self.vec[2][0]),
38030  */
38031   __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_self->vec[1])[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 132, __pyx_L1_error)
38032   __Pyx_GOTREF(__pyx_t_1);
38033   __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(14, 132, __pyx_L1_error)
38034   __Pyx_GOTREF(__pyx_t_6);
38035   __Pyx_INCREF(__pyx_kp_s_vec_1_1);
38036   __Pyx_GIVEREF(__pyx_kp_s_vec_1_1);
38037   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_kp_s_vec_1_1);
38038   __Pyx_GIVEREF(__pyx_t_1);
38039   PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
38040   __pyx_t_1 = 0;
38041 
38042   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":133
38043  *                 ("vec[1][0]", self.vec[1][0]),
38044  *                 ("vec[1][1]", self.vec[1][1]),
38045  *                 ("vec[1][2]", self.vec[1][2]),             # <<<<<<<<<<<<<<
38046  *                 ("vec[2][0]", self.vec[2][0]),
38047  *                 ("vec[2][1]", self.vec[2][1]),
38048  */
38049   __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_self->vec[1])[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 133, __pyx_L1_error)
38050   __Pyx_GOTREF(__pyx_t_1);
38051   __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 133, __pyx_L1_error)
38052   __Pyx_GOTREF(__pyx_t_7);
38053   __Pyx_INCREF(__pyx_kp_s_vec_1_2);
38054   __Pyx_GIVEREF(__pyx_kp_s_vec_1_2);
38055   PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_kp_s_vec_1_2);
38056   __Pyx_GIVEREF(__pyx_t_1);
38057   PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
38058   __pyx_t_1 = 0;
38059 
38060   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":134
38061  *                 ("vec[1][1]", self.vec[1][1]),
38062  *                 ("vec[1][2]", self.vec[1][2]),
38063  *                 ("vec[2][0]", self.vec[2][0]),             # <<<<<<<<<<<<<<
38064  *                 ("vec[2][1]", self.vec[2][1]),
38065  *                 ("vec[2][2]", self.vec[2][2]),
38066  */
38067   __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_self->vec[2])[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 134, __pyx_L1_error)
38068   __Pyx_GOTREF(__pyx_t_1);
38069   __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 134, __pyx_L1_error)
38070   __Pyx_GOTREF(__pyx_t_8);
38071   __Pyx_INCREF(__pyx_kp_s_vec_2_0);
38072   __Pyx_GIVEREF(__pyx_kp_s_vec_2_0);
38073   PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_kp_s_vec_2_0);
38074   __Pyx_GIVEREF(__pyx_t_1);
38075   PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_1);
38076   __pyx_t_1 = 0;
38077 
38078   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":135
38079  *                 ("vec[1][2]", self.vec[1][2]),
38080  *                 ("vec[2][0]", self.vec[2][0]),
38081  *                 ("vec[2][1]", self.vec[2][1]),             # <<<<<<<<<<<<<<
38082  *                 ("vec[2][2]", self.vec[2][2]),
38083  *                 ("mag[0]", self.mag[0]),
38084  */
38085   __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_self->vec[2])[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 135, __pyx_L1_error)
38086   __Pyx_GOTREF(__pyx_t_1);
38087   __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 135, __pyx_L1_error)
38088   __Pyx_GOTREF(__pyx_t_9);
38089   __Pyx_INCREF(__pyx_kp_s_vec_2_1);
38090   __Pyx_GIVEREF(__pyx_kp_s_vec_2_1);
38091   PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_kp_s_vec_2_1);
38092   __Pyx_GIVEREF(__pyx_t_1);
38093   PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1);
38094   __pyx_t_1 = 0;
38095 
38096   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":136
38097  *                 ("vec[2][0]", self.vec[2][0]),
38098  *                 ("vec[2][1]", self.vec[2][1]),
38099  *                 ("vec[2][2]", self.vec[2][2]),             # <<<<<<<<<<<<<<
38100  *                 ("mag[0]", self.mag[0]),
38101  *                 ("mag[1]", self.mag[1]),
38102  */
38103   __pyx_t_1 = PyFloat_FromDouble(((__pyx_v_self->vec[2])[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 136, __pyx_L1_error)
38104   __Pyx_GOTREF(__pyx_t_1);
38105   __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(14, 136, __pyx_L1_error)
38106   __Pyx_GOTREF(__pyx_t_10);
38107   __Pyx_INCREF(__pyx_kp_s_vec_2_2);
38108   __Pyx_GIVEREF(__pyx_kp_s_vec_2_2);
38109   PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_kp_s_vec_2_2);
38110   __Pyx_GIVEREF(__pyx_t_1);
38111   PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_1);
38112   __pyx_t_1 = 0;
38113 
38114   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":137
38115  *                 ("vec[2][1]", self.vec[2][1]),
38116  *                 ("vec[2][2]", self.vec[2][2]),
38117  *                 ("mag[0]", self.mag[0]),             # <<<<<<<<<<<<<<
38118  *                 ("mag[1]", self.mag[1]),
38119  *                 ("mag[2]", self.mag[2]),
38120  */
38121   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->mag[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 137, __pyx_L1_error)
38122   __Pyx_GOTREF(__pyx_t_1);
38123   __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(14, 137, __pyx_L1_error)
38124   __Pyx_GOTREF(__pyx_t_11);
38125   __Pyx_INCREF(__pyx_kp_s_mag_0);
38126   __Pyx_GIVEREF(__pyx_kp_s_mag_0);
38127   PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_kp_s_mag_0);
38128   __Pyx_GIVEREF(__pyx_t_1);
38129   PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_1);
38130   __pyx_t_1 = 0;
38131 
38132   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":138
38133  *                 ("vec[2][2]", self.vec[2][2]),
38134  *                 ("mag[0]", self.mag[0]),
38135  *                 ("mag[1]", self.mag[1]),             # <<<<<<<<<<<<<<
38136  *                 ("mag[2]", self.mag[2]),
38137  *                 ("center[0]", self.center[0]),
38138  */
38139   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->mag[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 138, __pyx_L1_error)
38140   __Pyx_GOTREF(__pyx_t_1);
38141   __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(14, 138, __pyx_L1_error)
38142   __Pyx_GOTREF(__pyx_t_12);
38143   __Pyx_INCREF(__pyx_kp_s_mag_1);
38144   __Pyx_GIVEREF(__pyx_kp_s_mag_1);
38145   PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_kp_s_mag_1);
38146   __Pyx_GIVEREF(__pyx_t_1);
38147   PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_1);
38148   __pyx_t_1 = 0;
38149 
38150   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":139
38151  *                 ("mag[0]", self.mag[0]),
38152  *                 ("mag[1]", self.mag[1]),
38153  *                 ("mag[2]", self.mag[2]),             # <<<<<<<<<<<<<<
38154  *                 ("center[0]", self.center[0]),
38155  *                 ("center[1]", self.center[1]),
38156  */
38157   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->mag[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 139, __pyx_L1_error)
38158   __Pyx_GOTREF(__pyx_t_1);
38159   __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(14, 139, __pyx_L1_error)
38160   __Pyx_GOTREF(__pyx_t_13);
38161   __Pyx_INCREF(__pyx_kp_s_mag_2);
38162   __Pyx_GIVEREF(__pyx_kp_s_mag_2);
38163   PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_kp_s_mag_2);
38164   __Pyx_GIVEREF(__pyx_t_1);
38165   PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_1);
38166   __pyx_t_1 = 0;
38167 
38168   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":140
38169  *                 ("mag[1]", self.mag[1]),
38170  *                 ("mag[2]", self.mag[2]),
38171  *                 ("center[0]", self.center[0]),             # <<<<<<<<<<<<<<
38172  *                 ("center[1]", self.center[1]),
38173  *                 ("center[2]", self.center[2]))
38174  */
38175   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->center[0])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 140, __pyx_L1_error)
38176   __Pyx_GOTREF(__pyx_t_1);
38177   __pyx_t_14 = PyTuple_New(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(14, 140, __pyx_L1_error)
38178   __Pyx_GOTREF(__pyx_t_14);
38179   __Pyx_INCREF(__pyx_kp_s_center_0);
38180   __Pyx_GIVEREF(__pyx_kp_s_center_0);
38181   PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_kp_s_center_0);
38182   __Pyx_GIVEREF(__pyx_t_1);
38183   PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_t_1);
38184   __pyx_t_1 = 0;
38185 
38186   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":141
38187  *                 ("mag[2]", self.mag[2]),
38188  *                 ("center[0]", self.center[0]),
38189  *                 ("center[1]", self.center[1]),             # <<<<<<<<<<<<<<
38190  *                 ("center[2]", self.center[2]))
38191  *
38192  */
38193   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->center[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 141, __pyx_L1_error)
38194   __Pyx_GOTREF(__pyx_t_1);
38195   __pyx_t_15 = PyTuple_New(2); if (unlikely(!__pyx_t_15)) __PYX_ERR(14, 141, __pyx_L1_error)
38196   __Pyx_GOTREF(__pyx_t_15);
38197   __Pyx_INCREF(__pyx_kp_s_center_1);
38198   __Pyx_GIVEREF(__pyx_kp_s_center_1);
38199   PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_kp_s_center_1);
38200   __Pyx_GIVEREF(__pyx_t_1);
38201   PyTuple_SET_ITEM(__pyx_t_15, 1, __pyx_t_1);
38202   __pyx_t_1 = 0;
38203 
38204   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":142
38205  *                 ("center[0]", self.center[0]),
38206  *                 ("center[1]", self.center[1]),
38207  *                 ("center[2]", self.center[2]))             # <<<<<<<<<<<<<<
38208  *
38209  *     def _get_state_attnames(self):
38210  */
38211   __pyx_t_1 = PyFloat_FromDouble((__pyx_v_self->center[2])); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 142, __pyx_L1_error)
38212   __Pyx_GOTREF(__pyx_t_1);
38213   __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(14, 142, __pyx_L1_error)
38214   __Pyx_GOTREF(__pyx_t_16);
38215   __Pyx_INCREF(__pyx_kp_s_center_2);
38216   __Pyx_GIVEREF(__pyx_kp_s_center_2);
38217   PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_kp_s_center_2);
38218   __Pyx_GIVEREF(__pyx_t_1);
38219   PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_1);
38220   __pyx_t_1 = 0;
38221 
38222   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":128
38223  *
38224  *     def _hash_vals(self):
38225  *         return (("vec[0][0]", self.vec[0][0]),             # <<<<<<<<<<<<<<
38226  *                 ("vec[0][1]", self.vec[0][1]),
38227  *                 ("vec[0][2]", self.vec[0][2]),
38228  */
38229   __pyx_t_1 = PyTuple_New(15); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 128, __pyx_L1_error)
38230   __Pyx_GOTREF(__pyx_t_1);
38231   __Pyx_GIVEREF(__pyx_t_2);
38232   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
38233   __Pyx_GIVEREF(__pyx_t_3);
38234   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3);
38235   __Pyx_GIVEREF(__pyx_t_4);
38236   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4);
38237   __Pyx_GIVEREF(__pyx_t_5);
38238   PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_5);
38239   __Pyx_GIVEREF(__pyx_t_6);
38240   PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_6);
38241   __Pyx_GIVEREF(__pyx_t_7);
38242   PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_7);
38243   __Pyx_GIVEREF(__pyx_t_8);
38244   PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_t_8);
38245   __Pyx_GIVEREF(__pyx_t_9);
38246   PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_t_9);
38247   __Pyx_GIVEREF(__pyx_t_10);
38248   PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_t_10);
38249   __Pyx_GIVEREF(__pyx_t_11);
38250   PyTuple_SET_ITEM(__pyx_t_1, 9, __pyx_t_11);
38251   __Pyx_GIVEREF(__pyx_t_12);
38252   PyTuple_SET_ITEM(__pyx_t_1, 10, __pyx_t_12);
38253   __Pyx_GIVEREF(__pyx_t_13);
38254   PyTuple_SET_ITEM(__pyx_t_1, 11, __pyx_t_13);
38255   __Pyx_GIVEREF(__pyx_t_14);
38256   PyTuple_SET_ITEM(__pyx_t_1, 12, __pyx_t_14);
38257   __Pyx_GIVEREF(__pyx_t_15);
38258   PyTuple_SET_ITEM(__pyx_t_1, 13, __pyx_t_15);
38259   __Pyx_GIVEREF(__pyx_t_16);
38260   PyTuple_SET_ITEM(__pyx_t_1, 14, __pyx_t_16);
38261   __pyx_t_2 = 0;
38262   __pyx_t_3 = 0;
38263   __pyx_t_4 = 0;
38264   __pyx_t_5 = 0;
38265   __pyx_t_6 = 0;
38266   __pyx_t_7 = 0;
38267   __pyx_t_8 = 0;
38268   __pyx_t_9 = 0;
38269   __pyx_t_10 = 0;
38270   __pyx_t_11 = 0;
38271   __pyx_t_12 = 0;
38272   __pyx_t_13 = 0;
38273   __pyx_t_14 = 0;
38274   __pyx_t_15 = 0;
38275   __pyx_t_16 = 0;
38276   __pyx_r = __pyx_t_1;
38277   __pyx_t_1 = 0;
38278   goto __pyx_L0;
38279 
38280   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":127
38281  *             return 2
38282  *
38283  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
38284  *         return (("vec[0][0]", self.vec[0][0]),
38285  *                 ("vec[0][1]", self.vec[0][1]),
38286  */
38287 
38288   /* function exit code */
38289   __pyx_L1_error:;
38290   __Pyx_XDECREF(__pyx_t_1);
38291   __Pyx_XDECREF(__pyx_t_2);
38292   __Pyx_XDECREF(__pyx_t_3);
38293   __Pyx_XDECREF(__pyx_t_4);
38294   __Pyx_XDECREF(__pyx_t_5);
38295   __Pyx_XDECREF(__pyx_t_6);
38296   __Pyx_XDECREF(__pyx_t_7);
38297   __Pyx_XDECREF(__pyx_t_8);
38298   __Pyx_XDECREF(__pyx_t_9);
38299   __Pyx_XDECREF(__pyx_t_10);
38300   __Pyx_XDECREF(__pyx_t_11);
38301   __Pyx_XDECREF(__pyx_t_12);
38302   __Pyx_XDECREF(__pyx_t_13);
38303   __Pyx_XDECREF(__pyx_t_14);
38304   __Pyx_XDECREF(__pyx_t_15);
38305   __Pyx_XDECREF(__pyx_t_16);
38306   __Pyx_AddTraceback("yt.geometry.selection_routines.EllipsoidSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
38307   __pyx_r = NULL;
38308   __pyx_L0:;
38309   __Pyx_XGIVEREF(__pyx_r);
38310   __Pyx_RefNannyFinishContext();
38311   return __pyx_r;
38312 }
38313 
38314 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":144
38315  *                 ("center[2]", self.center[2]))
38316  *
38317  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
38318  *         return ("mag", "center", "vec")
38319  *
38320  */
38321 
38322 /* Python wrapper */
38323 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_5_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
38324 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_5_get_state_attnames(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
38325   PyObject *__pyx_r = 0;
38326   __Pyx_RefNannyDeclarations
38327   __Pyx_RefNannySetupContext("_get_state_attnames (wrapper)", 0);
38328   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_4_get_state_attnames(((struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self));
38329 
38330   /* function exit code */
38331   __Pyx_RefNannyFinishContext();
38332   return __pyx_r;
38333 }
38334 
38335 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_4_get_state_attnames(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self) {
38336   PyObject *__pyx_r = NULL;
38337   __Pyx_RefNannyDeclarations
38338   __Pyx_RefNannySetupContext("_get_state_attnames", 0);
38339 
38340   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":145
38341  *
38342  *     def _get_state_attnames(self):
38343  *         return ("mag", "center", "vec")             # <<<<<<<<<<<<<<
38344  *
38345  *
38346  */
38347   __Pyx_XDECREF(__pyx_r);
38348   __Pyx_INCREF(__pyx_tuple__40);
38349   __pyx_r = __pyx_tuple__40;
38350   goto __pyx_L0;
38351 
38352   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":144
38353  *                 ("center[2]", self.center[2]))
38354  *
38355  *     def _get_state_attnames(self):             # <<<<<<<<<<<<<<
38356  *         return ("mag", "center", "vec")
38357  *
38358  */
38359 
38360   /* function exit code */
38361   __pyx_L0:;
38362   __Pyx_XGIVEREF(__pyx_r);
38363   __Pyx_RefNannyFinishContext();
38364   return __pyx_r;
38365 }
38366 
38367 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":2
38368  * cdef class EllipsoidSelector(SelectorObject):
38369  *     cdef public np.float64_t vec[3][3]             # <<<<<<<<<<<<<<
38370  *     cdef public np.float64_t mag[3]
38371  *     cdef public np.float64_t center[3]
38372  */
38373 
38374 /* Python wrapper */
38375 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3vec_1__get__(PyObject *__pyx_v_self); /*proto*/
38376 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3vec_1__get__(PyObject *__pyx_v_self) {
38377   PyObject *__pyx_r = 0;
38378   __Pyx_RefNannyDeclarations
38379   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
38380   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_3vec___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self));
38381 
38382   /* function exit code */
38383   __Pyx_RefNannyFinishContext();
38384   return __pyx_r;
38385 }
38386 
38387 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_3vec___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self) {
38388   PyObject *__pyx_r = NULL;
38389   __Pyx_RefNannyDeclarations
38390   PyObject *__pyx_t_1 = NULL;
38391   __Pyx_RefNannySetupContext("__get__", 0);
38392   __Pyx_XDECREF(__pyx_r);
38393   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t___5b_3_5d_(__pyx_v_self->vec, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 2, __pyx_L1_error)
38394   __Pyx_GOTREF(__pyx_t_1);
38395   __pyx_r = __pyx_t_1;
38396   __pyx_t_1 = 0;
38397   goto __pyx_L0;
38398 
38399   /* function exit code */
38400   __pyx_L1_error:;
38401   __Pyx_XDECREF(__pyx_t_1);
38402   __Pyx_AddTraceback("yt.geometry.selection_routines.EllipsoidSelector.vec.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
38403   __pyx_r = NULL;
38404   __pyx_L0:;
38405   __Pyx_XGIVEREF(__pyx_r);
38406   __Pyx_RefNannyFinishContext();
38407   return __pyx_r;
38408 }
38409 
38410 /* Python wrapper */
38411 static int __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3vec_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
38412 static int __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3vec_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
38413   int __pyx_r;
38414   __Pyx_RefNannyDeclarations
38415   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
38416   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_3vec_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
38417 
38418   /* function exit code */
38419   __Pyx_RefNannyFinishContext();
38420   return __pyx_r;
38421 }
38422 
38423 static int __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_3vec_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, PyObject *__pyx_v_value) {
38424   int __pyx_r;
38425   __Pyx_RefNannyDeclarations
38426   __pyx_t_5numpy_float64_t __pyx_t_1[3][3];
38427   __Pyx_RefNannySetupContext("__set__", 0);
38428   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(14, 2, __pyx_L1_error)
38429   memcpy(&(__pyx_v_self->vec[0]), __pyx_t_1, sizeof(__pyx_v_self->vec[0]) * (3));
38430 
38431   /* function exit code */
38432   __pyx_r = 0;
38433   goto __pyx_L0;
38434   __pyx_L1_error:;
38435   __Pyx_AddTraceback("yt.geometry.selection_routines.EllipsoidSelector.vec.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
38436   __pyx_r = -1;
38437   __pyx_L0:;
38438   __Pyx_RefNannyFinishContext();
38439   return __pyx_r;
38440 }
38441 
38442 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":3
38443  * cdef class EllipsoidSelector(SelectorObject):
38444  *     cdef public np.float64_t vec[3][3]
38445  *     cdef public np.float64_t mag[3]             # <<<<<<<<<<<<<<
38446  *     cdef public np.float64_t center[3]
38447  *
38448  */
38449 
38450 /* Python wrapper */
38451 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3mag_1__get__(PyObject *__pyx_v_self); /*proto*/
38452 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3mag_1__get__(PyObject *__pyx_v_self) {
38453   PyObject *__pyx_r = 0;
38454   __Pyx_RefNannyDeclarations
38455   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
38456   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_3mag___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self));
38457 
38458   /* function exit code */
38459   __Pyx_RefNannyFinishContext();
38460   return __pyx_r;
38461 }
38462 
38463 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_3mag___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self) {
38464   PyObject *__pyx_r = NULL;
38465   __Pyx_RefNannyDeclarations
38466   PyObject *__pyx_t_1 = NULL;
38467   __Pyx_RefNannySetupContext("__get__", 0);
38468   __Pyx_XDECREF(__pyx_r);
38469   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->mag, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 3, __pyx_L1_error)
38470   __Pyx_GOTREF(__pyx_t_1);
38471   __pyx_r = __pyx_t_1;
38472   __pyx_t_1 = 0;
38473   goto __pyx_L0;
38474 
38475   /* function exit code */
38476   __pyx_L1_error:;
38477   __Pyx_XDECREF(__pyx_t_1);
38478   __Pyx_AddTraceback("yt.geometry.selection_routines.EllipsoidSelector.mag.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
38479   __pyx_r = NULL;
38480   __pyx_L0:;
38481   __Pyx_XGIVEREF(__pyx_r);
38482   __Pyx_RefNannyFinishContext();
38483   return __pyx_r;
38484 }
38485 
38486 /* Python wrapper */
38487 static int __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3mag_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
38488 static int __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3mag_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
38489   int __pyx_r;
38490   __Pyx_RefNannyDeclarations
38491   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
38492   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_3mag_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
38493 
38494   /* function exit code */
38495   __Pyx_RefNannyFinishContext();
38496   return __pyx_r;
38497 }
38498 
38499 static int __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_3mag_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, PyObject *__pyx_v_value) {
38500   int __pyx_r;
38501   __Pyx_RefNannyDeclarations
38502   __pyx_t_5numpy_float64_t __pyx_t_1[3];
38503   __Pyx_RefNannySetupContext("__set__", 0);
38504   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(14, 3, __pyx_L1_error)
38505   memcpy(&(__pyx_v_self->mag[0]), __pyx_t_1, sizeof(__pyx_v_self->mag[0]) * (3));
38506 
38507   /* function exit code */
38508   __pyx_r = 0;
38509   goto __pyx_L0;
38510   __pyx_L1_error:;
38511   __Pyx_AddTraceback("yt.geometry.selection_routines.EllipsoidSelector.mag.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
38512   __pyx_r = -1;
38513   __pyx_L0:;
38514   __Pyx_RefNannyFinishContext();
38515   return __pyx_r;
38516 }
38517 
38518 /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":4
38519  *     cdef public np.float64_t vec[3][3]
38520  *     cdef public np.float64_t mag[3]
38521  *     cdef public np.float64_t center[3]             # <<<<<<<<<<<<<<
38522  *
38523  *     def __init__(self, dobj):
38524  */
38525 
38526 /* Python wrapper */
38527 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_6center_1__get__(PyObject *__pyx_v_self); /*proto*/
38528 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_6center_1__get__(PyObject *__pyx_v_self) {
38529   PyObject *__pyx_r = 0;
38530   __Pyx_RefNannyDeclarations
38531   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
38532   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_6center___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self));
38533 
38534   /* function exit code */
38535   __Pyx_RefNannyFinishContext();
38536   return __pyx_r;
38537 }
38538 
38539 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_6center___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self) {
38540   PyObject *__pyx_r = NULL;
38541   __Pyx_RefNannyDeclarations
38542   PyObject *__pyx_t_1 = NULL;
38543   __Pyx_RefNannySetupContext("__get__", 0);
38544   __Pyx_XDECREF(__pyx_r);
38545   __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_v_self->center, 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(14, 4, __pyx_L1_error)
38546   __Pyx_GOTREF(__pyx_t_1);
38547   __pyx_r = __pyx_t_1;
38548   __pyx_t_1 = 0;
38549   goto __pyx_L0;
38550 
38551   /* function exit code */
38552   __pyx_L1_error:;
38553   __Pyx_XDECREF(__pyx_t_1);
38554   __Pyx_AddTraceback("yt.geometry.selection_routines.EllipsoidSelector.center.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
38555   __pyx_r = NULL;
38556   __pyx_L0:;
38557   __Pyx_XGIVEREF(__pyx_r);
38558   __Pyx_RefNannyFinishContext();
38559   return __pyx_r;
38560 }
38561 
38562 /* Python wrapper */
38563 static int __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_6center_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
38564 static int __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_6center_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
38565   int __pyx_r;
38566   __Pyx_RefNannyDeclarations
38567   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
38568   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_6center_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
38569 
38570   /* function exit code */
38571   __Pyx_RefNannyFinishContext();
38572   return __pyx_r;
38573 }
38574 
38575 static int __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_6center_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, PyObject *__pyx_v_value) {
38576   int __pyx_r;
38577   __Pyx_RefNannyDeclarations
38578   __pyx_t_5numpy_float64_t __pyx_t_1[3];
38579   __Pyx_RefNannySetupContext("__set__", 0);
38580   if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_value, __pyx_t_1, 3) < 0)) __PYX_ERR(14, 4, __pyx_L1_error)
38581   memcpy(&(__pyx_v_self->center[0]), __pyx_t_1, sizeof(__pyx_v_self->center[0]) * (3));
38582 
38583   /* function exit code */
38584   __pyx_r = 0;
38585   goto __pyx_L0;
38586   __pyx_L1_error:;
38587   __Pyx_AddTraceback("yt.geometry.selection_routines.EllipsoidSelector.center.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
38588   __pyx_r = -1;
38589   __pyx_L0:;
38590   __Pyx_RefNannyFinishContext();
38591   return __pyx_r;
38592 }
38593 
38594 /* "(tree fragment)":1
38595  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
38596  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
38597  * def __setstate_cython__(self, __pyx_state):
38598  */
38599 
38600 /* Python wrapper */
38601 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
38602 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
38603   PyObject *__pyx_r = 0;
38604   __Pyx_RefNannyDeclarations
38605   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
38606   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_6__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self));
38607 
38608   /* function exit code */
38609   __Pyx_RefNannyFinishContext();
38610   return __pyx_r;
38611 }
38612 
38613 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self) {
38614   PyObject *__pyx_r = NULL;
38615   __Pyx_RefNannyDeclarations
38616   PyObject *__pyx_t_1 = NULL;
38617   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
38618 
38619   /* "(tree fragment)":2
38620  * def __reduce_cython__(self):
38621  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
38622  * def __setstate_cython__(self, __pyx_state):
38623  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
38624  */
38625   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__41, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
38626   __Pyx_GOTREF(__pyx_t_1);
38627   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
38628   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
38629   __PYX_ERR(5, 2, __pyx_L1_error)
38630 
38631   /* "(tree fragment)":1
38632  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
38633  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
38634  * def __setstate_cython__(self, __pyx_state):
38635  */
38636 
38637   /* function exit code */
38638   __pyx_L1_error:;
38639   __Pyx_XDECREF(__pyx_t_1);
38640   __Pyx_AddTraceback("yt.geometry.selection_routines.EllipsoidSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
38641   __pyx_r = NULL;
38642   __Pyx_XGIVEREF(__pyx_r);
38643   __Pyx_RefNannyFinishContext();
38644   return __pyx_r;
38645 }
38646 
38647 /* "(tree fragment)":3
38648  * def __reduce_cython__(self):
38649  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
38650  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
38651  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
38652  */
38653 
38654 /* Python wrapper */
38655 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
38656 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
38657   PyObject *__pyx_r = 0;
38658   __Pyx_RefNannyDeclarations
38659   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
38660   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_8__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
38661 
38662   /* function exit code */
38663   __Pyx_RefNannyFinishContext();
38664   return __pyx_r;
38665 }
38666 
38667 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17EllipsoidSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
38668   PyObject *__pyx_r = NULL;
38669   __Pyx_RefNannyDeclarations
38670   PyObject *__pyx_t_1 = NULL;
38671   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
38672 
38673   /* "(tree fragment)":4
38674  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
38675  * def __setstate_cython__(self, __pyx_state):
38676  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
38677  */
38678   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__42, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
38679   __Pyx_GOTREF(__pyx_t_1);
38680   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
38681   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
38682   __PYX_ERR(5, 4, __pyx_L1_error)
38683 
38684   /* "(tree fragment)":3
38685  * def __reduce_cython__(self):
38686  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
38687  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
38688  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
38689  */
38690 
38691   /* function exit code */
38692   __pyx_L1_error:;
38693   __Pyx_XDECREF(__pyx_t_1);
38694   __Pyx_AddTraceback("yt.geometry.selection_routines.EllipsoidSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
38695   __pyx_r = NULL;
38696   __Pyx_XGIVEREF(__pyx_r);
38697   __Pyx_RefNannyFinishContext();
38698   return __pyx_r;
38699 }
38700 
38701 /* "yt/geometry/_selection_routines/grid_selector.pxi":4
38702  *     cdef object ind
38703  *
38704  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
38705  *         self.ind = dobj.id - dobj._id_offset
38706  *
38707  */
38708 
38709 /* Python wrapper */
38710 static int __pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
38711 static int __pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
38712   PyObject *__pyx_v_dobj = 0;
38713   int __pyx_r;
38714   __Pyx_RefNannyDeclarations
38715   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
38716   {
38717     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
38718     PyObject* values[1] = {0};
38719     if (unlikely(__pyx_kwds)) {
38720       Py_ssize_t kw_args;
38721       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
38722       switch (pos_args) {
38723         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
38724         CYTHON_FALLTHROUGH;
38725         case  0: break;
38726         default: goto __pyx_L5_argtuple_error;
38727       }
38728       kw_args = PyDict_Size(__pyx_kwds);
38729       switch (pos_args) {
38730         case  0:
38731         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
38732         else goto __pyx_L5_argtuple_error;
38733       }
38734       if (unlikely(kw_args > 0)) {
38735         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(15, 4, __pyx_L3_error)
38736       }
38737     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
38738       goto __pyx_L5_argtuple_error;
38739     } else {
38740       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
38741     }
38742     __pyx_v_dobj = values[0];
38743   }
38744   goto __pyx_L4_argument_unpacking_done;
38745   __pyx_L5_argtuple_error:;
38746   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 4, __pyx_L3_error)
38747   __pyx_L3_error:;
38748   __Pyx_AddTraceback("yt.geometry.selection_routines.GridSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
38749   __Pyx_RefNannyFinishContext();
38750   return -1;
38751   __pyx_L4_argument_unpacking_done:;
38752   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12GridSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *)__pyx_v_self), __pyx_v_dobj);
38753 
38754   /* function exit code */
38755   __Pyx_RefNannyFinishContext();
38756   return __pyx_r;
38757 }
38758 
38759 static int __pyx_pf_2yt_8geometry_18selection_routines_12GridSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
38760   int __pyx_r;
38761   __Pyx_RefNannyDeclarations
38762   PyObject *__pyx_t_1 = NULL;
38763   PyObject *__pyx_t_2 = NULL;
38764   PyObject *__pyx_t_3 = NULL;
38765   __Pyx_RefNannySetupContext("__init__", 0);
38766 
38767   /* "yt/geometry/_selection_routines/grid_selector.pxi":5
38768  *
38769  *     def __init__(self, dobj):
38770  *         self.ind = dobj.id - dobj._id_offset             # <<<<<<<<<<<<<<
38771  *
38772  *     @cython.boundscheck(False)
38773  */
38774   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 5, __pyx_L1_error)
38775   __Pyx_GOTREF(__pyx_t_1);
38776   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_id_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 5, __pyx_L1_error)
38777   __Pyx_GOTREF(__pyx_t_2);
38778   __pyx_t_3 = PyNumber_Subtract(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 5, __pyx_L1_error)
38779   __Pyx_GOTREF(__pyx_t_3);
38780   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
38781   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
38782   __Pyx_GIVEREF(__pyx_t_3);
38783   __Pyx_GOTREF(__pyx_v_self->ind);
38784   __Pyx_DECREF(__pyx_v_self->ind);
38785   __pyx_v_self->ind = __pyx_t_3;
38786   __pyx_t_3 = 0;
38787 
38788   /* "yt/geometry/_selection_routines/grid_selector.pxi":4
38789  *     cdef object ind
38790  *
38791  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
38792  *         self.ind = dobj.id - dobj._id_offset
38793  *
38794  */
38795 
38796   /* function exit code */
38797   __pyx_r = 0;
38798   goto __pyx_L0;
38799   __pyx_L1_error:;
38800   __Pyx_XDECREF(__pyx_t_1);
38801   __Pyx_XDECREF(__pyx_t_2);
38802   __Pyx_XDECREF(__pyx_t_3);
38803   __Pyx_AddTraceback("yt.geometry.selection_routines.GridSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
38804   __pyx_r = -1;
38805   __pyx_L0:;
38806   __Pyx_RefNannyFinishContext();
38807   return __pyx_r;
38808 }
38809 
38810 /* "yt/geometry/_selection_routines/grid_selector.pxi":10
38811  *     @cython.wraparound(False)
38812  *     @cython.cdivision(True)
38813  *     def select_grids(self,             # <<<<<<<<<<<<<<
38814  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
38815  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
38816  */
38817 
38818 /* Python wrapper */
38819 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_3select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
38820 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_3select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
38821   PyArrayObject *__pyx_v_left_edges = 0;
38822   CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges = 0;
38823   CYTHON_UNUSED PyArrayObject *__pyx_v_levels = 0;
38824   PyObject *__pyx_r = 0;
38825   __Pyx_RefNannyDeclarations
38826   __Pyx_RefNannySetupContext("select_grids (wrapper)", 0);
38827   {
38828     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_left_edges,&__pyx_n_s_right_edges,&__pyx_n_s_levels,0};
38829     PyObject* values[3] = {0,0,0};
38830     if (unlikely(__pyx_kwds)) {
38831       Py_ssize_t kw_args;
38832       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
38833       switch (pos_args) {
38834         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
38835         CYTHON_FALLTHROUGH;
38836         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
38837         CYTHON_FALLTHROUGH;
38838         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
38839         CYTHON_FALLTHROUGH;
38840         case  0: break;
38841         default: goto __pyx_L5_argtuple_error;
38842       }
38843       kw_args = PyDict_Size(__pyx_kwds);
38844       switch (pos_args) {
38845         case  0:
38846         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_left_edges)) != 0)) kw_args--;
38847         else goto __pyx_L5_argtuple_error;
38848         CYTHON_FALLTHROUGH;
38849         case  1:
38850         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_right_edges)) != 0)) kw_args--;
38851         else {
38852           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 1); __PYX_ERR(15, 10, __pyx_L3_error)
38853         }
38854         CYTHON_FALLTHROUGH;
38855         case  2:
38856         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_levels)) != 0)) kw_args--;
38857         else {
38858           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 2); __PYX_ERR(15, 10, __pyx_L3_error)
38859         }
38860       }
38861       if (unlikely(kw_args > 0)) {
38862         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_grids") < 0)) __PYX_ERR(15, 10, __pyx_L3_error)
38863       }
38864     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
38865       goto __pyx_L5_argtuple_error;
38866     } else {
38867       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
38868       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
38869       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
38870     }
38871     __pyx_v_left_edges = ((PyArrayObject *)values[0]);
38872     __pyx_v_right_edges = ((PyArrayObject *)values[1]);
38873     __pyx_v_levels = ((PyArrayObject *)values[2]);
38874   }
38875   goto __pyx_L4_argument_unpacking_done;
38876   __pyx_L5_argtuple_error:;
38877   __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(15, 10, __pyx_L3_error)
38878   __pyx_L3_error:;
38879   __Pyx_AddTraceback("yt.geometry.selection_routines.GridSelector.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
38880   __Pyx_RefNannyFinishContext();
38881   return NULL;
38882   __pyx_L4_argument_unpacking_done:;
38883   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_left_edges), __pyx_ptype_5numpy_ndarray, 1, "left_edges", 0))) __PYX_ERR(15, 11, __pyx_L1_error)
38884   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_right_edges), __pyx_ptype_5numpy_ndarray, 1, "right_edges", 0))) __PYX_ERR(15, 12, __pyx_L1_error)
38885   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_levels), __pyx_ptype_5numpy_ndarray, 1, "levels", 0))) __PYX_ERR(15, 13, __pyx_L1_error)
38886   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_2select_grids(((struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *)__pyx_v_self), __pyx_v_left_edges, __pyx_v_right_edges, __pyx_v_levels);
38887 
38888   /* function exit code */
38889   goto __pyx_L0;
38890   __pyx_L1_error:;
38891   __pyx_r = NULL;
38892   __pyx_L0:;
38893   __Pyx_RefNannyFinishContext();
38894   return __pyx_r;
38895 }
38896 
38897 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_2select_grids(struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self, PyArrayObject *__pyx_v_left_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_levels) {
38898   int __pyx_v_ng;
38899   PyArrayObject *__pyx_v_gridi = 0;
38900   __Pyx_LocalBuf_ND __pyx_pybuffernd_gridi;
38901   __Pyx_Buffer __pyx_pybuffer_gridi;
38902   __Pyx_LocalBuf_ND __pyx_pybuffernd_left_edges;
38903   __Pyx_Buffer __pyx_pybuffer_left_edges;
38904   __Pyx_LocalBuf_ND __pyx_pybuffernd_levels;
38905   __Pyx_Buffer __pyx_pybuffer_levels;
38906   __Pyx_LocalBuf_ND __pyx_pybuffernd_right_edges;
38907   __Pyx_Buffer __pyx_pybuffer_right_edges;
38908   PyObject *__pyx_r = NULL;
38909   __Pyx_RefNannyDeclarations
38910   PyObject *__pyx_t_1 = NULL;
38911   PyObject *__pyx_t_2 = NULL;
38912   PyObject *__pyx_t_3 = NULL;
38913   PyObject *__pyx_t_4 = NULL;
38914   PyArrayObject *__pyx_t_5 = NULL;
38915   __Pyx_RefNannySetupContext("select_grids", 0);
38916   __pyx_pybuffer_gridi.pybuffer.buf = NULL;
38917   __pyx_pybuffer_gridi.refcount = 0;
38918   __pyx_pybuffernd_gridi.data = NULL;
38919   __pyx_pybuffernd_gridi.rcbuffer = &__pyx_pybuffer_gridi;
38920   __pyx_pybuffer_left_edges.pybuffer.buf = NULL;
38921   __pyx_pybuffer_left_edges.refcount = 0;
38922   __pyx_pybuffernd_left_edges.data = NULL;
38923   __pyx_pybuffernd_left_edges.rcbuffer = &__pyx_pybuffer_left_edges;
38924   __pyx_pybuffer_right_edges.pybuffer.buf = NULL;
38925   __pyx_pybuffer_right_edges.refcount = 0;
38926   __pyx_pybuffernd_right_edges.data = NULL;
38927   __pyx_pybuffernd_right_edges.rcbuffer = &__pyx_pybuffer_right_edges;
38928   __pyx_pybuffer_levels.pybuffer.buf = NULL;
38929   __pyx_pybuffer_levels.refcount = 0;
38930   __pyx_pybuffernd_levels.data = NULL;
38931   __pyx_pybuffernd_levels.rcbuffer = &__pyx_pybuffer_levels;
38932   {
38933     __Pyx_BufFmt_StackElem __pyx_stack[1];
38934     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_left_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(15, 10, __pyx_L1_error)
38935   }
38936   __pyx_pybuffernd_left_edges.diminfo[0].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_left_edges.diminfo[0].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_left_edges.diminfo[1].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_left_edges.diminfo[1].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[1];
38937   {
38938     __Pyx_BufFmt_StackElem __pyx_stack[1];
38939     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_right_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(15, 10, __pyx_L1_error)
38940   }
38941   __pyx_pybuffernd_right_edges.diminfo[0].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_right_edges.diminfo[0].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_right_edges.diminfo[1].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_right_edges.diminfo[1].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[1];
38942   {
38943     __Pyx_BufFmt_StackElem __pyx_stack[1];
38944     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_levels.rcbuffer->pybuffer, (PyObject*)__pyx_v_levels, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(15, 10, __pyx_L1_error)
38945   }
38946   __pyx_pybuffernd_levels.diminfo[0].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_levels.diminfo[0].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_levels.diminfo[1].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_levels.diminfo[1].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[1];
38947 
38948   /* "yt/geometry/_selection_routines/grid_selector.pxi":14
38949  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
38950  *                      np.ndarray[np.int32_t, ndim=2] levels):
38951  *         cdef int ng = left_edges.shape[0]             # <<<<<<<<<<<<<<
38952  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.zeros(ng, dtype='uint8')
38953  *         gridi[self.ind] = 1
38954  */
38955   __pyx_v_ng = (__pyx_v_left_edges->dimensions[0]);
38956 
38957   /* "yt/geometry/_selection_routines/grid_selector.pxi":15
38958  *                      np.ndarray[np.int32_t, ndim=2] levels):
38959  *         cdef int ng = left_edges.shape[0]
38960  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.zeros(ng, dtype='uint8')             # <<<<<<<<<<<<<<
38961  *         gridi[self.ind] = 1
38962  *         return gridi.astype("bool")
38963  */
38964   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 15, __pyx_L1_error)
38965   __Pyx_GOTREF(__pyx_t_1);
38966   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 15, __pyx_L1_error)
38967   __Pyx_GOTREF(__pyx_t_2);
38968   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
38969   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ng); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 15, __pyx_L1_error)
38970   __Pyx_GOTREF(__pyx_t_1);
38971   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 15, __pyx_L1_error)
38972   __Pyx_GOTREF(__pyx_t_3);
38973   __Pyx_GIVEREF(__pyx_t_1);
38974   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
38975   __pyx_t_1 = 0;
38976   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 15, __pyx_L1_error)
38977   __Pyx_GOTREF(__pyx_t_1);
38978   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(15, 15, __pyx_L1_error)
38979   __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 15, __pyx_L1_error)
38980   __Pyx_GOTREF(__pyx_t_4);
38981   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
38982   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
38983   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
38984   if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(15, 15, __pyx_L1_error)
38985   __pyx_t_5 = ((PyArrayObject *)__pyx_t_4);
38986   {
38987     __Pyx_BufFmt_StackElem __pyx_stack[1];
38988     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_gridi.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
38989       __pyx_v_gridi = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_gridi.rcbuffer->pybuffer.buf = NULL;
38990       __PYX_ERR(15, 15, __pyx_L1_error)
38991     } else {__pyx_pybuffernd_gridi.diminfo[0].strides = __pyx_pybuffernd_gridi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_gridi.diminfo[0].shape = __pyx_pybuffernd_gridi.rcbuffer->pybuffer.shape[0];
38992     }
38993   }
38994   __pyx_t_5 = 0;
38995   __pyx_v_gridi = ((PyArrayObject *)__pyx_t_4);
38996   __pyx_t_4 = 0;
38997 
38998   /* "yt/geometry/_selection_routines/grid_selector.pxi":16
38999  *         cdef int ng = left_edges.shape[0]
39000  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.zeros(ng, dtype='uint8')
39001  *         gridi[self.ind] = 1             # <<<<<<<<<<<<<<
39002  *         return gridi.astype("bool")
39003  *
39004  */
39005   if (unlikely(PyObject_SetItem(((PyObject *)__pyx_v_gridi), __pyx_v_self->ind, __pyx_int_1) < 0)) __PYX_ERR(15, 16, __pyx_L1_error)
39006 
39007   /* "yt/geometry/_selection_routines/grid_selector.pxi":17
39008  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.zeros(ng, dtype='uint8')
39009  *         gridi[self.ind] = 1
39010  *         return gridi.astype("bool")             # <<<<<<<<<<<<<<
39011  *
39012  *     @cython.boundscheck(False)
39013  */
39014   __Pyx_XDECREF(__pyx_r);
39015   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_gridi), __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 17, __pyx_L1_error)
39016   __Pyx_GOTREF(__pyx_t_1);
39017   __pyx_t_3 = NULL;
39018   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
39019     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
39020     if (likely(__pyx_t_3)) {
39021       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
39022       __Pyx_INCREF(__pyx_t_3);
39023       __Pyx_INCREF(function);
39024       __Pyx_DECREF_SET(__pyx_t_1, function);
39025     }
39026   }
39027   __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_n_s_bool);
39028   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
39029   if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 17, __pyx_L1_error)
39030   __Pyx_GOTREF(__pyx_t_4);
39031   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
39032   __pyx_r = __pyx_t_4;
39033   __pyx_t_4 = 0;
39034   goto __pyx_L0;
39035 
39036   /* "yt/geometry/_selection_routines/grid_selector.pxi":10
39037  *     @cython.wraparound(False)
39038  *     @cython.cdivision(True)
39039  *     def select_grids(self,             # <<<<<<<<<<<<<<
39040  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
39041  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
39042  */
39043 
39044   /* function exit code */
39045   __pyx_L1_error:;
39046   __Pyx_XDECREF(__pyx_t_1);
39047   __Pyx_XDECREF(__pyx_t_2);
39048   __Pyx_XDECREF(__pyx_t_3);
39049   __Pyx_XDECREF(__pyx_t_4);
39050   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
39051     __Pyx_PyThreadState_declare
39052     __Pyx_PyThreadState_assign
39053     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
39054     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_gridi.rcbuffer->pybuffer);
39055     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
39056     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
39057     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
39058   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
39059   __Pyx_AddTraceback("yt.geometry.selection_routines.GridSelector.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
39060   __pyx_r = NULL;
39061   goto __pyx_L2;
39062   __pyx_L0:;
39063   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_gridi.rcbuffer->pybuffer);
39064   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
39065   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
39066   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
39067   __pyx_L2:;
39068   __Pyx_XDECREF((PyObject *)__pyx_v_gridi);
39069   __Pyx_XGIVEREF(__pyx_r);
39070   __Pyx_RefNannyFinishContext();
39071   return __pyx_r;
39072 }
39073 
39074 /* "yt/geometry/_selection_routines/grid_selector.pxi":22
39075  *     @cython.wraparound(False)
39076  *     @cython.cdivision(True)
39077  *     def fill_mask(self, gobj):             # <<<<<<<<<<<<<<
39078  *         return np.ones(gobj.ActiveDimensions, dtype='bool')
39079  *
39080  */
39081 
39082 /* Python wrapper */
39083 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_5fill_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj); /*proto*/
39084 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_5fill_mask(PyObject *__pyx_v_self, PyObject *__pyx_v_gobj) {
39085   PyObject *__pyx_r = 0;
39086   __Pyx_RefNannyDeclarations
39087   __Pyx_RefNannySetupContext("fill_mask (wrapper)", 0);
39088   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_4fill_mask(((struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *)__pyx_v_self), ((PyObject *)__pyx_v_gobj));
39089 
39090   /* function exit code */
39091   __Pyx_RefNannyFinishContext();
39092   return __pyx_r;
39093 }
39094 
39095 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_4fill_mask(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self, PyObject *__pyx_v_gobj) {
39096   PyObject *__pyx_r = NULL;
39097   __Pyx_RefNannyDeclarations
39098   PyObject *__pyx_t_1 = NULL;
39099   PyObject *__pyx_t_2 = NULL;
39100   PyObject *__pyx_t_3 = NULL;
39101   PyObject *__pyx_t_4 = NULL;
39102   __Pyx_RefNannySetupContext("fill_mask", 0);
39103 
39104   /* "yt/geometry/_selection_routines/grid_selector.pxi":23
39105  *     @cython.cdivision(True)
39106  *     def fill_mask(self, gobj):
39107  *         return np.ones(gobj.ActiveDimensions, dtype='bool')             # <<<<<<<<<<<<<<
39108  *
39109  *     @cython.boundscheck(False)
39110  */
39111   __Pyx_XDECREF(__pyx_r);
39112   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 23, __pyx_L1_error)
39113   __Pyx_GOTREF(__pyx_t_1);
39114   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(15, 23, __pyx_L1_error)
39115   __Pyx_GOTREF(__pyx_t_2);
39116   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
39117   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_gobj, __pyx_n_s_ActiveDimensions); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 23, __pyx_L1_error)
39118   __Pyx_GOTREF(__pyx_t_1);
39119   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(15, 23, __pyx_L1_error)
39120   __Pyx_GOTREF(__pyx_t_3);
39121   __Pyx_GIVEREF(__pyx_t_1);
39122   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
39123   __pyx_t_1 = 0;
39124   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 23, __pyx_L1_error)
39125   __Pyx_GOTREF(__pyx_t_1);
39126   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_bool) < 0) __PYX_ERR(15, 23, __pyx_L1_error)
39127   __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(15, 23, __pyx_L1_error)
39128   __Pyx_GOTREF(__pyx_t_4);
39129   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
39130   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
39131   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
39132   __pyx_r = __pyx_t_4;
39133   __pyx_t_4 = 0;
39134   goto __pyx_L0;
39135 
39136   /* "yt/geometry/_selection_routines/grid_selector.pxi":22
39137  *     @cython.wraparound(False)
39138  *     @cython.cdivision(True)
39139  *     def fill_mask(self, gobj):             # <<<<<<<<<<<<<<
39140  *         return np.ones(gobj.ActiveDimensions, dtype='bool')
39141  *
39142  */
39143 
39144   /* function exit code */
39145   __pyx_L1_error:;
39146   __Pyx_XDECREF(__pyx_t_1);
39147   __Pyx_XDECREF(__pyx_t_2);
39148   __Pyx_XDECREF(__pyx_t_3);
39149   __Pyx_XDECREF(__pyx_t_4);
39150   __Pyx_AddTraceback("yt.geometry.selection_routines.GridSelector.fill_mask", __pyx_clineno, __pyx_lineno, __pyx_filename);
39151   __pyx_r = NULL;
39152   __pyx_L0:;
39153   __Pyx_XGIVEREF(__pyx_r);
39154   __Pyx_RefNannyFinishContext();
39155   return __pyx_r;
39156 }
39157 
39158 /* "yt/geometry/_selection_routines/grid_selector.pxi":28
39159  *     @cython.wraparound(False)
39160  *     @cython.cdivision(True)
39161  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
39162  *         return 1
39163  *
39164  */
39165 
39166 static int __pyx_f_2yt_8geometry_18selection_routines_12GridSelector_select_cell(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds) {
39167   int __pyx_r;
39168 
39169   /* "yt/geometry/_selection_routines/grid_selector.pxi":29
39170  *     @cython.cdivision(True)
39171  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
39172  *         return 1             # <<<<<<<<<<<<<<
39173  *
39174  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
39175  */
39176   __pyx_r = 1;
39177   goto __pyx_L0;
39178 
39179   /* "yt/geometry/_selection_routines/grid_selector.pxi":28
39180  *     @cython.wraparound(False)
39181  *     @cython.cdivision(True)
39182  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
39183  *         return 1
39184  *
39185  */
39186 
39187   /* function exit code */
39188   __pyx_L0:;
39189   return __pyx_r;
39190 }
39191 
39192 /* "yt/geometry/_selection_routines/grid_selector.pxi":31
39193  *         return 1
39194  *
39195  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
39196  *         # we apparently don't check if the point actually lies in the grid..
39197  *         return 1
39198  */
39199 
39200 static int __pyx_f_2yt_8geometry_18selection_routines_12GridSelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos) {
39201   int __pyx_r;
39202 
39203   /* "yt/geometry/_selection_routines/grid_selector.pxi":33
39204  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
39205  *         # we apparently don't check if the point actually lies in the grid..
39206  *         return 1             # <<<<<<<<<<<<<<
39207  *
39208  *     def _hash_vals(self):
39209  */
39210   __pyx_r = 1;
39211   goto __pyx_L0;
39212 
39213   /* "yt/geometry/_selection_routines/grid_selector.pxi":31
39214  *         return 1
39215  *
39216  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
39217  *         # we apparently don't check if the point actually lies in the grid..
39218  *         return 1
39219  */
39220 
39221   /* function exit code */
39222   __pyx_L0:;
39223   return __pyx_r;
39224 }
39225 
39226 /* "yt/geometry/_selection_routines/grid_selector.pxi":35
39227  *         return 1
39228  *
39229  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
39230  *         return (self.ind,)
39231  *
39232  */
39233 
39234 /* Python wrapper */
39235 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_7_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
39236 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_7_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
39237   PyObject *__pyx_r = 0;
39238   __Pyx_RefNannyDeclarations
39239   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
39240   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_6_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *)__pyx_v_self));
39241 
39242   /* function exit code */
39243   __Pyx_RefNannyFinishContext();
39244   return __pyx_r;
39245 }
39246 
39247 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_6_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self) {
39248   PyObject *__pyx_r = NULL;
39249   __Pyx_RefNannyDeclarations
39250   PyObject *__pyx_t_1 = NULL;
39251   __Pyx_RefNannySetupContext("_hash_vals", 0);
39252 
39253   /* "yt/geometry/_selection_routines/grid_selector.pxi":36
39254  *
39255  *     def _hash_vals(self):
39256  *         return (self.ind,)             # <<<<<<<<<<<<<<
39257  *
39258  * grid_selector = GridSelector
39259  */
39260   __Pyx_XDECREF(__pyx_r);
39261   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(15, 36, __pyx_L1_error)
39262   __Pyx_GOTREF(__pyx_t_1);
39263   __Pyx_INCREF(__pyx_v_self->ind);
39264   __Pyx_GIVEREF(__pyx_v_self->ind);
39265   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->ind);
39266   __pyx_r = __pyx_t_1;
39267   __pyx_t_1 = 0;
39268   goto __pyx_L0;
39269 
39270   /* "yt/geometry/_selection_routines/grid_selector.pxi":35
39271  *         return 1
39272  *
39273  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
39274  *         return (self.ind,)
39275  *
39276  */
39277 
39278   /* function exit code */
39279   __pyx_L1_error:;
39280   __Pyx_XDECREF(__pyx_t_1);
39281   __Pyx_AddTraceback("yt.geometry.selection_routines.GridSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
39282   __pyx_r = NULL;
39283   __pyx_L0:;
39284   __Pyx_XGIVEREF(__pyx_r);
39285   __Pyx_RefNannyFinishContext();
39286   return __pyx_r;
39287 }
39288 
39289 /* "(tree fragment)":1
39290  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
39291  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
39292  * def __setstate_cython__(self, __pyx_state):
39293  */
39294 
39295 /* Python wrapper */
39296 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
39297 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_9__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
39298   PyObject *__pyx_r = 0;
39299   __Pyx_RefNannyDeclarations
39300   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
39301   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_8__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *)__pyx_v_self));
39302 
39303   /* function exit code */
39304   __Pyx_RefNannyFinishContext();
39305   return __pyx_r;
39306 }
39307 
39308 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self) {
39309   PyObject *__pyx_r = NULL;
39310   __Pyx_RefNannyDeclarations
39311   PyObject *__pyx_t_1 = NULL;
39312   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
39313 
39314   /* "(tree fragment)":2
39315  * def __reduce_cython__(self):
39316  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
39317  * def __setstate_cython__(self, __pyx_state):
39318  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
39319  */
39320   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__43, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
39321   __Pyx_GOTREF(__pyx_t_1);
39322   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
39323   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
39324   __PYX_ERR(5, 2, __pyx_L1_error)
39325 
39326   /* "(tree fragment)":1
39327  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
39328  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
39329  * def __setstate_cython__(self, __pyx_state):
39330  */
39331 
39332   /* function exit code */
39333   __pyx_L1_error:;
39334   __Pyx_XDECREF(__pyx_t_1);
39335   __Pyx_AddTraceback("yt.geometry.selection_routines.GridSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
39336   __pyx_r = NULL;
39337   __Pyx_XGIVEREF(__pyx_r);
39338   __Pyx_RefNannyFinishContext();
39339   return __pyx_r;
39340 }
39341 
39342 /* "(tree fragment)":3
39343  * def __reduce_cython__(self):
39344  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
39345  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
39346  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
39347  */
39348 
39349 /* Python wrapper */
39350 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
39351 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_11__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
39352   PyObject *__pyx_r = 0;
39353   __Pyx_RefNannyDeclarations
39354   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
39355   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_10__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
39356 
39357   /* function exit code */
39358   __Pyx_RefNannyFinishContext();
39359   return __pyx_r;
39360 }
39361 
39362 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_12GridSelector_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
39363   PyObject *__pyx_r = NULL;
39364   __Pyx_RefNannyDeclarations
39365   PyObject *__pyx_t_1 = NULL;
39366   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
39367 
39368   /* "(tree fragment)":4
39369  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
39370  * def __setstate_cython__(self, __pyx_state):
39371  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
39372  */
39373   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
39374   __Pyx_GOTREF(__pyx_t_1);
39375   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
39376   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
39377   __PYX_ERR(5, 4, __pyx_L1_error)
39378 
39379   /* "(tree fragment)":3
39380  * def __reduce_cython__(self):
39381  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
39382  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
39383  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
39384  */
39385 
39386   /* function exit code */
39387   __pyx_L1_error:;
39388   __Pyx_XDECREF(__pyx_t_1);
39389   __Pyx_AddTraceback("yt.geometry.selection_routines.GridSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
39390   __pyx_r = NULL;
39391   __Pyx_XGIVEREF(__pyx_r);
39392   __Pyx_RefNannyFinishContext();
39393   return __pyx_r;
39394 }
39395 
39396 /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":3
39397  * cdef class OctreeSubsetSelector(SelectorObject):
39398  *
39399  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
39400  *         self.base_selector = dobj.base_selector
39401  *         self.min_level = self.base_selector.min_level
39402  */
39403 
39404 /* Python wrapper */
39405 static int __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
39406 static int __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
39407   PyObject *__pyx_v_dobj = 0;
39408   int __pyx_r;
39409   __Pyx_RefNannyDeclarations
39410   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
39411   {
39412     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
39413     PyObject* values[1] = {0};
39414     if (unlikely(__pyx_kwds)) {
39415       Py_ssize_t kw_args;
39416       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
39417       switch (pos_args) {
39418         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
39419         CYTHON_FALLTHROUGH;
39420         case  0: break;
39421         default: goto __pyx_L5_argtuple_error;
39422       }
39423       kw_args = PyDict_Size(__pyx_kwds);
39424       switch (pos_args) {
39425         case  0:
39426         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
39427         else goto __pyx_L5_argtuple_error;
39428       }
39429       if (unlikely(kw_args > 0)) {
39430         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(16, 3, __pyx_L3_error)
39431       }
39432     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
39433       goto __pyx_L5_argtuple_error;
39434     } else {
39435       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
39436     }
39437     __pyx_v_dobj = values[0];
39438   }
39439   goto __pyx_L4_argument_unpacking_done;
39440   __pyx_L5_argtuple_error:;
39441   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 3, __pyx_L3_error)
39442   __pyx_L3_error:;
39443   __Pyx_AddTraceback("yt.geometry.selection_routines.OctreeSubsetSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
39444   __Pyx_RefNannyFinishContext();
39445   return -1;
39446   __pyx_L4_argument_unpacking_done:;
39447   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)__pyx_v_self), __pyx_v_dobj);
39448 
39449   /* function exit code */
39450   __Pyx_RefNannyFinishContext();
39451   return __pyx_r;
39452 }
39453 
39454 static int __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
39455   int __pyx_r;
39456   __Pyx_RefNannyDeclarations
39457   PyObject *__pyx_t_1 = NULL;
39458   __pyx_t_5numpy_int32_t __pyx_t_2;
39459   __pyx_t_5numpy_int64_t __pyx_t_3;
39460   PyObject *__pyx_t_4 = NULL;
39461   int __pyx_t_5;
39462   __Pyx_RefNannySetupContext("__init__", 0);
39463 
39464   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":4
39465  *
39466  *     def __init__(self, dobj):
39467  *         self.base_selector = dobj.base_selector             # <<<<<<<<<<<<<<
39468  *         self.min_level = self.base_selector.min_level
39469  *         self.max_level = self.base_selector.max_level
39470  */
39471   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_base_selector); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 4, __pyx_L1_error)
39472   __Pyx_GOTREF(__pyx_t_1);
39473   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(16, 4, __pyx_L1_error)
39474   __Pyx_GIVEREF(__pyx_t_1);
39475   __Pyx_GOTREF(__pyx_v_self->base_selector);
39476   __Pyx_DECREF(((PyObject *)__pyx_v_self->base_selector));
39477   __pyx_v_self->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_1);
39478   __pyx_t_1 = 0;
39479 
39480   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":5
39481  *     def __init__(self, dobj):
39482  *         self.base_selector = dobj.base_selector
39483  *         self.min_level = self.base_selector.min_level             # <<<<<<<<<<<<<<
39484  *         self.max_level = self.base_selector.max_level
39485  *         self.domain_id = dobj.domain_id
39486  */
39487   __pyx_t_2 = __pyx_v_self->base_selector->min_level;
39488   __pyx_v_self->__pyx_base.min_level = __pyx_t_2;
39489 
39490   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":6
39491  *         self.base_selector = dobj.base_selector
39492  *         self.min_level = self.base_selector.min_level
39493  *         self.max_level = self.base_selector.max_level             # <<<<<<<<<<<<<<
39494  *         self.domain_id = dobj.domain_id
39495  *         self.overlap_cells = getattr(dobj.oct_handler, 'overlap_cells', 1)
39496  */
39497   __pyx_t_2 = __pyx_v_self->base_selector->max_level;
39498   __pyx_v_self->__pyx_base.max_level = __pyx_t_2;
39499 
39500   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":7
39501  *         self.min_level = self.base_selector.min_level
39502  *         self.max_level = self.base_selector.max_level
39503  *         self.domain_id = dobj.domain_id             # <<<<<<<<<<<<<<
39504  *         self.overlap_cells = getattr(dobj.oct_handler, 'overlap_cells', 1)
39505  *
39506  */
39507   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_domain_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 7, __pyx_L1_error)
39508   __Pyx_GOTREF(__pyx_t_1);
39509   __pyx_t_3 = __Pyx_PyInt_As_npy_int64(__pyx_t_1); if (unlikely((__pyx_t_3 == ((npy_int64)-1)) && PyErr_Occurred())) __PYX_ERR(16, 7, __pyx_L1_error)
39510   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
39511   __pyx_v_self->domain_id = __pyx_t_3;
39512 
39513   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":8
39514  *         self.max_level = self.base_selector.max_level
39515  *         self.domain_id = dobj.domain_id
39516  *         self.overlap_cells = getattr(dobj.oct_handler, 'overlap_cells', 1)             # <<<<<<<<<<<<<<
39517  *
39518  *     @cython.boundscheck(False)
39519  */
39520   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_oct_handler); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 8, __pyx_L1_error)
39521   __Pyx_GOTREF(__pyx_t_1);
39522   __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_1, __pyx_n_s_overlap_cells, __pyx_int_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(16, 8, __pyx_L1_error)
39523   __Pyx_GOTREF(__pyx_t_4);
39524   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
39525   __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(16, 8, __pyx_L1_error)
39526   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
39527   __pyx_v_self->__pyx_base.overlap_cells = __pyx_t_5;
39528 
39529   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":3
39530  * cdef class OctreeSubsetSelector(SelectorObject):
39531  *
39532  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
39533  *         self.base_selector = dobj.base_selector
39534  *         self.min_level = self.base_selector.min_level
39535  */
39536 
39537   /* function exit code */
39538   __pyx_r = 0;
39539   goto __pyx_L0;
39540   __pyx_L1_error:;
39541   __Pyx_XDECREF(__pyx_t_1);
39542   __Pyx_XDECREF(__pyx_t_4);
39543   __Pyx_AddTraceback("yt.geometry.selection_routines.OctreeSubsetSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
39544   __pyx_r = -1;
39545   __pyx_L0:;
39546   __Pyx_RefNannyFinishContext();
39547   return __pyx_r;
39548 }
39549 
39550 /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":13
39551  *     @cython.wraparound(False)
39552  *     @cython.cdivision(True)
39553  *     def select_grids(self,             # <<<<<<<<<<<<<<
39554  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
39555  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
39556  */
39557 
39558 /* Python wrapper */
39559 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_3select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
39560 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_3select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
39561   CYTHON_UNUSED PyArrayObject *__pyx_v_left_edges = 0;
39562   CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges = 0;
39563   CYTHON_UNUSED PyArrayObject *__pyx_v_levels = 0;
39564   PyObject *__pyx_r = 0;
39565   __Pyx_RefNannyDeclarations
39566   __Pyx_RefNannySetupContext("select_grids (wrapper)", 0);
39567   {
39568     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_left_edges,&__pyx_n_s_right_edges,&__pyx_n_s_levels,0};
39569     PyObject* values[3] = {0,0,0};
39570     if (unlikely(__pyx_kwds)) {
39571       Py_ssize_t kw_args;
39572       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
39573       switch (pos_args) {
39574         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
39575         CYTHON_FALLTHROUGH;
39576         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
39577         CYTHON_FALLTHROUGH;
39578         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
39579         CYTHON_FALLTHROUGH;
39580         case  0: break;
39581         default: goto __pyx_L5_argtuple_error;
39582       }
39583       kw_args = PyDict_Size(__pyx_kwds);
39584       switch (pos_args) {
39585         case  0:
39586         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_left_edges)) != 0)) kw_args--;
39587         else goto __pyx_L5_argtuple_error;
39588         CYTHON_FALLTHROUGH;
39589         case  1:
39590         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_right_edges)) != 0)) kw_args--;
39591         else {
39592           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 1); __PYX_ERR(16, 13, __pyx_L3_error)
39593         }
39594         CYTHON_FALLTHROUGH;
39595         case  2:
39596         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_levels)) != 0)) kw_args--;
39597         else {
39598           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 2); __PYX_ERR(16, 13, __pyx_L3_error)
39599         }
39600       }
39601       if (unlikely(kw_args > 0)) {
39602         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_grids") < 0)) __PYX_ERR(16, 13, __pyx_L3_error)
39603       }
39604     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
39605       goto __pyx_L5_argtuple_error;
39606     } else {
39607       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
39608       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
39609       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
39610     }
39611     __pyx_v_left_edges = ((PyArrayObject *)values[0]);
39612     __pyx_v_right_edges = ((PyArrayObject *)values[1]);
39613     __pyx_v_levels = ((PyArrayObject *)values[2]);
39614   }
39615   goto __pyx_L4_argument_unpacking_done;
39616   __pyx_L5_argtuple_error:;
39617   __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(16, 13, __pyx_L3_error)
39618   __pyx_L3_error:;
39619   __Pyx_AddTraceback("yt.geometry.selection_routines.OctreeSubsetSelector.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
39620   __Pyx_RefNannyFinishContext();
39621   return NULL;
39622   __pyx_L4_argument_unpacking_done:;
39623   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_left_edges), __pyx_ptype_5numpy_ndarray, 1, "left_edges", 0))) __PYX_ERR(16, 14, __pyx_L1_error)
39624   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_right_edges), __pyx_ptype_5numpy_ndarray, 1, "right_edges", 0))) __PYX_ERR(16, 15, __pyx_L1_error)
39625   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_levels), __pyx_ptype_5numpy_ndarray, 1, "levels", 0))) __PYX_ERR(16, 16, __pyx_L1_error)
39626   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_2select_grids(((struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)__pyx_v_self), __pyx_v_left_edges, __pyx_v_right_edges, __pyx_v_levels);
39627 
39628   /* function exit code */
39629   goto __pyx_L0;
39630   __pyx_L1_error:;
39631   __pyx_r = NULL;
39632   __pyx_L0:;
39633   __Pyx_RefNannyFinishContext();
39634   return __pyx_r;
39635 }
39636 
39637 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_2select_grids(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED PyArrayObject *__pyx_v_left_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_levels) {
39638   __Pyx_LocalBuf_ND __pyx_pybuffernd_left_edges;
39639   __Pyx_Buffer __pyx_pybuffer_left_edges;
39640   __Pyx_LocalBuf_ND __pyx_pybuffernd_levels;
39641   __Pyx_Buffer __pyx_pybuffer_levels;
39642   __Pyx_LocalBuf_ND __pyx_pybuffernd_right_edges;
39643   __Pyx_Buffer __pyx_pybuffer_right_edges;
39644   PyObject *__pyx_r = NULL;
39645   __Pyx_RefNannyDeclarations
39646   __Pyx_RefNannySetupContext("select_grids", 0);
39647   __pyx_pybuffer_left_edges.pybuffer.buf = NULL;
39648   __pyx_pybuffer_left_edges.refcount = 0;
39649   __pyx_pybuffernd_left_edges.data = NULL;
39650   __pyx_pybuffernd_left_edges.rcbuffer = &__pyx_pybuffer_left_edges;
39651   __pyx_pybuffer_right_edges.pybuffer.buf = NULL;
39652   __pyx_pybuffer_right_edges.refcount = 0;
39653   __pyx_pybuffernd_right_edges.data = NULL;
39654   __pyx_pybuffernd_right_edges.rcbuffer = &__pyx_pybuffer_right_edges;
39655   __pyx_pybuffer_levels.pybuffer.buf = NULL;
39656   __pyx_pybuffer_levels.refcount = 0;
39657   __pyx_pybuffernd_levels.data = NULL;
39658   __pyx_pybuffernd_levels.rcbuffer = &__pyx_pybuffer_levels;
39659   {
39660     __Pyx_BufFmt_StackElem __pyx_stack[1];
39661     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_left_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(16, 13, __pyx_L1_error)
39662   }
39663   __pyx_pybuffernd_left_edges.diminfo[0].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_left_edges.diminfo[0].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_left_edges.diminfo[1].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_left_edges.diminfo[1].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[1];
39664   {
39665     __Pyx_BufFmt_StackElem __pyx_stack[1];
39666     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_right_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(16, 13, __pyx_L1_error)
39667   }
39668   __pyx_pybuffernd_right_edges.diminfo[0].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_right_edges.diminfo[0].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_right_edges.diminfo[1].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_right_edges.diminfo[1].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[1];
39669   {
39670     __Pyx_BufFmt_StackElem __pyx_stack[1];
39671     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_levels.rcbuffer->pybuffer, (PyObject*)__pyx_v_levels, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(16, 13, __pyx_L1_error)
39672   }
39673   __pyx_pybuffernd_levels.diminfo[0].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_levels.diminfo[0].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_levels.diminfo[1].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_levels.diminfo[1].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[1];
39674 
39675   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":17
39676  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
39677  *                      np.ndarray[np.int32_t, ndim=2] levels):
39678  *         raise RuntimeError             # <<<<<<<<<<<<<<
39679  *
39680  *     @cython.boundscheck(False)
39681  */
39682   __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0);
39683   __PYX_ERR(16, 17, __pyx_L1_error)
39684 
39685   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":13
39686  *     @cython.wraparound(False)
39687  *     @cython.cdivision(True)
39688  *     def select_grids(self,             # <<<<<<<<<<<<<<
39689  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
39690  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
39691  */
39692 
39693   /* function exit code */
39694   __pyx_L1_error:;
39695   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
39696     __Pyx_PyThreadState_declare
39697     __Pyx_PyThreadState_assign
39698     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
39699     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
39700     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
39701     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
39702   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
39703   __Pyx_AddTraceback("yt.geometry.selection_routines.OctreeSubsetSelector.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
39704   __pyx_r = NULL;
39705   goto __pyx_L2;
39706   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
39707   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
39708   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
39709   __pyx_L2:;
39710   __Pyx_XGIVEREF(__pyx_r);
39711   __Pyx_RefNannyFinishContext();
39712   return __pyx_r;
39713 }
39714 
39715 /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":22
39716  *     @cython.wraparound(False)
39717  *     @cython.cdivision(True)
39718  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
39719  *         return 1
39720  *
39721  */
39722 
39723 static int __pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_sphere(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t __pyx_v_radius) {
39724   int __pyx_r;
39725 
39726   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":23
39727  *     @cython.cdivision(True)
39728  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
39729  *         return 1             # <<<<<<<<<<<<<<
39730  *
39731  *     @cython.boundscheck(False)
39732  */
39733   __pyx_r = 1;
39734   goto __pyx_L0;
39735 
39736   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":22
39737  *     @cython.wraparound(False)
39738  *     @cython.cdivision(True)
39739  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
39740  *         return 1
39741  *
39742  */
39743 
39744   /* function exit code */
39745   __pyx_L0:;
39746   return __pyx_r;
39747 }
39748 
39749 /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":28
39750  *     @cython.wraparound(False)
39751  *     @cython.cdivision(True)
39752  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
39753  *         return 1
39754  *
39755  */
39756 
39757 static int __pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_cell(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds) {
39758   int __pyx_r;
39759 
39760   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":29
39761  *     @cython.cdivision(True)
39762  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
39763  *         return 1             # <<<<<<<<<<<<<<
39764  *
39765  *     @cython.boundscheck(False)
39766  */
39767   __pyx_r = 1;
39768   goto __pyx_L0;
39769 
39770   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":28
39771  *     @cython.wraparound(False)
39772  *     @cython.cdivision(True)
39773  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
39774  *         return 1
39775  *
39776  */
39777 
39778   /* function exit code */
39779   __pyx_L0:;
39780   return __pyx_r;
39781 }
39782 
39783 /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":34
39784  *     @cython.wraparound(False)
39785  *     @cython.cdivision(True)
39786  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
39787  *         return self.base_selector.select_point(pos)
39788  *
39789  */
39790 
39791 static int __pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
39792   int __pyx_r;
39793 
39794   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":35
39795  *     @cython.cdivision(True)
39796  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
39797  *         return self.base_selector.select_point(pos)             # <<<<<<<<<<<<<<
39798  *
39799  *     @cython.boundscheck(False)
39800  */
39801   __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->base_selector->__pyx_vtab)->select_point(__pyx_v_self->base_selector, __pyx_v_pos);
39802   goto __pyx_L0;
39803 
39804   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":34
39805  *     @cython.wraparound(False)
39806  *     @cython.cdivision(True)
39807  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
39808  *         return self.base_selector.select_point(pos)
39809  *
39810  */
39811 
39812   /* function exit code */
39813   __pyx_L0:;
39814   return __pyx_r;
39815 }
39816 
39817 /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":40
39818  *     @cython.wraparound(False)
39819  *     @cython.cdivision(True)
39820  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
39821  *                                np.float64_t right_edge[3]) nogil:
39822  *         # return 1
39823  */
39824 
39825 static int __pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
39826   int __pyx_r;
39827 
39828   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":43
39829  *                                np.float64_t right_edge[3]) nogil:
39830  *         # return 1
39831  *         return self.base_selector.select_bbox(left_edge, right_edge)             # <<<<<<<<<<<<<<
39832  *
39833  *     @cython.boundscheck(False)
39834  */
39835   __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->base_selector->__pyx_vtab)->select_bbox(__pyx_v_self->base_selector, __pyx_v_left_edge, __pyx_v_right_edge);
39836   goto __pyx_L0;
39837 
39838   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":40
39839  *     @cython.wraparound(False)
39840  *     @cython.cdivision(True)
39841  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
39842  *                                np.float64_t right_edge[3]) nogil:
39843  *         # return 1
39844  */
39845 
39846   /* function exit code */
39847   __pyx_L0:;
39848   return __pyx_r;
39849 }
39850 
39851 /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":48
39852  *     @cython.wraparound(False)
39853  *     @cython.cdivision(True)
39854  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
39855  *                          np.float64_t right_edge[3], np.int32_t level,
39856  *                          Oct *o = NULL) nogil:
39857  */
39858 
39859 static int __pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_grid *__pyx_optional_args) {
39860 
39861   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":50
39862  *     cdef int select_grid(self, np.float64_t left_edge[3],
39863  *                          np.float64_t right_edge[3], np.int32_t level,
39864  *                          Oct *o = NULL) nogil:             # <<<<<<<<<<<<<<
39865  *         # Because visitors now use select_grid, we should be explicitly
39866  *         # checking this.
39867  */
39868   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_o = ((struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *)NULL);
39869   int __pyx_v_res;
39870   int __pyx_r;
39871   int __pyx_t_1;
39872   struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid __pyx_t_2;
39873   int __pyx_t_3;
39874   int __pyx_t_4;
39875   if (__pyx_optional_args) {
39876     if (__pyx_optional_args->__pyx_n > 0) {
39877       __pyx_v_o = __pyx_optional_args->o;
39878     }
39879   }
39880 
39881   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":54
39882  *         # checking this.
39883  *         cdef int res
39884  *         res = self.base_selector.select_grid(left_edge, right_edge, level, o)             # <<<<<<<<<<<<<<
39885  *         if self.domain_id == -1:
39886  *             return res
39887  */
39888   __pyx_t_2.__pyx_n = 1;
39889   __pyx_t_2.o = __pyx_v_o;
39890   __pyx_t_1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->base_selector->__pyx_vtab)->select_grid(__pyx_v_self->base_selector, __pyx_v_left_edge, __pyx_v_right_edge, __pyx_v_level, &__pyx_t_2);
39891   __pyx_v_res = __pyx_t_1;
39892 
39893   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":55
39894  *         cdef int res
39895  *         res = self.base_selector.select_grid(left_edge, right_edge, level, o)
39896  *         if self.domain_id == -1:             # <<<<<<<<<<<<<<
39897  *             return res
39898  *         elif res == 1 and o != NULL and o.domain != self.domain_id:
39899  */
39900   __pyx_t_3 = ((__pyx_v_self->domain_id == -1LL) != 0);
39901   if (__pyx_t_3) {
39902 
39903     /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":56
39904  *         res = self.base_selector.select_grid(left_edge, right_edge, level, o)
39905  *         if self.domain_id == -1:
39906  *             return res             # <<<<<<<<<<<<<<
39907  *         elif res == 1 and o != NULL and o.domain != self.domain_id:
39908  *             return -1
39909  */
39910     __pyx_r = __pyx_v_res;
39911     goto __pyx_L0;
39912 
39913     /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":55
39914  *         cdef int res
39915  *         res = self.base_selector.select_grid(left_edge, right_edge, level, o)
39916  *         if self.domain_id == -1:             # <<<<<<<<<<<<<<
39917  *             return res
39918  *         elif res == 1 and o != NULL and o.domain != self.domain_id:
39919  */
39920   }
39921 
39922   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":57
39923  *         if self.domain_id == -1:
39924  *             return res
39925  *         elif res == 1 and o != NULL and o.domain != self.domain_id:             # <<<<<<<<<<<<<<
39926  *             return -1
39927  *         return res
39928  */
39929   __pyx_t_4 = ((__pyx_v_res == 1) != 0);
39930   if (__pyx_t_4) {
39931   } else {
39932     __pyx_t_3 = __pyx_t_4;
39933     goto __pyx_L4_bool_binop_done;
39934   }
39935   __pyx_t_4 = ((__pyx_v_o != NULL) != 0);
39936   if (__pyx_t_4) {
39937   } else {
39938     __pyx_t_3 = __pyx_t_4;
39939     goto __pyx_L4_bool_binop_done;
39940   }
39941   __pyx_t_4 = ((__pyx_v_o->domain != __pyx_v_self->domain_id) != 0);
39942   __pyx_t_3 = __pyx_t_4;
39943   __pyx_L4_bool_binop_done:;
39944   if (__pyx_t_3) {
39945 
39946     /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":58
39947  *             return res
39948  *         elif res == 1 and o != NULL and o.domain != self.domain_id:
39949  *             return -1             # <<<<<<<<<<<<<<
39950  *         return res
39951  *
39952  */
39953     __pyx_r = -1;
39954     goto __pyx_L0;
39955 
39956     /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":57
39957  *         if self.domain_id == -1:
39958  *             return res
39959  *         elif res == 1 and o != NULL and o.domain != self.domain_id:             # <<<<<<<<<<<<<<
39960  *             return -1
39961  *         return res
39962  */
39963   }
39964 
39965   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":59
39966  *         elif res == 1 and o != NULL and o.domain != self.domain_id:
39967  *             return -1
39968  *         return res             # <<<<<<<<<<<<<<
39969  *
39970  *     def _hash_vals(self):
39971  */
39972   __pyx_r = __pyx_v_res;
39973   goto __pyx_L0;
39974 
39975   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":48
39976  *     @cython.wraparound(False)
39977  *     @cython.cdivision(True)
39978  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
39979  *                          np.float64_t right_edge[3], np.int32_t level,
39980  *                          Oct *o = NULL) nogil:
39981  */
39982 
39983   /* function exit code */
39984   __pyx_L0:;
39985   return __pyx_r;
39986 }
39987 
39988 /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":61
39989  *         return res
39990  *
39991  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
39992  *         return (hash(self.base_selector), self.domain_id)
39993  *
39994  */
39995 
39996 /* Python wrapper */
39997 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
39998 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
39999   PyObject *__pyx_r = 0;
40000   __Pyx_RefNannyDeclarations
40001   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
40002   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_4_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)__pyx_v_self));
40003 
40004   /* function exit code */
40005   __Pyx_RefNannyFinishContext();
40006   return __pyx_r;
40007 }
40008 
40009 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_4_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self) {
40010   PyObject *__pyx_r = NULL;
40011   __Pyx_RefNannyDeclarations
40012   PyObject *__pyx_t_1 = NULL;
40013   Py_hash_t __pyx_t_2;
40014   PyObject *__pyx_t_3 = NULL;
40015   PyObject *__pyx_t_4 = NULL;
40016   __Pyx_RefNannySetupContext("_hash_vals", 0);
40017 
40018   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":62
40019  *
40020  *     def _hash_vals(self):
40021  *         return (hash(self.base_selector), self.domain_id)             # <<<<<<<<<<<<<<
40022  *
40023  * octree_subset_selector = OctreeSubsetSelector
40024  */
40025   __Pyx_XDECREF(__pyx_r);
40026   __pyx_t_1 = ((PyObject *)__pyx_v_self->base_selector);
40027   __Pyx_INCREF(__pyx_t_1);
40028   __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(16, 62, __pyx_L1_error)
40029   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
40030   __pyx_t_1 = __Pyx_PyInt_FromHash_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 62, __pyx_L1_error)
40031   __Pyx_GOTREF(__pyx_t_1);
40032   __pyx_t_3 = __Pyx_PyInt_From_npy_int64(__pyx_v_self->domain_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 62, __pyx_L1_error)
40033   __Pyx_GOTREF(__pyx_t_3);
40034   __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(16, 62, __pyx_L1_error)
40035   __Pyx_GOTREF(__pyx_t_4);
40036   __Pyx_GIVEREF(__pyx_t_1);
40037   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
40038   __Pyx_GIVEREF(__pyx_t_3);
40039   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
40040   __pyx_t_1 = 0;
40041   __pyx_t_3 = 0;
40042   __pyx_r = __pyx_t_4;
40043   __pyx_t_4 = 0;
40044   goto __pyx_L0;
40045 
40046   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":61
40047  *         return res
40048  *
40049  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
40050  *         return (hash(self.base_selector), self.domain_id)
40051  *
40052  */
40053 
40054   /* function exit code */
40055   __pyx_L1_error:;
40056   __Pyx_XDECREF(__pyx_t_1);
40057   __Pyx_XDECREF(__pyx_t_3);
40058   __Pyx_XDECREF(__pyx_t_4);
40059   __Pyx_AddTraceback("yt.geometry.selection_routines.OctreeSubsetSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
40060   __pyx_r = NULL;
40061   __pyx_L0:;
40062   __Pyx_XGIVEREF(__pyx_r);
40063   __Pyx_RefNannyFinishContext();
40064   return __pyx_r;
40065 }
40066 
40067 /* "yt/geometry/selection_routines.pxd":74
40068  *
40069  * cdef class OctreeSubsetSelector(SelectorObject):
40070  *     cdef public SelectorObject base_selector             # <<<<<<<<<<<<<<
40071  *     cdef public np.int64_t domain_id
40072  *
40073  */
40074 
40075 /* Python wrapper */
40076 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_1__get__(PyObject *__pyx_v_self); /*proto*/
40077 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_1__get__(PyObject *__pyx_v_self) {
40078   PyObject *__pyx_r = 0;
40079   __Pyx_RefNannyDeclarations
40080   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
40081   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)__pyx_v_self));
40082 
40083   /* function exit code */
40084   __Pyx_RefNannyFinishContext();
40085   return __pyx_r;
40086 }
40087 
40088 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self) {
40089   PyObject *__pyx_r = NULL;
40090   __Pyx_RefNannyDeclarations
40091   __Pyx_RefNannySetupContext("__get__", 0);
40092   __Pyx_XDECREF(__pyx_r);
40093   __Pyx_INCREF(((PyObject *)__pyx_v_self->base_selector));
40094   __pyx_r = ((PyObject *)__pyx_v_self->base_selector);
40095   goto __pyx_L0;
40096 
40097   /* function exit code */
40098   __pyx_L0:;
40099   __Pyx_XGIVEREF(__pyx_r);
40100   __Pyx_RefNannyFinishContext();
40101   return __pyx_r;
40102 }
40103 
40104 /* Python wrapper */
40105 static int __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
40106 static int __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
40107   int __pyx_r;
40108   __Pyx_RefNannyDeclarations
40109   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
40110   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
40111 
40112   /* function exit code */
40113   __Pyx_RefNannyFinishContext();
40114   return __pyx_r;
40115 }
40116 
40117 static int __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, PyObject *__pyx_v_value) {
40118   int __pyx_r;
40119   __Pyx_RefNannyDeclarations
40120   PyObject *__pyx_t_1 = NULL;
40121   __Pyx_RefNannySetupContext("__set__", 0);
40122   if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(4, 74, __pyx_L1_error)
40123   __pyx_t_1 = __pyx_v_value;
40124   __Pyx_INCREF(__pyx_t_1);
40125   __Pyx_GIVEREF(__pyx_t_1);
40126   __Pyx_GOTREF(__pyx_v_self->base_selector);
40127   __Pyx_DECREF(((PyObject *)__pyx_v_self->base_selector));
40128   __pyx_v_self->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_1);
40129   __pyx_t_1 = 0;
40130 
40131   /* function exit code */
40132   __pyx_r = 0;
40133   goto __pyx_L0;
40134   __pyx_L1_error:;
40135   __Pyx_XDECREF(__pyx_t_1);
40136   __Pyx_AddTraceback("yt.geometry.selection_routines.OctreeSubsetSelector.base_selector.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
40137   __pyx_r = -1;
40138   __pyx_L0:;
40139   __Pyx_RefNannyFinishContext();
40140   return __pyx_r;
40141 }
40142 
40143 /* Python wrapper */
40144 static int __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_5__del__(PyObject *__pyx_v_self); /*proto*/
40145 static int __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_5__del__(PyObject *__pyx_v_self) {
40146   int __pyx_r;
40147   __Pyx_RefNannyDeclarations
40148   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
40149   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_4__del__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)__pyx_v_self));
40150 
40151   /* function exit code */
40152   __Pyx_RefNannyFinishContext();
40153   return __pyx_r;
40154 }
40155 
40156 static int __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_4__del__(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self) {
40157   int __pyx_r;
40158   __Pyx_RefNannyDeclarations
40159   __Pyx_RefNannySetupContext("__del__", 0);
40160   __Pyx_INCREF(Py_None);
40161   __Pyx_GIVEREF(Py_None);
40162   __Pyx_GOTREF(__pyx_v_self->base_selector);
40163   __Pyx_DECREF(((PyObject *)__pyx_v_self->base_selector));
40164   __pyx_v_self->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None);
40165 
40166   /* function exit code */
40167   __pyx_r = 0;
40168   __Pyx_RefNannyFinishContext();
40169   return __pyx_r;
40170 }
40171 
40172 /* "yt/geometry/selection_routines.pxd":75
40173  * cdef class OctreeSubsetSelector(SelectorObject):
40174  *     cdef public SelectorObject base_selector
40175  *     cdef public np.int64_t domain_id             # <<<<<<<<<<<<<<
40176  *
40177  * cdef class BooleanSelector(SelectorObject):
40178  */
40179 
40180 /* Python wrapper */
40181 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9domain_id_1__get__(PyObject *__pyx_v_self); /*proto*/
40182 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9domain_id_1__get__(PyObject *__pyx_v_self) {
40183   PyObject *__pyx_r = 0;
40184   __Pyx_RefNannyDeclarations
40185   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
40186   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9domain_id___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)__pyx_v_self));
40187 
40188   /* function exit code */
40189   __Pyx_RefNannyFinishContext();
40190   return __pyx_r;
40191 }
40192 
40193 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9domain_id___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self) {
40194   PyObject *__pyx_r = NULL;
40195   __Pyx_RefNannyDeclarations
40196   PyObject *__pyx_t_1 = NULL;
40197   __Pyx_RefNannySetupContext("__get__", 0);
40198   __Pyx_XDECREF(__pyx_r);
40199   __pyx_t_1 = __Pyx_PyInt_From_npy_int64(__pyx_v_self->domain_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 75, __pyx_L1_error)
40200   __Pyx_GOTREF(__pyx_t_1);
40201   __pyx_r = __pyx_t_1;
40202   __pyx_t_1 = 0;
40203   goto __pyx_L0;
40204 
40205   /* function exit code */
40206   __pyx_L1_error:;
40207   __Pyx_XDECREF(__pyx_t_1);
40208   __Pyx_AddTraceback("yt.geometry.selection_routines.OctreeSubsetSelector.domain_id.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
40209   __pyx_r = NULL;
40210   __pyx_L0:;
40211   __Pyx_XGIVEREF(__pyx_r);
40212   __Pyx_RefNannyFinishContext();
40213   return __pyx_r;
40214 }
40215 
40216 /* Python wrapper */
40217 static int __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9domain_id_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
40218 static int __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9domain_id_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
40219   int __pyx_r;
40220   __Pyx_RefNannyDeclarations
40221   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
40222   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9domain_id_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
40223 
40224   /* function exit code */
40225   __Pyx_RefNannyFinishContext();
40226   return __pyx_r;
40227 }
40228 
40229 static int __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9domain_id_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, PyObject *__pyx_v_value) {
40230   int __pyx_r;
40231   __Pyx_RefNannyDeclarations
40232   __pyx_t_5numpy_int64_t __pyx_t_1;
40233   __Pyx_RefNannySetupContext("__set__", 0);
40234   __pyx_t_1 = __Pyx_PyInt_As_npy_int64(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_int64)-1)) && PyErr_Occurred())) __PYX_ERR(4, 75, __pyx_L1_error)
40235   __pyx_v_self->domain_id = __pyx_t_1;
40236 
40237   /* function exit code */
40238   __pyx_r = 0;
40239   goto __pyx_L0;
40240   __pyx_L1_error:;
40241   __Pyx_AddTraceback("yt.geometry.selection_routines.OctreeSubsetSelector.domain_id.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
40242   __pyx_r = -1;
40243   __pyx_L0:;
40244   __Pyx_RefNannyFinishContext();
40245   return __pyx_r;
40246 }
40247 
40248 /* "(tree fragment)":1
40249  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
40250  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
40251  * def __setstate_cython__(self, __pyx_state):
40252  */
40253 
40254 /* Python wrapper */
40255 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
40256 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
40257   PyObject *__pyx_r = 0;
40258   __Pyx_RefNannyDeclarations
40259   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
40260   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_6__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)__pyx_v_self));
40261 
40262   /* function exit code */
40263   __Pyx_RefNannyFinishContext();
40264   return __pyx_r;
40265 }
40266 
40267 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self) {
40268   PyObject *__pyx_r = NULL;
40269   __Pyx_RefNannyDeclarations
40270   PyObject *__pyx_t_1 = NULL;
40271   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
40272 
40273   /* "(tree fragment)":2
40274  * def __reduce_cython__(self):
40275  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
40276  * def __setstate_cython__(self, __pyx_state):
40277  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
40278  */
40279   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__45, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
40280   __Pyx_GOTREF(__pyx_t_1);
40281   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
40282   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
40283   __PYX_ERR(5, 2, __pyx_L1_error)
40284 
40285   /* "(tree fragment)":1
40286  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
40287  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
40288  * def __setstate_cython__(self, __pyx_state):
40289  */
40290 
40291   /* function exit code */
40292   __pyx_L1_error:;
40293   __Pyx_XDECREF(__pyx_t_1);
40294   __Pyx_AddTraceback("yt.geometry.selection_routines.OctreeSubsetSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
40295   __pyx_r = NULL;
40296   __Pyx_XGIVEREF(__pyx_r);
40297   __Pyx_RefNannyFinishContext();
40298   return __pyx_r;
40299 }
40300 
40301 /* "(tree fragment)":3
40302  * def __reduce_cython__(self):
40303  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
40304  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
40305  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
40306  */
40307 
40308 /* Python wrapper */
40309 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
40310 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
40311   PyObject *__pyx_r = 0;
40312   __Pyx_RefNannyDeclarations
40313   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
40314   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_8__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
40315 
40316   /* function exit code */
40317   __Pyx_RefNannyFinishContext();
40318   return __pyx_r;
40319 }
40320 
40321 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
40322   PyObject *__pyx_r = NULL;
40323   __Pyx_RefNannyDeclarations
40324   PyObject *__pyx_t_1 = NULL;
40325   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
40326 
40327   /* "(tree fragment)":4
40328  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
40329  * def __setstate_cython__(self, __pyx_state):
40330  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
40331  */
40332   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__46, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
40333   __Pyx_GOTREF(__pyx_t_1);
40334   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
40335   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
40336   __PYX_ERR(5, 4, __pyx_L1_error)
40337 
40338   /* "(tree fragment)":3
40339  * def __reduce_cython__(self):
40340  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
40341  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
40342  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
40343  */
40344 
40345   /* function exit code */
40346   __pyx_L1_error:;
40347   __Pyx_XDECREF(__pyx_t_1);
40348   __Pyx_AddTraceback("yt.geometry.selection_routines.OctreeSubsetSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
40349   __pyx_r = NULL;
40350   __Pyx_XGIVEREF(__pyx_r);
40351   __Pyx_RefNannyFinishContext();
40352   return __pyx_r;
40353 }
40354 
40355 /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":10
40356  *     cdef np.float64_t DRE[3]
40357  *
40358  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
40359  *         self.min_ind = dobj.min_ind
40360  *         self.max_ind = dobj.max_ind
40361  */
40362 
40363 /* Python wrapper */
40364 static int __pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
40365 static int __pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
40366   PyObject *__pyx_v_dobj = 0;
40367   int __pyx_r;
40368   __Pyx_RefNannyDeclarations
40369   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
40370   {
40371     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
40372     PyObject* values[1] = {0};
40373     if (unlikely(__pyx_kwds)) {
40374       Py_ssize_t kw_args;
40375       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
40376       switch (pos_args) {
40377         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
40378         CYTHON_FALLTHROUGH;
40379         case  0: break;
40380         default: goto __pyx_L5_argtuple_error;
40381       }
40382       kw_args = PyDict_Size(__pyx_kwds);
40383       switch (pos_args) {
40384         case  0:
40385         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
40386         else goto __pyx_L5_argtuple_error;
40387       }
40388       if (unlikely(kw_args > 0)) {
40389         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(17, 10, __pyx_L3_error)
40390       }
40391     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
40392       goto __pyx_L5_argtuple_error;
40393     } else {
40394       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
40395     }
40396     __pyx_v_dobj = values[0];
40397   }
40398   goto __pyx_L4_argument_unpacking_done;
40399   __pyx_L5_argtuple_error:;
40400   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 10, __pyx_L3_error)
40401   __pyx_L3_error:;
40402   __Pyx_AddTraceback("yt.geometry.selection_routines.IndexedOctreeSubsetSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
40403   __Pyx_RefNannyFinishContext();
40404   return -1;
40405   __pyx_L4_argument_unpacking_done:;
40406   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *)__pyx_v_self), __pyx_v_dobj);
40407 
40408   /* function exit code */
40409   __Pyx_RefNannyFinishContext();
40410   return __pyx_r;
40411 }
40412 
40413 static int __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
40414   long __pyx_v_i;
40415   int __pyx_r;
40416   __Pyx_RefNannyDeclarations
40417   PyObject *__pyx_t_1 = NULL;
40418   __pyx_t_5numpy_uint64_t __pyx_t_2;
40419   __pyx_t_5numpy_int32_t __pyx_t_3;
40420   PyObject *__pyx_t_4 = NULL;
40421   int __pyx_t_5;
40422   long __pyx_t_6;
40423   __pyx_t_5numpy_float64_t __pyx_t_7;
40424   __Pyx_RefNannySetupContext("__init__", 0);
40425 
40426   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":11
40427  *
40428  *     def __init__(self, dobj):
40429  *         self.min_ind = dobj.min_ind             # <<<<<<<<<<<<<<
40430  *         self.max_ind = dobj.max_ind
40431  *         self.base_selector = dobj.base_selector
40432  */
40433   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_min_ind); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 11, __pyx_L1_error)
40434   __Pyx_GOTREF(__pyx_t_1);
40435   __pyx_t_2 = __Pyx_PyInt_As_npy_uint64(__pyx_t_1); if (unlikely((__pyx_t_2 == ((npy_uint64)-1)) && PyErr_Occurred())) __PYX_ERR(17, 11, __pyx_L1_error)
40436   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
40437   __pyx_v_self->min_ind = __pyx_t_2;
40438 
40439   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":12
40440  *     def __init__(self, dobj):
40441  *         self.min_ind = dobj.min_ind
40442  *         self.max_ind = dobj.max_ind             # <<<<<<<<<<<<<<
40443  *         self.base_selector = dobj.base_selector
40444  *         self.min_level = self.base_selector.min_level
40445  */
40446   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_max_ind); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 12, __pyx_L1_error)
40447   __Pyx_GOTREF(__pyx_t_1);
40448   __pyx_t_2 = __Pyx_PyInt_As_npy_uint64(__pyx_t_1); if (unlikely((__pyx_t_2 == ((npy_uint64)-1)) && PyErr_Occurred())) __PYX_ERR(17, 12, __pyx_L1_error)
40449   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
40450   __pyx_v_self->max_ind = __pyx_t_2;
40451 
40452   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":13
40453  *         self.min_ind = dobj.min_ind
40454  *         self.max_ind = dobj.max_ind
40455  *         self.base_selector = dobj.base_selector             # <<<<<<<<<<<<<<
40456  *         self.min_level = self.base_selector.min_level
40457  *         self.max_level = self.base_selector.max_level
40458  */
40459   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_base_selector); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 13, __pyx_L1_error)
40460   __Pyx_GOTREF(__pyx_t_1);
40461   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(17, 13, __pyx_L1_error)
40462   __Pyx_GIVEREF(__pyx_t_1);
40463   __Pyx_GOTREF(__pyx_v_self->base_selector);
40464   __Pyx_DECREF(((PyObject *)__pyx_v_self->base_selector));
40465   __pyx_v_self->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_1);
40466   __pyx_t_1 = 0;
40467 
40468   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":14
40469  *         self.max_ind = dobj.max_ind
40470  *         self.base_selector = dobj.base_selector
40471  *         self.min_level = self.base_selector.min_level             # <<<<<<<<<<<<<<
40472  *         self.max_level = self.base_selector.max_level
40473  *         self.filter_bbox = 0
40474  */
40475   __pyx_t_3 = __pyx_v_self->base_selector->min_level;
40476   __pyx_v_self->__pyx_base.min_level = __pyx_t_3;
40477 
40478   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":15
40479  *         self.base_selector = dobj.base_selector
40480  *         self.min_level = self.base_selector.min_level
40481  *         self.max_level = self.base_selector.max_level             # <<<<<<<<<<<<<<
40482  *         self.filter_bbox = 0
40483  *         if getattr(dobj.ds, "filter_bbox", False):
40484  */
40485   __pyx_t_3 = __pyx_v_self->base_selector->max_level;
40486   __pyx_v_self->__pyx_base.max_level = __pyx_t_3;
40487 
40488   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":16
40489  *         self.min_level = self.base_selector.min_level
40490  *         self.max_level = self.base_selector.max_level
40491  *         self.filter_bbox = 0             # <<<<<<<<<<<<<<
40492  *         if getattr(dobj.ds, "filter_bbox", False):
40493  *             self.filter_bbox = 1
40494  */
40495   __pyx_v_self->filter_bbox = 0;
40496 
40497   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":17
40498  *         self.max_level = self.base_selector.max_level
40499  *         self.filter_bbox = 0
40500  *         if getattr(dobj.ds, "filter_bbox", False):             # <<<<<<<<<<<<<<
40501  *             self.filter_bbox = 1
40502  *         for i in range(3):
40503  */
40504   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 17, __pyx_L1_error)
40505   __Pyx_GOTREF(__pyx_t_1);
40506   __pyx_t_4 = __Pyx_GetAttr3(__pyx_t_1, __pyx_n_s_filter_bbox, Py_False); if (unlikely(!__pyx_t_4)) __PYX_ERR(17, 17, __pyx_L1_error)
40507   __Pyx_GOTREF(__pyx_t_4);
40508   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
40509   __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(17, 17, __pyx_L1_error)
40510   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
40511   if (__pyx_t_5) {
40512 
40513     /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":18
40514  *         self.filter_bbox = 0
40515  *         if getattr(dobj.ds, "filter_bbox", False):
40516  *             self.filter_bbox = 1             # <<<<<<<<<<<<<<
40517  *         for i in range(3):
40518  *             self.DLE[i] = dobj.ds.domain_left_edge[i]
40519  */
40520     __pyx_v_self->filter_bbox = 1;
40521 
40522     /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":17
40523  *         self.max_level = self.base_selector.max_level
40524  *         self.filter_bbox = 0
40525  *         if getattr(dobj.ds, "filter_bbox", False):             # <<<<<<<<<<<<<<
40526  *             self.filter_bbox = 1
40527  *         for i in range(3):
40528  */
40529   }
40530 
40531   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":19
40532  *         if getattr(dobj.ds, "filter_bbox", False):
40533  *             self.filter_bbox = 1
40534  *         for i in range(3):             # <<<<<<<<<<<<<<
40535  *             self.DLE[i] = dobj.ds.domain_left_edge[i]
40536  *             self.DRE[i] = dobj.ds.domain_right_edge[i]
40537  */
40538   for (__pyx_t_6 = 0; __pyx_t_6 < 3; __pyx_t_6+=1) {
40539     __pyx_v_i = __pyx_t_6;
40540 
40541     /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":20
40542  *             self.filter_bbox = 1
40543  *         for i in range(3):
40544  *             self.DLE[i] = dobj.ds.domain_left_edge[i]             # <<<<<<<<<<<<<<
40545  *             self.DRE[i] = dobj.ds.domain_right_edge[i]
40546  *
40547  */
40548     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_4)) __PYX_ERR(17, 20, __pyx_L1_error)
40549     __Pyx_GOTREF(__pyx_t_4);
40550     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_domain_left_edge); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 20, __pyx_L1_error)
40551     __Pyx_GOTREF(__pyx_t_1);
40552     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
40553     __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(17, 20, __pyx_L1_error)
40554     __Pyx_GOTREF(__pyx_t_4);
40555     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
40556     __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_7 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(17, 20, __pyx_L1_error)
40557     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
40558     (__pyx_v_self->DLE[__pyx_v_i]) = __pyx_t_7;
40559 
40560     /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":21
40561  *         for i in range(3):
40562  *             self.DLE[i] = dobj.ds.domain_left_edge[i]
40563  *             self.DRE[i] = dobj.ds.domain_right_edge[i]             # <<<<<<<<<<<<<<
40564  *
40565  *     @cython.boundscheck(False)
40566  */
40567     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_ds); if (unlikely(!__pyx_t_4)) __PYX_ERR(17, 21, __pyx_L1_error)
40568     __Pyx_GOTREF(__pyx_t_4);
40569     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_domain_right_edge); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 21, __pyx_L1_error)
40570     __Pyx_GOTREF(__pyx_t_1);
40571     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
40572     __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(17, 21, __pyx_L1_error)
40573     __Pyx_GOTREF(__pyx_t_4);
40574     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
40575     __pyx_t_7 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_7 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(17, 21, __pyx_L1_error)
40576     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
40577     (__pyx_v_self->DRE[__pyx_v_i]) = __pyx_t_7;
40578   }
40579 
40580   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":10
40581  *     cdef np.float64_t DRE[3]
40582  *
40583  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
40584  *         self.min_ind = dobj.min_ind
40585  *         self.max_ind = dobj.max_ind
40586  */
40587 
40588   /* function exit code */
40589   __pyx_r = 0;
40590   goto __pyx_L0;
40591   __pyx_L1_error:;
40592   __Pyx_XDECREF(__pyx_t_1);
40593   __Pyx_XDECREF(__pyx_t_4);
40594   __Pyx_AddTraceback("yt.geometry.selection_routines.IndexedOctreeSubsetSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
40595   __pyx_r = -1;
40596   __pyx_L0:;
40597   __Pyx_RefNannyFinishContext();
40598   return __pyx_r;
40599 }
40600 
40601 /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":26
40602  *     @cython.wraparound(False)
40603  *     @cython.cdivision(True)
40604  *     def select_grids(self,             # <<<<<<<<<<<<<<
40605  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
40606  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
40607  */
40608 
40609 /* Python wrapper */
40610 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_3select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
40611 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_3select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
40612   CYTHON_UNUSED PyArrayObject *__pyx_v_left_edges = 0;
40613   CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges = 0;
40614   CYTHON_UNUSED PyArrayObject *__pyx_v_levels = 0;
40615   PyObject *__pyx_r = 0;
40616   __Pyx_RefNannyDeclarations
40617   __Pyx_RefNannySetupContext("select_grids (wrapper)", 0);
40618   {
40619     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_left_edges,&__pyx_n_s_right_edges,&__pyx_n_s_levels,0};
40620     PyObject* values[3] = {0,0,0};
40621     if (unlikely(__pyx_kwds)) {
40622       Py_ssize_t kw_args;
40623       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
40624       switch (pos_args) {
40625         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
40626         CYTHON_FALLTHROUGH;
40627         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
40628         CYTHON_FALLTHROUGH;
40629         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
40630         CYTHON_FALLTHROUGH;
40631         case  0: break;
40632         default: goto __pyx_L5_argtuple_error;
40633       }
40634       kw_args = PyDict_Size(__pyx_kwds);
40635       switch (pos_args) {
40636         case  0:
40637         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_left_edges)) != 0)) kw_args--;
40638         else goto __pyx_L5_argtuple_error;
40639         CYTHON_FALLTHROUGH;
40640         case  1:
40641         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_right_edges)) != 0)) kw_args--;
40642         else {
40643           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 1); __PYX_ERR(17, 26, __pyx_L3_error)
40644         }
40645         CYTHON_FALLTHROUGH;
40646         case  2:
40647         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_levels)) != 0)) kw_args--;
40648         else {
40649           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 2); __PYX_ERR(17, 26, __pyx_L3_error)
40650         }
40651       }
40652       if (unlikely(kw_args > 0)) {
40653         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_grids") < 0)) __PYX_ERR(17, 26, __pyx_L3_error)
40654       }
40655     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
40656       goto __pyx_L5_argtuple_error;
40657     } else {
40658       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
40659       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
40660       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
40661     }
40662     __pyx_v_left_edges = ((PyArrayObject *)values[0]);
40663     __pyx_v_right_edges = ((PyArrayObject *)values[1]);
40664     __pyx_v_levels = ((PyArrayObject *)values[2]);
40665   }
40666   goto __pyx_L4_argument_unpacking_done;
40667   __pyx_L5_argtuple_error:;
40668   __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(17, 26, __pyx_L3_error)
40669   __pyx_L3_error:;
40670   __Pyx_AddTraceback("yt.geometry.selection_routines.IndexedOctreeSubsetSelector.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
40671   __Pyx_RefNannyFinishContext();
40672   return NULL;
40673   __pyx_L4_argument_unpacking_done:;
40674   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_left_edges), __pyx_ptype_5numpy_ndarray, 1, "left_edges", 0))) __PYX_ERR(17, 27, __pyx_L1_error)
40675   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_right_edges), __pyx_ptype_5numpy_ndarray, 1, "right_edges", 0))) __PYX_ERR(17, 28, __pyx_L1_error)
40676   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_levels), __pyx_ptype_5numpy_ndarray, 1, "levels", 0))) __PYX_ERR(17, 29, __pyx_L1_error)
40677   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_2select_grids(((struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *)__pyx_v_self), __pyx_v_left_edges, __pyx_v_right_edges, __pyx_v_levels);
40678 
40679   /* function exit code */
40680   goto __pyx_L0;
40681   __pyx_L1_error:;
40682   __pyx_r = NULL;
40683   __pyx_L0:;
40684   __Pyx_RefNannyFinishContext();
40685   return __pyx_r;
40686 }
40687 
40688 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_2select_grids(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED PyArrayObject *__pyx_v_left_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_levels) {
40689   __Pyx_LocalBuf_ND __pyx_pybuffernd_left_edges;
40690   __Pyx_Buffer __pyx_pybuffer_left_edges;
40691   __Pyx_LocalBuf_ND __pyx_pybuffernd_levels;
40692   __Pyx_Buffer __pyx_pybuffer_levels;
40693   __Pyx_LocalBuf_ND __pyx_pybuffernd_right_edges;
40694   __Pyx_Buffer __pyx_pybuffer_right_edges;
40695   PyObject *__pyx_r = NULL;
40696   __Pyx_RefNannyDeclarations
40697   __Pyx_RefNannySetupContext("select_grids", 0);
40698   __pyx_pybuffer_left_edges.pybuffer.buf = NULL;
40699   __pyx_pybuffer_left_edges.refcount = 0;
40700   __pyx_pybuffernd_left_edges.data = NULL;
40701   __pyx_pybuffernd_left_edges.rcbuffer = &__pyx_pybuffer_left_edges;
40702   __pyx_pybuffer_right_edges.pybuffer.buf = NULL;
40703   __pyx_pybuffer_right_edges.refcount = 0;
40704   __pyx_pybuffernd_right_edges.data = NULL;
40705   __pyx_pybuffernd_right_edges.rcbuffer = &__pyx_pybuffer_right_edges;
40706   __pyx_pybuffer_levels.pybuffer.buf = NULL;
40707   __pyx_pybuffer_levels.refcount = 0;
40708   __pyx_pybuffernd_levels.data = NULL;
40709   __pyx_pybuffernd_levels.rcbuffer = &__pyx_pybuffer_levels;
40710   {
40711     __Pyx_BufFmt_StackElem __pyx_stack[1];
40712     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_left_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(17, 26, __pyx_L1_error)
40713   }
40714   __pyx_pybuffernd_left_edges.diminfo[0].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_left_edges.diminfo[0].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_left_edges.diminfo[1].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_left_edges.diminfo[1].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[1];
40715   {
40716     __Pyx_BufFmt_StackElem __pyx_stack[1];
40717     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_right_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(17, 26, __pyx_L1_error)
40718   }
40719   __pyx_pybuffernd_right_edges.diminfo[0].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_right_edges.diminfo[0].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_right_edges.diminfo[1].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_right_edges.diminfo[1].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[1];
40720   {
40721     __Pyx_BufFmt_StackElem __pyx_stack[1];
40722     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_levels.rcbuffer->pybuffer, (PyObject*)__pyx_v_levels, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(17, 26, __pyx_L1_error)
40723   }
40724   __pyx_pybuffernd_levels.diminfo[0].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_levels.diminfo[0].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_levels.diminfo[1].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_levels.diminfo[1].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[1];
40725 
40726   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":30
40727  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
40728  *                      np.ndarray[np.int32_t, ndim=2] levels):
40729  *         raise RuntimeError             # <<<<<<<<<<<<<<
40730  *
40731  *     @cython.boundscheck(False)
40732  */
40733   __Pyx_Raise(__pyx_builtin_RuntimeError, 0, 0, 0);
40734   __PYX_ERR(17, 30, __pyx_L1_error)
40735 
40736   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":26
40737  *     @cython.wraparound(False)
40738  *     @cython.cdivision(True)
40739  *     def select_grids(self,             # <<<<<<<<<<<<<<
40740  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
40741  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
40742  */
40743 
40744   /* function exit code */
40745   __pyx_L1_error:;
40746   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
40747     __Pyx_PyThreadState_declare
40748     __Pyx_PyThreadState_assign
40749     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
40750     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
40751     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
40752     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
40753   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
40754   __Pyx_AddTraceback("yt.geometry.selection_routines.IndexedOctreeSubsetSelector.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
40755   __pyx_r = NULL;
40756   goto __pyx_L2;
40757   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
40758   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
40759   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
40760   __pyx_L2:;
40761   __Pyx_XGIVEREF(__pyx_r);
40762   __Pyx_RefNannyFinishContext();
40763   return __pyx_r;
40764 }
40765 
40766 /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":35
40767  *     @cython.wraparound(False)
40768  *     @cython.cdivision(True)
40769  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
40770  *         return 1
40771  *
40772  */
40773 
40774 static int __pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_sphere(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t __pyx_v_radius) {
40775   int __pyx_r;
40776 
40777   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":36
40778  *     @cython.cdivision(True)
40779  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
40780  *         return 1             # <<<<<<<<<<<<<<
40781  *
40782  *     @cython.boundscheck(False)
40783  */
40784   __pyx_r = 1;
40785   goto __pyx_L0;
40786 
40787   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":35
40788  *     @cython.wraparound(False)
40789  *     @cython.cdivision(True)
40790  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
40791  *         return 1
40792  *
40793  */
40794 
40795   /* function exit code */
40796   __pyx_L0:;
40797   return __pyx_r;
40798 }
40799 
40800 /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":41
40801  *     @cython.wraparound(False)
40802  *     @cython.cdivision(True)
40803  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
40804  *         return 1
40805  *
40806  */
40807 
40808 static int __pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_cell(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds) {
40809   int __pyx_r;
40810 
40811   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":42
40812  *     @cython.cdivision(True)
40813  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
40814  *         return 1             # <<<<<<<<<<<<<<
40815  *
40816  *     @cython.boundscheck(False)
40817  */
40818   __pyx_r = 1;
40819   goto __pyx_L0;
40820 
40821   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":41
40822  *     @cython.wraparound(False)
40823  *     @cython.cdivision(True)
40824  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
40825  *         return 1
40826  *
40827  */
40828 
40829   /* function exit code */
40830   __pyx_L0:;
40831   return __pyx_r;
40832 }
40833 
40834 /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":47
40835  *     @cython.wraparound(False)
40836  *     @cython.cdivision(True)
40837  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
40838  *         cdef int i
40839  *         if self.filter_bbox == 0:
40840  */
40841 
40842 static int __pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
40843   int __pyx_v_i;
40844   int __pyx_r;
40845   int __pyx_t_1;
40846   int __pyx_t_2;
40847   int __pyx_t_3;
40848 
40849   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":49
40850  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
40851  *         cdef int i
40852  *         if self.filter_bbox == 0:             # <<<<<<<<<<<<<<
40853  *             return 1
40854  *         for i in range(3):
40855  */
40856   __pyx_t_1 = ((__pyx_v_self->filter_bbox == 0) != 0);
40857   if (__pyx_t_1) {
40858 
40859     /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":50
40860  *         cdef int i
40861  *         if self.filter_bbox == 0:
40862  *             return 1             # <<<<<<<<<<<<<<
40863  *         for i in range(3):
40864  *             if pos[i] < self.DLE[i] or pos[i] > self.DRE[i]:
40865  */
40866     __pyx_r = 1;
40867     goto __pyx_L0;
40868 
40869     /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":49
40870  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
40871  *         cdef int i
40872  *         if self.filter_bbox == 0:             # <<<<<<<<<<<<<<
40873  *             return 1
40874  *         for i in range(3):
40875  */
40876   }
40877 
40878   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":51
40879  *         if self.filter_bbox == 0:
40880  *             return 1
40881  *         for i in range(3):             # <<<<<<<<<<<<<<
40882  *             if pos[i] < self.DLE[i] or pos[i] > self.DRE[i]:
40883  *                 return 0
40884  */
40885   for (__pyx_t_2 = 0; __pyx_t_2 < 3; __pyx_t_2+=1) {
40886     __pyx_v_i = __pyx_t_2;
40887 
40888     /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":52
40889  *             return 1
40890  *         for i in range(3):
40891  *             if pos[i] < self.DLE[i] or pos[i] > self.DRE[i]:             # <<<<<<<<<<<<<<
40892  *                 return 0
40893  *         return 1
40894  */
40895     __pyx_t_3 = (((__pyx_v_pos[__pyx_v_i]) < (__pyx_v_self->DLE[__pyx_v_i])) != 0);
40896     if (!__pyx_t_3) {
40897     } else {
40898       __pyx_t_1 = __pyx_t_3;
40899       goto __pyx_L7_bool_binop_done;
40900     }
40901     __pyx_t_3 = (((__pyx_v_pos[__pyx_v_i]) > (__pyx_v_self->DRE[__pyx_v_i])) != 0);
40902     __pyx_t_1 = __pyx_t_3;
40903     __pyx_L7_bool_binop_done:;
40904     if (__pyx_t_1) {
40905 
40906       /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":53
40907  *         for i in range(3):
40908  *             if pos[i] < self.DLE[i] or pos[i] > self.DRE[i]:
40909  *                 return 0             # <<<<<<<<<<<<<<
40910  *         return 1
40911  *
40912  */
40913       __pyx_r = 0;
40914       goto __pyx_L0;
40915 
40916       /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":52
40917  *             return 1
40918  *         for i in range(3):
40919  *             if pos[i] < self.DLE[i] or pos[i] > self.DRE[i]:             # <<<<<<<<<<<<<<
40920  *                 return 0
40921  *         return 1
40922  */
40923     }
40924   }
40925 
40926   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":54
40927  *             if pos[i] < self.DLE[i] or pos[i] > self.DRE[i]:
40928  *                 return 0
40929  *         return 1             # <<<<<<<<<<<<<<
40930  *
40931  *     @cython.boundscheck(False)
40932  */
40933   __pyx_r = 1;
40934   goto __pyx_L0;
40935 
40936   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":47
40937  *     @cython.wraparound(False)
40938  *     @cython.cdivision(True)
40939  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
40940  *         cdef int i
40941  *         if self.filter_bbox == 0:
40942  */
40943 
40944   /* function exit code */
40945   __pyx_L0:;
40946   return __pyx_r;
40947 }
40948 
40949 /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":59
40950  *     @cython.wraparound(False)
40951  *     @cython.cdivision(True)
40952  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
40953  *                                np.float64_t right_edge[3]) nogil:
40954  *         return self.base_selector.select_bbox(left_edge, right_edge)
40955  */
40956 
40957 static int __pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
40958   int __pyx_r;
40959 
40960   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":61
40961  *     cdef int select_bbox(self, np.float64_t left_edge[3],
40962  *                                np.float64_t right_edge[3]) nogil:
40963  *         return self.base_selector.select_bbox(left_edge, right_edge)             # <<<<<<<<<<<<<<
40964  *
40965  *     cdef int select_grid(self, np.float64_t left_edge[3],
40966  */
40967   __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->base_selector->__pyx_vtab)->select_bbox(__pyx_v_self->base_selector, __pyx_v_left_edge, __pyx_v_right_edge);
40968   goto __pyx_L0;
40969 
40970   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":59
40971  *     @cython.wraparound(False)
40972  *     @cython.cdivision(True)
40973  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
40974  *                                np.float64_t right_edge[3]) nogil:
40975  *         return self.base_selector.select_bbox(left_edge, right_edge)
40976  */
40977 
40978   /* function exit code */
40979   __pyx_L0:;
40980   return __pyx_r;
40981 }
40982 
40983 /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":63
40984  *         return self.base_selector.select_bbox(left_edge, right_edge)
40985  *
40986  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
40987  *                          np.float64_t right_edge[3], np.int32_t level,
40988  *                          Oct *o = NULL) nogil:
40989  */
40990 
40991 static int __pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_grid *__pyx_optional_args) {
40992 
40993   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":65
40994  *     cdef int select_grid(self, np.float64_t left_edge[3],
40995  *                          np.float64_t right_edge[3], np.int32_t level,
40996  *                          Oct *o = NULL) nogil:             # <<<<<<<<<<<<<<
40997  *         # Because visitors now use select_grid, we should be explicitly
40998  *         # checking this.
40999  */
41000   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_o = ((struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *)NULL);
41001   int __pyx_r;
41002   int __pyx_t_1;
41003   struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid __pyx_t_2;
41004   if (__pyx_optional_args) {
41005     if (__pyx_optional_args->__pyx_n > 0) {
41006       __pyx_v_o = __pyx_optional_args->o;
41007     }
41008   }
41009 
41010   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":68
41011  *         # Because visitors now use select_grid, we should be explicitly
41012  *         # checking this.
41013  *         return self.base_selector.select_grid(left_edge, right_edge, level, o)             # <<<<<<<<<<<<<<
41014  *
41015  *     def _hash_vals(self):
41016  */
41017   __pyx_t_2.__pyx_n = 1;
41018   __pyx_t_2.o = __pyx_v_o;
41019   __pyx_t_1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->base_selector->__pyx_vtab)->select_grid(__pyx_v_self->base_selector, __pyx_v_left_edge, __pyx_v_right_edge, __pyx_v_level, &__pyx_t_2);
41020   __pyx_r = __pyx_t_1;
41021   goto __pyx_L0;
41022 
41023   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":63
41024  *         return self.base_selector.select_bbox(left_edge, right_edge)
41025  *
41026  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
41027  *                          np.float64_t right_edge[3], np.int32_t level,
41028  *                          Oct *o = NULL) nogil:
41029  */
41030 
41031   /* function exit code */
41032   __pyx_L0:;
41033   return __pyx_r;
41034 }
41035 
41036 /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":70
41037  *         return self.base_selector.select_grid(left_edge, right_edge, level, o)
41038  *
41039  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
41040  *         return (hash(self.base_selector), self.min_ind, self.max_ind)
41041  *
41042  */
41043 
41044 /* Python wrapper */
41045 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
41046 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
41047   PyObject *__pyx_r = 0;
41048   __Pyx_RefNannyDeclarations
41049   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
41050   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_4_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *)__pyx_v_self));
41051 
41052   /* function exit code */
41053   __Pyx_RefNannyFinishContext();
41054   return __pyx_r;
41055 }
41056 
41057 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_4_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self) {
41058   PyObject *__pyx_r = NULL;
41059   __Pyx_RefNannyDeclarations
41060   PyObject *__pyx_t_1 = NULL;
41061   Py_hash_t __pyx_t_2;
41062   PyObject *__pyx_t_3 = NULL;
41063   PyObject *__pyx_t_4 = NULL;
41064   PyObject *__pyx_t_5 = NULL;
41065   __Pyx_RefNannySetupContext("_hash_vals", 0);
41066 
41067   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":71
41068  *
41069  *     def _hash_vals(self):
41070  *         return (hash(self.base_selector), self.min_ind, self.max_ind)             # <<<<<<<<<<<<<<
41071  *
41072  * indexed_octree_subset_selector = IndexedOctreeSubsetSelector
41073  */
41074   __Pyx_XDECREF(__pyx_r);
41075   __pyx_t_1 = ((PyObject *)__pyx_v_self->base_selector);
41076   __Pyx_INCREF(__pyx_t_1);
41077   __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(17, 71, __pyx_L1_error)
41078   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
41079   __pyx_t_1 = __Pyx_PyInt_FromHash_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(17, 71, __pyx_L1_error)
41080   __Pyx_GOTREF(__pyx_t_1);
41081   __pyx_t_3 = __Pyx_PyInt_From_npy_uint64(__pyx_v_self->min_ind); if (unlikely(!__pyx_t_3)) __PYX_ERR(17, 71, __pyx_L1_error)
41082   __Pyx_GOTREF(__pyx_t_3);
41083   __pyx_t_4 = __Pyx_PyInt_From_npy_uint64(__pyx_v_self->max_ind); if (unlikely(!__pyx_t_4)) __PYX_ERR(17, 71, __pyx_L1_error)
41084   __Pyx_GOTREF(__pyx_t_4);
41085   __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(17, 71, __pyx_L1_error)
41086   __Pyx_GOTREF(__pyx_t_5);
41087   __Pyx_GIVEREF(__pyx_t_1);
41088   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
41089   __Pyx_GIVEREF(__pyx_t_3);
41090   PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
41091   __Pyx_GIVEREF(__pyx_t_4);
41092   PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
41093   __pyx_t_1 = 0;
41094   __pyx_t_3 = 0;
41095   __pyx_t_4 = 0;
41096   __pyx_r = __pyx_t_5;
41097   __pyx_t_5 = 0;
41098   goto __pyx_L0;
41099 
41100   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":70
41101  *         return self.base_selector.select_grid(left_edge, right_edge, level, o)
41102  *
41103  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
41104  *         return (hash(self.base_selector), self.min_ind, self.max_ind)
41105  *
41106  */
41107 
41108   /* function exit code */
41109   __pyx_L1_error:;
41110   __Pyx_XDECREF(__pyx_t_1);
41111   __Pyx_XDECREF(__pyx_t_3);
41112   __Pyx_XDECREF(__pyx_t_4);
41113   __Pyx_XDECREF(__pyx_t_5);
41114   __Pyx_AddTraceback("yt.geometry.selection_routines.IndexedOctreeSubsetSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
41115   __pyx_r = NULL;
41116   __pyx_L0:;
41117   __Pyx_XGIVEREF(__pyx_r);
41118   __Pyx_RefNannyFinishContext();
41119   return __pyx_r;
41120 }
41121 
41122 /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":5
41123  *     cdef np.uint64_t min_ind
41124  *     cdef np.uint64_t max_ind
41125  *     cdef public SelectorObject base_selector             # <<<<<<<<<<<<<<
41126  *     cdef int filter_bbox
41127  *     cdef np.float64_t DLE[3]
41128  */
41129 
41130 /* Python wrapper */
41131 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_1__get__(PyObject *__pyx_v_self); /*proto*/
41132 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_1__get__(PyObject *__pyx_v_self) {
41133   PyObject *__pyx_r = 0;
41134   __Pyx_RefNannyDeclarations
41135   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
41136   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *)__pyx_v_self));
41137 
41138   /* function exit code */
41139   __Pyx_RefNannyFinishContext();
41140   return __pyx_r;
41141 }
41142 
41143 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self) {
41144   PyObject *__pyx_r = NULL;
41145   __Pyx_RefNannyDeclarations
41146   __Pyx_RefNannySetupContext("__get__", 0);
41147   __Pyx_XDECREF(__pyx_r);
41148   __Pyx_INCREF(((PyObject *)__pyx_v_self->base_selector));
41149   __pyx_r = ((PyObject *)__pyx_v_self->base_selector);
41150   goto __pyx_L0;
41151 
41152   /* function exit code */
41153   __pyx_L0:;
41154   __Pyx_XGIVEREF(__pyx_r);
41155   __Pyx_RefNannyFinishContext();
41156   return __pyx_r;
41157 }
41158 
41159 /* Python wrapper */
41160 static int __pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
41161 static int __pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
41162   int __pyx_r;
41163   __Pyx_RefNannyDeclarations
41164   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
41165   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
41166 
41167   /* function exit code */
41168   __Pyx_RefNannyFinishContext();
41169   return __pyx_r;
41170 }
41171 
41172 static int __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, PyObject *__pyx_v_value) {
41173   int __pyx_r;
41174   __Pyx_RefNannyDeclarations
41175   PyObject *__pyx_t_1 = NULL;
41176   __Pyx_RefNannySetupContext("__set__", 0);
41177   if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(17, 5, __pyx_L1_error)
41178   __pyx_t_1 = __pyx_v_value;
41179   __Pyx_INCREF(__pyx_t_1);
41180   __Pyx_GIVEREF(__pyx_t_1);
41181   __Pyx_GOTREF(__pyx_v_self->base_selector);
41182   __Pyx_DECREF(((PyObject *)__pyx_v_self->base_selector));
41183   __pyx_v_self->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_1);
41184   __pyx_t_1 = 0;
41185 
41186   /* function exit code */
41187   __pyx_r = 0;
41188   goto __pyx_L0;
41189   __pyx_L1_error:;
41190   __Pyx_XDECREF(__pyx_t_1);
41191   __Pyx_AddTraceback("yt.geometry.selection_routines.IndexedOctreeSubsetSelector.base_selector.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
41192   __pyx_r = -1;
41193   __pyx_L0:;
41194   __Pyx_RefNannyFinishContext();
41195   return __pyx_r;
41196 }
41197 
41198 /* Python wrapper */
41199 static int __pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_5__del__(PyObject *__pyx_v_self); /*proto*/
41200 static int __pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_5__del__(PyObject *__pyx_v_self) {
41201   int __pyx_r;
41202   __Pyx_RefNannyDeclarations
41203   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
41204   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_4__del__(((struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *)__pyx_v_self));
41205 
41206   /* function exit code */
41207   __Pyx_RefNannyFinishContext();
41208   return __pyx_r;
41209 }
41210 
41211 static int __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_4__del__(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self) {
41212   int __pyx_r;
41213   __Pyx_RefNannyDeclarations
41214   __Pyx_RefNannySetupContext("__del__", 0);
41215   __Pyx_INCREF(Py_None);
41216   __Pyx_GIVEREF(Py_None);
41217   __Pyx_GOTREF(__pyx_v_self->base_selector);
41218   __Pyx_DECREF(((PyObject *)__pyx_v_self->base_selector));
41219   __pyx_v_self->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None);
41220 
41221   /* function exit code */
41222   __pyx_r = 0;
41223   __Pyx_RefNannyFinishContext();
41224   return __pyx_r;
41225 }
41226 
41227 /* "(tree fragment)":1
41228  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
41229  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41230  * def __setstate_cython__(self, __pyx_state):
41231  */
41232 
41233 /* Python wrapper */
41234 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
41235 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
41236   PyObject *__pyx_r = 0;
41237   __Pyx_RefNannyDeclarations
41238   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
41239   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_6__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *)__pyx_v_self));
41240 
41241   /* function exit code */
41242   __Pyx_RefNannyFinishContext();
41243   return __pyx_r;
41244 }
41245 
41246 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self) {
41247   PyObject *__pyx_r = NULL;
41248   __Pyx_RefNannyDeclarations
41249   PyObject *__pyx_t_1 = NULL;
41250   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
41251 
41252   /* "(tree fragment)":2
41253  * def __reduce_cython__(self):
41254  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
41255  * def __setstate_cython__(self, __pyx_state):
41256  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41257  */
41258   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__47, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
41259   __Pyx_GOTREF(__pyx_t_1);
41260   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
41261   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
41262   __PYX_ERR(5, 2, __pyx_L1_error)
41263 
41264   /* "(tree fragment)":1
41265  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
41266  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41267  * def __setstate_cython__(self, __pyx_state):
41268  */
41269 
41270   /* function exit code */
41271   __pyx_L1_error:;
41272   __Pyx_XDECREF(__pyx_t_1);
41273   __Pyx_AddTraceback("yt.geometry.selection_routines.IndexedOctreeSubsetSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
41274   __pyx_r = NULL;
41275   __Pyx_XGIVEREF(__pyx_r);
41276   __Pyx_RefNannyFinishContext();
41277   return __pyx_r;
41278 }
41279 
41280 /* "(tree fragment)":3
41281  * def __reduce_cython__(self):
41282  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41283  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
41284  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41285  */
41286 
41287 /* Python wrapper */
41288 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
41289 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
41290   PyObject *__pyx_r = 0;
41291   __Pyx_RefNannyDeclarations
41292   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
41293   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_8__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
41294 
41295   /* function exit code */
41296   __Pyx_RefNannyFinishContext();
41297   return __pyx_r;
41298 }
41299 
41300 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
41301   PyObject *__pyx_r = NULL;
41302   __Pyx_RefNannyDeclarations
41303   PyObject *__pyx_t_1 = NULL;
41304   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
41305 
41306   /* "(tree fragment)":4
41307  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41308  * def __setstate_cython__(self, __pyx_state):
41309  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
41310  */
41311   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__48, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
41312   __Pyx_GOTREF(__pyx_t_1);
41313   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
41314   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
41315   __PYX_ERR(5, 4, __pyx_L1_error)
41316 
41317   /* "(tree fragment)":3
41318  * def __reduce_cython__(self):
41319  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41320  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
41321  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41322  */
41323 
41324   /* function exit code */
41325   __pyx_L1_error:;
41326   __Pyx_XDECREF(__pyx_t_1);
41327   __Pyx_AddTraceback("yt.geometry.selection_routines.IndexedOctreeSubsetSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
41328   __pyx_r = NULL;
41329   __Pyx_XGIVEREF(__pyx_r);
41330   __Pyx_RefNannyFinishContext();
41331   return __pyx_r;
41332 }
41333 
41334 /* "yt/geometry/_selection_routines/always_selector.pxi":3
41335  * cdef class AlwaysSelector(SelectorObject):
41336  *
41337  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
41338  *         self.overlap_cells = 1
41339  *
41340  */
41341 
41342 /* Python wrapper */
41343 static int __pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
41344 static int __pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
41345   CYTHON_UNUSED PyObject *__pyx_v_dobj = 0;
41346   int __pyx_r;
41347   __Pyx_RefNannyDeclarations
41348   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
41349   {
41350     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
41351     PyObject* values[1] = {0};
41352     if (unlikely(__pyx_kwds)) {
41353       Py_ssize_t kw_args;
41354       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
41355       switch (pos_args) {
41356         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
41357         CYTHON_FALLTHROUGH;
41358         case  0: break;
41359         default: goto __pyx_L5_argtuple_error;
41360       }
41361       kw_args = PyDict_Size(__pyx_kwds);
41362       switch (pos_args) {
41363         case  0:
41364         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
41365         else goto __pyx_L5_argtuple_error;
41366       }
41367       if (unlikely(kw_args > 0)) {
41368         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(18, 3, __pyx_L3_error)
41369       }
41370     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
41371       goto __pyx_L5_argtuple_error;
41372     } else {
41373       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
41374     }
41375     __pyx_v_dobj = values[0];
41376   }
41377   goto __pyx_L4_argument_unpacking_done;
41378   __pyx_L5_argtuple_error:;
41379   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(18, 3, __pyx_L3_error)
41380   __pyx_L3_error:;
41381   __Pyx_AddTraceback("yt.geometry.selection_routines.AlwaysSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
41382   __Pyx_RefNannyFinishContext();
41383   return -1;
41384   __pyx_L4_argument_unpacking_done:;
41385   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *)__pyx_v_self), __pyx_v_dobj);
41386 
41387   /* function exit code */
41388   __Pyx_RefNannyFinishContext();
41389   return __pyx_r;
41390 }
41391 
41392 static int __pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dobj) {
41393   int __pyx_r;
41394   __Pyx_RefNannyDeclarations
41395   __Pyx_RefNannySetupContext("__init__", 0);
41396 
41397   /* "yt/geometry/_selection_routines/always_selector.pxi":4
41398  *
41399  *     def __init__(self, dobj):
41400  *         self.overlap_cells = 1             # <<<<<<<<<<<<<<
41401  *
41402  *     @cython.boundscheck(False)
41403  */
41404   __pyx_v_self->__pyx_base.overlap_cells = 1;
41405 
41406   /* "yt/geometry/_selection_routines/always_selector.pxi":3
41407  * cdef class AlwaysSelector(SelectorObject):
41408  *
41409  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
41410  *         self.overlap_cells = 1
41411  *
41412  */
41413 
41414   /* function exit code */
41415   __pyx_r = 0;
41416   __Pyx_RefNannyFinishContext();
41417   return __pyx_r;
41418 }
41419 
41420 /* "yt/geometry/_selection_routines/always_selector.pxi":9
41421  *     @cython.wraparound(False)
41422  *     @cython.cdivision(True)
41423  *     def select_grids(self,             # <<<<<<<<<<<<<<
41424  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
41425  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
41426  */
41427 
41428 /* Python wrapper */
41429 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_3select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
41430 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_3select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
41431   PyArrayObject *__pyx_v_left_edges = 0;
41432   CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges = 0;
41433   CYTHON_UNUSED PyArrayObject *__pyx_v_levels = 0;
41434   PyObject *__pyx_r = 0;
41435   __Pyx_RefNannyDeclarations
41436   __Pyx_RefNannySetupContext("select_grids (wrapper)", 0);
41437   {
41438     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_left_edges,&__pyx_n_s_right_edges,&__pyx_n_s_levels,0};
41439     PyObject* values[3] = {0,0,0};
41440     if (unlikely(__pyx_kwds)) {
41441       Py_ssize_t kw_args;
41442       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
41443       switch (pos_args) {
41444         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
41445         CYTHON_FALLTHROUGH;
41446         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
41447         CYTHON_FALLTHROUGH;
41448         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
41449         CYTHON_FALLTHROUGH;
41450         case  0: break;
41451         default: goto __pyx_L5_argtuple_error;
41452       }
41453       kw_args = PyDict_Size(__pyx_kwds);
41454       switch (pos_args) {
41455         case  0:
41456         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_left_edges)) != 0)) kw_args--;
41457         else goto __pyx_L5_argtuple_error;
41458         CYTHON_FALLTHROUGH;
41459         case  1:
41460         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_right_edges)) != 0)) kw_args--;
41461         else {
41462           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 1); __PYX_ERR(18, 9, __pyx_L3_error)
41463         }
41464         CYTHON_FALLTHROUGH;
41465         case  2:
41466         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_levels)) != 0)) kw_args--;
41467         else {
41468           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 2); __PYX_ERR(18, 9, __pyx_L3_error)
41469         }
41470       }
41471       if (unlikely(kw_args > 0)) {
41472         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_grids") < 0)) __PYX_ERR(18, 9, __pyx_L3_error)
41473       }
41474     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
41475       goto __pyx_L5_argtuple_error;
41476     } else {
41477       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
41478       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
41479       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
41480     }
41481     __pyx_v_left_edges = ((PyArrayObject *)values[0]);
41482     __pyx_v_right_edges = ((PyArrayObject *)values[1]);
41483     __pyx_v_levels = ((PyArrayObject *)values[2]);
41484   }
41485   goto __pyx_L4_argument_unpacking_done;
41486   __pyx_L5_argtuple_error:;
41487   __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(18, 9, __pyx_L3_error)
41488   __pyx_L3_error:;
41489   __Pyx_AddTraceback("yt.geometry.selection_routines.AlwaysSelector.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
41490   __Pyx_RefNannyFinishContext();
41491   return NULL;
41492   __pyx_L4_argument_unpacking_done:;
41493   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_left_edges), __pyx_ptype_5numpy_ndarray, 1, "left_edges", 0))) __PYX_ERR(18, 10, __pyx_L1_error)
41494   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_right_edges), __pyx_ptype_5numpy_ndarray, 1, "right_edges", 0))) __PYX_ERR(18, 11, __pyx_L1_error)
41495   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_levels), __pyx_ptype_5numpy_ndarray, 1, "levels", 0))) __PYX_ERR(18, 12, __pyx_L1_error)
41496   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector_2select_grids(((struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *)__pyx_v_self), __pyx_v_left_edges, __pyx_v_right_edges, __pyx_v_levels);
41497 
41498   /* function exit code */
41499   goto __pyx_L0;
41500   __pyx_L1_error:;
41501   __pyx_r = NULL;
41502   __pyx_L0:;
41503   __Pyx_RefNannyFinishContext();
41504   return __pyx_r;
41505 }
41506 
41507 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector_2select_grids(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, PyArrayObject *__pyx_v_left_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_right_edges, CYTHON_UNUSED PyArrayObject *__pyx_v_levels) {
41508   int __pyx_v_ng;
41509   PyArrayObject *__pyx_v_gridi = 0;
41510   __Pyx_LocalBuf_ND __pyx_pybuffernd_gridi;
41511   __Pyx_Buffer __pyx_pybuffer_gridi;
41512   __Pyx_LocalBuf_ND __pyx_pybuffernd_left_edges;
41513   __Pyx_Buffer __pyx_pybuffer_left_edges;
41514   __Pyx_LocalBuf_ND __pyx_pybuffernd_levels;
41515   __Pyx_Buffer __pyx_pybuffer_levels;
41516   __Pyx_LocalBuf_ND __pyx_pybuffernd_right_edges;
41517   __Pyx_Buffer __pyx_pybuffer_right_edges;
41518   PyObject *__pyx_r = NULL;
41519   __Pyx_RefNannyDeclarations
41520   PyObject *__pyx_t_1 = NULL;
41521   PyObject *__pyx_t_2 = NULL;
41522   PyObject *__pyx_t_3 = NULL;
41523   PyObject *__pyx_t_4 = NULL;
41524   PyArrayObject *__pyx_t_5 = NULL;
41525   __Pyx_RefNannySetupContext("select_grids", 0);
41526   __pyx_pybuffer_gridi.pybuffer.buf = NULL;
41527   __pyx_pybuffer_gridi.refcount = 0;
41528   __pyx_pybuffernd_gridi.data = NULL;
41529   __pyx_pybuffernd_gridi.rcbuffer = &__pyx_pybuffer_gridi;
41530   __pyx_pybuffer_left_edges.pybuffer.buf = NULL;
41531   __pyx_pybuffer_left_edges.refcount = 0;
41532   __pyx_pybuffernd_left_edges.data = NULL;
41533   __pyx_pybuffernd_left_edges.rcbuffer = &__pyx_pybuffer_left_edges;
41534   __pyx_pybuffer_right_edges.pybuffer.buf = NULL;
41535   __pyx_pybuffer_right_edges.refcount = 0;
41536   __pyx_pybuffernd_right_edges.data = NULL;
41537   __pyx_pybuffernd_right_edges.rcbuffer = &__pyx_pybuffer_right_edges;
41538   __pyx_pybuffer_levels.pybuffer.buf = NULL;
41539   __pyx_pybuffer_levels.refcount = 0;
41540   __pyx_pybuffernd_levels.data = NULL;
41541   __pyx_pybuffernd_levels.rcbuffer = &__pyx_pybuffer_levels;
41542   {
41543     __Pyx_BufFmt_StackElem __pyx_stack[1];
41544     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_left_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(18, 9, __pyx_L1_error)
41545   }
41546   __pyx_pybuffernd_left_edges.diminfo[0].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_left_edges.diminfo[0].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_left_edges.diminfo[1].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_left_edges.diminfo[1].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[1];
41547   {
41548     __Pyx_BufFmt_StackElem __pyx_stack[1];
41549     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_right_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(18, 9, __pyx_L1_error)
41550   }
41551   __pyx_pybuffernd_right_edges.diminfo[0].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_right_edges.diminfo[0].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_right_edges.diminfo[1].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_right_edges.diminfo[1].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[1];
41552   {
41553     __Pyx_BufFmt_StackElem __pyx_stack[1];
41554     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_levels.rcbuffer->pybuffer, (PyObject*)__pyx_v_levels, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(18, 9, __pyx_L1_error)
41555   }
41556   __pyx_pybuffernd_levels.diminfo[0].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_levels.diminfo[0].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_levels.diminfo[1].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_levels.diminfo[1].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[1];
41557 
41558   /* "yt/geometry/_selection_routines/always_selector.pxi":13
41559  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
41560  *                      np.ndarray[np.int32_t, ndim=2] levels):
41561  *         cdef int ng = left_edges.shape[0]             # <<<<<<<<<<<<<<
41562  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.ones(ng, dtype='uint8')
41563  *         return gridi.astype("bool")
41564  */
41565   __pyx_v_ng = (__pyx_v_left_edges->dimensions[0]);
41566 
41567   /* "yt/geometry/_selection_routines/always_selector.pxi":14
41568  *                      np.ndarray[np.int32_t, ndim=2] levels):
41569  *         cdef int ng = left_edges.shape[0]
41570  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.ones(ng, dtype='uint8')             # <<<<<<<<<<<<<<
41571  *         return gridi.astype("bool")
41572  *
41573  */
41574   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 14, __pyx_L1_error)
41575   __Pyx_GOTREF(__pyx_t_1);
41576   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ones); if (unlikely(!__pyx_t_2)) __PYX_ERR(18, 14, __pyx_L1_error)
41577   __Pyx_GOTREF(__pyx_t_2);
41578   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
41579   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_ng); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 14, __pyx_L1_error)
41580   __Pyx_GOTREF(__pyx_t_1);
41581   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(18, 14, __pyx_L1_error)
41582   __Pyx_GOTREF(__pyx_t_3);
41583   __Pyx_GIVEREF(__pyx_t_1);
41584   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
41585   __pyx_t_1 = 0;
41586   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 14, __pyx_L1_error)
41587   __Pyx_GOTREF(__pyx_t_1);
41588   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_uint8) < 0) __PYX_ERR(18, 14, __pyx_L1_error)
41589   __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 14, __pyx_L1_error)
41590   __Pyx_GOTREF(__pyx_t_4);
41591   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
41592   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
41593   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
41594   if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(18, 14, __pyx_L1_error)
41595   __pyx_t_5 = ((PyArrayObject *)__pyx_t_4);
41596   {
41597     __Pyx_BufFmt_StackElem __pyx_stack[1];
41598     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_gridi.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES, 1, 0, __pyx_stack) == -1)) {
41599       __pyx_v_gridi = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_gridi.rcbuffer->pybuffer.buf = NULL;
41600       __PYX_ERR(18, 14, __pyx_L1_error)
41601     } else {__pyx_pybuffernd_gridi.diminfo[0].strides = __pyx_pybuffernd_gridi.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_gridi.diminfo[0].shape = __pyx_pybuffernd_gridi.rcbuffer->pybuffer.shape[0];
41602     }
41603   }
41604   __pyx_t_5 = 0;
41605   __pyx_v_gridi = ((PyArrayObject *)__pyx_t_4);
41606   __pyx_t_4 = 0;
41607 
41608   /* "yt/geometry/_selection_routines/always_selector.pxi":15
41609  *         cdef int ng = left_edges.shape[0]
41610  *         cdef np.ndarray[np.uint8_t, ndim=1] gridi = np.ones(ng, dtype='uint8')
41611  *         return gridi.astype("bool")             # <<<<<<<<<<<<<<
41612  *
41613  *     @cython.boundscheck(False)
41614  */
41615   __Pyx_XDECREF(__pyx_r);
41616   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_gridi), __pyx_n_s_astype); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 15, __pyx_L1_error)
41617   __Pyx_GOTREF(__pyx_t_1);
41618   __pyx_t_3 = NULL;
41619   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
41620     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
41621     if (likely(__pyx_t_3)) {
41622       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
41623       __Pyx_INCREF(__pyx_t_3);
41624       __Pyx_INCREF(function);
41625       __Pyx_DECREF_SET(__pyx_t_1, function);
41626     }
41627   }
41628   __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_n_s_bool) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_n_s_bool);
41629   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
41630   if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 15, __pyx_L1_error)
41631   __Pyx_GOTREF(__pyx_t_4);
41632   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
41633   __pyx_r = __pyx_t_4;
41634   __pyx_t_4 = 0;
41635   goto __pyx_L0;
41636 
41637   /* "yt/geometry/_selection_routines/always_selector.pxi":9
41638  *     @cython.wraparound(False)
41639  *     @cython.cdivision(True)
41640  *     def select_grids(self,             # <<<<<<<<<<<<<<
41641  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
41642  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
41643  */
41644 
41645   /* function exit code */
41646   __pyx_L1_error:;
41647   __Pyx_XDECREF(__pyx_t_1);
41648   __Pyx_XDECREF(__pyx_t_2);
41649   __Pyx_XDECREF(__pyx_t_3);
41650   __Pyx_XDECREF(__pyx_t_4);
41651   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
41652     __Pyx_PyThreadState_declare
41653     __Pyx_PyThreadState_assign
41654     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
41655     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_gridi.rcbuffer->pybuffer);
41656     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
41657     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
41658     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
41659   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
41660   __Pyx_AddTraceback("yt.geometry.selection_routines.AlwaysSelector.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
41661   __pyx_r = NULL;
41662   goto __pyx_L2;
41663   __pyx_L0:;
41664   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_gridi.rcbuffer->pybuffer);
41665   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
41666   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
41667   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
41668   __pyx_L2:;
41669   __Pyx_XDECREF((PyObject *)__pyx_v_gridi);
41670   __Pyx_XGIVEREF(__pyx_r);
41671   __Pyx_RefNannyFinishContext();
41672   return __pyx_r;
41673 }
41674 
41675 /* "yt/geometry/_selection_routines/always_selector.pxi":20
41676  *     @cython.wraparound(False)
41677  *     @cython.cdivision(True)
41678  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
41679  *         return 1
41680  *
41681  */
41682 
41683 static int __pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_cell(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_dds) {
41684   int __pyx_r;
41685 
41686   /* "yt/geometry/_selection_routines/always_selector.pxi":21
41687  *     @cython.cdivision(True)
41688  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
41689  *         return 1             # <<<<<<<<<<<<<<
41690  *
41691  *     cdef int select_grid(self, np.float64_t left_edge[3],
41692  */
41693   __pyx_r = 1;
41694   goto __pyx_L0;
41695 
41696   /* "yt/geometry/_selection_routines/always_selector.pxi":20
41697  *     @cython.wraparound(False)
41698  *     @cython.cdivision(True)
41699  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
41700  *         return 1
41701  *
41702  */
41703 
41704   /* function exit code */
41705   __pyx_L0:;
41706   return __pyx_r;
41707 }
41708 
41709 /* "yt/geometry/_selection_routines/always_selector.pxi":23
41710  *         return 1
41711  *
41712  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
41713  *                          np.float64_t right_edge[3], np.int32_t level,
41714  *                          Oct *o = NULL) nogil:
41715  */
41716 
41717 static int __pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_grid(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge, CYTHON_UNUSED __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14AlwaysSelector_select_grid *__pyx_optional_args) {
41718   int __pyx_r;
41719   if (__pyx_optional_args) {
41720   }
41721 
41722   /* "yt/geometry/_selection_routines/always_selector.pxi":26
41723  *                          np.float64_t right_edge[3], np.int32_t level,
41724  *                          Oct *o = NULL) nogil:
41725  *         return 1             # <<<<<<<<<<<<<<
41726  *
41727  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
41728  */
41729   __pyx_r = 1;
41730   goto __pyx_L0;
41731 
41732   /* "yt/geometry/_selection_routines/always_selector.pxi":23
41733  *         return 1
41734  *
41735  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
41736  *                          np.float64_t right_edge[3], np.int32_t level,
41737  *                          Oct *o = NULL) nogil:
41738  */
41739 
41740   /* function exit code */
41741   __pyx_L0:;
41742   return __pyx_r;
41743 }
41744 
41745 /* "yt/geometry/_selection_routines/always_selector.pxi":28
41746  *         return 1
41747  *
41748  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
41749  *         return 1
41750  *
41751  */
41752 
41753 static int __pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_point(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos) {
41754   int __pyx_r;
41755 
41756   /* "yt/geometry/_selection_routines/always_selector.pxi":29
41757  *
41758  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
41759  *         return 1             # <<<<<<<<<<<<<<
41760  *
41761  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
41762  */
41763   __pyx_r = 1;
41764   goto __pyx_L0;
41765 
41766   /* "yt/geometry/_selection_routines/always_selector.pxi":28
41767  *         return 1
41768  *
41769  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
41770  *         return 1
41771  *
41772  */
41773 
41774   /* function exit code */
41775   __pyx_L0:;
41776   return __pyx_r;
41777 }
41778 
41779 /* "yt/geometry/_selection_routines/always_selector.pxi":31
41780  *         return 1
41781  *
41782  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
41783  *         return 1
41784  *
41785  */
41786 
41787 static int __pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_sphere(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_pos, CYTHON_UNUSED __pyx_t_5numpy_float64_t __pyx_v_radius) {
41788   int __pyx_r;
41789 
41790   /* "yt/geometry/_selection_routines/always_selector.pxi":32
41791  *
41792  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
41793  *         return 1             # <<<<<<<<<<<<<<
41794  *
41795  *     cdef int select_bbox(self, np.float64_t left_edge[3],
41796  */
41797   __pyx_r = 1;
41798   goto __pyx_L0;
41799 
41800   /* "yt/geometry/_selection_routines/always_selector.pxi":31
41801  *         return 1
41802  *
41803  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
41804  *         return 1
41805  *
41806  */
41807 
41808   /* function exit code */
41809   __pyx_L0:;
41810   return __pyx_r;
41811 }
41812 
41813 /* "yt/geometry/_selection_routines/always_selector.pxi":34
41814  *         return 1
41815  *
41816  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
41817  *                                np.float64_t right_edge[3]) nogil:
41818  *         return 1
41819  */
41820 
41821 static int __pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_bbox(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
41822   int __pyx_r;
41823 
41824   /* "yt/geometry/_selection_routines/always_selector.pxi":36
41825  *     cdef int select_bbox(self, np.float64_t left_edge[3],
41826  *                                np.float64_t right_edge[3]) nogil:
41827  *         return 1             # <<<<<<<<<<<<<<
41828  *
41829  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
41830  */
41831   __pyx_r = 1;
41832   goto __pyx_L0;
41833 
41834   /* "yt/geometry/_selection_routines/always_selector.pxi":34
41835  *         return 1
41836  *
41837  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
41838  *                                np.float64_t right_edge[3]) nogil:
41839  *         return 1
41840  */
41841 
41842   /* function exit code */
41843   __pyx_L0:;
41844   return __pyx_r;
41845 }
41846 
41847 /* "yt/geometry/_selection_routines/always_selector.pxi":38
41848  *         return 1
41849  *
41850  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
41851  *                                np.float64_t right_edge[3]) nogil:
41852  *         return 1
41853  */
41854 
41855 static int __pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_bbox_edge(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
41856   int __pyx_r;
41857 
41858   /* "yt/geometry/_selection_routines/always_selector.pxi":40
41859  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
41860  *                                np.float64_t right_edge[3]) nogil:
41861  *         return 1             # <<<<<<<<<<<<<<
41862  *
41863  *     def _hash_vals(self):
41864  */
41865   __pyx_r = 1;
41866   goto __pyx_L0;
41867 
41868   /* "yt/geometry/_selection_routines/always_selector.pxi":38
41869  *         return 1
41870  *
41871  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
41872  *                                np.float64_t right_edge[3]) nogil:
41873  *         return 1
41874  */
41875 
41876   /* function exit code */
41877   __pyx_L0:;
41878   return __pyx_r;
41879 }
41880 
41881 /* "yt/geometry/_selection_routines/always_selector.pxi":42
41882  *         return 1
41883  *
41884  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
41885  *         return ("always", 1,)
41886  *
41887  */
41888 
41889 /* Python wrapper */
41890 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
41891 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
41892   PyObject *__pyx_r = 0;
41893   __Pyx_RefNannyDeclarations
41894   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
41895   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector_4_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *)__pyx_v_self));
41896 
41897   /* function exit code */
41898   __Pyx_RefNannyFinishContext();
41899   return __pyx_r;
41900 }
41901 
41902 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector_4_hash_vals(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self) {
41903   PyObject *__pyx_r = NULL;
41904   __Pyx_RefNannyDeclarations
41905   __Pyx_RefNannySetupContext("_hash_vals", 0);
41906 
41907   /* "yt/geometry/_selection_routines/always_selector.pxi":43
41908  *
41909  *     def _hash_vals(self):
41910  *         return ("always", 1,)             # <<<<<<<<<<<<<<
41911  *
41912  * always_selector = AlwaysSelector
41913  */
41914   __Pyx_XDECREF(__pyx_r);
41915   __Pyx_INCREF(__pyx_tuple__49);
41916   __pyx_r = __pyx_tuple__49;
41917   goto __pyx_L0;
41918 
41919   /* "yt/geometry/_selection_routines/always_selector.pxi":42
41920  *         return 1
41921  *
41922  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
41923  *         return ("always", 1,)
41924  *
41925  */
41926 
41927   /* function exit code */
41928   __pyx_L0:;
41929   __Pyx_XGIVEREF(__pyx_r);
41930   __Pyx_RefNannyFinishContext();
41931   return __pyx_r;
41932 }
41933 
41934 /* "(tree fragment)":1
41935  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
41936  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41937  * def __setstate_cython__(self, __pyx_state):
41938  */
41939 
41940 /* Python wrapper */
41941 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
41942 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
41943   PyObject *__pyx_r = 0;
41944   __Pyx_RefNannyDeclarations
41945   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
41946   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector_6__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *)__pyx_v_self));
41947 
41948   /* function exit code */
41949   __Pyx_RefNannyFinishContext();
41950   return __pyx_r;
41951 }
41952 
41953 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self) {
41954   PyObject *__pyx_r = NULL;
41955   __Pyx_RefNannyDeclarations
41956   PyObject *__pyx_t_1 = NULL;
41957   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
41958 
41959   /* "(tree fragment)":2
41960  * def __reduce_cython__(self):
41961  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
41962  * def __setstate_cython__(self, __pyx_state):
41963  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41964  */
41965   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__50, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
41966   __Pyx_GOTREF(__pyx_t_1);
41967   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
41968   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
41969   __PYX_ERR(5, 2, __pyx_L1_error)
41970 
41971   /* "(tree fragment)":1
41972  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
41973  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41974  * def __setstate_cython__(self, __pyx_state):
41975  */
41976 
41977   /* function exit code */
41978   __pyx_L1_error:;
41979   __Pyx_XDECREF(__pyx_t_1);
41980   __Pyx_AddTraceback("yt.geometry.selection_routines.AlwaysSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
41981   __pyx_r = NULL;
41982   __Pyx_XGIVEREF(__pyx_r);
41983   __Pyx_RefNannyFinishContext();
41984   return __pyx_r;
41985 }
41986 
41987 /* "(tree fragment)":3
41988  * def __reduce_cython__(self):
41989  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41990  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
41991  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
41992  */
41993 
41994 /* Python wrapper */
41995 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
41996 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
41997   PyObject *__pyx_r = 0;
41998   __Pyx_RefNannyDeclarations
41999   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
42000   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector_8__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
42001 
42002   /* function exit code */
42003   __Pyx_RefNannyFinishContext();
42004   return __pyx_r;
42005 }
42006 
42007 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_14AlwaysSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
42008   PyObject *__pyx_r = NULL;
42009   __Pyx_RefNannyDeclarations
42010   PyObject *__pyx_t_1 = NULL;
42011   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
42012 
42013   /* "(tree fragment)":4
42014  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
42015  * def __setstate_cython__(self, __pyx_state):
42016  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
42017  */
42018   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__51, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
42019   __Pyx_GOTREF(__pyx_t_1);
42020   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
42021   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
42022   __PYX_ERR(5, 4, __pyx_L1_error)
42023 
42024   /* "(tree fragment)":3
42025  * def __reduce_cython__(self):
42026  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
42027  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
42028  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
42029  */
42030 
42031   /* function exit code */
42032   __pyx_L1_error:;
42033   __Pyx_XDECREF(__pyx_t_1);
42034   __Pyx_AddTraceback("yt.geometry.selection_routines.AlwaysSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
42035   __pyx_r = NULL;
42036   __Pyx_XGIVEREF(__pyx_r);
42037   __Pyx_RefNannyFinishContext();
42038   return __pyx_r;
42039 }
42040 
42041 /* "yt/geometry/_selection_routines/compose_selector.pxi":5
42042  *     cdef SelectorObject selector2
42043  *
42044  *     def __init__(self, dobj, selector1, selector2):             # <<<<<<<<<<<<<<
42045  *         self.selector1 = selector1
42046  *         self.selector2 = selector2
42047  */
42048 
42049 /* Python wrapper */
42050 static int __pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
42051 static int __pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
42052   CYTHON_UNUSED PyObject *__pyx_v_dobj = 0;
42053   PyObject *__pyx_v_selector1 = 0;
42054   PyObject *__pyx_v_selector2 = 0;
42055   int __pyx_r;
42056   __Pyx_RefNannyDeclarations
42057   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
42058   {
42059     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,&__pyx_n_s_selector1,&__pyx_n_s_selector2,0};
42060     PyObject* values[3] = {0,0,0};
42061     if (unlikely(__pyx_kwds)) {
42062       Py_ssize_t kw_args;
42063       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
42064       switch (pos_args) {
42065         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
42066         CYTHON_FALLTHROUGH;
42067         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
42068         CYTHON_FALLTHROUGH;
42069         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
42070         CYTHON_FALLTHROUGH;
42071         case  0: break;
42072         default: goto __pyx_L5_argtuple_error;
42073       }
42074       kw_args = PyDict_Size(__pyx_kwds);
42075       switch (pos_args) {
42076         case  0:
42077         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
42078         else goto __pyx_L5_argtuple_error;
42079         CYTHON_FALLTHROUGH;
42080         case  1:
42081         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_selector1)) != 0)) kw_args--;
42082         else {
42083           __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 1); __PYX_ERR(19, 5, __pyx_L3_error)
42084         }
42085         CYTHON_FALLTHROUGH;
42086         case  2:
42087         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_selector2)) != 0)) kw_args--;
42088         else {
42089           __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, 2); __PYX_ERR(19, 5, __pyx_L3_error)
42090         }
42091       }
42092       if (unlikely(kw_args > 0)) {
42093         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(19, 5, __pyx_L3_error)
42094       }
42095     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
42096       goto __pyx_L5_argtuple_error;
42097     } else {
42098       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
42099       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
42100       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
42101     }
42102     __pyx_v_dobj = values[0];
42103     __pyx_v_selector1 = values[1];
42104     __pyx_v_selector2 = values[2];
42105   }
42106   goto __pyx_L4_argument_unpacking_done;
42107   __pyx_L5_argtuple_error:;
42108   __Pyx_RaiseArgtupleInvalid("__init__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(19, 5, __pyx_L3_error)
42109   __pyx_L3_error:;
42110   __Pyx_AddTraceback("yt.geometry.selection_routines.ComposeSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
42111   __Pyx_RefNannyFinishContext();
42112   return -1;
42113   __pyx_L4_argument_unpacking_done:;
42114   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *)__pyx_v_self), __pyx_v_dobj, __pyx_v_selector1, __pyx_v_selector2);
42115 
42116   /* function exit code */
42117   __Pyx_RefNannyFinishContext();
42118   return __pyx_r;
42119 }
42120 
42121 static int __pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_dobj, PyObject *__pyx_v_selector1, PyObject *__pyx_v_selector2) {
42122   int __pyx_r;
42123   __Pyx_RefNannyDeclarations
42124   PyObject *__pyx_t_1 = NULL;
42125   PyObject *__pyx_t_2 = NULL;
42126   PyObject *__pyx_t_3 = NULL;
42127   PyObject *__pyx_t_4 = NULL;
42128   int __pyx_t_5;
42129   __pyx_t_5numpy_int32_t __pyx_t_6;
42130   __Pyx_RefNannySetupContext("__init__", 0);
42131 
42132   /* "yt/geometry/_selection_routines/compose_selector.pxi":6
42133  *
42134  *     def __init__(self, dobj, selector1, selector2):
42135  *         self.selector1 = selector1             # <<<<<<<<<<<<<<
42136  *         self.selector2 = selector2
42137  *         self.min_level = max(selector1.min_level, selector2.min_level)
42138  */
42139   if (!(likely(((__pyx_v_selector1) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_selector1, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(19, 6, __pyx_L1_error)
42140   __pyx_t_1 = __pyx_v_selector1;
42141   __Pyx_INCREF(__pyx_t_1);
42142   __Pyx_GIVEREF(__pyx_t_1);
42143   __Pyx_GOTREF(__pyx_v_self->selector1);
42144   __Pyx_DECREF(((PyObject *)__pyx_v_self->selector1));
42145   __pyx_v_self->selector1 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_1);
42146   __pyx_t_1 = 0;
42147 
42148   /* "yt/geometry/_selection_routines/compose_selector.pxi":7
42149  *     def __init__(self, dobj, selector1, selector2):
42150  *         self.selector1 = selector1
42151  *         self.selector2 = selector2             # <<<<<<<<<<<<<<
42152  *         self.min_level = max(selector1.min_level, selector2.min_level)
42153  *         self.max_level = min(selector1.max_level, selector2.max_level)
42154  */
42155   if (!(likely(((__pyx_v_selector2) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_selector2, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(19, 7, __pyx_L1_error)
42156   __pyx_t_1 = __pyx_v_selector2;
42157   __Pyx_INCREF(__pyx_t_1);
42158   __Pyx_GIVEREF(__pyx_t_1);
42159   __Pyx_GOTREF(__pyx_v_self->selector2);
42160   __Pyx_DECREF(((PyObject *)__pyx_v_self->selector2));
42161   __pyx_v_self->selector2 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_1);
42162   __pyx_t_1 = 0;
42163 
42164   /* "yt/geometry/_selection_routines/compose_selector.pxi":8
42165  *         self.selector1 = selector1
42166  *         self.selector2 = selector2
42167  *         self.min_level = max(selector1.min_level, selector2.min_level)             # <<<<<<<<<<<<<<
42168  *         self.max_level = min(selector1.max_level, selector2.max_level)
42169  *
42170  */
42171   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_selector2, __pyx_n_s_min_level); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 8, __pyx_L1_error)
42172   __Pyx_GOTREF(__pyx_t_1);
42173   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_selector1, __pyx_n_s_min_level); if (unlikely(!__pyx_t_2)) __PYX_ERR(19, 8, __pyx_L1_error)
42174   __Pyx_GOTREF(__pyx_t_2);
42175   __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(19, 8, __pyx_L1_error)
42176   __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(19, 8, __pyx_L1_error)
42177   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
42178   if (__pyx_t_5) {
42179     __Pyx_INCREF(__pyx_t_1);
42180     __pyx_t_3 = __pyx_t_1;
42181   } else {
42182     __Pyx_INCREF(__pyx_t_2);
42183     __pyx_t_3 = __pyx_t_2;
42184   }
42185   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
42186   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
42187   __pyx_t_6 = __Pyx_PyInt_As_npy_int32(__pyx_t_3); if (unlikely((__pyx_t_6 == ((npy_int32)-1)) && PyErr_Occurred())) __PYX_ERR(19, 8, __pyx_L1_error)
42188   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
42189   __pyx_v_self->__pyx_base.min_level = __pyx_t_6;
42190 
42191   /* "yt/geometry/_selection_routines/compose_selector.pxi":9
42192  *         self.selector2 = selector2
42193  *         self.min_level = max(selector1.min_level, selector2.min_level)
42194  *         self.max_level = min(selector1.max_level, selector2.max_level)             # <<<<<<<<<<<<<<
42195  *
42196  *     def select_grids(self,
42197  */
42198   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_selector2, __pyx_n_s_max_level); if (unlikely(!__pyx_t_3)) __PYX_ERR(19, 9, __pyx_L1_error)
42199   __Pyx_GOTREF(__pyx_t_3);
42200   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_selector1, __pyx_n_s_max_level); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 9, __pyx_L1_error)
42201   __Pyx_GOTREF(__pyx_t_1);
42202   __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(19, 9, __pyx_L1_error)
42203   __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(19, 9, __pyx_L1_error)
42204   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
42205   if (__pyx_t_5) {
42206     __Pyx_INCREF(__pyx_t_3);
42207     __pyx_t_2 = __pyx_t_3;
42208   } else {
42209     __Pyx_INCREF(__pyx_t_1);
42210     __pyx_t_2 = __pyx_t_1;
42211   }
42212   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
42213   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
42214   __pyx_t_6 = __Pyx_PyInt_As_npy_int32(__pyx_t_2); if (unlikely((__pyx_t_6 == ((npy_int32)-1)) && PyErr_Occurred())) __PYX_ERR(19, 9, __pyx_L1_error)
42215   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
42216   __pyx_v_self->__pyx_base.max_level = __pyx_t_6;
42217 
42218   /* "yt/geometry/_selection_routines/compose_selector.pxi":5
42219  *     cdef SelectorObject selector2
42220  *
42221  *     def __init__(self, dobj, selector1, selector2):             # <<<<<<<<<<<<<<
42222  *         self.selector1 = selector1
42223  *         self.selector2 = selector2
42224  */
42225 
42226   /* function exit code */
42227   __pyx_r = 0;
42228   goto __pyx_L0;
42229   __pyx_L1_error:;
42230   __Pyx_XDECREF(__pyx_t_1);
42231   __Pyx_XDECREF(__pyx_t_2);
42232   __Pyx_XDECREF(__pyx_t_3);
42233   __Pyx_XDECREF(__pyx_t_4);
42234   __Pyx_AddTraceback("yt.geometry.selection_routines.ComposeSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
42235   __pyx_r = -1;
42236   __pyx_L0:;
42237   __Pyx_RefNannyFinishContext();
42238   return __pyx_r;
42239 }
42240 
42241 /* "yt/geometry/_selection_routines/compose_selector.pxi":11
42242  *         self.max_level = min(selector1.max_level, selector2.max_level)
42243  *
42244  *     def select_grids(self,             # <<<<<<<<<<<<<<
42245  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
42246  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
42247  */
42248 
42249 /* Python wrapper */
42250 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_3select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
42251 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_3select_grids(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
42252   PyArrayObject *__pyx_v_left_edges = 0;
42253   PyArrayObject *__pyx_v_right_edges = 0;
42254   PyArrayObject *__pyx_v_levels = 0;
42255   PyObject *__pyx_r = 0;
42256   __Pyx_RefNannyDeclarations
42257   __Pyx_RefNannySetupContext("select_grids (wrapper)", 0);
42258   {
42259     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_left_edges,&__pyx_n_s_right_edges,&__pyx_n_s_levels,0};
42260     PyObject* values[3] = {0,0,0};
42261     if (unlikely(__pyx_kwds)) {
42262       Py_ssize_t kw_args;
42263       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
42264       switch (pos_args) {
42265         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
42266         CYTHON_FALLTHROUGH;
42267         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
42268         CYTHON_FALLTHROUGH;
42269         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
42270         CYTHON_FALLTHROUGH;
42271         case  0: break;
42272         default: goto __pyx_L5_argtuple_error;
42273       }
42274       kw_args = PyDict_Size(__pyx_kwds);
42275       switch (pos_args) {
42276         case  0:
42277         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_left_edges)) != 0)) kw_args--;
42278         else goto __pyx_L5_argtuple_error;
42279         CYTHON_FALLTHROUGH;
42280         case  1:
42281         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_right_edges)) != 0)) kw_args--;
42282         else {
42283           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 1); __PYX_ERR(19, 11, __pyx_L3_error)
42284         }
42285         CYTHON_FALLTHROUGH;
42286         case  2:
42287         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_levels)) != 0)) kw_args--;
42288         else {
42289           __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, 2); __PYX_ERR(19, 11, __pyx_L3_error)
42290         }
42291       }
42292       if (unlikely(kw_args > 0)) {
42293         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "select_grids") < 0)) __PYX_ERR(19, 11, __pyx_L3_error)
42294       }
42295     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
42296       goto __pyx_L5_argtuple_error;
42297     } else {
42298       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
42299       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
42300       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
42301     }
42302     __pyx_v_left_edges = ((PyArrayObject *)values[0]);
42303     __pyx_v_right_edges = ((PyArrayObject *)values[1]);
42304     __pyx_v_levels = ((PyArrayObject *)values[2]);
42305   }
42306   goto __pyx_L4_argument_unpacking_done;
42307   __pyx_L5_argtuple_error:;
42308   __Pyx_RaiseArgtupleInvalid("select_grids", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(19, 11, __pyx_L3_error)
42309   __pyx_L3_error:;
42310   __Pyx_AddTraceback("yt.geometry.selection_routines.ComposeSelector.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
42311   __Pyx_RefNannyFinishContext();
42312   return NULL;
42313   __pyx_L4_argument_unpacking_done:;
42314   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_left_edges), __pyx_ptype_5numpy_ndarray, 1, "left_edges", 0))) __PYX_ERR(19, 12, __pyx_L1_error)
42315   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_right_edges), __pyx_ptype_5numpy_ndarray, 1, "right_edges", 0))) __PYX_ERR(19, 13, __pyx_L1_error)
42316   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_levels), __pyx_ptype_5numpy_ndarray, 1, "levels", 0))) __PYX_ERR(19, 14, __pyx_L1_error)
42317   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector_2select_grids(((struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *)__pyx_v_self), __pyx_v_left_edges, __pyx_v_right_edges, __pyx_v_levels);
42318 
42319   /* function exit code */
42320   goto __pyx_L0;
42321   __pyx_L1_error:;
42322   __pyx_r = NULL;
42323   __pyx_L0:;
42324   __Pyx_RefNannyFinishContext();
42325   return __pyx_r;
42326 }
42327 
42328 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector_2select_grids(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, PyArrayObject *__pyx_v_left_edges, PyArrayObject *__pyx_v_right_edges, PyArrayObject *__pyx_v_levels) {
42329   __Pyx_LocalBuf_ND __pyx_pybuffernd_left_edges;
42330   __Pyx_Buffer __pyx_pybuffer_left_edges;
42331   __Pyx_LocalBuf_ND __pyx_pybuffernd_levels;
42332   __Pyx_Buffer __pyx_pybuffer_levels;
42333   __Pyx_LocalBuf_ND __pyx_pybuffernd_right_edges;
42334   __Pyx_Buffer __pyx_pybuffer_right_edges;
42335   PyObject *__pyx_r = NULL;
42336   __Pyx_RefNannyDeclarations
42337   PyObject *__pyx_t_1 = NULL;
42338   PyObject *__pyx_t_2 = NULL;
42339   PyObject *__pyx_t_3 = NULL;
42340   PyObject *__pyx_t_4 = NULL;
42341   PyObject *__pyx_t_5 = NULL;
42342   int __pyx_t_6;
42343   PyObject *__pyx_t_7 = NULL;
42344   PyObject *__pyx_t_8 = NULL;
42345   __Pyx_RefNannySetupContext("select_grids", 0);
42346   __pyx_pybuffer_left_edges.pybuffer.buf = NULL;
42347   __pyx_pybuffer_left_edges.refcount = 0;
42348   __pyx_pybuffernd_left_edges.data = NULL;
42349   __pyx_pybuffernd_left_edges.rcbuffer = &__pyx_pybuffer_left_edges;
42350   __pyx_pybuffer_right_edges.pybuffer.buf = NULL;
42351   __pyx_pybuffer_right_edges.refcount = 0;
42352   __pyx_pybuffernd_right_edges.data = NULL;
42353   __pyx_pybuffernd_right_edges.rcbuffer = &__pyx_pybuffer_right_edges;
42354   __pyx_pybuffer_levels.pybuffer.buf = NULL;
42355   __pyx_pybuffer_levels.refcount = 0;
42356   __pyx_pybuffernd_levels.data = NULL;
42357   __pyx_pybuffernd_levels.rcbuffer = &__pyx_pybuffer_levels;
42358   {
42359     __Pyx_BufFmt_StackElem __pyx_stack[1];
42360     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_left_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(19, 11, __pyx_L1_error)
42361   }
42362   __pyx_pybuffernd_left_edges.diminfo[0].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_left_edges.diminfo[0].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_left_edges.diminfo[1].strides = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_left_edges.diminfo[1].shape = __pyx_pybuffernd_left_edges.rcbuffer->pybuffer.shape[1];
42363   {
42364     __Pyx_BufFmt_StackElem __pyx_stack[1];
42365     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer, (PyObject*)__pyx_v_right_edges, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(19, 11, __pyx_L1_error)
42366   }
42367   __pyx_pybuffernd_right_edges.diminfo[0].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_right_edges.diminfo[0].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_right_edges.diminfo[1].strides = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_right_edges.diminfo[1].shape = __pyx_pybuffernd_right_edges.rcbuffer->pybuffer.shape[1];
42368   {
42369     __Pyx_BufFmt_StackElem __pyx_stack[1];
42370     if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_levels.rcbuffer->pybuffer, (PyObject*)__pyx_v_levels, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) __PYX_ERR(19, 11, __pyx_L1_error)
42371   }
42372   __pyx_pybuffernd_levels.diminfo[0].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_levels.diminfo[0].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_levels.diminfo[1].strides = __pyx_pybuffernd_levels.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_levels.diminfo[1].shape = __pyx_pybuffernd_levels.rcbuffer->pybuffer.shape[1];
42373 
42374   /* "yt/geometry/_selection_routines/compose_selector.pxi":15
42375  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
42376  *                      np.ndarray[np.int32_t, ndim=2] levels):
42377  *         return np.logical_or(             # <<<<<<<<<<<<<<
42378  *                     self.selector1.select_grids(left_edges, right_edges, levels),
42379  *                     self.selector2.select_grids(left_edges, right_edges, levels))
42380  */
42381   __Pyx_XDECREF(__pyx_r);
42382   __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(19, 15, __pyx_L1_error)
42383   __Pyx_GOTREF(__pyx_t_2);
42384   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_logical_or); if (unlikely(!__pyx_t_3)) __PYX_ERR(19, 15, __pyx_L1_error)
42385   __Pyx_GOTREF(__pyx_t_3);
42386   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
42387 
42388   /* "yt/geometry/_selection_routines/compose_selector.pxi":16
42389  *                      np.ndarray[np.int32_t, ndim=2] levels):
42390  *         return np.logical_or(
42391  *                     self.selector1.select_grids(left_edges, right_edges, levels),             # <<<<<<<<<<<<<<
42392  *                     self.selector2.select_grids(left_edges, right_edges, levels))
42393  *
42394  */
42395   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->selector1), __pyx_n_s_select_grids); if (unlikely(!__pyx_t_4)) __PYX_ERR(19, 16, __pyx_L1_error)
42396   __Pyx_GOTREF(__pyx_t_4);
42397   __pyx_t_5 = NULL;
42398   __pyx_t_6 = 0;
42399   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
42400     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
42401     if (likely(__pyx_t_5)) {
42402       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
42403       __Pyx_INCREF(__pyx_t_5);
42404       __Pyx_INCREF(function);
42405       __Pyx_DECREF_SET(__pyx_t_4, function);
42406       __pyx_t_6 = 1;
42407     }
42408   }
42409   #if CYTHON_FAST_PYCALL
42410   if (PyFunction_Check(__pyx_t_4)) {
42411     PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_left_edges), ((PyObject *)__pyx_v_right_edges), ((PyObject *)__pyx_v_levels)};
42412     __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(19, 16, __pyx_L1_error)
42413     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
42414     __Pyx_GOTREF(__pyx_t_2);
42415   } else
42416   #endif
42417   #if CYTHON_FAST_PYCCALL
42418   if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
42419     PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_left_edges), ((PyObject *)__pyx_v_right_edges), ((PyObject *)__pyx_v_levels)};
42420     __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(19, 16, __pyx_L1_error)
42421     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
42422     __Pyx_GOTREF(__pyx_t_2);
42423   } else
42424   #endif
42425   {
42426     __pyx_t_7 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 16, __pyx_L1_error)
42427     __Pyx_GOTREF(__pyx_t_7);
42428     if (__pyx_t_5) {
42429       __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
42430     }
42431     __Pyx_INCREF(((PyObject *)__pyx_v_left_edges));
42432     __Pyx_GIVEREF(((PyObject *)__pyx_v_left_edges));
42433     PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, ((PyObject *)__pyx_v_left_edges));
42434     __Pyx_INCREF(((PyObject *)__pyx_v_right_edges));
42435     __Pyx_GIVEREF(((PyObject *)__pyx_v_right_edges));
42436     PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, ((PyObject *)__pyx_v_right_edges));
42437     __Pyx_INCREF(((PyObject *)__pyx_v_levels));
42438     __Pyx_GIVEREF(((PyObject *)__pyx_v_levels));
42439     PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, ((PyObject *)__pyx_v_levels));
42440     __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(19, 16, __pyx_L1_error)
42441     __Pyx_GOTREF(__pyx_t_2);
42442     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
42443   }
42444   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
42445 
42446   /* "yt/geometry/_selection_routines/compose_selector.pxi":17
42447  *         return np.logical_or(
42448  *                     self.selector1.select_grids(left_edges, right_edges, levels),
42449  *                     self.selector2.select_grids(left_edges, right_edges, levels))             # <<<<<<<<<<<<<<
42450  *
42451  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
42452  */
42453   __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->selector2), __pyx_n_s_select_grids); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 17, __pyx_L1_error)
42454   __Pyx_GOTREF(__pyx_t_7);
42455   __pyx_t_5 = NULL;
42456   __pyx_t_6 = 0;
42457   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
42458     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
42459     if (likely(__pyx_t_5)) {
42460       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
42461       __Pyx_INCREF(__pyx_t_5);
42462       __Pyx_INCREF(function);
42463       __Pyx_DECREF_SET(__pyx_t_7, function);
42464       __pyx_t_6 = 1;
42465     }
42466   }
42467   #if CYTHON_FAST_PYCALL
42468   if (PyFunction_Check(__pyx_t_7)) {
42469     PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_left_edges), ((PyObject *)__pyx_v_right_edges), ((PyObject *)__pyx_v_levels)};
42470     __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(19, 17, __pyx_L1_error)
42471     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
42472     __Pyx_GOTREF(__pyx_t_4);
42473   } else
42474   #endif
42475   #if CYTHON_FAST_PYCCALL
42476   if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
42477     PyObject *__pyx_temp[4] = {__pyx_t_5, ((PyObject *)__pyx_v_left_edges), ((PyObject *)__pyx_v_right_edges), ((PyObject *)__pyx_v_levels)};
42478     __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(19, 17, __pyx_L1_error)
42479     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
42480     __Pyx_GOTREF(__pyx_t_4);
42481   } else
42482   #endif
42483   {
42484     __pyx_t_8 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(19, 17, __pyx_L1_error)
42485     __Pyx_GOTREF(__pyx_t_8);
42486     if (__pyx_t_5) {
42487       __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL;
42488     }
42489     __Pyx_INCREF(((PyObject *)__pyx_v_left_edges));
42490     __Pyx_GIVEREF(((PyObject *)__pyx_v_left_edges));
42491     PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_6, ((PyObject *)__pyx_v_left_edges));
42492     __Pyx_INCREF(((PyObject *)__pyx_v_right_edges));
42493     __Pyx_GIVEREF(((PyObject *)__pyx_v_right_edges));
42494     PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_6, ((PyObject *)__pyx_v_right_edges));
42495     __Pyx_INCREF(((PyObject *)__pyx_v_levels));
42496     __Pyx_GIVEREF(((PyObject *)__pyx_v_levels));
42497     PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_6, ((PyObject *)__pyx_v_levels));
42498     __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(19, 17, __pyx_L1_error)
42499     __Pyx_GOTREF(__pyx_t_4);
42500     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
42501   }
42502   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
42503   __pyx_t_7 = NULL;
42504   __pyx_t_6 = 0;
42505   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
42506     __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
42507     if (likely(__pyx_t_7)) {
42508       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
42509       __Pyx_INCREF(__pyx_t_7);
42510       __Pyx_INCREF(function);
42511       __Pyx_DECREF_SET(__pyx_t_3, function);
42512       __pyx_t_6 = 1;
42513     }
42514   }
42515   #if CYTHON_FAST_PYCALL
42516   if (PyFunction_Check(__pyx_t_3)) {
42517     PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_2, __pyx_t_4};
42518     __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 15, __pyx_L1_error)
42519     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
42520     __Pyx_GOTREF(__pyx_t_1);
42521     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
42522     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
42523   } else
42524   #endif
42525   #if CYTHON_FAST_PYCCALL
42526   if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
42527     PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_2, __pyx_t_4};
42528     __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 15, __pyx_L1_error)
42529     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
42530     __Pyx_GOTREF(__pyx_t_1);
42531     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
42532     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
42533   } else
42534   #endif
42535   {
42536     __pyx_t_8 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(19, 15, __pyx_L1_error)
42537     __Pyx_GOTREF(__pyx_t_8);
42538     if (__pyx_t_7) {
42539       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
42540     }
42541     __Pyx_GIVEREF(__pyx_t_2);
42542     PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_6, __pyx_t_2);
42543     __Pyx_GIVEREF(__pyx_t_4);
42544     PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_6, __pyx_t_4);
42545     __pyx_t_2 = 0;
42546     __pyx_t_4 = 0;
42547     __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 15, __pyx_L1_error)
42548     __Pyx_GOTREF(__pyx_t_1);
42549     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
42550   }
42551   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
42552   __pyx_r = __pyx_t_1;
42553   __pyx_t_1 = 0;
42554   goto __pyx_L0;
42555 
42556   /* "yt/geometry/_selection_routines/compose_selector.pxi":11
42557  *         self.max_level = min(selector1.max_level, selector2.max_level)
42558  *
42559  *     def select_grids(self,             # <<<<<<<<<<<<<<
42560  *                      np.ndarray[np.float64_t, ndim=2] left_edges,
42561  *                      np.ndarray[np.float64_t, ndim=2] right_edges,
42562  */
42563 
42564   /* function exit code */
42565   __pyx_L1_error:;
42566   __Pyx_XDECREF(__pyx_t_1);
42567   __Pyx_XDECREF(__pyx_t_2);
42568   __Pyx_XDECREF(__pyx_t_3);
42569   __Pyx_XDECREF(__pyx_t_4);
42570   __Pyx_XDECREF(__pyx_t_5);
42571   __Pyx_XDECREF(__pyx_t_7);
42572   __Pyx_XDECREF(__pyx_t_8);
42573   { PyObject *__pyx_type, *__pyx_value, *__pyx_tb;
42574     __Pyx_PyThreadState_declare
42575     __Pyx_PyThreadState_assign
42576     __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);
42577     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
42578     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
42579     __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
42580   __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}
42581   __Pyx_AddTraceback("yt.geometry.selection_routines.ComposeSelector.select_grids", __pyx_clineno, __pyx_lineno, __pyx_filename);
42582   __pyx_r = NULL;
42583   goto __pyx_L2;
42584   __pyx_L0:;
42585   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_left_edges.rcbuffer->pybuffer);
42586   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_levels.rcbuffer->pybuffer);
42587   __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_right_edges.rcbuffer->pybuffer);
42588   __pyx_L2:;
42589   __Pyx_XGIVEREF(__pyx_r);
42590   __Pyx_RefNannyFinishContext();
42591   return __pyx_r;
42592 }
42593 
42594 /* "yt/geometry/_selection_routines/compose_selector.pxi":19
42595  *                     self.selector2.select_grids(left_edges, right_edges, levels))
42596  *
42597  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
42598  *         if self.selector1.select_cell(pos, dds) and \
42599  *                 self.selector2.select_cell(pos, dds):
42600  */
42601 
42602 static int __pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
42603   int __pyx_r;
42604   int __pyx_t_1;
42605   int __pyx_t_2;
42606 
42607   /* "yt/geometry/_selection_routines/compose_selector.pxi":20
42608  *
42609  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
42610  *         if self.selector1.select_cell(pos, dds) and \             # <<<<<<<<<<<<<<
42611  *                 self.selector2.select_cell(pos, dds):
42612  *             return 1
42613  */
42614   __pyx_t_2 = (((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->selector1->__pyx_vtab)->select_cell(__pyx_v_self->selector1, __pyx_v_pos, __pyx_v_dds) != 0);
42615   if (__pyx_t_2) {
42616   } else {
42617     __pyx_t_1 = __pyx_t_2;
42618     goto __pyx_L4_bool_binop_done;
42619   }
42620 
42621   /* "yt/geometry/_selection_routines/compose_selector.pxi":21
42622  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
42623  *         if self.selector1.select_cell(pos, dds) and \
42624  *                 self.selector2.select_cell(pos, dds):             # <<<<<<<<<<<<<<
42625  *             return 1
42626  *         else:
42627  */
42628   __pyx_t_2 = (((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->selector2->__pyx_vtab)->select_cell(__pyx_v_self->selector2, __pyx_v_pos, __pyx_v_dds) != 0);
42629   __pyx_t_1 = __pyx_t_2;
42630   __pyx_L4_bool_binop_done:;
42631 
42632   /* "yt/geometry/_selection_routines/compose_selector.pxi":20
42633  *
42634  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
42635  *         if self.selector1.select_cell(pos, dds) and \             # <<<<<<<<<<<<<<
42636  *                 self.selector2.select_cell(pos, dds):
42637  *             return 1
42638  */
42639   if (__pyx_t_1) {
42640 
42641     /* "yt/geometry/_selection_routines/compose_selector.pxi":22
42642  *         if self.selector1.select_cell(pos, dds) and \
42643  *                 self.selector2.select_cell(pos, dds):
42644  *             return 1             # <<<<<<<<<<<<<<
42645  *         else:
42646  *             return 0
42647  */
42648     __pyx_r = 1;
42649     goto __pyx_L0;
42650 
42651     /* "yt/geometry/_selection_routines/compose_selector.pxi":20
42652  *
42653  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
42654  *         if self.selector1.select_cell(pos, dds) and \             # <<<<<<<<<<<<<<
42655  *                 self.selector2.select_cell(pos, dds):
42656  *             return 1
42657  */
42658   }
42659 
42660   /* "yt/geometry/_selection_routines/compose_selector.pxi":24
42661  *             return 1
42662  *         else:
42663  *             return 0             # <<<<<<<<<<<<<<
42664  *
42665  *     cdef int select_grid(self, np.float64_t left_edge[3],
42666  */
42667   /*else*/ {
42668     __pyx_r = 0;
42669     goto __pyx_L0;
42670   }
42671 
42672   /* "yt/geometry/_selection_routines/compose_selector.pxi":19
42673  *                     self.selector2.select_grids(left_edges, right_edges, levels))
42674  *
42675  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
42676  *         if self.selector1.select_cell(pos, dds) and \
42677  *                 self.selector2.select_cell(pos, dds):
42678  */
42679 
42680   /* function exit code */
42681   __pyx_L0:;
42682   return __pyx_r;
42683 }
42684 
42685 /* "yt/geometry/_selection_routines/compose_selector.pxi":26
42686  *             return 0
42687  *
42688  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
42689  *                          np.float64_t right_edge[3], np.int32_t level,
42690  *                          Oct *o = NULL) nogil:
42691  */
42692 
42693 static int __pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_15ComposeSelector_select_grid *__pyx_optional_args) {
42694 
42695   /* "yt/geometry/_selection_routines/compose_selector.pxi":28
42696  *     cdef int select_grid(self, np.float64_t left_edge[3],
42697  *                          np.float64_t right_edge[3], np.int32_t level,
42698  *                          Oct *o = NULL) nogil:             # <<<<<<<<<<<<<<
42699  *         if self.selector1.select_grid(left_edge, right_edge, level, o) or \
42700  *                 self.selector2.select_grid(left_edge, right_edge, level, o):
42701  */
42702   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_o = ((struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *)NULL);
42703   int __pyx_r;
42704   int __pyx_t_1;
42705   int __pyx_t_2;
42706   struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid __pyx_t_3;
42707   int __pyx_t_4;
42708   if (__pyx_optional_args) {
42709     if (__pyx_optional_args->__pyx_n > 0) {
42710       __pyx_v_o = __pyx_optional_args->o;
42711     }
42712   }
42713 
42714   /* "yt/geometry/_selection_routines/compose_selector.pxi":29
42715  *                          np.float64_t right_edge[3], np.int32_t level,
42716  *                          Oct *o = NULL) nogil:
42717  *         if self.selector1.select_grid(left_edge, right_edge, level, o) or \             # <<<<<<<<<<<<<<
42718  *                 self.selector2.select_grid(left_edge, right_edge, level, o):
42719  *             return 1
42720  */
42721   __pyx_t_3.__pyx_n = 1;
42722   __pyx_t_3.o = __pyx_v_o;
42723   __pyx_t_2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->selector1->__pyx_vtab)->select_grid(__pyx_v_self->selector1, __pyx_v_left_edge, __pyx_v_right_edge, __pyx_v_level, &__pyx_t_3);
42724   __pyx_t_4 = (__pyx_t_2 != 0);
42725   if (!__pyx_t_4) {
42726   } else {
42727     __pyx_t_1 = __pyx_t_4;
42728     goto __pyx_L4_bool_binop_done;
42729   }
42730 
42731   /* "yt/geometry/_selection_routines/compose_selector.pxi":30
42732  *                          Oct *o = NULL) nogil:
42733  *         if self.selector1.select_grid(left_edge, right_edge, level, o) or \
42734  *                 self.selector2.select_grid(left_edge, right_edge, level, o):             # <<<<<<<<<<<<<<
42735  *             return 1
42736  *         else:
42737  */
42738   __pyx_t_3.__pyx_n = 1;
42739   __pyx_t_3.o = __pyx_v_o;
42740   __pyx_t_2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->selector2->__pyx_vtab)->select_grid(__pyx_v_self->selector2, __pyx_v_left_edge, __pyx_v_right_edge, __pyx_v_level, &__pyx_t_3);
42741   __pyx_t_4 = (__pyx_t_2 != 0);
42742   __pyx_t_1 = __pyx_t_4;
42743   __pyx_L4_bool_binop_done:;
42744 
42745   /* "yt/geometry/_selection_routines/compose_selector.pxi":29
42746  *                          np.float64_t right_edge[3], np.int32_t level,
42747  *                          Oct *o = NULL) nogil:
42748  *         if self.selector1.select_grid(left_edge, right_edge, level, o) or \             # <<<<<<<<<<<<<<
42749  *                 self.selector2.select_grid(left_edge, right_edge, level, o):
42750  *             return 1
42751  */
42752   if (__pyx_t_1) {
42753 
42754     /* "yt/geometry/_selection_routines/compose_selector.pxi":31
42755  *         if self.selector1.select_grid(left_edge, right_edge, level, o) or \
42756  *                 self.selector2.select_grid(left_edge, right_edge, level, o):
42757  *             return 1             # <<<<<<<<<<<<<<
42758  *         else:
42759  *             return 0
42760  */
42761     __pyx_r = 1;
42762     goto __pyx_L0;
42763 
42764     /* "yt/geometry/_selection_routines/compose_selector.pxi":29
42765  *                          np.float64_t right_edge[3], np.int32_t level,
42766  *                          Oct *o = NULL) nogil:
42767  *         if self.selector1.select_grid(left_edge, right_edge, level, o) or \             # <<<<<<<<<<<<<<
42768  *                 self.selector2.select_grid(left_edge, right_edge, level, o):
42769  *             return 1
42770  */
42771   }
42772 
42773   /* "yt/geometry/_selection_routines/compose_selector.pxi":33
42774  *             return 1
42775  *         else:
42776  *             return 0             # <<<<<<<<<<<<<<
42777  *
42778  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
42779  */
42780   /*else*/ {
42781     __pyx_r = 0;
42782     goto __pyx_L0;
42783   }
42784 
42785   /* "yt/geometry/_selection_routines/compose_selector.pxi":26
42786  *             return 0
42787  *
42788  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
42789  *                          np.float64_t right_edge[3], np.int32_t level,
42790  *                          Oct *o = NULL) nogil:
42791  */
42792 
42793   /* function exit code */
42794   __pyx_L0:;
42795   return __pyx_r;
42796 }
42797 
42798 /* "yt/geometry/_selection_routines/compose_selector.pxi":35
42799  *             return 0
42800  *
42801  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
42802  *         if self.selector1.select_point(pos) and \
42803  *                 self.selector2.select_point(pos):
42804  */
42805 
42806 static int __pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
42807   int __pyx_r;
42808   int __pyx_t_1;
42809   int __pyx_t_2;
42810 
42811   /* "yt/geometry/_selection_routines/compose_selector.pxi":36
42812  *
42813  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
42814  *         if self.selector1.select_point(pos) and \             # <<<<<<<<<<<<<<
42815  *                 self.selector2.select_point(pos):
42816  *             return 1
42817  */
42818   __pyx_t_2 = (((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->selector1->__pyx_vtab)->select_point(__pyx_v_self->selector1, __pyx_v_pos) != 0);
42819   if (__pyx_t_2) {
42820   } else {
42821     __pyx_t_1 = __pyx_t_2;
42822     goto __pyx_L4_bool_binop_done;
42823   }
42824 
42825   /* "yt/geometry/_selection_routines/compose_selector.pxi":37
42826  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
42827  *         if self.selector1.select_point(pos) and \
42828  *                 self.selector2.select_point(pos):             # <<<<<<<<<<<<<<
42829  *             return 1
42830  *         else:
42831  */
42832   __pyx_t_2 = (((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->selector2->__pyx_vtab)->select_point(__pyx_v_self->selector2, __pyx_v_pos) != 0);
42833   __pyx_t_1 = __pyx_t_2;
42834   __pyx_L4_bool_binop_done:;
42835 
42836   /* "yt/geometry/_selection_routines/compose_selector.pxi":36
42837  *
42838  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
42839  *         if self.selector1.select_point(pos) and \             # <<<<<<<<<<<<<<
42840  *                 self.selector2.select_point(pos):
42841  *             return 1
42842  */
42843   if (__pyx_t_1) {
42844 
42845     /* "yt/geometry/_selection_routines/compose_selector.pxi":38
42846  *         if self.selector1.select_point(pos) and \
42847  *                 self.selector2.select_point(pos):
42848  *             return 1             # <<<<<<<<<<<<<<
42849  *         else:
42850  *             return 0
42851  */
42852     __pyx_r = 1;
42853     goto __pyx_L0;
42854 
42855     /* "yt/geometry/_selection_routines/compose_selector.pxi":36
42856  *
42857  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
42858  *         if self.selector1.select_point(pos) and \             # <<<<<<<<<<<<<<
42859  *                 self.selector2.select_point(pos):
42860  *             return 1
42861  */
42862   }
42863 
42864   /* "yt/geometry/_selection_routines/compose_selector.pxi":40
42865  *             return 1
42866  *         else:
42867  *             return 0             # <<<<<<<<<<<<<<
42868  *
42869  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
42870  */
42871   /*else*/ {
42872     __pyx_r = 0;
42873     goto __pyx_L0;
42874   }
42875 
42876   /* "yt/geometry/_selection_routines/compose_selector.pxi":35
42877  *             return 0
42878  *
42879  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
42880  *         if self.selector1.select_point(pos) and \
42881  *                 self.selector2.select_point(pos):
42882  */
42883 
42884   /* function exit code */
42885   __pyx_L0:;
42886   return __pyx_r;
42887 }
42888 
42889 /* "yt/geometry/_selection_routines/compose_selector.pxi":42
42890  *             return 0
42891  *
42892  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
42893  *         if self.selector1.select_sphere(pos, radius) and \
42894  *                 self.selector2.select_sphere(pos, radius):
42895  */
42896 
42897 static int __pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
42898   int __pyx_r;
42899   int __pyx_t_1;
42900   int __pyx_t_2;
42901 
42902   /* "yt/geometry/_selection_routines/compose_selector.pxi":43
42903  *
42904  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
42905  *         if self.selector1.select_sphere(pos, radius) and \             # <<<<<<<<<<<<<<
42906  *                 self.selector2.select_sphere(pos, radius):
42907  *             return 1
42908  */
42909   __pyx_t_2 = (((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->selector1->__pyx_vtab)->select_sphere(__pyx_v_self->selector1, __pyx_v_pos, __pyx_v_radius) != 0);
42910   if (__pyx_t_2) {
42911   } else {
42912     __pyx_t_1 = __pyx_t_2;
42913     goto __pyx_L4_bool_binop_done;
42914   }
42915 
42916   /* "yt/geometry/_selection_routines/compose_selector.pxi":44
42917  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
42918  *         if self.selector1.select_sphere(pos, radius) and \
42919  *                 self.selector2.select_sphere(pos, radius):             # <<<<<<<<<<<<<<
42920  *             return 1
42921  *         else:
42922  */
42923   __pyx_t_2 = (((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->selector2->__pyx_vtab)->select_sphere(__pyx_v_self->selector2, __pyx_v_pos, __pyx_v_radius) != 0);
42924   __pyx_t_1 = __pyx_t_2;
42925   __pyx_L4_bool_binop_done:;
42926 
42927   /* "yt/geometry/_selection_routines/compose_selector.pxi":43
42928  *
42929  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
42930  *         if self.selector1.select_sphere(pos, radius) and \             # <<<<<<<<<<<<<<
42931  *                 self.selector2.select_sphere(pos, radius):
42932  *             return 1
42933  */
42934   if (__pyx_t_1) {
42935 
42936     /* "yt/geometry/_selection_routines/compose_selector.pxi":45
42937  *         if self.selector1.select_sphere(pos, radius) and \
42938  *                 self.selector2.select_sphere(pos, radius):
42939  *             return 1             # <<<<<<<<<<<<<<
42940  *         else:
42941  *             return 0
42942  */
42943     __pyx_r = 1;
42944     goto __pyx_L0;
42945 
42946     /* "yt/geometry/_selection_routines/compose_selector.pxi":43
42947  *
42948  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
42949  *         if self.selector1.select_sphere(pos, radius) and \             # <<<<<<<<<<<<<<
42950  *                 self.selector2.select_sphere(pos, radius):
42951  *             return 1
42952  */
42953   }
42954 
42955   /* "yt/geometry/_selection_routines/compose_selector.pxi":47
42956  *             return 1
42957  *         else:
42958  *             return 0             # <<<<<<<<<<<<<<
42959  *
42960  *     cdef int select_bbox(self, np.float64_t left_edge[3],
42961  */
42962   /*else*/ {
42963     __pyx_r = 0;
42964     goto __pyx_L0;
42965   }
42966 
42967   /* "yt/geometry/_selection_routines/compose_selector.pxi":42
42968  *             return 0
42969  *
42970  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
42971  *         if self.selector1.select_sphere(pos, radius) and \
42972  *                 self.selector2.select_sphere(pos, radius):
42973  */
42974 
42975   /* function exit code */
42976   __pyx_L0:;
42977   return __pyx_r;
42978 }
42979 
42980 /* "yt/geometry/_selection_routines/compose_selector.pxi":49
42981  *             return 0
42982  *
42983  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
42984  *                                np.float64_t right_edge[3]) nogil:
42985  *         if self.selector1.select_bbox(left_edge, right_edge) and \
42986  */
42987 
42988 static int __pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
42989   int __pyx_r;
42990   int __pyx_t_1;
42991   int __pyx_t_2;
42992 
42993   /* "yt/geometry/_selection_routines/compose_selector.pxi":51
42994  *     cdef int select_bbox(self, np.float64_t left_edge[3],
42995  *                                np.float64_t right_edge[3]) nogil:
42996  *         if self.selector1.select_bbox(left_edge, right_edge) and \             # <<<<<<<<<<<<<<
42997  *                 self.selector2.select_bbox(left_edge, right_edge):
42998  *             return 1
42999  */
43000   __pyx_t_2 = (((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->selector1->__pyx_vtab)->select_bbox(__pyx_v_self->selector1, __pyx_v_left_edge, __pyx_v_right_edge) != 0);
43001   if (__pyx_t_2) {
43002   } else {
43003     __pyx_t_1 = __pyx_t_2;
43004     goto __pyx_L4_bool_binop_done;
43005   }
43006 
43007   /* "yt/geometry/_selection_routines/compose_selector.pxi":52
43008  *                                np.float64_t right_edge[3]) nogil:
43009  *         if self.selector1.select_bbox(left_edge, right_edge) and \
43010  *                 self.selector2.select_bbox(left_edge, right_edge):             # <<<<<<<<<<<<<<
43011  *             return 1
43012  *         else:
43013  */
43014   __pyx_t_2 = (((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->selector2->__pyx_vtab)->select_bbox(__pyx_v_self->selector2, __pyx_v_left_edge, __pyx_v_right_edge) != 0);
43015   __pyx_t_1 = __pyx_t_2;
43016   __pyx_L4_bool_binop_done:;
43017 
43018   /* "yt/geometry/_selection_routines/compose_selector.pxi":51
43019  *     cdef int select_bbox(self, np.float64_t left_edge[3],
43020  *                                np.float64_t right_edge[3]) nogil:
43021  *         if self.selector1.select_bbox(left_edge, right_edge) and \             # <<<<<<<<<<<<<<
43022  *                 self.selector2.select_bbox(left_edge, right_edge):
43023  *             return 1
43024  */
43025   if (__pyx_t_1) {
43026 
43027     /* "yt/geometry/_selection_routines/compose_selector.pxi":53
43028  *         if self.selector1.select_bbox(left_edge, right_edge) and \
43029  *                 self.selector2.select_bbox(left_edge, right_edge):
43030  *             return 1             # <<<<<<<<<<<<<<
43031  *         else:
43032  *             return 0
43033  */
43034     __pyx_r = 1;
43035     goto __pyx_L0;
43036 
43037     /* "yt/geometry/_selection_routines/compose_selector.pxi":51
43038  *     cdef int select_bbox(self, np.float64_t left_edge[3],
43039  *                                np.float64_t right_edge[3]) nogil:
43040  *         if self.selector1.select_bbox(left_edge, right_edge) and \             # <<<<<<<<<<<<<<
43041  *                 self.selector2.select_bbox(left_edge, right_edge):
43042  *             return 1
43043  */
43044   }
43045 
43046   /* "yt/geometry/_selection_routines/compose_selector.pxi":55
43047  *             return 1
43048  *         else:
43049  *             return 0             # <<<<<<<<<<<<<<
43050  *
43051  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
43052  */
43053   /*else*/ {
43054     __pyx_r = 0;
43055     goto __pyx_L0;
43056   }
43057 
43058   /* "yt/geometry/_selection_routines/compose_selector.pxi":49
43059  *             return 0
43060  *
43061  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
43062  *                                np.float64_t right_edge[3]) nogil:
43063  *         if self.selector1.select_bbox(left_edge, right_edge) and \
43064  */
43065 
43066   /* function exit code */
43067   __pyx_L0:;
43068   return __pyx_r;
43069 }
43070 
43071 /* "yt/geometry/_selection_routines/compose_selector.pxi":57
43072  *             return 0
43073  *
43074  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
43075  *                               np.float64_t right_edge[3]) nogil:
43076  *         cdef int rv1 = self.selector1.select_bbox_edge(left_edge, right_edge)
43077  */
43078 
43079 static int __pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
43080   int __pyx_v_rv1;
43081   int __pyx_v_rv2;
43082   int __pyx_r;
43083   int __pyx_t_1;
43084   int __pyx_t_2;
43085   int __pyx_t_3;
43086   int __pyx_t_4;
43087 
43088   /* "yt/geometry/_selection_routines/compose_selector.pxi":59
43089  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
43090  *                               np.float64_t right_edge[3]) nogil:
43091  *         cdef int rv1 = self.selector1.select_bbox_edge(left_edge, right_edge)             # <<<<<<<<<<<<<<
43092  *         if rv1 == 0: return 0
43093  *         cdef int rv2 = self.selector2.select_bbox_edge(left_edge, right_edge)
43094  */
43095   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->selector1->__pyx_vtab)->select_bbox_edge(__pyx_v_self->selector1, __pyx_v_left_edge, __pyx_v_right_edge);
43096 
43097   /* "yt/geometry/_selection_routines/compose_selector.pxi":60
43098  *                               np.float64_t right_edge[3]) nogil:
43099  *         cdef int rv1 = self.selector1.select_bbox_edge(left_edge, right_edge)
43100  *         if rv1 == 0: return 0             # <<<<<<<<<<<<<<
43101  *         cdef int rv2 = self.selector2.select_bbox_edge(left_edge, right_edge)
43102  *         if rv2 == 0: return 0
43103  */
43104   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
43105   if (__pyx_t_1) {
43106     __pyx_r = 0;
43107     goto __pyx_L0;
43108   }
43109 
43110   /* "yt/geometry/_selection_routines/compose_selector.pxi":61
43111  *         cdef int rv1 = self.selector1.select_bbox_edge(left_edge, right_edge)
43112  *         if rv1 == 0: return 0
43113  *         cdef int rv2 = self.selector2.select_bbox_edge(left_edge, right_edge)             # <<<<<<<<<<<<<<
43114  *         if rv2 == 0: return 0
43115  *         return max(rv1, rv2)
43116  */
43117   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->selector2->__pyx_vtab)->select_bbox_edge(__pyx_v_self->selector2, __pyx_v_left_edge, __pyx_v_right_edge);
43118 
43119   /* "yt/geometry/_selection_routines/compose_selector.pxi":62
43120  *         if rv1 == 0: return 0
43121  *         cdef int rv2 = self.selector2.select_bbox_edge(left_edge, right_edge)
43122  *         if rv2 == 0: return 0             # <<<<<<<<<<<<<<
43123  *         return max(rv1, rv2)
43124  *
43125  */
43126   __pyx_t_1 = ((__pyx_v_rv2 == 0) != 0);
43127   if (__pyx_t_1) {
43128     __pyx_r = 0;
43129     goto __pyx_L0;
43130   }
43131 
43132   /* "yt/geometry/_selection_routines/compose_selector.pxi":63
43133  *         cdef int rv2 = self.selector2.select_bbox_edge(left_edge, right_edge)
43134  *         if rv2 == 0: return 0
43135  *         return max(rv1, rv2)             # <<<<<<<<<<<<<<
43136  *
43137  *     def _hash_vals(self):
43138  */
43139   __pyx_t_2 = __pyx_v_rv2;
43140   __pyx_t_3 = __pyx_v_rv1;
43141   if (((__pyx_t_2 > __pyx_t_3) != 0)) {
43142     __pyx_t_4 = __pyx_t_2;
43143   } else {
43144     __pyx_t_4 = __pyx_t_3;
43145   }
43146   __pyx_r = __pyx_t_4;
43147   goto __pyx_L0;
43148 
43149   /* "yt/geometry/_selection_routines/compose_selector.pxi":57
43150  *             return 0
43151  *
43152  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
43153  *                               np.float64_t right_edge[3]) nogil:
43154  *         cdef int rv1 = self.selector1.select_bbox_edge(left_edge, right_edge)
43155  */
43156 
43157   /* function exit code */
43158   __pyx_L0:;
43159   return __pyx_r;
43160 }
43161 
43162 /* "yt/geometry/_selection_routines/compose_selector.pxi":65
43163  *         return max(rv1, rv2)
43164  *
43165  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
43166  *         return (hash(self.selector1), hash(self.selector2))
43167  *
43168  */
43169 
43170 /* Python wrapper */
43171 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
43172 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_5_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
43173   PyObject *__pyx_r = 0;
43174   __Pyx_RefNannyDeclarations
43175   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
43176   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector_4_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *)__pyx_v_self));
43177 
43178   /* function exit code */
43179   __Pyx_RefNannyFinishContext();
43180   return __pyx_r;
43181 }
43182 
43183 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector_4_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self) {
43184   PyObject *__pyx_r = NULL;
43185   __Pyx_RefNannyDeclarations
43186   PyObject *__pyx_t_1 = NULL;
43187   Py_hash_t __pyx_t_2;
43188   PyObject *__pyx_t_3 = NULL;
43189   PyObject *__pyx_t_4 = NULL;
43190   __Pyx_RefNannySetupContext("_hash_vals", 0);
43191 
43192   /* "yt/geometry/_selection_routines/compose_selector.pxi":66
43193  *
43194  *     def _hash_vals(self):
43195  *         return (hash(self.selector1), hash(self.selector2))             # <<<<<<<<<<<<<<
43196  *
43197  * compose_selector = ComposeSelector
43198  */
43199   __Pyx_XDECREF(__pyx_r);
43200   __pyx_t_1 = ((PyObject *)__pyx_v_self->selector1);
43201   __Pyx_INCREF(__pyx_t_1);
43202   __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(19, 66, __pyx_L1_error)
43203   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
43204   __pyx_t_1 = __Pyx_PyInt_FromHash_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 66, __pyx_L1_error)
43205   __Pyx_GOTREF(__pyx_t_1);
43206   __pyx_t_3 = ((PyObject *)__pyx_v_self->selector2);
43207   __Pyx_INCREF(__pyx_t_3);
43208   __pyx_t_2 = PyObject_Hash(__pyx_t_3); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(19, 66, __pyx_L1_error)
43209   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
43210   __pyx_t_3 = __Pyx_PyInt_FromHash_t(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(19, 66, __pyx_L1_error)
43211   __Pyx_GOTREF(__pyx_t_3);
43212   __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(19, 66, __pyx_L1_error)
43213   __Pyx_GOTREF(__pyx_t_4);
43214   __Pyx_GIVEREF(__pyx_t_1);
43215   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
43216   __Pyx_GIVEREF(__pyx_t_3);
43217   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
43218   __pyx_t_1 = 0;
43219   __pyx_t_3 = 0;
43220   __pyx_r = __pyx_t_4;
43221   __pyx_t_4 = 0;
43222   goto __pyx_L0;
43223 
43224   /* "yt/geometry/_selection_routines/compose_selector.pxi":65
43225  *         return max(rv1, rv2)
43226  *
43227  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
43228  *         return (hash(self.selector1), hash(self.selector2))
43229  *
43230  */
43231 
43232   /* function exit code */
43233   __pyx_L1_error:;
43234   __Pyx_XDECREF(__pyx_t_1);
43235   __Pyx_XDECREF(__pyx_t_3);
43236   __Pyx_XDECREF(__pyx_t_4);
43237   __Pyx_AddTraceback("yt.geometry.selection_routines.ComposeSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
43238   __pyx_r = NULL;
43239   __pyx_L0:;
43240   __Pyx_XGIVEREF(__pyx_r);
43241   __Pyx_RefNannyFinishContext();
43242   return __pyx_r;
43243 }
43244 
43245 /* "(tree fragment)":1
43246  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
43247  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43248  * def __setstate_cython__(self, __pyx_state):
43249  */
43250 
43251 /* Python wrapper */
43252 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
43253 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
43254   PyObject *__pyx_r = 0;
43255   __Pyx_RefNannyDeclarations
43256   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
43257   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector_6__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *)__pyx_v_self));
43258 
43259   /* function exit code */
43260   __Pyx_RefNannyFinishContext();
43261   return __pyx_r;
43262 }
43263 
43264 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self) {
43265   PyObject *__pyx_r = NULL;
43266   __Pyx_RefNannyDeclarations
43267   PyObject *__pyx_t_1 = NULL;
43268   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
43269 
43270   /* "(tree fragment)":2
43271  * def __reduce_cython__(self):
43272  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
43273  * def __setstate_cython__(self, __pyx_state):
43274  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43275  */
43276   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__52, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
43277   __Pyx_GOTREF(__pyx_t_1);
43278   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
43279   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
43280   __PYX_ERR(5, 2, __pyx_L1_error)
43281 
43282   /* "(tree fragment)":1
43283  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
43284  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43285  * def __setstate_cython__(self, __pyx_state):
43286  */
43287 
43288   /* function exit code */
43289   __pyx_L1_error:;
43290   __Pyx_XDECREF(__pyx_t_1);
43291   __Pyx_AddTraceback("yt.geometry.selection_routines.ComposeSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
43292   __pyx_r = NULL;
43293   __Pyx_XGIVEREF(__pyx_r);
43294   __Pyx_RefNannyFinishContext();
43295   return __pyx_r;
43296 }
43297 
43298 /* "(tree fragment)":3
43299  * def __reduce_cython__(self):
43300  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43301  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
43302  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43303  */
43304 
43305 /* Python wrapper */
43306 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
43307 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
43308   PyObject *__pyx_r = 0;
43309   __Pyx_RefNannyDeclarations
43310   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
43311   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector_8__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
43312 
43313   /* function exit code */
43314   __Pyx_RefNannyFinishContext();
43315   return __pyx_r;
43316 }
43317 
43318 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15ComposeSelector_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
43319   PyObject *__pyx_r = NULL;
43320   __Pyx_RefNannyDeclarations
43321   PyObject *__pyx_t_1 = NULL;
43322   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
43323 
43324   /* "(tree fragment)":4
43325  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43326  * def __setstate_cython__(self, __pyx_state):
43327  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
43328  */
43329   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__53, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
43330   __Pyx_GOTREF(__pyx_t_1);
43331   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
43332   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
43333   __PYX_ERR(5, 4, __pyx_L1_error)
43334 
43335   /* "(tree fragment)":3
43336  * def __reduce_cython__(self):
43337  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43338  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
43339  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43340  */
43341 
43342   /* function exit code */
43343   __pyx_L1_error:;
43344   __Pyx_XDECREF(__pyx_t_1);
43345   __Pyx_AddTraceback("yt.geometry.selection_routines.ComposeSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
43346   __pyx_r = NULL;
43347   __Pyx_XGIVEREF(__pyx_r);
43348   __Pyx_RefNannyFinishContext();
43349   return __pyx_r;
43350 }
43351 
43352 /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":6
43353  *     cdef object pind
43354  *     cdef public np.int64_t halo_id
43355  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
43356  *         self.base_source = dobj.base_source
43357  *         self.base_selector = self.base_source.selector
43358  */
43359 
43360 /* Python wrapper */
43361 static int __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
43362 static int __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
43363   PyObject *__pyx_v_dobj = 0;
43364   int __pyx_r;
43365   __Pyx_RefNannyDeclarations
43366   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
43367   {
43368     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
43369     PyObject* values[1] = {0};
43370     if (unlikely(__pyx_kwds)) {
43371       Py_ssize_t kw_args;
43372       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
43373       switch (pos_args) {
43374         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
43375         CYTHON_FALLTHROUGH;
43376         case  0: break;
43377         default: goto __pyx_L5_argtuple_error;
43378       }
43379       kw_args = PyDict_Size(__pyx_kwds);
43380       switch (pos_args) {
43381         case  0:
43382         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
43383         else goto __pyx_L5_argtuple_error;
43384       }
43385       if (unlikely(kw_args > 0)) {
43386         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(20, 6, __pyx_L3_error)
43387       }
43388     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
43389       goto __pyx_L5_argtuple_error;
43390     } else {
43391       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
43392     }
43393     __pyx_v_dobj = values[0];
43394   }
43395   goto __pyx_L4_argument_unpacking_done;
43396   __pyx_L5_argtuple_error:;
43397   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(20, 6, __pyx_L3_error)
43398   __pyx_L3_error:;
43399   __Pyx_AddTraceback("yt.geometry.selection_routines.HaloParticlesSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
43400   __Pyx_RefNannyFinishContext();
43401   return -1;
43402   __pyx_L4_argument_unpacking_done:;
43403   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)__pyx_v_self), __pyx_v_dobj);
43404 
43405   /* function exit code */
43406   __Pyx_RefNannyFinishContext();
43407   return __pyx_r;
43408 }
43409 
43410 static int __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
43411   int __pyx_r;
43412   __Pyx_RefNannyDeclarations
43413   PyObject *__pyx_t_1 = NULL;
43414   __Pyx_RefNannySetupContext("__init__", 0);
43415 
43416   /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":7
43417  *     cdef public np.int64_t halo_id
43418  *     def __init__(self, dobj):
43419  *         self.base_source = dobj.base_source             # <<<<<<<<<<<<<<
43420  *         self.base_selector = self.base_source.selector
43421  *         self.pind = dobj.particle_indices
43422  */
43423   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_base_source); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 7, __pyx_L1_error)
43424   __Pyx_GOTREF(__pyx_t_1);
43425   __Pyx_GIVEREF(__pyx_t_1);
43426   __Pyx_GOTREF(__pyx_v_self->base_source);
43427   __Pyx_DECREF(__pyx_v_self->base_source);
43428   __pyx_v_self->base_source = __pyx_t_1;
43429   __pyx_t_1 = 0;
43430 
43431   /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":8
43432  *     def __init__(self, dobj):
43433  *         self.base_source = dobj.base_source
43434  *         self.base_selector = self.base_source.selector             # <<<<<<<<<<<<<<
43435  *         self.pind = dobj.particle_indices
43436  *
43437  */
43438   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->base_source, __pyx_n_s_selector); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 8, __pyx_L1_error)
43439   __Pyx_GOTREF(__pyx_t_1);
43440   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(20, 8, __pyx_L1_error)
43441   __Pyx_GIVEREF(__pyx_t_1);
43442   __Pyx_GOTREF(__pyx_v_self->base_selector);
43443   __Pyx_DECREF(((PyObject *)__pyx_v_self->base_selector));
43444   __pyx_v_self->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_1);
43445   __pyx_t_1 = 0;
43446 
43447   /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":9
43448  *         self.base_source = dobj.base_source
43449  *         self.base_selector = self.base_source.selector
43450  *         self.pind = dobj.particle_indices             # <<<<<<<<<<<<<<
43451  *
43452  *     def _hash_vals(self):
43453  */
43454   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_particle_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 9, __pyx_L1_error)
43455   __Pyx_GOTREF(__pyx_t_1);
43456   __Pyx_GIVEREF(__pyx_t_1);
43457   __Pyx_GOTREF(__pyx_v_self->pind);
43458   __Pyx_DECREF(__pyx_v_self->pind);
43459   __pyx_v_self->pind = __pyx_t_1;
43460   __pyx_t_1 = 0;
43461 
43462   /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":6
43463  *     cdef object pind
43464  *     cdef public np.int64_t halo_id
43465  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
43466  *         self.base_source = dobj.base_source
43467  *         self.base_selector = self.base_source.selector
43468  */
43469 
43470   /* function exit code */
43471   __pyx_r = 0;
43472   goto __pyx_L0;
43473   __pyx_L1_error:;
43474   __Pyx_XDECREF(__pyx_t_1);
43475   __Pyx_AddTraceback("yt.geometry.selection_routines.HaloParticlesSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
43476   __pyx_r = -1;
43477   __pyx_L0:;
43478   __Pyx_RefNannyFinishContext();
43479   return __pyx_r;
43480 }
43481 
43482 /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":11
43483  *         self.pind = dobj.particle_indices
43484  *
43485  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
43486  *         return ("halo_particles", self.halo_id)
43487  *
43488  */
43489 
43490 /* Python wrapper */
43491 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
43492 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_3_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
43493   PyObject *__pyx_r = 0;
43494   __Pyx_RefNannyDeclarations
43495   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
43496   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_2_hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)__pyx_v_self));
43497 
43498   /* function exit code */
43499   __Pyx_RefNannyFinishContext();
43500   return __pyx_r;
43501 }
43502 
43503 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_2_hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self) {
43504   PyObject *__pyx_r = NULL;
43505   __Pyx_RefNannyDeclarations
43506   PyObject *__pyx_t_1 = NULL;
43507   PyObject *__pyx_t_2 = NULL;
43508   __Pyx_RefNannySetupContext("_hash_vals", 0);
43509 
43510   /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":12
43511  *
43512  *     def _hash_vals(self):
43513  *         return ("halo_particles", self.halo_id)             # <<<<<<<<<<<<<<
43514  *
43515  * halo_particles_selector = HaloParticlesSelector
43516  */
43517   __Pyx_XDECREF(__pyx_r);
43518   __pyx_t_1 = __Pyx_PyInt_From_npy_int64(__pyx_v_self->halo_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 12, __pyx_L1_error)
43519   __Pyx_GOTREF(__pyx_t_1);
43520   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 12, __pyx_L1_error)
43521   __Pyx_GOTREF(__pyx_t_2);
43522   __Pyx_INCREF(__pyx_n_s_halo_particles);
43523   __Pyx_GIVEREF(__pyx_n_s_halo_particles);
43524   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_halo_particles);
43525   __Pyx_GIVEREF(__pyx_t_1);
43526   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
43527   __pyx_t_1 = 0;
43528   __pyx_r = __pyx_t_2;
43529   __pyx_t_2 = 0;
43530   goto __pyx_L0;
43531 
43532   /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":11
43533  *         self.pind = dobj.particle_indices
43534  *
43535  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
43536  *         return ("halo_particles", self.halo_id)
43537  *
43538  */
43539 
43540   /* function exit code */
43541   __pyx_L1_error:;
43542   __Pyx_XDECREF(__pyx_t_1);
43543   __Pyx_XDECREF(__pyx_t_2);
43544   __Pyx_AddTraceback("yt.geometry.selection_routines.HaloParticlesSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
43545   __pyx_r = NULL;
43546   __pyx_L0:;
43547   __Pyx_XGIVEREF(__pyx_r);
43548   __Pyx_RefNannyFinishContext();
43549   return __pyx_r;
43550 }
43551 
43552 /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":2
43553  * cdef class HaloParticlesSelector(SelectorObject):
43554  *     cdef public object base_source             # <<<<<<<<<<<<<<
43555  *     cdef SelectorObject base_selector
43556  *     cdef object pind
43557  */
43558 
43559 /* Python wrapper */
43560 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_1__get__(PyObject *__pyx_v_self); /*proto*/
43561 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_1__get__(PyObject *__pyx_v_self) {
43562   PyObject *__pyx_r = 0;
43563   __Pyx_RefNannyDeclarations
43564   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
43565   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)__pyx_v_self));
43566 
43567   /* function exit code */
43568   __Pyx_RefNannyFinishContext();
43569   return __pyx_r;
43570 }
43571 
43572 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self) {
43573   PyObject *__pyx_r = NULL;
43574   __Pyx_RefNannyDeclarations
43575   __Pyx_RefNannySetupContext("__get__", 0);
43576   __Pyx_XDECREF(__pyx_r);
43577   __Pyx_INCREF(__pyx_v_self->base_source);
43578   __pyx_r = __pyx_v_self->base_source;
43579   goto __pyx_L0;
43580 
43581   /* function exit code */
43582   __pyx_L0:;
43583   __Pyx_XGIVEREF(__pyx_r);
43584   __Pyx_RefNannyFinishContext();
43585   return __pyx_r;
43586 }
43587 
43588 /* Python wrapper */
43589 static int __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
43590 static int __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
43591   int __pyx_r;
43592   __Pyx_RefNannyDeclarations
43593   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
43594   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
43595 
43596   /* function exit code */
43597   __Pyx_RefNannyFinishContext();
43598   return __pyx_r;
43599 }
43600 
43601 static int __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self, PyObject *__pyx_v_value) {
43602   int __pyx_r;
43603   __Pyx_RefNannyDeclarations
43604   __Pyx_RefNannySetupContext("__set__", 0);
43605   __Pyx_INCREF(__pyx_v_value);
43606   __Pyx_GIVEREF(__pyx_v_value);
43607   __Pyx_GOTREF(__pyx_v_self->base_source);
43608   __Pyx_DECREF(__pyx_v_self->base_source);
43609   __pyx_v_self->base_source = __pyx_v_value;
43610 
43611   /* function exit code */
43612   __pyx_r = 0;
43613   __Pyx_RefNannyFinishContext();
43614   return __pyx_r;
43615 }
43616 
43617 /* Python wrapper */
43618 static int __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_5__del__(PyObject *__pyx_v_self); /*proto*/
43619 static int __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_5__del__(PyObject *__pyx_v_self) {
43620   int __pyx_r;
43621   __Pyx_RefNannyDeclarations
43622   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
43623   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_4__del__(((struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)__pyx_v_self));
43624 
43625   /* function exit code */
43626   __Pyx_RefNannyFinishContext();
43627   return __pyx_r;
43628 }
43629 
43630 static int __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_4__del__(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self) {
43631   int __pyx_r;
43632   __Pyx_RefNannyDeclarations
43633   __Pyx_RefNannySetupContext("__del__", 0);
43634   __Pyx_INCREF(Py_None);
43635   __Pyx_GIVEREF(Py_None);
43636   __Pyx_GOTREF(__pyx_v_self->base_source);
43637   __Pyx_DECREF(__pyx_v_self->base_source);
43638   __pyx_v_self->base_source = Py_None;
43639 
43640   /* function exit code */
43641   __pyx_r = 0;
43642   __Pyx_RefNannyFinishContext();
43643   return __pyx_r;
43644 }
43645 
43646 /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":5
43647  *     cdef SelectorObject base_selector
43648  *     cdef object pind
43649  *     cdef public np.int64_t halo_id             # <<<<<<<<<<<<<<
43650  *     def __init__(self, dobj):
43651  *         self.base_source = dobj.base_source
43652  */
43653 
43654 /* Python wrapper */
43655 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7halo_id_1__get__(PyObject *__pyx_v_self); /*proto*/
43656 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7halo_id_1__get__(PyObject *__pyx_v_self) {
43657   PyObject *__pyx_r = 0;
43658   __Pyx_RefNannyDeclarations
43659   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
43660   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7halo_id___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)__pyx_v_self));
43661 
43662   /* function exit code */
43663   __Pyx_RefNannyFinishContext();
43664   return __pyx_r;
43665 }
43666 
43667 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7halo_id___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self) {
43668   PyObject *__pyx_r = NULL;
43669   __Pyx_RefNannyDeclarations
43670   PyObject *__pyx_t_1 = NULL;
43671   __Pyx_RefNannySetupContext("__get__", 0);
43672   __Pyx_XDECREF(__pyx_r);
43673   __pyx_t_1 = __Pyx_PyInt_From_npy_int64(__pyx_v_self->halo_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 5, __pyx_L1_error)
43674   __Pyx_GOTREF(__pyx_t_1);
43675   __pyx_r = __pyx_t_1;
43676   __pyx_t_1 = 0;
43677   goto __pyx_L0;
43678 
43679   /* function exit code */
43680   __pyx_L1_error:;
43681   __Pyx_XDECREF(__pyx_t_1);
43682   __Pyx_AddTraceback("yt.geometry.selection_routines.HaloParticlesSelector.halo_id.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
43683   __pyx_r = NULL;
43684   __pyx_L0:;
43685   __Pyx_XGIVEREF(__pyx_r);
43686   __Pyx_RefNannyFinishContext();
43687   return __pyx_r;
43688 }
43689 
43690 /* Python wrapper */
43691 static int __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7halo_id_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
43692 static int __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7halo_id_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
43693   int __pyx_r;
43694   __Pyx_RefNannyDeclarations
43695   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
43696   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7halo_id_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
43697 
43698   /* function exit code */
43699   __Pyx_RefNannyFinishContext();
43700   return __pyx_r;
43701 }
43702 
43703 static int __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7halo_id_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self, PyObject *__pyx_v_value) {
43704   int __pyx_r;
43705   __Pyx_RefNannyDeclarations
43706   __pyx_t_5numpy_int64_t __pyx_t_1;
43707   __Pyx_RefNannySetupContext("__set__", 0);
43708   __pyx_t_1 = __Pyx_PyInt_As_npy_int64(__pyx_v_value); if (unlikely((__pyx_t_1 == ((npy_int64)-1)) && PyErr_Occurred())) __PYX_ERR(20, 5, __pyx_L1_error)
43709   __pyx_v_self->halo_id = __pyx_t_1;
43710 
43711   /* function exit code */
43712   __pyx_r = 0;
43713   goto __pyx_L0;
43714   __pyx_L1_error:;
43715   __Pyx_AddTraceback("yt.geometry.selection_routines.HaloParticlesSelector.halo_id.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
43716   __pyx_r = -1;
43717   __pyx_L0:;
43718   __Pyx_RefNannyFinishContext();
43719   return __pyx_r;
43720 }
43721 
43722 /* "(tree fragment)":1
43723  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
43724  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43725  * def __setstate_cython__(self, __pyx_state):
43726  */
43727 
43728 /* Python wrapper */
43729 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
43730 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
43731   PyObject *__pyx_r = 0;
43732   __Pyx_RefNannyDeclarations
43733   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
43734   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_4__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)__pyx_v_self));
43735 
43736   /* function exit code */
43737   __Pyx_RefNannyFinishContext();
43738   return __pyx_r;
43739 }
43740 
43741 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self) {
43742   PyObject *__pyx_r = NULL;
43743   __Pyx_RefNannyDeclarations
43744   PyObject *__pyx_t_1 = NULL;
43745   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
43746 
43747   /* "(tree fragment)":2
43748  * def __reduce_cython__(self):
43749  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
43750  * def __setstate_cython__(self, __pyx_state):
43751  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43752  */
43753   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__54, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
43754   __Pyx_GOTREF(__pyx_t_1);
43755   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
43756   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
43757   __PYX_ERR(5, 2, __pyx_L1_error)
43758 
43759   /* "(tree fragment)":1
43760  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
43761  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43762  * def __setstate_cython__(self, __pyx_state):
43763  */
43764 
43765   /* function exit code */
43766   __pyx_L1_error:;
43767   __Pyx_XDECREF(__pyx_t_1);
43768   __Pyx_AddTraceback("yt.geometry.selection_routines.HaloParticlesSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
43769   __pyx_r = NULL;
43770   __Pyx_XGIVEREF(__pyx_r);
43771   __Pyx_RefNannyFinishContext();
43772   return __pyx_r;
43773 }
43774 
43775 /* "(tree fragment)":3
43776  * def __reduce_cython__(self):
43777  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43778  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
43779  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43780  */
43781 
43782 /* Python wrapper */
43783 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
43784 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
43785   PyObject *__pyx_r = 0;
43786   __Pyx_RefNannyDeclarations
43787   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
43788   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_6__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
43789 
43790   /* function exit code */
43791   __Pyx_RefNannyFinishContext();
43792   return __pyx_r;
43793 }
43794 
43795 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_21HaloParticlesSelector_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
43796   PyObject *__pyx_r = NULL;
43797   __Pyx_RefNannyDeclarations
43798   PyObject *__pyx_t_1 = NULL;
43799   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
43800 
43801   /* "(tree fragment)":4
43802  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43803  * def __setstate_cython__(self, __pyx_state):
43804  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
43805  */
43806   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__55, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
43807   __Pyx_GOTREF(__pyx_t_1);
43808   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
43809   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
43810   __PYX_ERR(5, 4, __pyx_L1_error)
43811 
43812   /* "(tree fragment)":3
43813  * def __reduce_cython__(self):
43814  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43815  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
43816  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
43817  */
43818 
43819   /* function exit code */
43820   __pyx_L1_error:;
43821   __Pyx_XDECREF(__pyx_t_1);
43822   __Pyx_AddTraceback("yt.geometry.selection_routines.HaloParticlesSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
43823   __pyx_r = NULL;
43824   __Pyx_XGIVEREF(__pyx_r);
43825   __Pyx_RefNannyFinishContext();
43826   return __pyx_r;
43827 }
43828 
43829 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":4
43830  * cdef class BooleanSelector(SelectorObject):
43831  *
43832  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
43833  *         # Note that this has a different API than the other selector objects,
43834  *         # so will not work as a traditional data selector.
43835  */
43836 
43837 /* Python wrapper */
43838 static int __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
43839 static int __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
43840   PyObject *__pyx_v_dobj = 0;
43841   int __pyx_r;
43842   __Pyx_RefNannyDeclarations
43843   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
43844   {
43845     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
43846     PyObject* values[1] = {0};
43847     if (unlikely(__pyx_kwds)) {
43848       Py_ssize_t kw_args;
43849       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
43850       switch (pos_args) {
43851         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
43852         CYTHON_FALLTHROUGH;
43853         case  0: break;
43854         default: goto __pyx_L5_argtuple_error;
43855       }
43856       kw_args = PyDict_Size(__pyx_kwds);
43857       switch (pos_args) {
43858         case  0:
43859         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
43860         else goto __pyx_L5_argtuple_error;
43861       }
43862       if (unlikely(kw_args > 0)) {
43863         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(21, 4, __pyx_L3_error)
43864       }
43865     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
43866       goto __pyx_L5_argtuple_error;
43867     } else {
43868       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
43869     }
43870     __pyx_v_dobj = values[0];
43871   }
43872   goto __pyx_L4_argument_unpacking_done;
43873   __pyx_L5_argtuple_error:;
43874   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 4, __pyx_L3_error)
43875   __pyx_L3_error:;
43876   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
43877   __Pyx_RefNannyFinishContext();
43878   return -1;
43879   __pyx_L4_argument_unpacking_done:;
43880   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)__pyx_v_self), __pyx_v_dobj);
43881 
43882   /* function exit code */
43883   __Pyx_RefNannyFinishContext();
43884   return __pyx_r;
43885 }
43886 
43887 static int __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
43888   int __pyx_r;
43889   __Pyx_RefNannyDeclarations
43890   PyObject *__pyx_t_1 = NULL;
43891   int __pyx_t_2;
43892   int __pyx_t_3;
43893   PyObject *__pyx_t_4 = NULL;
43894   __Pyx_RefNannySetupContext("__init__", 0);
43895 
43896   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":7
43897  *         # Note that this has a different API than the other selector objects,
43898  *         # so will not work as a traditional data selector.
43899  *         if not hasattr(dobj.dobj1, "selector"):             # <<<<<<<<<<<<<<
43900  *             self.sel1 = dobj.dobj1
43901  *         else:
43902  */
43903   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_dobj1); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 7, __pyx_L1_error)
43904   __Pyx_GOTREF(__pyx_t_1);
43905   __pyx_t_2 = __Pyx_HasAttr(__pyx_t_1, __pyx_n_s_selector); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(21, 7, __pyx_L1_error)
43906   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
43907   __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
43908   if (__pyx_t_3) {
43909 
43910     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":8
43911  *         # so will not work as a traditional data selector.
43912  *         if not hasattr(dobj.dobj1, "selector"):
43913  *             self.sel1 = dobj.dobj1             # <<<<<<<<<<<<<<
43914  *         else:
43915  *             self.sel1 = dobj.dobj1.selector
43916  */
43917     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_dobj1); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 8, __pyx_L1_error)
43918     __Pyx_GOTREF(__pyx_t_1);
43919     if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(21, 8, __pyx_L1_error)
43920     __Pyx_GIVEREF(__pyx_t_1);
43921     __Pyx_GOTREF(__pyx_v_self->sel1);
43922     __Pyx_DECREF(((PyObject *)__pyx_v_self->sel1));
43923     __pyx_v_self->sel1 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_1);
43924     __pyx_t_1 = 0;
43925 
43926     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":7
43927  *         # Note that this has a different API than the other selector objects,
43928  *         # so will not work as a traditional data selector.
43929  *         if not hasattr(dobj.dobj1, "selector"):             # <<<<<<<<<<<<<<
43930  *             self.sel1 = dobj.dobj1
43931  *         else:
43932  */
43933     goto __pyx_L3;
43934   }
43935 
43936   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":10
43937  *             self.sel1 = dobj.dobj1
43938  *         else:
43939  *             self.sel1 = dobj.dobj1.selector             # <<<<<<<<<<<<<<
43940  *         if not hasattr(dobj.dobj2, "selector"):
43941  *             self.sel2 = dobj.dobj2
43942  */
43943   /*else*/ {
43944     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_dobj1); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 10, __pyx_L1_error)
43945     __Pyx_GOTREF(__pyx_t_1);
43946     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_selector); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 10, __pyx_L1_error)
43947     __Pyx_GOTREF(__pyx_t_4);
43948     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
43949     if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(21, 10, __pyx_L1_error)
43950     __Pyx_GIVEREF(__pyx_t_4);
43951     __Pyx_GOTREF(__pyx_v_self->sel1);
43952     __Pyx_DECREF(((PyObject *)__pyx_v_self->sel1));
43953     __pyx_v_self->sel1 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4);
43954     __pyx_t_4 = 0;
43955   }
43956   __pyx_L3:;
43957 
43958   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":11
43959  *         else:
43960  *             self.sel1 = dobj.dobj1.selector
43961  *         if not hasattr(dobj.dobj2, "selector"):             # <<<<<<<<<<<<<<
43962  *             self.sel2 = dobj.dobj2
43963  *         else:
43964  */
43965   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_dobj2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 11, __pyx_L1_error)
43966   __Pyx_GOTREF(__pyx_t_4);
43967   __pyx_t_3 = __Pyx_HasAttr(__pyx_t_4, __pyx_n_s_selector); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(21, 11, __pyx_L1_error)
43968   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
43969   __pyx_t_2 = ((!(__pyx_t_3 != 0)) != 0);
43970   if (__pyx_t_2) {
43971 
43972     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":12
43973  *             self.sel1 = dobj.dobj1.selector
43974  *         if not hasattr(dobj.dobj2, "selector"):
43975  *             self.sel2 = dobj.dobj2             # <<<<<<<<<<<<<<
43976  *         else:
43977  *             self.sel2 = dobj.dobj2.selector
43978  */
43979     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_dobj2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 12, __pyx_L1_error)
43980     __Pyx_GOTREF(__pyx_t_4);
43981     if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(21, 12, __pyx_L1_error)
43982     __Pyx_GIVEREF(__pyx_t_4);
43983     __Pyx_GOTREF(__pyx_v_self->sel2);
43984     __Pyx_DECREF(((PyObject *)__pyx_v_self->sel2));
43985     __pyx_v_self->sel2 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4);
43986     __pyx_t_4 = 0;
43987 
43988     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":11
43989  *         else:
43990  *             self.sel1 = dobj.dobj1.selector
43991  *         if not hasattr(dobj.dobj2, "selector"):             # <<<<<<<<<<<<<<
43992  *             self.sel2 = dobj.dobj2
43993  *         else:
43994  */
43995     goto __pyx_L4;
43996   }
43997 
43998   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":14
43999  *             self.sel2 = dobj.dobj2
44000  *         else:
44001  *             self.sel2 = dobj.dobj2.selector             # <<<<<<<<<<<<<<
44002  *
44003  * cdef class BooleanANDSelector(BooleanSelector):
44004  */
44005   /*else*/ {
44006     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_dobj2); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 14, __pyx_L1_error)
44007     __Pyx_GOTREF(__pyx_t_4);
44008     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_selector); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 14, __pyx_L1_error)
44009     __Pyx_GOTREF(__pyx_t_1);
44010     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
44011     if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(21, 14, __pyx_L1_error)
44012     __Pyx_GIVEREF(__pyx_t_1);
44013     __Pyx_GOTREF(__pyx_v_self->sel2);
44014     __Pyx_DECREF(((PyObject *)__pyx_v_self->sel2));
44015     __pyx_v_self->sel2 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_1);
44016     __pyx_t_1 = 0;
44017   }
44018   __pyx_L4:;
44019 
44020   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":4
44021  * cdef class BooleanSelector(SelectorObject):
44022  *
44023  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
44024  *         # Note that this has a different API than the other selector objects,
44025  *         # so will not work as a traditional data selector.
44026  */
44027 
44028   /* function exit code */
44029   __pyx_r = 0;
44030   goto __pyx_L0;
44031   __pyx_L1_error:;
44032   __Pyx_XDECREF(__pyx_t_1);
44033   __Pyx_XDECREF(__pyx_t_4);
44034   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
44035   __pyx_r = -1;
44036   __pyx_L0:;
44037   __Pyx_RefNannyFinishContext();
44038   return __pyx_r;
44039 }
44040 
44041 /* "yt/geometry/selection_routines.pxd":78
44042  *
44043  * cdef class BooleanSelector(SelectorObject):
44044  *     cdef public SelectorObject sel1             # <<<<<<<<<<<<<<
44045  *     cdef public SelectorObject sel2
44046  *
44047  */
44048 
44049 /* Python wrapper */
44050 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_1__get__(PyObject *__pyx_v_self); /*proto*/
44051 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_1__get__(PyObject *__pyx_v_self) {
44052   PyObject *__pyx_r = 0;
44053   __Pyx_RefNannyDeclarations
44054   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
44055   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)__pyx_v_self));
44056 
44057   /* function exit code */
44058   __Pyx_RefNannyFinishContext();
44059   return __pyx_r;
44060 }
44061 
44062 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self) {
44063   PyObject *__pyx_r = NULL;
44064   __Pyx_RefNannyDeclarations
44065   __Pyx_RefNannySetupContext("__get__", 0);
44066   __Pyx_XDECREF(__pyx_r);
44067   __Pyx_INCREF(((PyObject *)__pyx_v_self->sel1));
44068   __pyx_r = ((PyObject *)__pyx_v_self->sel1);
44069   goto __pyx_L0;
44070 
44071   /* function exit code */
44072   __pyx_L0:;
44073   __Pyx_XGIVEREF(__pyx_r);
44074   __Pyx_RefNannyFinishContext();
44075   return __pyx_r;
44076 }
44077 
44078 /* Python wrapper */
44079 static int __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
44080 static int __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
44081   int __pyx_r;
44082   __Pyx_RefNannyDeclarations
44083   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
44084   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
44085 
44086   /* function exit code */
44087   __Pyx_RefNannyFinishContext();
44088   return __pyx_r;
44089 }
44090 
44091 static int __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self, PyObject *__pyx_v_value) {
44092   int __pyx_r;
44093   __Pyx_RefNannyDeclarations
44094   PyObject *__pyx_t_1 = NULL;
44095   __Pyx_RefNannySetupContext("__set__", 0);
44096   if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(4, 78, __pyx_L1_error)
44097   __pyx_t_1 = __pyx_v_value;
44098   __Pyx_INCREF(__pyx_t_1);
44099   __Pyx_GIVEREF(__pyx_t_1);
44100   __Pyx_GOTREF(__pyx_v_self->sel1);
44101   __Pyx_DECREF(((PyObject *)__pyx_v_self->sel1));
44102   __pyx_v_self->sel1 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_1);
44103   __pyx_t_1 = 0;
44104 
44105   /* function exit code */
44106   __pyx_r = 0;
44107   goto __pyx_L0;
44108   __pyx_L1_error:;
44109   __Pyx_XDECREF(__pyx_t_1);
44110   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanSelector.sel1.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
44111   __pyx_r = -1;
44112   __pyx_L0:;
44113   __Pyx_RefNannyFinishContext();
44114   return __pyx_r;
44115 }
44116 
44117 /* Python wrapper */
44118 static int __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_5__del__(PyObject *__pyx_v_self); /*proto*/
44119 static int __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_5__del__(PyObject *__pyx_v_self) {
44120   int __pyx_r;
44121   __Pyx_RefNannyDeclarations
44122   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
44123   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_4__del__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)__pyx_v_self));
44124 
44125   /* function exit code */
44126   __Pyx_RefNannyFinishContext();
44127   return __pyx_r;
44128 }
44129 
44130 static int __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_4__del__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self) {
44131   int __pyx_r;
44132   __Pyx_RefNannyDeclarations
44133   __Pyx_RefNannySetupContext("__del__", 0);
44134   __Pyx_INCREF(Py_None);
44135   __Pyx_GIVEREF(Py_None);
44136   __Pyx_GOTREF(__pyx_v_self->sel1);
44137   __Pyx_DECREF(((PyObject *)__pyx_v_self->sel1));
44138   __pyx_v_self->sel1 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None);
44139 
44140   /* function exit code */
44141   __pyx_r = 0;
44142   __Pyx_RefNannyFinishContext();
44143   return __pyx_r;
44144 }
44145 
44146 /* "yt/geometry/selection_routines.pxd":79
44147  * cdef class BooleanSelector(SelectorObject):
44148  *     cdef public SelectorObject sel1
44149  *     cdef public SelectorObject sel2             # <<<<<<<<<<<<<<
44150  *
44151  * cdef inline np.float64_t _periodic_dist(np.float64_t x1, np.float64_t x2,
44152  */
44153 
44154 /* Python wrapper */
44155 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_1__get__(PyObject *__pyx_v_self); /*proto*/
44156 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_1__get__(PyObject *__pyx_v_self) {
44157   PyObject *__pyx_r = 0;
44158   __Pyx_RefNannyDeclarations
44159   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
44160   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2___get__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)__pyx_v_self));
44161 
44162   /* function exit code */
44163   __Pyx_RefNannyFinishContext();
44164   return __pyx_r;
44165 }
44166 
44167 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2___get__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self) {
44168   PyObject *__pyx_r = NULL;
44169   __Pyx_RefNannyDeclarations
44170   __Pyx_RefNannySetupContext("__get__", 0);
44171   __Pyx_XDECREF(__pyx_r);
44172   __Pyx_INCREF(((PyObject *)__pyx_v_self->sel2));
44173   __pyx_r = ((PyObject *)__pyx_v_self->sel2);
44174   goto __pyx_L0;
44175 
44176   /* function exit code */
44177   __pyx_L0:;
44178   __Pyx_XGIVEREF(__pyx_r);
44179   __Pyx_RefNannyFinishContext();
44180   return __pyx_r;
44181 }
44182 
44183 /* Python wrapper */
44184 static int __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
44185 static int __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
44186   int __pyx_r;
44187   __Pyx_RefNannyDeclarations
44188   __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
44189   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_2__set__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)__pyx_v_self), ((PyObject *)__pyx_v_value));
44190 
44191   /* function exit code */
44192   __Pyx_RefNannyFinishContext();
44193   return __pyx_r;
44194 }
44195 
44196 static int __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_2__set__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self, PyObject *__pyx_v_value) {
44197   int __pyx_r;
44198   __Pyx_RefNannyDeclarations
44199   PyObject *__pyx_t_1 = NULL;
44200   __Pyx_RefNannySetupContext("__set__", 0);
44201   if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject))))) __PYX_ERR(4, 79, __pyx_L1_error)
44202   __pyx_t_1 = __pyx_v_value;
44203   __Pyx_INCREF(__pyx_t_1);
44204   __Pyx_GIVEREF(__pyx_t_1);
44205   __Pyx_GOTREF(__pyx_v_self->sel2);
44206   __Pyx_DECREF(((PyObject *)__pyx_v_self->sel2));
44207   __pyx_v_self->sel2 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_1);
44208   __pyx_t_1 = 0;
44209 
44210   /* function exit code */
44211   __pyx_r = 0;
44212   goto __pyx_L0;
44213   __pyx_L1_error:;
44214   __Pyx_XDECREF(__pyx_t_1);
44215   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanSelector.sel2.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
44216   __pyx_r = -1;
44217   __pyx_L0:;
44218   __Pyx_RefNannyFinishContext();
44219   return __pyx_r;
44220 }
44221 
44222 /* Python wrapper */
44223 static int __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_5__del__(PyObject *__pyx_v_self); /*proto*/
44224 static int __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_5__del__(PyObject *__pyx_v_self) {
44225   int __pyx_r;
44226   __Pyx_RefNannyDeclarations
44227   __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
44228   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_4__del__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)__pyx_v_self));
44229 
44230   /* function exit code */
44231   __Pyx_RefNannyFinishContext();
44232   return __pyx_r;
44233 }
44234 
44235 static int __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_4__del__(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self) {
44236   int __pyx_r;
44237   __Pyx_RefNannyDeclarations
44238   __Pyx_RefNannySetupContext("__del__", 0);
44239   __Pyx_INCREF(Py_None);
44240   __Pyx_GIVEREF(Py_None);
44241   __Pyx_GOTREF(__pyx_v_self->sel2);
44242   __Pyx_DECREF(((PyObject *)__pyx_v_self->sel2));
44243   __pyx_v_self->sel2 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None);
44244 
44245   /* function exit code */
44246   __pyx_r = 0;
44247   __Pyx_RefNannyFinishContext();
44248   return __pyx_r;
44249 }
44250 
44251 /* "(tree fragment)":1
44252  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
44253  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
44254  * def __setstate_cython__(self, __pyx_state):
44255  */
44256 
44257 /* Python wrapper */
44258 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
44259 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
44260   PyObject *__pyx_r = 0;
44261   __Pyx_RefNannyDeclarations
44262   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
44263   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_2__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)__pyx_v_self));
44264 
44265   /* function exit code */
44266   __Pyx_RefNannyFinishContext();
44267   return __pyx_r;
44268 }
44269 
44270 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self) {
44271   PyObject *__pyx_r = NULL;
44272   __Pyx_RefNannyDeclarations
44273   PyObject *__pyx_t_1 = NULL;
44274   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
44275 
44276   /* "(tree fragment)":2
44277  * def __reduce_cython__(self):
44278  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
44279  * def __setstate_cython__(self, __pyx_state):
44280  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
44281  */
44282   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__56, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
44283   __Pyx_GOTREF(__pyx_t_1);
44284   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
44285   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
44286   __PYX_ERR(5, 2, __pyx_L1_error)
44287 
44288   /* "(tree fragment)":1
44289  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
44290  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
44291  * def __setstate_cython__(self, __pyx_state):
44292  */
44293 
44294   /* function exit code */
44295   __pyx_L1_error:;
44296   __Pyx_XDECREF(__pyx_t_1);
44297   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
44298   __pyx_r = NULL;
44299   __Pyx_XGIVEREF(__pyx_r);
44300   __Pyx_RefNannyFinishContext();
44301   return __pyx_r;
44302 }
44303 
44304 /* "(tree fragment)":3
44305  * def __reduce_cython__(self):
44306  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
44307  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
44308  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
44309  */
44310 
44311 /* Python wrapper */
44312 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
44313 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
44314   PyObject *__pyx_r = 0;
44315   __Pyx_RefNannyDeclarations
44316   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
44317   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
44318 
44319   /* function exit code */
44320   __Pyx_RefNannyFinishContext();
44321   return __pyx_r;
44322 }
44323 
44324 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_15BooleanSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
44325   PyObject *__pyx_r = NULL;
44326   __Pyx_RefNannyDeclarations
44327   PyObject *__pyx_t_1 = NULL;
44328   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
44329 
44330   /* "(tree fragment)":4
44331  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
44332  * def __setstate_cython__(self, __pyx_state):
44333  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
44334  */
44335   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__57, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
44336   __Pyx_GOTREF(__pyx_t_1);
44337   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
44338   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
44339   __PYX_ERR(5, 4, __pyx_L1_error)
44340 
44341   /* "(tree fragment)":3
44342  * def __reduce_cython__(self):
44343  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
44344  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
44345  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
44346  */
44347 
44348   /* function exit code */
44349   __pyx_L1_error:;
44350   __Pyx_XDECREF(__pyx_t_1);
44351   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
44352   __pyx_r = NULL;
44353   __Pyx_XGIVEREF(__pyx_r);
44354   __Pyx_RefNannyFinishContext();
44355   return __pyx_r;
44356 }
44357 
44358 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":17
44359  *
44360  * cdef class BooleanANDSelector(BooleanSelector):
44361  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
44362  *                                np.float64_t right_edge[3]) nogil:
44363  *         cdef int rv1 = self.sel1.select_bbox(left_edge, right_edge)
44364  */
44365 
44366 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
44367   int __pyx_v_rv1;
44368   int __pyx_v_rv2;
44369   int __pyx_r;
44370   int __pyx_t_1;
44371 
44372   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":19
44373  *     cdef int select_bbox(self, np.float64_t left_edge[3],
44374  *                                np.float64_t right_edge[3]) nogil:
44375  *         cdef int rv1 = self.sel1.select_bbox(left_edge, right_edge)             # <<<<<<<<<<<<<<
44376  *         if rv1 == 0: return 0
44377  *         cdef int rv2 = self.sel2.select_bbox(left_edge, right_edge)
44378  */
44379   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_bbox(__pyx_v_self->__pyx_base.sel1, __pyx_v_left_edge, __pyx_v_right_edge);
44380 
44381   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":20
44382  *                                np.float64_t right_edge[3]) nogil:
44383  *         cdef int rv1 = self.sel1.select_bbox(left_edge, right_edge)
44384  *         if rv1 == 0: return 0             # <<<<<<<<<<<<<<
44385  *         cdef int rv2 = self.sel2.select_bbox(left_edge, right_edge)
44386  *         if rv2 == 0: return 0
44387  */
44388   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
44389   if (__pyx_t_1) {
44390     __pyx_r = 0;
44391     goto __pyx_L0;
44392   }
44393 
44394   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":21
44395  *         cdef int rv1 = self.sel1.select_bbox(left_edge, right_edge)
44396  *         if rv1 == 0: return 0
44397  *         cdef int rv2 = self.sel2.select_bbox(left_edge, right_edge)             # <<<<<<<<<<<<<<
44398  *         if rv2 == 0: return 0
44399  *         return 1
44400  */
44401   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_bbox(__pyx_v_self->__pyx_base.sel2, __pyx_v_left_edge, __pyx_v_right_edge);
44402 
44403   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":22
44404  *         if rv1 == 0: return 0
44405  *         cdef int rv2 = self.sel2.select_bbox(left_edge, right_edge)
44406  *         if rv2 == 0: return 0             # <<<<<<<<<<<<<<
44407  *         return 1
44408  *
44409  */
44410   __pyx_t_1 = ((__pyx_v_rv2 == 0) != 0);
44411   if (__pyx_t_1) {
44412     __pyx_r = 0;
44413     goto __pyx_L0;
44414   }
44415 
44416   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":23
44417  *         cdef int rv2 = self.sel2.select_bbox(left_edge, right_edge)
44418  *         if rv2 == 0: return 0
44419  *         return 1             # <<<<<<<<<<<<<<
44420  *
44421  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
44422  */
44423   __pyx_r = 1;
44424   goto __pyx_L0;
44425 
44426   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":17
44427  *
44428  * cdef class BooleanANDSelector(BooleanSelector):
44429  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
44430  *                                np.float64_t right_edge[3]) nogil:
44431  *         cdef int rv1 = self.sel1.select_bbox(left_edge, right_edge)
44432  */
44433 
44434   /* function exit code */
44435   __pyx_L0:;
44436   return __pyx_r;
44437 }
44438 
44439 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":25
44440  *         return 1
44441  *
44442  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
44443  *                               np.float64_t right_edge[3]) nogil:
44444  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
44445  */
44446 
44447 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
44448   int __pyx_v_rv1;
44449   int __pyx_v_rv2;
44450   int __pyx_r;
44451   int __pyx_t_1;
44452   int __pyx_t_2;
44453   int __pyx_t_3;
44454   int __pyx_t_4;
44455 
44456   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":27
44457  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
44458  *                               np.float64_t right_edge[3]) nogil:
44459  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)             # <<<<<<<<<<<<<<
44460  *         if rv1 == 0: return 0
44461  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
44462  */
44463   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_bbox_edge(__pyx_v_self->__pyx_base.sel1, __pyx_v_left_edge, __pyx_v_right_edge);
44464 
44465   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":28
44466  *                               np.float64_t right_edge[3]) nogil:
44467  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
44468  *         if rv1 == 0: return 0             # <<<<<<<<<<<<<<
44469  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
44470  *         if rv2 == 0: return 0
44471  */
44472   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
44473   if (__pyx_t_1) {
44474     __pyx_r = 0;
44475     goto __pyx_L0;
44476   }
44477 
44478   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":29
44479  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
44480  *         if rv1 == 0: return 0
44481  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)             # <<<<<<<<<<<<<<
44482  *         if rv2 == 0: return 0
44483  *         return max(rv1, rv2)
44484  */
44485   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_bbox_edge(__pyx_v_self->__pyx_base.sel2, __pyx_v_left_edge, __pyx_v_right_edge);
44486 
44487   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":30
44488  *         if rv1 == 0: return 0
44489  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
44490  *         if rv2 == 0: return 0             # <<<<<<<<<<<<<<
44491  *         return max(rv1, rv2)
44492  *
44493  */
44494   __pyx_t_1 = ((__pyx_v_rv2 == 0) != 0);
44495   if (__pyx_t_1) {
44496     __pyx_r = 0;
44497     goto __pyx_L0;
44498   }
44499 
44500   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":31
44501  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
44502  *         if rv2 == 0: return 0
44503  *         return max(rv1, rv2)             # <<<<<<<<<<<<<<
44504  *
44505  *     cdef int select_grid(self, np.float64_t left_edge[3],
44506  */
44507   __pyx_t_2 = __pyx_v_rv2;
44508   __pyx_t_3 = __pyx_v_rv1;
44509   if (((__pyx_t_2 > __pyx_t_3) != 0)) {
44510     __pyx_t_4 = __pyx_t_2;
44511   } else {
44512     __pyx_t_4 = __pyx_t_3;
44513   }
44514   __pyx_r = __pyx_t_4;
44515   goto __pyx_L0;
44516 
44517   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":25
44518  *         return 1
44519  *
44520  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
44521  *                               np.float64_t right_edge[3]) nogil:
44522  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
44523  */
44524 
44525   /* function exit code */
44526   __pyx_L0:;
44527   return __pyx_r;
44528 }
44529 
44530 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":33
44531  *         return max(rv1, rv2)
44532  *
44533  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
44534  *                          np.float64_t right_edge[3], np.int32_t level,
44535  *                          Oct *o = NULL) nogil:
44536  */
44537 
44538 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_grid *__pyx_optional_args) {
44539 
44540   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":35
44541  *     cdef int select_grid(self, np.float64_t left_edge[3],
44542  *                          np.float64_t right_edge[3], np.int32_t level,
44543  *                          Oct *o = NULL) nogil:             # <<<<<<<<<<<<<<
44544  *         cdef int rv1 = self.sel1.select_grid(left_edge, right_edge, level, o)
44545  *         if rv1 == 0: return 0
44546  */
44547   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_o = ((struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *)NULL);
44548   int __pyx_v_rv1;
44549   int __pyx_v_rv2;
44550   int __pyx_r;
44551   int __pyx_t_1;
44552   struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid __pyx_t_2;
44553   int __pyx_t_3;
44554   if (__pyx_optional_args) {
44555     if (__pyx_optional_args->__pyx_n > 0) {
44556       __pyx_v_o = __pyx_optional_args->o;
44557     }
44558   }
44559 
44560   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":36
44561  *                          np.float64_t right_edge[3], np.int32_t level,
44562  *                          Oct *o = NULL) nogil:
44563  *         cdef int rv1 = self.sel1.select_grid(left_edge, right_edge, level, o)             # <<<<<<<<<<<<<<
44564  *         if rv1 == 0: return 0
44565  *         cdef int rv2 = self.sel2.select_grid(left_edge, right_edge, level, o)
44566  */
44567   __pyx_t_2.__pyx_n = 1;
44568   __pyx_t_2.o = __pyx_v_o;
44569   __pyx_t_1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_grid(__pyx_v_self->__pyx_base.sel1, __pyx_v_left_edge, __pyx_v_right_edge, __pyx_v_level, &__pyx_t_2);
44570   __pyx_v_rv1 = __pyx_t_1;
44571 
44572   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":37
44573  *                          Oct *o = NULL) nogil:
44574  *         cdef int rv1 = self.sel1.select_grid(left_edge, right_edge, level, o)
44575  *         if rv1 == 0: return 0             # <<<<<<<<<<<<<<
44576  *         cdef int rv2 = self.sel2.select_grid(left_edge, right_edge, level, o)
44577  *         if rv2 == 0: return 0
44578  */
44579   __pyx_t_3 = ((__pyx_v_rv1 == 0) != 0);
44580   if (__pyx_t_3) {
44581     __pyx_r = 0;
44582     goto __pyx_L0;
44583   }
44584 
44585   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":38
44586  *         cdef int rv1 = self.sel1.select_grid(left_edge, right_edge, level, o)
44587  *         if rv1 == 0: return 0
44588  *         cdef int rv2 = self.sel2.select_grid(left_edge, right_edge, level, o)             # <<<<<<<<<<<<<<
44589  *         if rv2 == 0: return 0
44590  *         return 1
44591  */
44592   __pyx_t_2.__pyx_n = 1;
44593   __pyx_t_2.o = __pyx_v_o;
44594   __pyx_t_1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_grid(__pyx_v_self->__pyx_base.sel2, __pyx_v_left_edge, __pyx_v_right_edge, __pyx_v_level, &__pyx_t_2);
44595   __pyx_v_rv2 = __pyx_t_1;
44596 
44597   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":39
44598  *         if rv1 == 0: return 0
44599  *         cdef int rv2 = self.sel2.select_grid(left_edge, right_edge, level, o)
44600  *         if rv2 == 0: return 0             # <<<<<<<<<<<<<<
44601  *         return 1
44602  *
44603  */
44604   __pyx_t_3 = ((__pyx_v_rv2 == 0) != 0);
44605   if (__pyx_t_3) {
44606     __pyx_r = 0;
44607     goto __pyx_L0;
44608   }
44609 
44610   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":40
44611  *         cdef int rv2 = self.sel2.select_grid(left_edge, right_edge, level, o)
44612  *         if rv2 == 0: return 0
44613  *         return 1             # <<<<<<<<<<<<<<
44614  *
44615  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
44616  */
44617   __pyx_r = 1;
44618   goto __pyx_L0;
44619 
44620   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":33
44621  *         return max(rv1, rv2)
44622  *
44623  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
44624  *                          np.float64_t right_edge[3], np.int32_t level,
44625  *                          Oct *o = NULL) nogil:
44626  */
44627 
44628   /* function exit code */
44629   __pyx_L0:;
44630   return __pyx_r;
44631 }
44632 
44633 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":42
44634  *         return 1
44635  *
44636  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
44637  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
44638  *         if rv1 == 0: return 0
44639  */
44640 
44641 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
44642   int __pyx_v_rv1;
44643   int __pyx_v_rv2;
44644   int __pyx_r;
44645   int __pyx_t_1;
44646 
44647   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":43
44648  *
44649  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
44650  *         cdef int rv1 = self.sel1.select_cell(pos, dds)             # <<<<<<<<<<<<<<
44651  *         if rv1 == 0: return 0
44652  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
44653  */
44654   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_cell(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos, __pyx_v_dds);
44655 
44656   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":44
44657  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
44658  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
44659  *         if rv1 == 0: return 0             # <<<<<<<<<<<<<<
44660  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
44661  *         if rv2 == 0: return 0
44662  */
44663   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
44664   if (__pyx_t_1) {
44665     __pyx_r = 0;
44666     goto __pyx_L0;
44667   }
44668 
44669   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":45
44670  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
44671  *         if rv1 == 0: return 0
44672  *         cdef int rv2 = self.sel2.select_cell(pos, dds)             # <<<<<<<<<<<<<<
44673  *         if rv2 == 0: return 0
44674  *         return 1
44675  */
44676   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_cell(__pyx_v_self->__pyx_base.sel2, __pyx_v_pos, __pyx_v_dds);
44677 
44678   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":46
44679  *         if rv1 == 0: return 0
44680  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
44681  *         if rv2 == 0: return 0             # <<<<<<<<<<<<<<
44682  *         return 1
44683  *
44684  */
44685   __pyx_t_1 = ((__pyx_v_rv2 == 0) != 0);
44686   if (__pyx_t_1) {
44687     __pyx_r = 0;
44688     goto __pyx_L0;
44689   }
44690 
44691   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":47
44692  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
44693  *         if rv2 == 0: return 0
44694  *         return 1             # <<<<<<<<<<<<<<
44695  *
44696  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
44697  */
44698   __pyx_r = 1;
44699   goto __pyx_L0;
44700 
44701   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":42
44702  *         return 1
44703  *
44704  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
44705  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
44706  *         if rv1 == 0: return 0
44707  */
44708 
44709   /* function exit code */
44710   __pyx_L0:;
44711   return __pyx_r;
44712 }
44713 
44714 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":49
44715  *         return 1
44716  *
44717  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
44718  *         cdef int rv1 = self.sel1.select_point(pos)
44719  *         if rv1 == 0: return 0
44720  */
44721 
44722 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
44723   int __pyx_v_rv1;
44724   int __pyx_v_rv2;
44725   int __pyx_r;
44726   int __pyx_t_1;
44727 
44728   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":50
44729  *
44730  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
44731  *         cdef int rv1 = self.sel1.select_point(pos)             # <<<<<<<<<<<<<<
44732  *         if rv1 == 0: return 0
44733  *         cdef int rv2 = self.sel2.select_point(pos)
44734  */
44735   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_point(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos);
44736 
44737   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":51
44738  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
44739  *         cdef int rv1 = self.sel1.select_point(pos)
44740  *         if rv1 == 0: return 0             # <<<<<<<<<<<<<<
44741  *         cdef int rv2 = self.sel2.select_point(pos)
44742  *         if rv2 == 0: return 0
44743  */
44744   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
44745   if (__pyx_t_1) {
44746     __pyx_r = 0;
44747     goto __pyx_L0;
44748   }
44749 
44750   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":52
44751  *         cdef int rv1 = self.sel1.select_point(pos)
44752  *         if rv1 == 0: return 0
44753  *         cdef int rv2 = self.sel2.select_point(pos)             # <<<<<<<<<<<<<<
44754  *         if rv2 == 0: return 0
44755  *         return 1
44756  */
44757   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_point(__pyx_v_self->__pyx_base.sel2, __pyx_v_pos);
44758 
44759   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":53
44760  *         if rv1 == 0: return 0
44761  *         cdef int rv2 = self.sel2.select_point(pos)
44762  *         if rv2 == 0: return 0             # <<<<<<<<<<<<<<
44763  *         return 1
44764  *
44765  */
44766   __pyx_t_1 = ((__pyx_v_rv2 == 0) != 0);
44767   if (__pyx_t_1) {
44768     __pyx_r = 0;
44769     goto __pyx_L0;
44770   }
44771 
44772   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":54
44773  *         cdef int rv2 = self.sel2.select_point(pos)
44774  *         if rv2 == 0: return 0
44775  *         return 1             # <<<<<<<<<<<<<<
44776  *
44777  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
44778  */
44779   __pyx_r = 1;
44780   goto __pyx_L0;
44781 
44782   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":49
44783  *         return 1
44784  *
44785  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
44786  *         cdef int rv1 = self.sel1.select_point(pos)
44787  *         if rv1 == 0: return 0
44788  */
44789 
44790   /* function exit code */
44791   __pyx_L0:;
44792   return __pyx_r;
44793 }
44794 
44795 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":56
44796  *         return 1
44797  *
44798  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
44799  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
44800  *         if rv1 == 0: return 0
44801  */
44802 
44803 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
44804   int __pyx_v_rv1;
44805   int __pyx_v_rv2;
44806   int __pyx_r;
44807   int __pyx_t_1;
44808 
44809   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":57
44810  *
44811  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
44812  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
44813  *         if rv1 == 0: return 0
44814  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
44815  */
44816   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_sphere(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos, __pyx_v_radius);
44817 
44818   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":58
44819  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
44820  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
44821  *         if rv1 == 0: return 0             # <<<<<<<<<<<<<<
44822  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
44823  *         if rv2 == 0: return 0
44824  */
44825   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
44826   if (__pyx_t_1) {
44827     __pyx_r = 0;
44828     goto __pyx_L0;
44829   }
44830 
44831   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":59
44832  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
44833  *         if rv1 == 0: return 0
44834  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
44835  *         if rv2 == 0: return 0
44836  *         return 1
44837  */
44838   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_sphere(__pyx_v_self->__pyx_base.sel2, __pyx_v_pos, __pyx_v_radius);
44839 
44840   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":60
44841  *         if rv1 == 0: return 0
44842  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
44843  *         if rv2 == 0: return 0             # <<<<<<<<<<<<<<
44844  *         return 1
44845  *
44846  */
44847   __pyx_t_1 = ((__pyx_v_rv2 == 0) != 0);
44848   if (__pyx_t_1) {
44849     __pyx_r = 0;
44850     goto __pyx_L0;
44851   }
44852 
44853   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":61
44854  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
44855  *         if rv2 == 0: return 0
44856  *         return 1             # <<<<<<<<<<<<<<
44857  *
44858  *     def _hash_vals(self):
44859  */
44860   __pyx_r = 1;
44861   goto __pyx_L0;
44862 
44863   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":56
44864  *         return 1
44865  *
44866  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
44867  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
44868  *         if rv1 == 0: return 0
44869  */
44870 
44871   /* function exit code */
44872   __pyx_L0:;
44873   return __pyx_r;
44874 }
44875 
44876 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":63
44877  *         return 1
44878  *
44879  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
44880  *         return (self.sel1._hash_vals() +
44881  *                 ("and",) +
44882  */
44883 
44884 /* Python wrapper */
44885 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanANDSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
44886 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanANDSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
44887   PyObject *__pyx_r = 0;
44888   __Pyx_RefNannyDeclarations
44889   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
44890   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_18BooleanANDSelector__hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *)__pyx_v_self));
44891 
44892   /* function exit code */
44893   __Pyx_RefNannyFinishContext();
44894   return __pyx_r;
44895 }
44896 
44897 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanANDSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self) {
44898   PyObject *__pyx_r = NULL;
44899   __Pyx_RefNannyDeclarations
44900   PyObject *__pyx_t_1 = NULL;
44901   PyObject *__pyx_t_2 = NULL;
44902   PyObject *__pyx_t_3 = NULL;
44903   PyObject *__pyx_t_4 = NULL;
44904   __Pyx_RefNannySetupContext("_hash_vals", 0);
44905 
44906   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":64
44907  *
44908  *     def _hash_vals(self):
44909  *         return (self.sel1._hash_vals() +             # <<<<<<<<<<<<<<
44910  *                 ("and",) +
44911  *                 self.sel2._hash_vals())
44912  */
44913   __Pyx_XDECREF(__pyx_r);
44914   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.sel1), __pyx_n_s_hash_vals); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 64, __pyx_L1_error)
44915   __Pyx_GOTREF(__pyx_t_2);
44916   __pyx_t_3 = NULL;
44917   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
44918     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
44919     if (likely(__pyx_t_3)) {
44920       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
44921       __Pyx_INCREF(__pyx_t_3);
44922       __Pyx_INCREF(function);
44923       __Pyx_DECREF_SET(__pyx_t_2, function);
44924     }
44925   }
44926   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
44927   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
44928   if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 64, __pyx_L1_error)
44929   __Pyx_GOTREF(__pyx_t_1);
44930   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
44931 
44932   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":65
44933  *     def _hash_vals(self):
44934  *         return (self.sel1._hash_vals() +
44935  *                 ("and",) +             # <<<<<<<<<<<<<<
44936  *                 self.sel2._hash_vals())
44937  *
44938  */
44939   __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_tuple__58); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 64, __pyx_L1_error)
44940   __Pyx_GOTREF(__pyx_t_2);
44941   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
44942 
44943   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":66
44944  *         return (self.sel1._hash_vals() +
44945  *                 ("and",) +
44946  *                 self.sel2._hash_vals())             # <<<<<<<<<<<<<<
44947  *
44948  * cdef class BooleanORSelector(BooleanSelector):
44949  */
44950   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.sel2), __pyx_n_s_hash_vals); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 66, __pyx_L1_error)
44951   __Pyx_GOTREF(__pyx_t_3);
44952   __pyx_t_4 = NULL;
44953   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
44954     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
44955     if (likely(__pyx_t_4)) {
44956       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
44957       __Pyx_INCREF(__pyx_t_4);
44958       __Pyx_INCREF(function);
44959       __Pyx_DECREF_SET(__pyx_t_3, function);
44960     }
44961   }
44962   __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
44963   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
44964   if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 66, __pyx_L1_error)
44965   __Pyx_GOTREF(__pyx_t_1);
44966   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
44967 
44968   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":65
44969  *     def _hash_vals(self):
44970  *         return (self.sel1._hash_vals() +
44971  *                 ("and",) +             # <<<<<<<<<<<<<<
44972  *                 self.sel2._hash_vals())
44973  *
44974  */
44975   __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 65, __pyx_L1_error)
44976   __Pyx_GOTREF(__pyx_t_3);
44977   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
44978   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
44979   __pyx_r = __pyx_t_3;
44980   __pyx_t_3 = 0;
44981   goto __pyx_L0;
44982 
44983   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":63
44984  *         return 1
44985  *
44986  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
44987  *         return (self.sel1._hash_vals() +
44988  *                 ("and",) +
44989  */
44990 
44991   /* function exit code */
44992   __pyx_L1_error:;
44993   __Pyx_XDECREF(__pyx_t_1);
44994   __Pyx_XDECREF(__pyx_t_2);
44995   __Pyx_XDECREF(__pyx_t_3);
44996   __Pyx_XDECREF(__pyx_t_4);
44997   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanANDSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
44998   __pyx_r = NULL;
44999   __pyx_L0:;
45000   __Pyx_XGIVEREF(__pyx_r);
45001   __Pyx_RefNannyFinishContext();
45002   return __pyx_r;
45003 }
45004 
45005 /* "(tree fragment)":1
45006  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
45007  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45008  * def __setstate_cython__(self, __pyx_state):
45009  */
45010 
45011 /* Python wrapper */
45012 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanANDSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
45013 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanANDSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
45014   PyObject *__pyx_r = 0;
45015   __Pyx_RefNannyDeclarations
45016   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
45017   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_18BooleanANDSelector_2__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *)__pyx_v_self));
45018 
45019   /* function exit code */
45020   __Pyx_RefNannyFinishContext();
45021   return __pyx_r;
45022 }
45023 
45024 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanANDSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self) {
45025   PyObject *__pyx_r = NULL;
45026   __Pyx_RefNannyDeclarations
45027   PyObject *__pyx_t_1 = NULL;
45028   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
45029 
45030   /* "(tree fragment)":2
45031  * def __reduce_cython__(self):
45032  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
45033  * def __setstate_cython__(self, __pyx_state):
45034  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45035  */
45036   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__59, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
45037   __Pyx_GOTREF(__pyx_t_1);
45038   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
45039   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
45040   __PYX_ERR(5, 2, __pyx_L1_error)
45041 
45042   /* "(tree fragment)":1
45043  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
45044  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45045  * def __setstate_cython__(self, __pyx_state):
45046  */
45047 
45048   /* function exit code */
45049   __pyx_L1_error:;
45050   __Pyx_XDECREF(__pyx_t_1);
45051   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanANDSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
45052   __pyx_r = NULL;
45053   __Pyx_XGIVEREF(__pyx_r);
45054   __Pyx_RefNannyFinishContext();
45055   return __pyx_r;
45056 }
45057 
45058 /* "(tree fragment)":3
45059  * def __reduce_cython__(self):
45060  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45061  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
45062  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45063  */
45064 
45065 /* Python wrapper */
45066 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanANDSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
45067 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanANDSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
45068   PyObject *__pyx_r = 0;
45069   __Pyx_RefNannyDeclarations
45070   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
45071   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_18BooleanANDSelector_4__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
45072 
45073   /* function exit code */
45074   __Pyx_RefNannyFinishContext();
45075   return __pyx_r;
45076 }
45077 
45078 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanANDSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
45079   PyObject *__pyx_r = NULL;
45080   __Pyx_RefNannyDeclarations
45081   PyObject *__pyx_t_1 = NULL;
45082   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
45083 
45084   /* "(tree fragment)":4
45085  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45086  * def __setstate_cython__(self, __pyx_state):
45087  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
45088  */
45089   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__60, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
45090   __Pyx_GOTREF(__pyx_t_1);
45091   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
45092   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
45093   __PYX_ERR(5, 4, __pyx_L1_error)
45094 
45095   /* "(tree fragment)":3
45096  * def __reduce_cython__(self):
45097  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45098  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
45099  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45100  */
45101 
45102   /* function exit code */
45103   __pyx_L1_error:;
45104   __Pyx_XDECREF(__pyx_t_1);
45105   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanANDSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
45106   __pyx_r = NULL;
45107   __Pyx_XGIVEREF(__pyx_r);
45108   __Pyx_RefNannyFinishContext();
45109   return __pyx_r;
45110 }
45111 
45112 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":69
45113  *
45114  * cdef class BooleanORSelector(BooleanSelector):
45115  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
45116  *                                np.float64_t right_edge[3]) nogil:
45117  *         cdef int rv1 = self.sel1.select_bbox(left_edge, right_edge)
45118  */
45119 
45120 static int __pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
45121   int __pyx_v_rv1;
45122   int __pyx_v_rv2;
45123   int __pyx_r;
45124   int __pyx_t_1;
45125 
45126   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":71
45127  *     cdef int select_bbox(self, np.float64_t left_edge[3],
45128  *                                np.float64_t right_edge[3]) nogil:
45129  *         cdef int rv1 = self.sel1.select_bbox(left_edge, right_edge)             # <<<<<<<<<<<<<<
45130  *         if rv1 == 1: return 1
45131  *         cdef int rv2 = self.sel2.select_bbox(left_edge, right_edge)
45132  */
45133   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_bbox(__pyx_v_self->__pyx_base.sel1, __pyx_v_left_edge, __pyx_v_right_edge);
45134 
45135   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":72
45136  *                                np.float64_t right_edge[3]) nogil:
45137  *         cdef int rv1 = self.sel1.select_bbox(left_edge, right_edge)
45138  *         if rv1 == 1: return 1             # <<<<<<<<<<<<<<
45139  *         cdef int rv2 = self.sel2.select_bbox(left_edge, right_edge)
45140  *         if rv2 == 1: return 1
45141  */
45142   __pyx_t_1 = ((__pyx_v_rv1 == 1) != 0);
45143   if (__pyx_t_1) {
45144     __pyx_r = 1;
45145     goto __pyx_L0;
45146   }
45147 
45148   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":73
45149  *         cdef int rv1 = self.sel1.select_bbox(left_edge, right_edge)
45150  *         if rv1 == 1: return 1
45151  *         cdef int rv2 = self.sel2.select_bbox(left_edge, right_edge)             # <<<<<<<<<<<<<<
45152  *         if rv2 == 1: return 1
45153  *         return 0
45154  */
45155   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_bbox(__pyx_v_self->__pyx_base.sel2, __pyx_v_left_edge, __pyx_v_right_edge);
45156 
45157   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":74
45158  *         if rv1 == 1: return 1
45159  *         cdef int rv2 = self.sel2.select_bbox(left_edge, right_edge)
45160  *         if rv2 == 1: return 1             # <<<<<<<<<<<<<<
45161  *         return 0
45162  *
45163  */
45164   __pyx_t_1 = ((__pyx_v_rv2 == 1) != 0);
45165   if (__pyx_t_1) {
45166     __pyx_r = 1;
45167     goto __pyx_L0;
45168   }
45169 
45170   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":75
45171  *         cdef int rv2 = self.sel2.select_bbox(left_edge, right_edge)
45172  *         if rv2 == 1: return 1
45173  *         return 0             # <<<<<<<<<<<<<<
45174  *
45175  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
45176  */
45177   __pyx_r = 0;
45178   goto __pyx_L0;
45179 
45180   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":69
45181  *
45182  * cdef class BooleanORSelector(BooleanSelector):
45183  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
45184  *                                np.float64_t right_edge[3]) nogil:
45185  *         cdef int rv1 = self.sel1.select_bbox(left_edge, right_edge)
45186  */
45187 
45188   /* function exit code */
45189   __pyx_L0:;
45190   return __pyx_r;
45191 }
45192 
45193 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":77
45194  *         return 0
45195  *
45196  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
45197  *                               np.float64_t right_edge[3]) nogil:
45198  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
45199  */
45200 
45201 static int __pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
45202   int __pyx_v_rv1;
45203   int __pyx_v_rv2;
45204   int __pyx_r;
45205   int __pyx_t_1;
45206   int __pyx_t_2;
45207   int __pyx_t_3;
45208   int __pyx_t_4;
45209 
45210   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":79
45211  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
45212  *                               np.float64_t right_edge[3]) nogil:
45213  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)             # <<<<<<<<<<<<<<
45214  *         if rv1 == 1: return 1
45215  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
45216  */
45217   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_bbox_edge(__pyx_v_self->__pyx_base.sel1, __pyx_v_left_edge, __pyx_v_right_edge);
45218 
45219   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":80
45220  *                               np.float64_t right_edge[3]) nogil:
45221  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
45222  *         if rv1 == 1: return 1             # <<<<<<<<<<<<<<
45223  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
45224  *         if rv2 == 1: return 1
45225  */
45226   __pyx_t_1 = ((__pyx_v_rv1 == 1) != 0);
45227   if (__pyx_t_1) {
45228     __pyx_r = 1;
45229     goto __pyx_L0;
45230   }
45231 
45232   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":81
45233  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
45234  *         if rv1 == 1: return 1
45235  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)             # <<<<<<<<<<<<<<
45236  *         if rv2 == 1: return 1
45237  *         return max(rv1, rv2)
45238  */
45239   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_bbox_edge(__pyx_v_self->__pyx_base.sel2, __pyx_v_left_edge, __pyx_v_right_edge);
45240 
45241   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":82
45242  *         if rv1 == 1: return 1
45243  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
45244  *         if rv2 == 1: return 1             # <<<<<<<<<<<<<<
45245  *         return max(rv1, rv2)
45246  *
45247  */
45248   __pyx_t_1 = ((__pyx_v_rv2 == 1) != 0);
45249   if (__pyx_t_1) {
45250     __pyx_r = 1;
45251     goto __pyx_L0;
45252   }
45253 
45254   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":83
45255  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
45256  *         if rv2 == 1: return 1
45257  *         return max(rv1, rv2)             # <<<<<<<<<<<<<<
45258  *
45259  *     cdef int select_grid(self, np.float64_t left_edge[3],
45260  */
45261   __pyx_t_2 = __pyx_v_rv2;
45262   __pyx_t_3 = __pyx_v_rv1;
45263   if (((__pyx_t_2 > __pyx_t_3) != 0)) {
45264     __pyx_t_4 = __pyx_t_2;
45265   } else {
45266     __pyx_t_4 = __pyx_t_3;
45267   }
45268   __pyx_r = __pyx_t_4;
45269   goto __pyx_L0;
45270 
45271   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":77
45272  *         return 0
45273  *
45274  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
45275  *                               np.float64_t right_edge[3]) nogil:
45276  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
45277  */
45278 
45279   /* function exit code */
45280   __pyx_L0:;
45281   return __pyx_r;
45282 }
45283 
45284 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":85
45285  *         return max(rv1, rv2)
45286  *
45287  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
45288  *                          np.float64_t right_edge[3], np.int32_t level,
45289  *                          Oct *o = NULL) nogil:
45290  */
45291 
45292 static int __pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_17BooleanORSelector_select_grid *__pyx_optional_args) {
45293 
45294   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":87
45295  *     cdef int select_grid(self, np.float64_t left_edge[3],
45296  *                          np.float64_t right_edge[3], np.int32_t level,
45297  *                          Oct *o = NULL) nogil:             # <<<<<<<<<<<<<<
45298  *         cdef int rv1 = self.sel1.select_grid(left_edge, right_edge, level, o)
45299  *         if rv1 == 1: return 1
45300  */
45301   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_o = ((struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *)NULL);
45302   int __pyx_v_rv1;
45303   int __pyx_v_rv2;
45304   int __pyx_r;
45305   int __pyx_t_1;
45306   struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid __pyx_t_2;
45307   int __pyx_t_3;
45308   int __pyx_t_4;
45309   if (__pyx_optional_args) {
45310     if (__pyx_optional_args->__pyx_n > 0) {
45311       __pyx_v_o = __pyx_optional_args->o;
45312     }
45313   }
45314 
45315   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":88
45316  *                          np.float64_t right_edge[3], np.int32_t level,
45317  *                          Oct *o = NULL) nogil:
45318  *         cdef int rv1 = self.sel1.select_grid(left_edge, right_edge, level, o)             # <<<<<<<<<<<<<<
45319  *         if rv1 == 1: return 1
45320  *         cdef int rv2 = self.sel2.select_grid(left_edge, right_edge, level, o)
45321  */
45322   __pyx_t_2.__pyx_n = 1;
45323   __pyx_t_2.o = __pyx_v_o;
45324   __pyx_t_1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_grid(__pyx_v_self->__pyx_base.sel1, __pyx_v_left_edge, __pyx_v_right_edge, __pyx_v_level, &__pyx_t_2);
45325   __pyx_v_rv1 = __pyx_t_1;
45326 
45327   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":89
45328  *                          Oct *o = NULL) nogil:
45329  *         cdef int rv1 = self.sel1.select_grid(left_edge, right_edge, level, o)
45330  *         if rv1 == 1: return 1             # <<<<<<<<<<<<<<
45331  *         cdef int rv2 = self.sel2.select_grid(left_edge, right_edge, level, o)
45332  *         if rv2 == 1: return 1
45333  */
45334   __pyx_t_3 = ((__pyx_v_rv1 == 1) != 0);
45335   if (__pyx_t_3) {
45336     __pyx_r = 1;
45337     goto __pyx_L0;
45338   }
45339 
45340   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":90
45341  *         cdef int rv1 = self.sel1.select_grid(left_edge, right_edge, level, o)
45342  *         if rv1 == 1: return 1
45343  *         cdef int rv2 = self.sel2.select_grid(left_edge, right_edge, level, o)             # <<<<<<<<<<<<<<
45344  *         if rv2 == 1: return 1
45345  *         if (rv1 == 2) or (rv2 == 2): return 2
45346  */
45347   __pyx_t_2.__pyx_n = 1;
45348   __pyx_t_2.o = __pyx_v_o;
45349   __pyx_t_1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_grid(__pyx_v_self->__pyx_base.sel2, __pyx_v_left_edge, __pyx_v_right_edge, __pyx_v_level, &__pyx_t_2);
45350   __pyx_v_rv2 = __pyx_t_1;
45351 
45352   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":91
45353  *         if rv1 == 1: return 1
45354  *         cdef int rv2 = self.sel2.select_grid(left_edge, right_edge, level, o)
45355  *         if rv2 == 1: return 1             # <<<<<<<<<<<<<<
45356  *         if (rv1 == 2) or (rv2 == 2): return 2
45357  *         return 0
45358  */
45359   __pyx_t_3 = ((__pyx_v_rv2 == 1) != 0);
45360   if (__pyx_t_3) {
45361     __pyx_r = 1;
45362     goto __pyx_L0;
45363   }
45364 
45365   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":92
45366  *         cdef int rv2 = self.sel2.select_grid(left_edge, right_edge, level, o)
45367  *         if rv2 == 1: return 1
45368  *         if (rv1 == 2) or (rv2 == 2): return 2             # <<<<<<<<<<<<<<
45369  *         return 0
45370  *
45371  */
45372   __pyx_t_4 = ((__pyx_v_rv1 == 2) != 0);
45373   if (!__pyx_t_4) {
45374   } else {
45375     __pyx_t_3 = __pyx_t_4;
45376     goto __pyx_L6_bool_binop_done;
45377   }
45378   __pyx_t_4 = ((__pyx_v_rv2 == 2) != 0);
45379   __pyx_t_3 = __pyx_t_4;
45380   __pyx_L6_bool_binop_done:;
45381   if (__pyx_t_3) {
45382     __pyx_r = 2;
45383     goto __pyx_L0;
45384   }
45385 
45386   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":93
45387  *         if rv2 == 1: return 1
45388  *         if (rv1 == 2) or (rv2 == 2): return 2
45389  *         return 0             # <<<<<<<<<<<<<<
45390  *
45391  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
45392  */
45393   __pyx_r = 0;
45394   goto __pyx_L0;
45395 
45396   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":85
45397  *         return max(rv1, rv2)
45398  *
45399  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
45400  *                          np.float64_t right_edge[3], np.int32_t level,
45401  *                          Oct *o = NULL) nogil:
45402  */
45403 
45404   /* function exit code */
45405   __pyx_L0:;
45406   return __pyx_r;
45407 }
45408 
45409 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":95
45410  *         return 0
45411  *
45412  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
45413  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
45414  *         if rv1 == 1: return 1
45415  */
45416 
45417 static int __pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
45418   int __pyx_v_rv1;
45419   int __pyx_v_rv2;
45420   int __pyx_r;
45421   int __pyx_t_1;
45422 
45423   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":96
45424  *
45425  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
45426  *         cdef int rv1 = self.sel1.select_cell(pos, dds)             # <<<<<<<<<<<<<<
45427  *         if rv1 == 1: return 1
45428  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
45429  */
45430   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_cell(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos, __pyx_v_dds);
45431 
45432   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":97
45433  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
45434  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
45435  *         if rv1 == 1: return 1             # <<<<<<<<<<<<<<
45436  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
45437  *         if rv2 == 1: return 1
45438  */
45439   __pyx_t_1 = ((__pyx_v_rv1 == 1) != 0);
45440   if (__pyx_t_1) {
45441     __pyx_r = 1;
45442     goto __pyx_L0;
45443   }
45444 
45445   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":98
45446  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
45447  *         if rv1 == 1: return 1
45448  *         cdef int rv2 = self.sel2.select_cell(pos, dds)             # <<<<<<<<<<<<<<
45449  *         if rv2 == 1: return 1
45450  *         return 0
45451  */
45452   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_cell(__pyx_v_self->__pyx_base.sel2, __pyx_v_pos, __pyx_v_dds);
45453 
45454   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":99
45455  *         if rv1 == 1: return 1
45456  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
45457  *         if rv2 == 1: return 1             # <<<<<<<<<<<<<<
45458  *         return 0
45459  *
45460  */
45461   __pyx_t_1 = ((__pyx_v_rv2 == 1) != 0);
45462   if (__pyx_t_1) {
45463     __pyx_r = 1;
45464     goto __pyx_L0;
45465   }
45466 
45467   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":100
45468  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
45469  *         if rv2 == 1: return 1
45470  *         return 0             # <<<<<<<<<<<<<<
45471  *
45472  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
45473  */
45474   __pyx_r = 0;
45475   goto __pyx_L0;
45476 
45477   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":95
45478  *         return 0
45479  *
45480  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
45481  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
45482  *         if rv1 == 1: return 1
45483  */
45484 
45485   /* function exit code */
45486   __pyx_L0:;
45487   return __pyx_r;
45488 }
45489 
45490 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":102
45491  *         return 0
45492  *
45493  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
45494  *         cdef int rv1 = self.sel1.select_point(pos)
45495  *         if rv1 == 1: return 1
45496  */
45497 
45498 static int __pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
45499   int __pyx_v_rv1;
45500   int __pyx_v_rv2;
45501   int __pyx_r;
45502   int __pyx_t_1;
45503 
45504   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":103
45505  *
45506  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
45507  *         cdef int rv1 = self.sel1.select_point(pos)             # <<<<<<<<<<<<<<
45508  *         if rv1 == 1: return 1
45509  *         cdef int rv2 = self.sel2.select_point(pos)
45510  */
45511   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_point(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos);
45512 
45513   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":104
45514  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
45515  *         cdef int rv1 = self.sel1.select_point(pos)
45516  *         if rv1 == 1: return 1             # <<<<<<<<<<<<<<
45517  *         cdef int rv2 = self.sel2.select_point(pos)
45518  *         if rv2 == 1: return 1
45519  */
45520   __pyx_t_1 = ((__pyx_v_rv1 == 1) != 0);
45521   if (__pyx_t_1) {
45522     __pyx_r = 1;
45523     goto __pyx_L0;
45524   }
45525 
45526   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":105
45527  *         cdef int rv1 = self.sel1.select_point(pos)
45528  *         if rv1 == 1: return 1
45529  *         cdef int rv2 = self.sel2.select_point(pos)             # <<<<<<<<<<<<<<
45530  *         if rv2 == 1: return 1
45531  *         return 0
45532  */
45533   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_point(__pyx_v_self->__pyx_base.sel2, __pyx_v_pos);
45534 
45535   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":106
45536  *         if rv1 == 1: return 1
45537  *         cdef int rv2 = self.sel2.select_point(pos)
45538  *         if rv2 == 1: return 1             # <<<<<<<<<<<<<<
45539  *         return 0
45540  *
45541  */
45542   __pyx_t_1 = ((__pyx_v_rv2 == 1) != 0);
45543   if (__pyx_t_1) {
45544     __pyx_r = 1;
45545     goto __pyx_L0;
45546   }
45547 
45548   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":107
45549  *         cdef int rv2 = self.sel2.select_point(pos)
45550  *         if rv2 == 1: return 1
45551  *         return 0             # <<<<<<<<<<<<<<
45552  *
45553  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
45554  */
45555   __pyx_r = 0;
45556   goto __pyx_L0;
45557 
45558   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":102
45559  *         return 0
45560  *
45561  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
45562  *         cdef int rv1 = self.sel1.select_point(pos)
45563  *         if rv1 == 1: return 1
45564  */
45565 
45566   /* function exit code */
45567   __pyx_L0:;
45568   return __pyx_r;
45569 }
45570 
45571 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":109
45572  *         return 0
45573  *
45574  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
45575  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
45576  *         if rv1 == 1: return 1
45577  */
45578 
45579 static int __pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
45580   int __pyx_v_rv1;
45581   int __pyx_v_rv2;
45582   int __pyx_r;
45583   int __pyx_t_1;
45584 
45585   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":110
45586  *
45587  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
45588  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
45589  *         if rv1 == 1: return 1
45590  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
45591  */
45592   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_sphere(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos, __pyx_v_radius);
45593 
45594   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":111
45595  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
45596  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
45597  *         if rv1 == 1: return 1             # <<<<<<<<<<<<<<
45598  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
45599  *         if rv2 == 1: return 1
45600  */
45601   __pyx_t_1 = ((__pyx_v_rv1 == 1) != 0);
45602   if (__pyx_t_1) {
45603     __pyx_r = 1;
45604     goto __pyx_L0;
45605   }
45606 
45607   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":112
45608  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
45609  *         if rv1 == 1: return 1
45610  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
45611  *         if rv2 == 1: return 1
45612  *         return 0
45613  */
45614   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_sphere(__pyx_v_self->__pyx_base.sel2, __pyx_v_pos, __pyx_v_radius);
45615 
45616   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":113
45617  *         if rv1 == 1: return 1
45618  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
45619  *         if rv2 == 1: return 1             # <<<<<<<<<<<<<<
45620  *         return 0
45621  *
45622  */
45623   __pyx_t_1 = ((__pyx_v_rv2 == 1) != 0);
45624   if (__pyx_t_1) {
45625     __pyx_r = 1;
45626     goto __pyx_L0;
45627   }
45628 
45629   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":114
45630  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
45631  *         if rv2 == 1: return 1
45632  *         return 0             # <<<<<<<<<<<<<<
45633  *
45634  *     def _hash_vals(self):
45635  */
45636   __pyx_r = 0;
45637   goto __pyx_L0;
45638 
45639   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":109
45640  *         return 0
45641  *
45642  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
45643  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
45644  *         if rv1 == 1: return 1
45645  */
45646 
45647   /* function exit code */
45648   __pyx_L0:;
45649   return __pyx_r;
45650 }
45651 
45652 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":116
45653  *         return 0
45654  *
45655  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
45656  *         return (self.sel1._hash_vals() +
45657  *                 ("or",) +
45658  */
45659 
45660 /* Python wrapper */
45661 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17BooleanORSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
45662 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17BooleanORSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
45663   PyObject *__pyx_r = 0;
45664   __Pyx_RefNannyDeclarations
45665   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
45666   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17BooleanORSelector__hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *)__pyx_v_self));
45667 
45668   /* function exit code */
45669   __Pyx_RefNannyFinishContext();
45670   return __pyx_r;
45671 }
45672 
45673 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17BooleanORSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self) {
45674   PyObject *__pyx_r = NULL;
45675   __Pyx_RefNannyDeclarations
45676   PyObject *__pyx_t_1 = NULL;
45677   PyObject *__pyx_t_2 = NULL;
45678   PyObject *__pyx_t_3 = NULL;
45679   PyObject *__pyx_t_4 = NULL;
45680   __Pyx_RefNannySetupContext("_hash_vals", 0);
45681 
45682   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":117
45683  *
45684  *     def _hash_vals(self):
45685  *         return (self.sel1._hash_vals() +             # <<<<<<<<<<<<<<
45686  *                 ("or",) +
45687  *                 self.sel2._hash_vals())
45688  */
45689   __Pyx_XDECREF(__pyx_r);
45690   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.sel1), __pyx_n_s_hash_vals); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 117, __pyx_L1_error)
45691   __Pyx_GOTREF(__pyx_t_2);
45692   __pyx_t_3 = NULL;
45693   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
45694     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
45695     if (likely(__pyx_t_3)) {
45696       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
45697       __Pyx_INCREF(__pyx_t_3);
45698       __Pyx_INCREF(function);
45699       __Pyx_DECREF_SET(__pyx_t_2, function);
45700     }
45701   }
45702   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
45703   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
45704   if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 117, __pyx_L1_error)
45705   __Pyx_GOTREF(__pyx_t_1);
45706   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
45707 
45708   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":118
45709  *     def _hash_vals(self):
45710  *         return (self.sel1._hash_vals() +
45711  *                 ("or",) +             # <<<<<<<<<<<<<<
45712  *                 self.sel2._hash_vals())
45713  *
45714  */
45715   __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_tuple__61); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 117, __pyx_L1_error)
45716   __Pyx_GOTREF(__pyx_t_2);
45717   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
45718 
45719   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":119
45720  *         return (self.sel1._hash_vals() +
45721  *                 ("or",) +
45722  *                 self.sel2._hash_vals())             # <<<<<<<<<<<<<<
45723  *
45724  * cdef class BooleanNOTSelector(BooleanSelector):
45725  */
45726   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.sel2), __pyx_n_s_hash_vals); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 119, __pyx_L1_error)
45727   __Pyx_GOTREF(__pyx_t_3);
45728   __pyx_t_4 = NULL;
45729   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
45730     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
45731     if (likely(__pyx_t_4)) {
45732       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
45733       __Pyx_INCREF(__pyx_t_4);
45734       __Pyx_INCREF(function);
45735       __Pyx_DECREF_SET(__pyx_t_3, function);
45736     }
45737   }
45738   __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
45739   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
45740   if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 119, __pyx_L1_error)
45741   __Pyx_GOTREF(__pyx_t_1);
45742   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
45743 
45744   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":118
45745  *     def _hash_vals(self):
45746  *         return (self.sel1._hash_vals() +
45747  *                 ("or",) +             # <<<<<<<<<<<<<<
45748  *                 self.sel2._hash_vals())
45749  *
45750  */
45751   __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 118, __pyx_L1_error)
45752   __Pyx_GOTREF(__pyx_t_3);
45753   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
45754   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
45755   __pyx_r = __pyx_t_3;
45756   __pyx_t_3 = 0;
45757   goto __pyx_L0;
45758 
45759   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":116
45760  *         return 0
45761  *
45762  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
45763  *         return (self.sel1._hash_vals() +
45764  *                 ("or",) +
45765  */
45766 
45767   /* function exit code */
45768   __pyx_L1_error:;
45769   __Pyx_XDECREF(__pyx_t_1);
45770   __Pyx_XDECREF(__pyx_t_2);
45771   __Pyx_XDECREF(__pyx_t_3);
45772   __Pyx_XDECREF(__pyx_t_4);
45773   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanORSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
45774   __pyx_r = NULL;
45775   __pyx_L0:;
45776   __Pyx_XGIVEREF(__pyx_r);
45777   __Pyx_RefNannyFinishContext();
45778   return __pyx_r;
45779 }
45780 
45781 /* "(tree fragment)":1
45782  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
45783  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45784  * def __setstate_cython__(self, __pyx_state):
45785  */
45786 
45787 /* Python wrapper */
45788 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17BooleanORSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
45789 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17BooleanORSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
45790   PyObject *__pyx_r = 0;
45791   __Pyx_RefNannyDeclarations
45792   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
45793   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17BooleanORSelector_2__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *)__pyx_v_self));
45794 
45795   /* function exit code */
45796   __Pyx_RefNannyFinishContext();
45797   return __pyx_r;
45798 }
45799 
45800 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17BooleanORSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self) {
45801   PyObject *__pyx_r = NULL;
45802   __Pyx_RefNannyDeclarations
45803   PyObject *__pyx_t_1 = NULL;
45804   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
45805 
45806   /* "(tree fragment)":2
45807  * def __reduce_cython__(self):
45808  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
45809  * def __setstate_cython__(self, __pyx_state):
45810  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45811  */
45812   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__62, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
45813   __Pyx_GOTREF(__pyx_t_1);
45814   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
45815   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
45816   __PYX_ERR(5, 2, __pyx_L1_error)
45817 
45818   /* "(tree fragment)":1
45819  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
45820  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45821  * def __setstate_cython__(self, __pyx_state):
45822  */
45823 
45824   /* function exit code */
45825   __pyx_L1_error:;
45826   __Pyx_XDECREF(__pyx_t_1);
45827   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanORSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
45828   __pyx_r = NULL;
45829   __Pyx_XGIVEREF(__pyx_r);
45830   __Pyx_RefNannyFinishContext();
45831   return __pyx_r;
45832 }
45833 
45834 /* "(tree fragment)":3
45835  * def __reduce_cython__(self):
45836  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45837  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
45838  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45839  */
45840 
45841 /* Python wrapper */
45842 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17BooleanORSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
45843 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_17BooleanORSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
45844   PyObject *__pyx_r = 0;
45845   __Pyx_RefNannyDeclarations
45846   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
45847   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_17BooleanORSelector_4__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
45848 
45849   /* function exit code */
45850   __Pyx_RefNannyFinishContext();
45851   return __pyx_r;
45852 }
45853 
45854 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_17BooleanORSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
45855   PyObject *__pyx_r = NULL;
45856   __Pyx_RefNannyDeclarations
45857   PyObject *__pyx_t_1 = NULL;
45858   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
45859 
45860   /* "(tree fragment)":4
45861  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45862  * def __setstate_cython__(self, __pyx_state):
45863  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
45864  */
45865   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__63, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
45866   __Pyx_GOTREF(__pyx_t_1);
45867   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
45868   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
45869   __PYX_ERR(5, 4, __pyx_L1_error)
45870 
45871   /* "(tree fragment)":3
45872  * def __reduce_cython__(self):
45873  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45874  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
45875  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
45876  */
45877 
45878   /* function exit code */
45879   __pyx_L1_error:;
45880   __Pyx_XDECREF(__pyx_t_1);
45881   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanORSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
45882   __pyx_r = NULL;
45883   __Pyx_XGIVEREF(__pyx_r);
45884   __Pyx_RefNannyFinishContext();
45885   return __pyx_r;
45886 }
45887 
45888 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":122
45889  *
45890  * cdef class BooleanNOTSelector(BooleanSelector):
45891  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
45892  *                                np.float64_t right_edge[3]) nogil:
45893  *         # We always return True here, because we don't have a "fully included"
45894  */
45895 
45896 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_bbox(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
45897   int __pyx_r;
45898 
45899   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":126
45900  *         # We always return True here, because we don't have a "fully included"
45901  *         # check anywhere else.
45902  *         return 1             # <<<<<<<<<<<<<<
45903  *
45904  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
45905  */
45906   __pyx_r = 1;
45907   goto __pyx_L0;
45908 
45909   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":122
45910  *
45911  * cdef class BooleanNOTSelector(BooleanSelector):
45912  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
45913  *                                np.float64_t right_edge[3]) nogil:
45914  *         # We always return True here, because we don't have a "fully included"
45915  */
45916 
45917   /* function exit code */
45918   __pyx_L0:;
45919   return __pyx_r;
45920 }
45921 
45922 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":128
45923  *         return 1
45924  *
45925  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
45926  *                               np.float64_t right_edge[3]) nogil:
45927  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
45928  */
45929 
45930 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
45931   int __pyx_v_rv1;
45932   int __pyx_r;
45933 
45934   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":130
45935  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
45936  *                               np.float64_t right_edge[3]) nogil:
45937  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)             # <<<<<<<<<<<<<<
45938  *         if rv1 == 0: return 1
45939  *         elif rv1 == 1: return 0
45940  */
45941   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_bbox_edge(__pyx_v_self->__pyx_base.sel1, __pyx_v_left_edge, __pyx_v_right_edge);
45942 
45943   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":131
45944  *                               np.float64_t right_edge[3]) nogil:
45945  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
45946  *         if rv1 == 0: return 1             # <<<<<<<<<<<<<<
45947  *         elif rv1 == 1: return 0
45948  *         return 2
45949  */
45950   switch (__pyx_v_rv1) {
45951     case 0:
45952     __pyx_r = 1;
45953     goto __pyx_L0;
45954     break;
45955     case 1:
45956 
45957     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":132
45958  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
45959  *         if rv1 == 0: return 1
45960  *         elif rv1 == 1: return 0             # <<<<<<<<<<<<<<
45961  *         return 2
45962  *
45963  */
45964     __pyx_r = 0;
45965     goto __pyx_L0;
45966     break;
45967     default: break;
45968   }
45969 
45970   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":133
45971  *         if rv1 == 0: return 1
45972  *         elif rv1 == 1: return 0
45973  *         return 2             # <<<<<<<<<<<<<<
45974  *
45975  *     cdef int select_grid(self, np.float64_t left_edge[3],
45976  */
45977   __pyx_r = 2;
45978   goto __pyx_L0;
45979 
45980   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":128
45981  *         return 1
45982  *
45983  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
45984  *                               np.float64_t right_edge[3]) nogil:
45985  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
45986  */
45987 
45988   /* function exit code */
45989   __pyx_L0:;
45990   return __pyx_r;
45991 }
45992 
45993 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":135
45994  *         return 2
45995  *
45996  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
45997  *                          np.float64_t right_edge[3], np.int32_t level,
45998  *                          Oct *o = NULL) nogil:
45999  */
46000 
46001 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_grid(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge, CYTHON_UNUSED __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_grid *__pyx_optional_args) {
46002   int __pyx_r;
46003   if (__pyx_optional_args) {
46004   }
46005 
46006   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":138
46007  *                          np.float64_t right_edge[3], np.int32_t level,
46008  *                          Oct *o = NULL) nogil:
46009  *         return 1             # <<<<<<<<<<<<<<
46010  *
46011  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
46012  */
46013   __pyx_r = 1;
46014   goto __pyx_L0;
46015 
46016   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":135
46017  *         return 2
46018  *
46019  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
46020  *                          np.float64_t right_edge[3], np.int32_t level,
46021  *                          Oct *o = NULL) nogil:
46022  */
46023 
46024   /* function exit code */
46025   __pyx_L0:;
46026   return __pyx_r;
46027 }
46028 
46029 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":140
46030  *         return 1
46031  *
46032  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
46033  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
46034  *         if rv1 == 0: return 1
46035  */
46036 
46037 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
46038   int __pyx_v_rv1;
46039   int __pyx_r;
46040   int __pyx_t_1;
46041 
46042   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":141
46043  *
46044  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
46045  *         cdef int rv1 = self.sel1.select_cell(pos, dds)             # <<<<<<<<<<<<<<
46046  *         if rv1 == 0: return 1
46047  *         return 0
46048  */
46049   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_cell(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos, __pyx_v_dds);
46050 
46051   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":142
46052  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
46053  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
46054  *         if rv1 == 0: return 1             # <<<<<<<<<<<<<<
46055  *         return 0
46056  *
46057  */
46058   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
46059   if (__pyx_t_1) {
46060     __pyx_r = 1;
46061     goto __pyx_L0;
46062   }
46063 
46064   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":143
46065  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
46066  *         if rv1 == 0: return 1
46067  *         return 0             # <<<<<<<<<<<<<<
46068  *
46069  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
46070  */
46071   __pyx_r = 0;
46072   goto __pyx_L0;
46073 
46074   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":140
46075  *         return 1
46076  *
46077  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
46078  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
46079  *         if rv1 == 0: return 1
46080  */
46081 
46082   /* function exit code */
46083   __pyx_L0:;
46084   return __pyx_r;
46085 }
46086 
46087 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":145
46088  *         return 0
46089  *
46090  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
46091  *         cdef int rv1 = self.sel1.select_point(pos)
46092  *         if rv1 == 0: return 1
46093  */
46094 
46095 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
46096   int __pyx_v_rv1;
46097   int __pyx_r;
46098   int __pyx_t_1;
46099 
46100   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":146
46101  *
46102  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
46103  *         cdef int rv1 = self.sel1.select_point(pos)             # <<<<<<<<<<<<<<
46104  *         if rv1 == 0: return 1
46105  *         return 0
46106  */
46107   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_point(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos);
46108 
46109   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":147
46110  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
46111  *         cdef int rv1 = self.sel1.select_point(pos)
46112  *         if rv1 == 0: return 1             # <<<<<<<<<<<<<<
46113  *         return 0
46114  *
46115  */
46116   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
46117   if (__pyx_t_1) {
46118     __pyx_r = 1;
46119     goto __pyx_L0;
46120   }
46121 
46122   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":148
46123  *         cdef int rv1 = self.sel1.select_point(pos)
46124  *         if rv1 == 0: return 1
46125  *         return 0             # <<<<<<<<<<<<<<
46126  *
46127  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
46128  */
46129   __pyx_r = 0;
46130   goto __pyx_L0;
46131 
46132   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":145
46133  *         return 0
46134  *
46135  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
46136  *         cdef int rv1 = self.sel1.select_point(pos)
46137  *         if rv1 == 0: return 1
46138  */
46139 
46140   /* function exit code */
46141   __pyx_L0:;
46142   return __pyx_r;
46143 }
46144 
46145 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":150
46146  *         return 0
46147  *
46148  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
46149  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
46150  *         if rv1 == 0: return 1
46151  */
46152 
46153 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
46154   int __pyx_v_rv1;
46155   int __pyx_r;
46156   int __pyx_t_1;
46157 
46158   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":151
46159  *
46160  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
46161  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
46162  *         if rv1 == 0: return 1
46163  *         return 0
46164  */
46165   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_sphere(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos, __pyx_v_radius);
46166 
46167   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":152
46168  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
46169  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
46170  *         if rv1 == 0: return 1             # <<<<<<<<<<<<<<
46171  *         return 0
46172  *
46173  */
46174   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
46175   if (__pyx_t_1) {
46176     __pyx_r = 1;
46177     goto __pyx_L0;
46178   }
46179 
46180   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":153
46181  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
46182  *         if rv1 == 0: return 1
46183  *         return 0             # <<<<<<<<<<<<<<
46184  *
46185  *     def _hash_vals(self):
46186  */
46187   __pyx_r = 0;
46188   goto __pyx_L0;
46189 
46190   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":150
46191  *         return 0
46192  *
46193  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
46194  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
46195  *         if rv1 == 0: return 1
46196  */
46197 
46198   /* function exit code */
46199   __pyx_L0:;
46200   return __pyx_r;
46201 }
46202 
46203 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":155
46204  *         return 0
46205  *
46206  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
46207  *         return (self.sel1._hash_vals() +
46208  *                 ("not",))
46209  */
46210 
46211 /* Python wrapper */
46212 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNOTSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
46213 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNOTSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
46214   PyObject *__pyx_r = 0;
46215   __Pyx_RefNannyDeclarations
46216   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
46217   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_18BooleanNOTSelector__hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *)__pyx_v_self));
46218 
46219   /* function exit code */
46220   __Pyx_RefNannyFinishContext();
46221   return __pyx_r;
46222 }
46223 
46224 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanNOTSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self) {
46225   PyObject *__pyx_r = NULL;
46226   __Pyx_RefNannyDeclarations
46227   PyObject *__pyx_t_1 = NULL;
46228   PyObject *__pyx_t_2 = NULL;
46229   PyObject *__pyx_t_3 = NULL;
46230   __Pyx_RefNannySetupContext("_hash_vals", 0);
46231 
46232   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":156
46233  *
46234  *     def _hash_vals(self):
46235  *         return (self.sel1._hash_vals() +             # <<<<<<<<<<<<<<
46236  *                 ("not",))
46237  *
46238  */
46239   __Pyx_XDECREF(__pyx_r);
46240   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.sel1), __pyx_n_s_hash_vals); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 156, __pyx_L1_error)
46241   __Pyx_GOTREF(__pyx_t_2);
46242   __pyx_t_3 = NULL;
46243   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
46244     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
46245     if (likely(__pyx_t_3)) {
46246       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
46247       __Pyx_INCREF(__pyx_t_3);
46248       __Pyx_INCREF(function);
46249       __Pyx_DECREF_SET(__pyx_t_2, function);
46250     }
46251   }
46252   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
46253   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
46254   if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 156, __pyx_L1_error)
46255   __Pyx_GOTREF(__pyx_t_1);
46256   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
46257 
46258   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":157
46259  *     def _hash_vals(self):
46260  *         return (self.sel1._hash_vals() +
46261  *                 ("not",))             # <<<<<<<<<<<<<<
46262  *
46263  * cdef class BooleanXORSelector(BooleanSelector):
46264  */
46265   __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_tuple__64); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 156, __pyx_L1_error)
46266   __Pyx_GOTREF(__pyx_t_2);
46267   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
46268   __pyx_r = __pyx_t_2;
46269   __pyx_t_2 = 0;
46270   goto __pyx_L0;
46271 
46272   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":155
46273  *         return 0
46274  *
46275  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
46276  *         return (self.sel1._hash_vals() +
46277  *                 ("not",))
46278  */
46279 
46280   /* function exit code */
46281   __pyx_L1_error:;
46282   __Pyx_XDECREF(__pyx_t_1);
46283   __Pyx_XDECREF(__pyx_t_2);
46284   __Pyx_XDECREF(__pyx_t_3);
46285   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanNOTSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
46286   __pyx_r = NULL;
46287   __pyx_L0:;
46288   __Pyx_XGIVEREF(__pyx_r);
46289   __Pyx_RefNannyFinishContext();
46290   return __pyx_r;
46291 }
46292 
46293 /* "(tree fragment)":1
46294  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
46295  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
46296  * def __setstate_cython__(self, __pyx_state):
46297  */
46298 
46299 /* Python wrapper */
46300 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNOTSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
46301 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNOTSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
46302   PyObject *__pyx_r = 0;
46303   __Pyx_RefNannyDeclarations
46304   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
46305   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_18BooleanNOTSelector_2__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *)__pyx_v_self));
46306 
46307   /* function exit code */
46308   __Pyx_RefNannyFinishContext();
46309   return __pyx_r;
46310 }
46311 
46312 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanNOTSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self) {
46313   PyObject *__pyx_r = NULL;
46314   __Pyx_RefNannyDeclarations
46315   PyObject *__pyx_t_1 = NULL;
46316   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
46317 
46318   /* "(tree fragment)":2
46319  * def __reduce_cython__(self):
46320  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
46321  * def __setstate_cython__(self, __pyx_state):
46322  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
46323  */
46324   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__65, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
46325   __Pyx_GOTREF(__pyx_t_1);
46326   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
46327   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
46328   __PYX_ERR(5, 2, __pyx_L1_error)
46329 
46330   /* "(tree fragment)":1
46331  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
46332  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
46333  * def __setstate_cython__(self, __pyx_state):
46334  */
46335 
46336   /* function exit code */
46337   __pyx_L1_error:;
46338   __Pyx_XDECREF(__pyx_t_1);
46339   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanNOTSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
46340   __pyx_r = NULL;
46341   __Pyx_XGIVEREF(__pyx_r);
46342   __Pyx_RefNannyFinishContext();
46343   return __pyx_r;
46344 }
46345 
46346 /* "(tree fragment)":3
46347  * def __reduce_cython__(self):
46348  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
46349  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
46350  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
46351  */
46352 
46353 /* Python wrapper */
46354 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNOTSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
46355 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNOTSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
46356   PyObject *__pyx_r = 0;
46357   __Pyx_RefNannyDeclarations
46358   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
46359   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_18BooleanNOTSelector_4__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
46360 
46361   /* function exit code */
46362   __Pyx_RefNannyFinishContext();
46363   return __pyx_r;
46364 }
46365 
46366 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanNOTSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
46367   PyObject *__pyx_r = NULL;
46368   __Pyx_RefNannyDeclarations
46369   PyObject *__pyx_t_1 = NULL;
46370   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
46371 
46372   /* "(tree fragment)":4
46373  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
46374  * def __setstate_cython__(self, __pyx_state):
46375  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
46376  */
46377   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__66, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
46378   __Pyx_GOTREF(__pyx_t_1);
46379   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
46380   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
46381   __PYX_ERR(5, 4, __pyx_L1_error)
46382 
46383   /* "(tree fragment)":3
46384  * def __reduce_cython__(self):
46385  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
46386  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
46387  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
46388  */
46389 
46390   /* function exit code */
46391   __pyx_L1_error:;
46392   __Pyx_XDECREF(__pyx_t_1);
46393   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanNOTSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
46394   __pyx_r = NULL;
46395   __Pyx_XGIVEREF(__pyx_r);
46396   __Pyx_RefNannyFinishContext();
46397   return __pyx_r;
46398 }
46399 
46400 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":161
46401  * cdef class BooleanXORSelector(BooleanSelector):
46402  *
46403  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
46404  *                                np.float64_t right_edge[3]) nogil:
46405  *         # We always return True here, because we don't have a "fully included"
46406  */
46407 
46408 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_bbox(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
46409   int __pyx_r;
46410 
46411   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":165
46412  *         # We always return True here, because we don't have a "fully included"
46413  *         # check anywhere else.
46414  *         return 1             # <<<<<<<<<<<<<<
46415  *
46416  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
46417  */
46418   __pyx_r = 1;
46419   goto __pyx_L0;
46420 
46421   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":161
46422  * cdef class BooleanXORSelector(BooleanSelector):
46423  *
46424  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
46425  *                                np.float64_t right_edge[3]) nogil:
46426  *         # We always return True here, because we don't have a "fully included"
46427  */
46428 
46429   /* function exit code */
46430   __pyx_L0:;
46431   return __pyx_r;
46432 }
46433 
46434 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":167
46435  *         return 1
46436  *
46437  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
46438  *                               np.float64_t right_edge[3]) nogil:
46439  *         # Return 2 in cases where one or both selectors partially overlap since
46440  */
46441 
46442 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
46443   int __pyx_v_rv1;
46444   int __pyx_v_rv2;
46445   int __pyx_r;
46446   int __pyx_t_1;
46447 
46448   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":172
46449  *         # part of the bounding box could satisfy the condition unless the
46450  *         # selectors are identical.
46451  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)             # <<<<<<<<<<<<<<
46452  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
46453  *         if rv1 == rv2:
46454  */
46455   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_bbox_edge(__pyx_v_self->__pyx_base.sel1, __pyx_v_left_edge, __pyx_v_right_edge);
46456 
46457   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":173
46458  *         # selectors are identical.
46459  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
46460  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)             # <<<<<<<<<<<<<<
46461  *         if rv1 == rv2:
46462  *             if rv1 == 2:
46463  */
46464   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_bbox_edge(__pyx_v_self->__pyx_base.sel2, __pyx_v_left_edge, __pyx_v_right_edge);
46465 
46466   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":174
46467  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
46468  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
46469  *         if rv1 == rv2:             # <<<<<<<<<<<<<<
46470  *             if rv1 == 2:
46471  *                 # If not identical, part of the bbox will be touched by one
46472  */
46473   __pyx_t_1 = ((__pyx_v_rv1 == __pyx_v_rv2) != 0);
46474   if (__pyx_t_1) {
46475 
46476     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":175
46477  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
46478  *         if rv1 == rv2:
46479  *             if rv1 == 2:             # <<<<<<<<<<<<<<
46480  *                 # If not identical, part of the bbox will be touched by one
46481  *                 # selector and not the other.
46482  */
46483     __pyx_t_1 = ((__pyx_v_rv1 == 2) != 0);
46484     if (__pyx_t_1) {
46485 
46486       /* "yt/geometry/_selection_routines/boolean_selectors.pxi":179
46487  *                 # selector and not the other.
46488  *                 # if self.sel1 == self.sel2: return 0  # requires gil
46489  *                 return 2             # <<<<<<<<<<<<<<
46490  *             return 0
46491  *         if rv1 == 0: return rv2
46492  */
46493       __pyx_r = 2;
46494       goto __pyx_L0;
46495 
46496       /* "yt/geometry/_selection_routines/boolean_selectors.pxi":175
46497  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
46498  *         if rv1 == rv2:
46499  *             if rv1 == 2:             # <<<<<<<<<<<<<<
46500  *                 # If not identical, part of the bbox will be touched by one
46501  *                 # selector and not the other.
46502  */
46503     }
46504 
46505     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":180
46506  *                 # if self.sel1 == self.sel2: return 0  # requires gil
46507  *                 return 2
46508  *             return 0             # <<<<<<<<<<<<<<
46509  *         if rv1 == 0: return rv2
46510  *         if rv2 == 0: return rv1
46511  */
46512     __pyx_r = 0;
46513     goto __pyx_L0;
46514 
46515     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":174
46516  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
46517  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
46518  *         if rv1 == rv2:             # <<<<<<<<<<<<<<
46519  *             if rv1 == 2:
46520  *                 # If not identical, part of the bbox will be touched by one
46521  */
46522   }
46523 
46524   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":181
46525  *                 return 2
46526  *             return 0
46527  *         if rv1 == 0: return rv2             # <<<<<<<<<<<<<<
46528  *         if rv2 == 0: return rv1
46529  *         return 2  # part of bbox only touched by selector fully covering bbox
46530  */
46531   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
46532   if (__pyx_t_1) {
46533     __pyx_r = __pyx_v_rv2;
46534     goto __pyx_L0;
46535   }
46536 
46537   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":182
46538  *             return 0
46539  *         if rv1 == 0: return rv2
46540  *         if rv2 == 0: return rv1             # <<<<<<<<<<<<<<
46541  *         return 2  # part of bbox only touched by selector fully covering bbox
46542  *
46543  */
46544   __pyx_t_1 = ((__pyx_v_rv2 == 0) != 0);
46545   if (__pyx_t_1) {
46546     __pyx_r = __pyx_v_rv1;
46547     goto __pyx_L0;
46548   }
46549 
46550   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":183
46551  *         if rv1 == 0: return rv2
46552  *         if rv2 == 0: return rv1
46553  *         return 2  # part of bbox only touched by selector fully covering bbox             # <<<<<<<<<<<<<<
46554  *
46555  *     cdef int select_grid(self, np.float64_t left_edge[3],
46556  */
46557   __pyx_r = 2;
46558   goto __pyx_L0;
46559 
46560   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":167
46561  *         return 1
46562  *
46563  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
46564  *                               np.float64_t right_edge[3]) nogil:
46565  *         # Return 2 in cases where one or both selectors partially overlap since
46566  */
46567 
46568   /* function exit code */
46569   __pyx_L0:;
46570   return __pyx_r;
46571 }
46572 
46573 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":185
46574  *         return 2  # part of bbox only touched by selector fully covering bbox
46575  *
46576  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
46577  *                          np.float64_t right_edge[3], np.int32_t level,
46578  *                          Oct *o = NULL) nogil:
46579  */
46580 
46581 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_grid(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_left_edge, CYTHON_UNUSED __pyx_t_5numpy_float64_t *__pyx_v_right_edge, CYTHON_UNUSED __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_grid *__pyx_optional_args) {
46582   int __pyx_r;
46583   if (__pyx_optional_args) {
46584   }
46585 
46586   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":188
46587  *                          np.float64_t right_edge[3], np.int32_t level,
46588  *                          Oct *o = NULL) nogil:
46589  *         return 1             # <<<<<<<<<<<<<<
46590  *
46591  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
46592  */
46593   __pyx_r = 1;
46594   goto __pyx_L0;
46595 
46596   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":185
46597  *         return 2  # part of bbox only touched by selector fully covering bbox
46598  *
46599  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
46600  *                          np.float64_t right_edge[3], np.int32_t level,
46601  *                          Oct *o = NULL) nogil:
46602  */
46603 
46604   /* function exit code */
46605   __pyx_L0:;
46606   return __pyx_r;
46607 }
46608 
46609 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":190
46610  *         return 1
46611  *
46612  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
46613  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
46614  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
46615  */
46616 
46617 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
46618   int __pyx_v_rv1;
46619   int __pyx_v_rv2;
46620   int __pyx_r;
46621   int __pyx_t_1;
46622 
46623   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":191
46624  *
46625  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
46626  *         cdef int rv1 = self.sel1.select_cell(pos, dds)             # <<<<<<<<<<<<<<
46627  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
46628  *         if rv1 == rv2: return 0
46629  */
46630   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_cell(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos, __pyx_v_dds);
46631 
46632   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":192
46633  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
46634  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
46635  *         cdef int rv2 = self.sel2.select_cell(pos, dds)             # <<<<<<<<<<<<<<
46636  *         if rv1 == rv2: return 0
46637  *         return 1
46638  */
46639   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_cell(__pyx_v_self->__pyx_base.sel2, __pyx_v_pos, __pyx_v_dds);
46640 
46641   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":193
46642  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
46643  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
46644  *         if rv1 == rv2: return 0             # <<<<<<<<<<<<<<
46645  *         return 1
46646  *
46647  */
46648   __pyx_t_1 = ((__pyx_v_rv1 == __pyx_v_rv2) != 0);
46649   if (__pyx_t_1) {
46650     __pyx_r = 0;
46651     goto __pyx_L0;
46652   }
46653 
46654   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":194
46655  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
46656  *         if rv1 == rv2: return 0
46657  *         return 1             # <<<<<<<<<<<<<<
46658  *
46659  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
46660  */
46661   __pyx_r = 1;
46662   goto __pyx_L0;
46663 
46664   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":190
46665  *         return 1
46666  *
46667  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
46668  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
46669  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
46670  */
46671 
46672   /* function exit code */
46673   __pyx_L0:;
46674   return __pyx_r;
46675 }
46676 
46677 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":196
46678  *         return 1
46679  *
46680  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
46681  *         cdef int rv1 = self.sel1.select_point(pos)
46682  *         cdef int rv2 = self.sel2.select_point(pos)
46683  */
46684 
46685 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
46686   int __pyx_v_rv1;
46687   int __pyx_v_rv2;
46688   int __pyx_r;
46689   int __pyx_t_1;
46690 
46691   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":197
46692  *
46693  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
46694  *         cdef int rv1 = self.sel1.select_point(pos)             # <<<<<<<<<<<<<<
46695  *         cdef int rv2 = self.sel2.select_point(pos)
46696  *         if rv1 == rv2: return 0
46697  */
46698   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_point(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos);
46699 
46700   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":198
46701  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
46702  *         cdef int rv1 = self.sel1.select_point(pos)
46703  *         cdef int rv2 = self.sel2.select_point(pos)             # <<<<<<<<<<<<<<
46704  *         if rv1 == rv2: return 0
46705  *         return 1
46706  */
46707   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_point(__pyx_v_self->__pyx_base.sel2, __pyx_v_pos);
46708 
46709   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":199
46710  *         cdef int rv1 = self.sel1.select_point(pos)
46711  *         cdef int rv2 = self.sel2.select_point(pos)
46712  *         if rv1 == rv2: return 0             # <<<<<<<<<<<<<<
46713  *         return 1
46714  *
46715  */
46716   __pyx_t_1 = ((__pyx_v_rv1 == __pyx_v_rv2) != 0);
46717   if (__pyx_t_1) {
46718     __pyx_r = 0;
46719     goto __pyx_L0;
46720   }
46721 
46722   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":200
46723  *         cdef int rv2 = self.sel2.select_point(pos)
46724  *         if rv1 == rv2: return 0
46725  *         return 1             # <<<<<<<<<<<<<<
46726  *
46727  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
46728  */
46729   __pyx_r = 1;
46730   goto __pyx_L0;
46731 
46732   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":196
46733  *         return 1
46734  *
46735  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
46736  *         cdef int rv1 = self.sel1.select_point(pos)
46737  *         cdef int rv2 = self.sel2.select_point(pos)
46738  */
46739 
46740   /* function exit code */
46741   __pyx_L0:;
46742   return __pyx_r;
46743 }
46744 
46745 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":202
46746  *         return 1
46747  *
46748  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
46749  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
46750  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
46751  */
46752 
46753 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
46754   int __pyx_v_rv1;
46755   int __pyx_v_rv2;
46756   int __pyx_r;
46757   int __pyx_t_1;
46758 
46759   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":203
46760  *
46761  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
46762  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
46763  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
46764  *         if rv1 == rv2: return 0
46765  */
46766   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_sphere(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos, __pyx_v_radius);
46767 
46768   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":204
46769  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
46770  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
46771  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
46772  *         if rv1 == rv2: return 0
46773  *         return 1
46774  */
46775   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_sphere(__pyx_v_self->__pyx_base.sel2, __pyx_v_pos, __pyx_v_radius);
46776 
46777   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":205
46778  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
46779  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
46780  *         if rv1 == rv2: return 0             # <<<<<<<<<<<<<<
46781  *         return 1
46782  *
46783  */
46784   __pyx_t_1 = ((__pyx_v_rv1 == __pyx_v_rv2) != 0);
46785   if (__pyx_t_1) {
46786     __pyx_r = 0;
46787     goto __pyx_L0;
46788   }
46789 
46790   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":206
46791  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
46792  *         if rv1 == rv2: return 0
46793  *         return 1             # <<<<<<<<<<<<<<
46794  *
46795  *     def _hash_vals(self):
46796  */
46797   __pyx_r = 1;
46798   goto __pyx_L0;
46799 
46800   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":202
46801  *         return 1
46802  *
46803  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
46804  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
46805  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
46806  */
46807 
46808   /* function exit code */
46809   __pyx_L0:;
46810   return __pyx_r;
46811 }
46812 
46813 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":208
46814  *         return 1
46815  *
46816  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
46817  *         return (self.sel1._hash_vals() +
46818  *                 ("xor",) +
46819  */
46820 
46821 /* Python wrapper */
46822 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanXORSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
46823 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanXORSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
46824   PyObject *__pyx_r = 0;
46825   __Pyx_RefNannyDeclarations
46826   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
46827   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_18BooleanXORSelector__hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *)__pyx_v_self));
46828 
46829   /* function exit code */
46830   __Pyx_RefNannyFinishContext();
46831   return __pyx_r;
46832 }
46833 
46834 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanXORSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self) {
46835   PyObject *__pyx_r = NULL;
46836   __Pyx_RefNannyDeclarations
46837   PyObject *__pyx_t_1 = NULL;
46838   PyObject *__pyx_t_2 = NULL;
46839   PyObject *__pyx_t_3 = NULL;
46840   PyObject *__pyx_t_4 = NULL;
46841   __Pyx_RefNannySetupContext("_hash_vals", 0);
46842 
46843   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":209
46844  *
46845  *     def _hash_vals(self):
46846  *         return (self.sel1._hash_vals() +             # <<<<<<<<<<<<<<
46847  *                 ("xor",) +
46848  *                 self.sel2._hash_vals())
46849  */
46850   __Pyx_XDECREF(__pyx_r);
46851   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.sel1), __pyx_n_s_hash_vals); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 209, __pyx_L1_error)
46852   __Pyx_GOTREF(__pyx_t_2);
46853   __pyx_t_3 = NULL;
46854   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
46855     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
46856     if (likely(__pyx_t_3)) {
46857       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
46858       __Pyx_INCREF(__pyx_t_3);
46859       __Pyx_INCREF(function);
46860       __Pyx_DECREF_SET(__pyx_t_2, function);
46861     }
46862   }
46863   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
46864   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
46865   if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 209, __pyx_L1_error)
46866   __Pyx_GOTREF(__pyx_t_1);
46867   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
46868 
46869   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":210
46870  *     def _hash_vals(self):
46871  *         return (self.sel1._hash_vals() +
46872  *                 ("xor",) +             # <<<<<<<<<<<<<<
46873  *                 self.sel2._hash_vals())
46874  *
46875  */
46876   __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_tuple__67); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 209, __pyx_L1_error)
46877   __Pyx_GOTREF(__pyx_t_2);
46878   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
46879 
46880   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":211
46881  *         return (self.sel1._hash_vals() +
46882  *                 ("xor",) +
46883  *                 self.sel2._hash_vals())             # <<<<<<<<<<<<<<
46884  *
46885  * cdef class BooleanNEGSelector(BooleanSelector):
46886  */
46887   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.sel2), __pyx_n_s_hash_vals); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 211, __pyx_L1_error)
46888   __Pyx_GOTREF(__pyx_t_3);
46889   __pyx_t_4 = NULL;
46890   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
46891     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
46892     if (likely(__pyx_t_4)) {
46893       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
46894       __Pyx_INCREF(__pyx_t_4);
46895       __Pyx_INCREF(function);
46896       __Pyx_DECREF_SET(__pyx_t_3, function);
46897     }
46898   }
46899   __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
46900   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
46901   if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 211, __pyx_L1_error)
46902   __Pyx_GOTREF(__pyx_t_1);
46903   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
46904 
46905   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":210
46906  *     def _hash_vals(self):
46907  *         return (self.sel1._hash_vals() +
46908  *                 ("xor",) +             # <<<<<<<<<<<<<<
46909  *                 self.sel2._hash_vals())
46910  *
46911  */
46912   __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 210, __pyx_L1_error)
46913   __Pyx_GOTREF(__pyx_t_3);
46914   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
46915   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
46916   __pyx_r = __pyx_t_3;
46917   __pyx_t_3 = 0;
46918   goto __pyx_L0;
46919 
46920   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":208
46921  *         return 1
46922  *
46923  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
46924  *         return (self.sel1._hash_vals() +
46925  *                 ("xor",) +
46926  */
46927 
46928   /* function exit code */
46929   __pyx_L1_error:;
46930   __Pyx_XDECREF(__pyx_t_1);
46931   __Pyx_XDECREF(__pyx_t_2);
46932   __Pyx_XDECREF(__pyx_t_3);
46933   __Pyx_XDECREF(__pyx_t_4);
46934   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanXORSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
46935   __pyx_r = NULL;
46936   __pyx_L0:;
46937   __Pyx_XGIVEREF(__pyx_r);
46938   __Pyx_RefNannyFinishContext();
46939   return __pyx_r;
46940 }
46941 
46942 /* "(tree fragment)":1
46943  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
46944  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
46945  * def __setstate_cython__(self, __pyx_state):
46946  */
46947 
46948 /* Python wrapper */
46949 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanXORSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
46950 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanXORSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
46951   PyObject *__pyx_r = 0;
46952   __Pyx_RefNannyDeclarations
46953   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
46954   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_18BooleanXORSelector_2__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *)__pyx_v_self));
46955 
46956   /* function exit code */
46957   __Pyx_RefNannyFinishContext();
46958   return __pyx_r;
46959 }
46960 
46961 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanXORSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self) {
46962   PyObject *__pyx_r = NULL;
46963   __Pyx_RefNannyDeclarations
46964   PyObject *__pyx_t_1 = NULL;
46965   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
46966 
46967   /* "(tree fragment)":2
46968  * def __reduce_cython__(self):
46969  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
46970  * def __setstate_cython__(self, __pyx_state):
46971  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
46972  */
46973   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__68, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
46974   __Pyx_GOTREF(__pyx_t_1);
46975   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
46976   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
46977   __PYX_ERR(5, 2, __pyx_L1_error)
46978 
46979   /* "(tree fragment)":1
46980  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
46981  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
46982  * def __setstate_cython__(self, __pyx_state):
46983  */
46984 
46985   /* function exit code */
46986   __pyx_L1_error:;
46987   __Pyx_XDECREF(__pyx_t_1);
46988   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanXORSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
46989   __pyx_r = NULL;
46990   __Pyx_XGIVEREF(__pyx_r);
46991   __Pyx_RefNannyFinishContext();
46992   return __pyx_r;
46993 }
46994 
46995 /* "(tree fragment)":3
46996  * def __reduce_cython__(self):
46997  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
46998  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
46999  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47000  */
47001 
47002 /* Python wrapper */
47003 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanXORSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
47004 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanXORSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
47005   PyObject *__pyx_r = 0;
47006   __Pyx_RefNannyDeclarations
47007   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
47008   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_18BooleanXORSelector_4__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
47009 
47010   /* function exit code */
47011   __Pyx_RefNannyFinishContext();
47012   return __pyx_r;
47013 }
47014 
47015 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanXORSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
47016   PyObject *__pyx_r = NULL;
47017   __Pyx_RefNannyDeclarations
47018   PyObject *__pyx_t_1 = NULL;
47019   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
47020 
47021   /* "(tree fragment)":4
47022  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47023  * def __setstate_cython__(self, __pyx_state):
47024  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
47025  */
47026   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__69, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
47027   __Pyx_GOTREF(__pyx_t_1);
47028   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
47029   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
47030   __PYX_ERR(5, 4, __pyx_L1_error)
47031 
47032   /* "(tree fragment)":3
47033  * def __reduce_cython__(self):
47034  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47035  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
47036  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47037  */
47038 
47039   /* function exit code */
47040   __pyx_L1_error:;
47041   __Pyx_XDECREF(__pyx_t_1);
47042   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanXORSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
47043   __pyx_r = NULL;
47044   __Pyx_XGIVEREF(__pyx_r);
47045   __Pyx_RefNannyFinishContext();
47046   return __pyx_r;
47047 }
47048 
47049 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":215
47050  * cdef class BooleanNEGSelector(BooleanSelector):
47051  *
47052  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
47053  *                          np.float64_t right_edge[3]) nogil:
47054  *         # We always return True here, because we don't have a "fully included"
47055  */
47056 
47057 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
47058   int __pyx_r;
47059 
47060   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":219
47061  *         # We always return True here, because we don't have a "fully included"
47062  *         # check anywhere else.
47063  *         return self.sel1.select_bbox(left_edge, right_edge)             # <<<<<<<<<<<<<<
47064  *
47065  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
47066  */
47067   __pyx_r = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_bbox(__pyx_v_self->__pyx_base.sel1, __pyx_v_left_edge, __pyx_v_right_edge);
47068   goto __pyx_L0;
47069 
47070   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":215
47071  * cdef class BooleanNEGSelector(BooleanSelector):
47072  *
47073  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
47074  *                          np.float64_t right_edge[3]) nogil:
47075  *         # We always return True here, because we don't have a "fully included"
47076  */
47077 
47078   /* function exit code */
47079   __pyx_L0:;
47080   return __pyx_r;
47081 }
47082 
47083 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":221
47084  *         return self.sel1.select_bbox(left_edge, right_edge)
47085  *
47086  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
47087  *                               np.float64_t right_edge[3]) nogil:
47088  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
47089  */
47090 
47091 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
47092   int __pyx_v_rv1;
47093   int __pyx_v_rv2;
47094   int __pyx_r;
47095   int __pyx_t_1;
47096 
47097   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":223
47098  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
47099  *                               np.float64_t right_edge[3]) nogil:
47100  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)             # <<<<<<<<<<<<<<
47101  *         if rv1 == 0: return 0
47102  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
47103  */
47104   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_bbox_edge(__pyx_v_self->__pyx_base.sel1, __pyx_v_left_edge, __pyx_v_right_edge);
47105 
47106   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":224
47107  *                               np.float64_t right_edge[3]) nogil:
47108  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
47109  *         if rv1 == 0: return 0             # <<<<<<<<<<<<<<
47110  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
47111  *         if rv2 == 1:
47112  */
47113   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
47114   if (__pyx_t_1) {
47115     __pyx_r = 0;
47116     goto __pyx_L0;
47117   }
47118 
47119   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":225
47120  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
47121  *         if rv1 == 0: return 0
47122  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)             # <<<<<<<<<<<<<<
47123  *         if rv2 == 1:
47124  *             return 0
47125  */
47126   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_bbox_edge(__pyx_v_self->__pyx_base.sel2, __pyx_v_left_edge, __pyx_v_right_edge);
47127 
47128   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":226
47129  *         if rv1 == 0: return 0
47130  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
47131  *         if rv2 == 1:             # <<<<<<<<<<<<<<
47132  *             return 0
47133  *         elif rv2 == 0:
47134  */
47135   switch (__pyx_v_rv2) {
47136     case 1:
47137 
47138     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":227
47139  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
47140  *         if rv2 == 1:
47141  *             return 0             # <<<<<<<<<<<<<<
47142  *         elif rv2 == 0:
47143  *             return rv1
47144  */
47145     __pyx_r = 0;
47146     goto __pyx_L0;
47147 
47148     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":226
47149  *         if rv1 == 0: return 0
47150  *         cdef int rv2 = self.sel2.select_bbox_edge(left_edge, right_edge)
47151  *         if rv2 == 1:             # <<<<<<<<<<<<<<
47152  *             return 0
47153  *         elif rv2 == 0:
47154  */
47155     break;
47156     case 0:
47157 
47158     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":229
47159  *             return 0
47160  *         elif rv2 == 0:
47161  *             return rv1             # <<<<<<<<<<<<<<
47162  *         # If sel2 is partial, then sel1 - sel2 will be partial as long
47163  *         # as sel1 != sel2
47164  */
47165     __pyx_r = __pyx_v_rv1;
47166     goto __pyx_L0;
47167 
47168     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":228
47169  *         if rv2 == 1:
47170  *             return 0
47171  *         elif rv2 == 0:             # <<<<<<<<<<<<<<
47172  *             return rv1
47173  *         # If sel2 is partial, then sel1 - sel2 will be partial as long
47174  */
47175     break;
47176     default: break;
47177   }
47178 
47179   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":233
47180  *         # as sel1 != sel2
47181  *         # if self.sel1 == self.sel2: return 0  # requires gil
47182  *         return 2             # <<<<<<<<<<<<<<
47183  *
47184  *     cdef int select_grid(self, np.float64_t left_edge[3],
47185  */
47186   __pyx_r = 2;
47187   goto __pyx_L0;
47188 
47189   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":221
47190  *         return self.sel1.select_bbox(left_edge, right_edge)
47191  *
47192  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
47193  *                               np.float64_t right_edge[3]) nogil:
47194  *         cdef int rv1 = self.sel1.select_bbox_edge(left_edge, right_edge)
47195  */
47196 
47197   /* function exit code */
47198   __pyx_L0:;
47199   return __pyx_r;
47200 }
47201 
47202 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":235
47203  *         return 2
47204  *
47205  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
47206  *                          np.float64_t right_edge[3], np.int32_t level,
47207  *                          Oct *o = NULL) nogil:
47208  */
47209 
47210 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_grid *__pyx_optional_args) {
47211 
47212   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":237
47213  *     cdef int select_grid(self, np.float64_t left_edge[3],
47214  *                          np.float64_t right_edge[3], np.int32_t level,
47215  *                          Oct *o = NULL) nogil:             # <<<<<<<<<<<<<<
47216  *         return self.sel1.select_grid(left_edge, right_edge, level, o)
47217  *
47218  */
47219   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_o = ((struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *)NULL);
47220   int __pyx_r;
47221   int __pyx_t_1;
47222   struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid __pyx_t_2;
47223   if (__pyx_optional_args) {
47224     if (__pyx_optional_args->__pyx_n > 0) {
47225       __pyx_v_o = __pyx_optional_args->o;
47226     }
47227   }
47228 
47229   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":238
47230  *                          np.float64_t right_edge[3], np.int32_t level,
47231  *                          Oct *o = NULL) nogil:
47232  *         return self.sel1.select_grid(left_edge, right_edge, level, o)             # <<<<<<<<<<<<<<
47233  *
47234  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
47235  */
47236   __pyx_t_2.__pyx_n = 1;
47237   __pyx_t_2.o = __pyx_v_o;
47238   __pyx_t_1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_grid(__pyx_v_self->__pyx_base.sel1, __pyx_v_left_edge, __pyx_v_right_edge, __pyx_v_level, &__pyx_t_2);
47239   __pyx_r = __pyx_t_1;
47240   goto __pyx_L0;
47241 
47242   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":235
47243  *         return 2
47244  *
47245  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
47246  *                          np.float64_t right_edge[3], np.int32_t level,
47247  *                          Oct *o = NULL) nogil:
47248  */
47249 
47250   /* function exit code */
47251   __pyx_L0:;
47252   return __pyx_r;
47253 }
47254 
47255 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":240
47256  *         return self.sel1.select_grid(left_edge, right_edge, level, o)
47257  *
47258  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
47259  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
47260  *         if rv1 == 0: return 0
47261  */
47262 
47263 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
47264   int __pyx_v_rv1;
47265   int __pyx_v_rv2;
47266   int __pyx_r;
47267   int __pyx_t_1;
47268 
47269   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":241
47270  *
47271  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
47272  *         cdef int rv1 = self.sel1.select_cell(pos, dds)             # <<<<<<<<<<<<<<
47273  *         if rv1 == 0: return 0
47274  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
47275  */
47276   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_cell(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos, __pyx_v_dds);
47277 
47278   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":242
47279  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
47280  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
47281  *         if rv1 == 0: return 0             # <<<<<<<<<<<<<<
47282  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
47283  *         if rv2 == 1: return 0
47284  */
47285   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
47286   if (__pyx_t_1) {
47287     __pyx_r = 0;
47288     goto __pyx_L0;
47289   }
47290 
47291   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":243
47292  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
47293  *         if rv1 == 0: return 0
47294  *         cdef int rv2 = self.sel2.select_cell(pos, dds)             # <<<<<<<<<<<<<<
47295  *         if rv2 == 1: return 0
47296  *         return 1
47297  */
47298   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_cell(__pyx_v_self->__pyx_base.sel2, __pyx_v_pos, __pyx_v_dds);
47299 
47300   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":244
47301  *         if rv1 == 0: return 0
47302  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
47303  *         if rv2 == 1: return 0             # <<<<<<<<<<<<<<
47304  *         return 1
47305  *
47306  */
47307   __pyx_t_1 = ((__pyx_v_rv2 == 1) != 0);
47308   if (__pyx_t_1) {
47309     __pyx_r = 0;
47310     goto __pyx_L0;
47311   }
47312 
47313   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":245
47314  *         cdef int rv2 = self.sel2.select_cell(pos, dds)
47315  *         if rv2 == 1: return 0
47316  *         return 1             # <<<<<<<<<<<<<<
47317  *
47318  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
47319  */
47320   __pyx_r = 1;
47321   goto __pyx_L0;
47322 
47323   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":240
47324  *         return self.sel1.select_grid(left_edge, right_edge, level, o)
47325  *
47326  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
47327  *         cdef int rv1 = self.sel1.select_cell(pos, dds)
47328  *         if rv1 == 0: return 0
47329  */
47330 
47331   /* function exit code */
47332   __pyx_L0:;
47333   return __pyx_r;
47334 }
47335 
47336 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":247
47337  *         return 1
47338  *
47339  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
47340  *         cdef int rv1 = self.sel1.select_point(pos)
47341  *         if rv1 == 0: return 0
47342  */
47343 
47344 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
47345   int __pyx_v_rv1;
47346   int __pyx_v_rv2;
47347   int __pyx_r;
47348   int __pyx_t_1;
47349 
47350   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":248
47351  *
47352  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
47353  *         cdef int rv1 = self.sel1.select_point(pos)             # <<<<<<<<<<<<<<
47354  *         if rv1 == 0: return 0
47355  *         cdef int rv2 = self.sel2.select_point(pos)
47356  */
47357   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_point(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos);
47358 
47359   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":249
47360  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
47361  *         cdef int rv1 = self.sel1.select_point(pos)
47362  *         if rv1 == 0: return 0             # <<<<<<<<<<<<<<
47363  *         cdef int rv2 = self.sel2.select_point(pos)
47364  *         if rv2 == 1: return 0
47365  */
47366   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
47367   if (__pyx_t_1) {
47368     __pyx_r = 0;
47369     goto __pyx_L0;
47370   }
47371 
47372   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":250
47373  *         cdef int rv1 = self.sel1.select_point(pos)
47374  *         if rv1 == 0: return 0
47375  *         cdef int rv2 = self.sel2.select_point(pos)             # <<<<<<<<<<<<<<
47376  *         if rv2 == 1: return 0
47377  *         return 1
47378  */
47379   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_point(__pyx_v_self->__pyx_base.sel2, __pyx_v_pos);
47380 
47381   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":251
47382  *         if rv1 == 0: return 0
47383  *         cdef int rv2 = self.sel2.select_point(pos)
47384  *         if rv2 == 1: return 0             # <<<<<<<<<<<<<<
47385  *         return 1
47386  *
47387  */
47388   __pyx_t_1 = ((__pyx_v_rv2 == 1) != 0);
47389   if (__pyx_t_1) {
47390     __pyx_r = 0;
47391     goto __pyx_L0;
47392   }
47393 
47394   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":252
47395  *         cdef int rv2 = self.sel2.select_point(pos)
47396  *         if rv2 == 1: return 0
47397  *         return 1             # <<<<<<<<<<<<<<
47398  *
47399  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
47400  */
47401   __pyx_r = 1;
47402   goto __pyx_L0;
47403 
47404   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":247
47405  *         return 1
47406  *
47407  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
47408  *         cdef int rv1 = self.sel1.select_point(pos)
47409  *         if rv1 == 0: return 0
47410  */
47411 
47412   /* function exit code */
47413   __pyx_L0:;
47414   return __pyx_r;
47415 }
47416 
47417 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":254
47418  *         return 1
47419  *
47420  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
47421  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
47422  *         if rv1 == 0: return 0
47423  */
47424 
47425 static int __pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
47426   int __pyx_v_rv1;
47427   int __pyx_v_rv2;
47428   int __pyx_r;
47429   int __pyx_t_1;
47430 
47431   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":255
47432  *
47433  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
47434  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
47435  *         if rv1 == 0: return 0
47436  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
47437  */
47438   __pyx_v_rv1 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel1->__pyx_vtab)->select_sphere(__pyx_v_self->__pyx_base.sel1, __pyx_v_pos, __pyx_v_radius);
47439 
47440   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":256
47441  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
47442  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
47443  *         if rv1 == 0: return 0             # <<<<<<<<<<<<<<
47444  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
47445  *         if rv2 == 1: return 0
47446  */
47447   __pyx_t_1 = ((__pyx_v_rv1 == 0) != 0);
47448   if (__pyx_t_1) {
47449     __pyx_r = 0;
47450     goto __pyx_L0;
47451   }
47452 
47453   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":257
47454  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
47455  *         if rv1 == 0: return 0
47456  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)             # <<<<<<<<<<<<<<
47457  *         if rv2 == 1: return 0
47458  *         return 1
47459  */
47460   __pyx_v_rv2 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_v_self->__pyx_base.sel2->__pyx_vtab)->select_sphere(__pyx_v_self->__pyx_base.sel2, __pyx_v_pos, __pyx_v_radius);
47461 
47462   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":258
47463  *         if rv1 == 0: return 0
47464  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
47465  *         if rv2 == 1: return 0             # <<<<<<<<<<<<<<
47466  *         return 1
47467  *
47468  */
47469   __pyx_t_1 = ((__pyx_v_rv2 == 1) != 0);
47470   if (__pyx_t_1) {
47471     __pyx_r = 0;
47472     goto __pyx_L0;
47473   }
47474 
47475   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":259
47476  *         cdef int rv2 = self.sel2.select_sphere(pos, radius)
47477  *         if rv2 == 1: return 0
47478  *         return 1             # <<<<<<<<<<<<<<
47479  *
47480  *     def _hash_vals(self):
47481  */
47482   __pyx_r = 1;
47483   goto __pyx_L0;
47484 
47485   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":254
47486  *         return 1
47487  *
47488  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
47489  *         cdef int rv1 = self.sel1.select_sphere(pos, radius)
47490  *         if rv1 == 0: return 0
47491  */
47492 
47493   /* function exit code */
47494   __pyx_L0:;
47495   return __pyx_r;
47496 }
47497 
47498 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":261
47499  *         return 1
47500  *
47501  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
47502  *         return (self.sel1._hash_vals() +
47503  *                 ("neg",) +
47504  */
47505 
47506 /* Python wrapper */
47507 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNEGSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
47508 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNEGSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
47509   PyObject *__pyx_r = 0;
47510   __Pyx_RefNannyDeclarations
47511   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
47512   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_18BooleanNEGSelector__hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *)__pyx_v_self));
47513 
47514   /* function exit code */
47515   __Pyx_RefNannyFinishContext();
47516   return __pyx_r;
47517 }
47518 
47519 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanNEGSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self) {
47520   PyObject *__pyx_r = NULL;
47521   __Pyx_RefNannyDeclarations
47522   PyObject *__pyx_t_1 = NULL;
47523   PyObject *__pyx_t_2 = NULL;
47524   PyObject *__pyx_t_3 = NULL;
47525   PyObject *__pyx_t_4 = NULL;
47526   __Pyx_RefNannySetupContext("_hash_vals", 0);
47527 
47528   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":262
47529  *
47530  *     def _hash_vals(self):
47531  *         return (self.sel1._hash_vals() +             # <<<<<<<<<<<<<<
47532  *                 ("neg",) +
47533  *                 self.sel2._hash_vals())
47534  */
47535   __Pyx_XDECREF(__pyx_r);
47536   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.sel1), __pyx_n_s_hash_vals); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 262, __pyx_L1_error)
47537   __Pyx_GOTREF(__pyx_t_2);
47538   __pyx_t_3 = NULL;
47539   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
47540     __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
47541     if (likely(__pyx_t_3)) {
47542       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
47543       __Pyx_INCREF(__pyx_t_3);
47544       __Pyx_INCREF(function);
47545       __Pyx_DECREF_SET(__pyx_t_2, function);
47546     }
47547   }
47548   __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
47549   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
47550   if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 262, __pyx_L1_error)
47551   __Pyx_GOTREF(__pyx_t_1);
47552   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
47553 
47554   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":263
47555  *     def _hash_vals(self):
47556  *         return (self.sel1._hash_vals() +
47557  *                 ("neg",) +             # <<<<<<<<<<<<<<
47558  *                 self.sel2._hash_vals())
47559  *
47560  */
47561   __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_tuple__70); if (unlikely(!__pyx_t_2)) __PYX_ERR(21, 262, __pyx_L1_error)
47562   __Pyx_GOTREF(__pyx_t_2);
47563   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
47564 
47565   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":264
47566  *         return (self.sel1._hash_vals() +
47567  *                 ("neg",) +
47568  *                 self.sel2._hash_vals())             # <<<<<<<<<<<<<<
47569  *
47570  * cdef class ChainedBooleanSelector(SelectorObject):
47571  */
47572   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->__pyx_base.sel2), __pyx_n_s_hash_vals); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 264, __pyx_L1_error)
47573   __Pyx_GOTREF(__pyx_t_3);
47574   __pyx_t_4 = NULL;
47575   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
47576     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
47577     if (likely(__pyx_t_4)) {
47578       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
47579       __Pyx_INCREF(__pyx_t_4);
47580       __Pyx_INCREF(function);
47581       __Pyx_DECREF_SET(__pyx_t_3, function);
47582     }
47583   }
47584   __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
47585   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
47586   if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 264, __pyx_L1_error)
47587   __Pyx_GOTREF(__pyx_t_1);
47588   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
47589 
47590   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":263
47591  *     def _hash_vals(self):
47592  *         return (self.sel1._hash_vals() +
47593  *                 ("neg",) +             # <<<<<<<<<<<<<<
47594  *                 self.sel2._hash_vals())
47595  *
47596  */
47597   __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 263, __pyx_L1_error)
47598   __Pyx_GOTREF(__pyx_t_3);
47599   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
47600   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
47601   __pyx_r = __pyx_t_3;
47602   __pyx_t_3 = 0;
47603   goto __pyx_L0;
47604 
47605   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":261
47606  *         return 1
47607  *
47608  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
47609  *         return (self.sel1._hash_vals() +
47610  *                 ("neg",) +
47611  */
47612 
47613   /* function exit code */
47614   __pyx_L1_error:;
47615   __Pyx_XDECREF(__pyx_t_1);
47616   __Pyx_XDECREF(__pyx_t_2);
47617   __Pyx_XDECREF(__pyx_t_3);
47618   __Pyx_XDECREF(__pyx_t_4);
47619   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanNEGSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
47620   __pyx_r = NULL;
47621   __pyx_L0:;
47622   __Pyx_XGIVEREF(__pyx_r);
47623   __Pyx_RefNannyFinishContext();
47624   return __pyx_r;
47625 }
47626 
47627 /* "(tree fragment)":1
47628  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
47629  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47630  * def __setstate_cython__(self, __pyx_state):
47631  */
47632 
47633 /* Python wrapper */
47634 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNEGSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
47635 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNEGSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
47636   PyObject *__pyx_r = 0;
47637   __Pyx_RefNannyDeclarations
47638   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
47639   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_18BooleanNEGSelector_2__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *)__pyx_v_self));
47640 
47641   /* function exit code */
47642   __Pyx_RefNannyFinishContext();
47643   return __pyx_r;
47644 }
47645 
47646 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanNEGSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self) {
47647   PyObject *__pyx_r = NULL;
47648   __Pyx_RefNannyDeclarations
47649   PyObject *__pyx_t_1 = NULL;
47650   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
47651 
47652   /* "(tree fragment)":2
47653  * def __reduce_cython__(self):
47654  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
47655  * def __setstate_cython__(self, __pyx_state):
47656  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47657  */
47658   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__71, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
47659   __Pyx_GOTREF(__pyx_t_1);
47660   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
47661   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
47662   __PYX_ERR(5, 2, __pyx_L1_error)
47663 
47664   /* "(tree fragment)":1
47665  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
47666  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47667  * def __setstate_cython__(self, __pyx_state):
47668  */
47669 
47670   /* function exit code */
47671   __pyx_L1_error:;
47672   __Pyx_XDECREF(__pyx_t_1);
47673   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanNEGSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
47674   __pyx_r = NULL;
47675   __Pyx_XGIVEREF(__pyx_r);
47676   __Pyx_RefNannyFinishContext();
47677   return __pyx_r;
47678 }
47679 
47680 /* "(tree fragment)":3
47681  * def __reduce_cython__(self):
47682  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47683  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
47684  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47685  */
47686 
47687 /* Python wrapper */
47688 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNEGSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
47689 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNEGSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
47690   PyObject *__pyx_r = 0;
47691   __Pyx_RefNannyDeclarations
47692   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
47693   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_18BooleanNEGSelector_4__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
47694 
47695   /* function exit code */
47696   __Pyx_RefNannyFinishContext();
47697   return __pyx_r;
47698 }
47699 
47700 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_18BooleanNEGSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
47701   PyObject *__pyx_r = NULL;
47702   __Pyx_RefNannyDeclarations
47703   PyObject *__pyx_t_1 = NULL;
47704   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
47705 
47706   /* "(tree fragment)":4
47707  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47708  * def __setstate_cython__(self, __pyx_state):
47709  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
47710  */
47711   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__72, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
47712   __Pyx_GOTREF(__pyx_t_1);
47713   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
47714   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
47715   __PYX_ERR(5, 4, __pyx_L1_error)
47716 
47717   /* "(tree fragment)":3
47718  * def __reduce_cython__(self):
47719  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47720  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
47721  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47722  */
47723 
47724   /* function exit code */
47725   __pyx_L1_error:;
47726   __Pyx_XDECREF(__pyx_t_1);
47727   __Pyx_AddTraceback("yt.geometry.selection_routines.BooleanNEGSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
47728   __pyx_r = NULL;
47729   __Pyx_XGIVEREF(__pyx_r);
47730   __Pyx_RefNannyFinishContext();
47731   return __pyx_r;
47732 }
47733 
47734 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":269
47735  *     cdef int n_obj
47736  *     cdef np.ndarray selectors
47737  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
47738  *         # These are data objects, not selectors
47739  *         self.n_obj = len(dobj.data_objects)
47740  */
47741 
47742 /* Python wrapper */
47743 static int __pyx_pw_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
47744 static int __pyx_pw_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
47745   PyObject *__pyx_v_dobj = 0;
47746   int __pyx_r;
47747   __Pyx_RefNannyDeclarations
47748   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
47749   {
47750     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dobj,0};
47751     PyObject* values[1] = {0};
47752     if (unlikely(__pyx_kwds)) {
47753       Py_ssize_t kw_args;
47754       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
47755       switch (pos_args) {
47756         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
47757         CYTHON_FALLTHROUGH;
47758         case  0: break;
47759         default: goto __pyx_L5_argtuple_error;
47760       }
47761       kw_args = PyDict_Size(__pyx_kwds);
47762       switch (pos_args) {
47763         case  0:
47764         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dobj)) != 0)) kw_args--;
47765         else goto __pyx_L5_argtuple_error;
47766       }
47767       if (unlikely(kw_args > 0)) {
47768         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(21, 269, __pyx_L3_error)
47769       }
47770     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
47771       goto __pyx_L5_argtuple_error;
47772     } else {
47773       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
47774     }
47775     __pyx_v_dobj = values[0];
47776   }
47777   goto __pyx_L4_argument_unpacking_done;
47778   __pyx_L5_argtuple_error:;
47779   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(21, 269, __pyx_L3_error)
47780   __pyx_L3_error:;
47781   __Pyx_AddTraceback("yt.geometry.selection_routines.ChainedBooleanSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
47782   __Pyx_RefNannyFinishContext();
47783   return -1;
47784   __pyx_L4_argument_unpacking_done:;
47785   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_22ChainedBooleanSelector___init__(((struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *)__pyx_v_self), __pyx_v_dobj);
47786 
47787   /* function exit code */
47788   __Pyx_RefNannyFinishContext();
47789   return __pyx_r;
47790 }
47791 
47792 static int __pyx_pf_2yt_8geometry_18selection_routines_22ChainedBooleanSelector___init__(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *__pyx_v_self, PyObject *__pyx_v_dobj) {
47793   int __pyx_v_i;
47794   int __pyx_r;
47795   __Pyx_RefNannyDeclarations
47796   PyObject *__pyx_t_1 = NULL;
47797   Py_ssize_t __pyx_t_2;
47798   PyObject *__pyx_t_3 = NULL;
47799   PyObject *__pyx_t_4 = NULL;
47800   PyObject *__pyx_t_5 = NULL;
47801   int __pyx_t_6;
47802   int __pyx_t_7;
47803   int __pyx_t_8;
47804   __Pyx_RefNannySetupContext("__init__", 0);
47805 
47806   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":271
47807  *     def __init__(self, dobj):
47808  *         # These are data objects, not selectors
47809  *         self.n_obj = len(dobj.data_objects)             # <<<<<<<<<<<<<<
47810  *         self.selectors = np.empty(self.n_obj, dtype="object")
47811  *         for i in range(self.n_obj):
47812  */
47813   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_data_objects); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 271, __pyx_L1_error)
47814   __Pyx_GOTREF(__pyx_t_1);
47815   __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(21, 271, __pyx_L1_error)
47816   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
47817   __pyx_v_self->n_obj = __pyx_t_2;
47818 
47819   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":272
47820  *         # These are data objects, not selectors
47821  *         self.n_obj = len(dobj.data_objects)
47822  *         self.selectors = np.empty(self.n_obj, dtype="object")             # <<<<<<<<<<<<<<
47823  *         for i in range(self.n_obj):
47824  *             self.selectors[i] = dobj.data_objects[i].selector
47825  */
47826   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 272, __pyx_L1_error)
47827   __Pyx_GOTREF(__pyx_t_1);
47828   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 272, __pyx_L1_error)
47829   __Pyx_GOTREF(__pyx_t_3);
47830   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
47831   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->n_obj); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 272, __pyx_L1_error)
47832   __Pyx_GOTREF(__pyx_t_1);
47833   __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 272, __pyx_L1_error)
47834   __Pyx_GOTREF(__pyx_t_4);
47835   __Pyx_GIVEREF(__pyx_t_1);
47836   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
47837   __pyx_t_1 = 0;
47838   __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 272, __pyx_L1_error)
47839   __Pyx_GOTREF(__pyx_t_1);
47840   if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_n_s_object) < 0) __PYX_ERR(21, 272, __pyx_L1_error)
47841   __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 272, __pyx_L1_error)
47842   __Pyx_GOTREF(__pyx_t_5);
47843   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
47844   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
47845   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
47846   if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(21, 272, __pyx_L1_error)
47847   __Pyx_GIVEREF(__pyx_t_5);
47848   __Pyx_GOTREF(__pyx_v_self->selectors);
47849   __Pyx_DECREF(((PyObject *)__pyx_v_self->selectors));
47850   __pyx_v_self->selectors = ((PyArrayObject *)__pyx_t_5);
47851   __pyx_t_5 = 0;
47852 
47853   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":273
47854  *         self.n_obj = len(dobj.data_objects)
47855  *         self.selectors = np.empty(self.n_obj, dtype="object")
47856  *         for i in range(self.n_obj):             # <<<<<<<<<<<<<<
47857  *             self.selectors[i] = dobj.data_objects[i].selector
47858  *
47859  */
47860   __pyx_t_6 = __pyx_v_self->n_obj;
47861   __pyx_t_7 = __pyx_t_6;
47862   for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
47863     __pyx_v_i = __pyx_t_8;
47864 
47865     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":274
47866  *         self.selectors = np.empty(self.n_obj, dtype="object")
47867  *         for i in range(self.n_obj):
47868  *             self.selectors[i] = dobj.data_objects[i].selector             # <<<<<<<<<<<<<<
47869  *
47870  * cdef class ChainedBooleanANDSelector(ChainedBooleanSelector):
47871  */
47872     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_dobj, __pyx_n_s_data_objects); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 274, __pyx_L1_error)
47873     __Pyx_GOTREF(__pyx_t_5);
47874     __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_5, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 274, __pyx_L1_error)
47875     __Pyx_GOTREF(__pyx_t_1);
47876     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
47877     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_selector); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 274, __pyx_L1_error)
47878     __Pyx_GOTREF(__pyx_t_5);
47879     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
47880     if (unlikely(__Pyx_SetItemInt(((PyObject *)__pyx_v_self->selectors), __pyx_v_i, __pyx_t_5, int, 1, __Pyx_PyInt_From_int, 0, 1, 1) < 0)) __PYX_ERR(21, 274, __pyx_L1_error)
47881     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
47882   }
47883 
47884   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":269
47885  *     cdef int n_obj
47886  *     cdef np.ndarray selectors
47887  *     def __init__(self, dobj):             # <<<<<<<<<<<<<<
47888  *         # These are data objects, not selectors
47889  *         self.n_obj = len(dobj.data_objects)
47890  */
47891 
47892   /* function exit code */
47893   __pyx_r = 0;
47894   goto __pyx_L0;
47895   __pyx_L1_error:;
47896   __Pyx_XDECREF(__pyx_t_1);
47897   __Pyx_XDECREF(__pyx_t_3);
47898   __Pyx_XDECREF(__pyx_t_4);
47899   __Pyx_XDECREF(__pyx_t_5);
47900   __Pyx_AddTraceback("yt.geometry.selection_routines.ChainedBooleanSelector.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
47901   __pyx_r = -1;
47902   __pyx_L0:;
47903   __Pyx_RefNannyFinishContext();
47904   return __pyx_r;
47905 }
47906 
47907 /* "(tree fragment)":1
47908  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
47909  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47910  * def __setstate_cython__(self, __pyx_state):
47911  */
47912 
47913 /* Python wrapper */
47914 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
47915 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
47916   PyObject *__pyx_r = 0;
47917   __Pyx_RefNannyDeclarations
47918   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
47919   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_2__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *)__pyx_v_self));
47920 
47921   /* function exit code */
47922   __Pyx_RefNannyFinishContext();
47923   return __pyx_r;
47924 }
47925 
47926 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *__pyx_v_self) {
47927   PyObject *__pyx_r = NULL;
47928   __Pyx_RefNannyDeclarations
47929   PyObject *__pyx_t_1 = NULL;
47930   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
47931 
47932   /* "(tree fragment)":2
47933  * def __reduce_cython__(self):
47934  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
47935  * def __setstate_cython__(self, __pyx_state):
47936  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47937  */
47938   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__73, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
47939   __Pyx_GOTREF(__pyx_t_1);
47940   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
47941   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
47942   __PYX_ERR(5, 2, __pyx_L1_error)
47943 
47944   /* "(tree fragment)":1
47945  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
47946  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47947  * def __setstate_cython__(self, __pyx_state):
47948  */
47949 
47950   /* function exit code */
47951   __pyx_L1_error:;
47952   __Pyx_XDECREF(__pyx_t_1);
47953   __Pyx_AddTraceback("yt.geometry.selection_routines.ChainedBooleanSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
47954   __pyx_r = NULL;
47955   __Pyx_XGIVEREF(__pyx_r);
47956   __Pyx_RefNannyFinishContext();
47957   return __pyx_r;
47958 }
47959 
47960 /* "(tree fragment)":3
47961  * def __reduce_cython__(self):
47962  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47963  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
47964  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47965  */
47966 
47967 /* Python wrapper */
47968 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
47969 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
47970   PyObject *__pyx_r = 0;
47971   __Pyx_RefNannyDeclarations
47972   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
47973   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_4__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
47974 
47975   /* function exit code */
47976   __Pyx_RefNannyFinishContext();
47977   return __pyx_r;
47978 }
47979 
47980 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
47981   PyObject *__pyx_r = NULL;
47982   __Pyx_RefNannyDeclarations
47983   PyObject *__pyx_t_1 = NULL;
47984   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
47985 
47986   /* "(tree fragment)":4
47987  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
47988  * def __setstate_cython__(self, __pyx_state):
47989  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
47990  */
47991   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__74, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
47992   __Pyx_GOTREF(__pyx_t_1);
47993   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
47994   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
47995   __PYX_ERR(5, 4, __pyx_L1_error)
47996 
47997   /* "(tree fragment)":3
47998  * def __reduce_cython__(self):
47999  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
48000  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
48001  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
48002  */
48003 
48004   /* function exit code */
48005   __pyx_L1_error:;
48006   __Pyx_XDECREF(__pyx_t_1);
48007   __Pyx_AddTraceback("yt.geometry.selection_routines.ChainedBooleanSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
48008   __pyx_r = NULL;
48009   __Pyx_XGIVEREF(__pyx_r);
48010   __Pyx_RefNannyFinishContext();
48011   return __pyx_r;
48012 }
48013 
48014 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":280
48015  *     @cython.boundscheck(False)
48016  *     @cython.wraparound(False)
48017  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
48018  *                          np.float64_t right_edge[3]) nogil:
48019  *         with gil:
48020  */
48021 
48022 static int __pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
48023   int __pyx_v_i;
48024   int __pyx_r;
48025   __Pyx_RefNannyDeclarations
48026   int __pyx_t_1;
48027   int __pyx_t_2;
48028   int __pyx_t_3;
48029   PyObject *__pyx_t_4 = NULL;
48030   int __pyx_t_5;
48031   #ifdef WITH_THREAD
48032   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48033   #endif
48034   __Pyx_RefNannySetupContext("select_bbox", 0);
48035   #ifdef WITH_THREAD
48036   __Pyx_PyGILState_Release(__pyx_gilstate_save);
48037   #endif
48038 
48039   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":282
48040  *     cdef int select_bbox(self, np.float64_t left_edge[3],
48041  *                          np.float64_t right_edge[3]) nogil:
48042  *         with gil:             # <<<<<<<<<<<<<<
48043  *             for i in range(self.n_obj):
48044  *                 if (<SelectorObject>self.selectors[i]).select_bbox(
48045  */
48046   /*try:*/ {
48047     {
48048         #ifdef WITH_THREAD
48049         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48050         #endif
48051         /*try:*/ {
48052 
48053           /* "yt/geometry/_selection_routines/boolean_selectors.pxi":283
48054  *                          np.float64_t right_edge[3]) nogil:
48055  *         with gil:
48056  *             for i in range(self.n_obj):             # <<<<<<<<<<<<<<
48057  *                 if (<SelectorObject>self.selectors[i]).select_bbox(
48058  *                         left_edge, right_edge) == 0:
48059  */
48060           __pyx_t_1 = __pyx_v_self->__pyx_base.n_obj;
48061           __pyx_t_2 = __pyx_t_1;
48062           for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
48063             __pyx_v_i = __pyx_t_3;
48064 
48065             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":284
48066  *         with gil:
48067  *             for i in range(self.n_obj):
48068  *                 if (<SelectorObject>self.selectors[i]).select_bbox(             # <<<<<<<<<<<<<<
48069  *                         left_edge, right_edge) == 0:
48070  *                     return 0
48071  */
48072             __pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.selectors), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 284, __pyx_L7_error)
48073             __Pyx_GOTREF(__pyx_t_4);
48074 
48075             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":285
48076  *             for i in range(self.n_obj):
48077  *                 if (<SelectorObject>self.selectors[i]).select_bbox(
48078  *                         left_edge, right_edge) == 0:             # <<<<<<<<<<<<<<
48079  *                     return 0
48080  *         return 1
48081  */
48082             __pyx_t_5 = ((((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4)->__pyx_vtab)->select_bbox(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4), __pyx_v_left_edge, __pyx_v_right_edge) == 0) != 0);
48083             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
48084 
48085             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":284
48086  *         with gil:
48087  *             for i in range(self.n_obj):
48088  *                 if (<SelectorObject>self.selectors[i]).select_bbox(             # <<<<<<<<<<<<<<
48089  *                         left_edge, right_edge) == 0:
48090  *                     return 0
48091  */
48092             if (__pyx_t_5) {
48093 
48094               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":286
48095  *                 if (<SelectorObject>self.selectors[i]).select_bbox(
48096  *                         left_edge, right_edge) == 0:
48097  *                     return 0             # <<<<<<<<<<<<<<
48098  *         return 1
48099  *
48100  */
48101               __pyx_r = 0;
48102               goto __pyx_L6_return;
48103 
48104               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":284
48105  *         with gil:
48106  *             for i in range(self.n_obj):
48107  *                 if (<SelectorObject>self.selectors[i]).select_bbox(             # <<<<<<<<<<<<<<
48108  *                         left_edge, right_edge) == 0:
48109  *                     return 0
48110  */
48111             }
48112           }
48113         }
48114 
48115         /* "yt/geometry/_selection_routines/boolean_selectors.pxi":282
48116  *     cdef int select_bbox(self, np.float64_t left_edge[3],
48117  *                          np.float64_t right_edge[3]) nogil:
48118  *         with gil:             # <<<<<<<<<<<<<<
48119  *             for i in range(self.n_obj):
48120  *                 if (<SelectorObject>self.selectors[i]).select_bbox(
48121  */
48122         /*finally:*/ {
48123           /*normal exit:*/{
48124             #ifdef WITH_THREAD
48125             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48126             #endif
48127             goto __pyx_L8;
48128           }
48129           __pyx_L6_return: {
48130             #ifdef WITH_THREAD
48131             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48132             #endif
48133             goto __pyx_L3_return;
48134           }
48135           __pyx_L7_error: {
48136             #ifdef WITH_THREAD
48137             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48138             #endif
48139             goto __pyx_L4_error;
48140           }
48141           __pyx_L8:;
48142         }
48143     }
48144 
48145     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":287
48146  *                         left_edge, right_edge) == 0:
48147  *                     return 0
48148  *         return 1             # <<<<<<<<<<<<<<
48149  *
48150  *     @cython.cdivision(True)
48151  */
48152     __pyx_r = 1;
48153     goto __pyx_L3_return;
48154   }
48155 
48156   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":282
48157  *     cdef int select_bbox(self, np.float64_t left_edge[3],
48158  *                          np.float64_t right_edge[3]) nogil:
48159  *         with gil:             # <<<<<<<<<<<<<<
48160  *             for i in range(self.n_obj):
48161  *                 if (<SelectorObject>self.selectors[i]).select_bbox(
48162  */
48163   /*finally:*/ {
48164     __pyx_L3_return: {
48165       #ifdef WITH_THREAD
48166       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48167       #endif
48168       goto __pyx_L0;
48169     }
48170     __pyx_L4_error: {
48171       #ifdef WITH_THREAD
48172       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48173       #endif
48174       goto __pyx_L1_error;
48175     }
48176   }
48177 
48178   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":280
48179  *     @cython.boundscheck(False)
48180  *     @cython.wraparound(False)
48181  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
48182  *                          np.float64_t right_edge[3]) nogil:
48183  *         with gil:
48184  */
48185 
48186   /* function exit code */
48187   __pyx_r = 0;
48188   goto __pyx_L0;
48189   __pyx_L1_error:;
48190   __Pyx_XDECREF(__pyx_t_4);
48191   __Pyx_WriteUnraisable("yt.geometry.selection_routines.ChainedBooleanANDSelector.select_bbox", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
48192   __pyx_r = 0;
48193   __pyx_L0:;
48194   #ifdef WITH_THREAD
48195   __Pyx_PyGILState_Release(__pyx_gilstate_save);
48196   #endif
48197   return __pyx_r;
48198 }
48199 
48200 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":292
48201  *     @cython.boundscheck(False)
48202  *     @cython.wraparound(False)
48203  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
48204  *                               np.float64_t right_edge[3]) nogil:
48205  *         cdef int selected = 1
48206  */
48207 
48208 static int __pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
48209   int __pyx_v_selected;
48210   int __pyx_v_ret;
48211   int __pyx_v_i;
48212   int __pyx_r;
48213   __Pyx_RefNannyDeclarations
48214   int __pyx_t_1;
48215   int __pyx_t_2;
48216   int __pyx_t_3;
48217   PyObject *__pyx_t_4 = NULL;
48218   #ifdef WITH_THREAD
48219   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48220   #endif
48221   __Pyx_RefNannySetupContext("select_bbox_edge", 0);
48222   #ifdef WITH_THREAD
48223   __Pyx_PyGILState_Release(__pyx_gilstate_save);
48224   #endif
48225 
48226   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":294
48227  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
48228  *                               np.float64_t right_edge[3]) nogil:
48229  *         cdef int selected = 1             # <<<<<<<<<<<<<<
48230  *         cdef int ret
48231  *         with gil:
48232  */
48233   /*try:*/ {
48234     __pyx_v_selected = 1;
48235 
48236     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":296
48237  *         cdef int selected = 1
48238  *         cdef int ret
48239  *         with gil:             # <<<<<<<<<<<<<<
48240  *             for i in range(self.n_obj):
48241  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(
48242  */
48243     {
48244         #ifdef WITH_THREAD
48245         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48246         #endif
48247         /*try:*/ {
48248 
48249           /* "yt/geometry/_selection_routines/boolean_selectors.pxi":297
48250  *         cdef int ret
48251  *         with gil:
48252  *             for i in range(self.n_obj):             # <<<<<<<<<<<<<<
48253  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(
48254  *                     left_edge, right_edge)
48255  */
48256           __pyx_t_1 = __pyx_v_self->__pyx_base.n_obj;
48257           __pyx_t_2 = __pyx_t_1;
48258           for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
48259             __pyx_v_i = __pyx_t_3;
48260 
48261             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":298
48262  *         with gil:
48263  *             for i in range(self.n_obj):
48264  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(             # <<<<<<<<<<<<<<
48265  *                     left_edge, right_edge)
48266  *                 if ret == 0:
48267  */
48268             __pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.selectors), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 298, __pyx_L7_error)
48269             __Pyx_GOTREF(__pyx_t_4);
48270 
48271             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":299
48272  *             for i in range(self.n_obj):
48273  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(
48274  *                     left_edge, right_edge)             # <<<<<<<<<<<<<<
48275  *                 if ret == 0:
48276  *                     return 0
48277  */
48278             __pyx_v_ret = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4)->__pyx_vtab)->select_bbox_edge(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4), __pyx_v_left_edge, __pyx_v_right_edge);
48279             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
48280 
48281             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":300
48282  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(
48283  *                     left_edge, right_edge)
48284  *                 if ret == 0:             # <<<<<<<<<<<<<<
48285  *                     return 0
48286  *                 elif ret == 2:
48287  */
48288             switch (__pyx_v_ret) {
48289               case 0:
48290 
48291               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":301
48292  *                     left_edge, right_edge)
48293  *                 if ret == 0:
48294  *                     return 0             # <<<<<<<<<<<<<<
48295  *                 elif ret == 2:
48296  *                     selected = 2
48297  */
48298               __pyx_r = 0;
48299               goto __pyx_L6_return;
48300 
48301               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":300
48302  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(
48303  *                     left_edge, right_edge)
48304  *                 if ret == 0:             # <<<<<<<<<<<<<<
48305  *                     return 0
48306  *                 elif ret == 2:
48307  */
48308               break;
48309               case 2:
48310 
48311               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":303
48312  *                     return 0
48313  *                 elif ret == 2:
48314  *                     selected = 2             # <<<<<<<<<<<<<<
48315  *         return selected
48316  *
48317  */
48318               __pyx_v_selected = 2;
48319 
48320               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":302
48321  *                 if ret == 0:
48322  *                     return 0
48323  *                 elif ret == 2:             # <<<<<<<<<<<<<<
48324  *                     selected = 2
48325  *         return selected
48326  */
48327               break;
48328               default: break;
48329             }
48330           }
48331         }
48332 
48333         /* "yt/geometry/_selection_routines/boolean_selectors.pxi":296
48334  *         cdef int selected = 1
48335  *         cdef int ret
48336  *         with gil:             # <<<<<<<<<<<<<<
48337  *             for i in range(self.n_obj):
48338  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(
48339  */
48340         /*finally:*/ {
48341           /*normal exit:*/{
48342             #ifdef WITH_THREAD
48343             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48344             #endif
48345             goto __pyx_L8;
48346           }
48347           __pyx_L6_return: {
48348             #ifdef WITH_THREAD
48349             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48350             #endif
48351             goto __pyx_L3_return;
48352           }
48353           __pyx_L7_error: {
48354             #ifdef WITH_THREAD
48355             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48356             #endif
48357             goto __pyx_L4_error;
48358           }
48359           __pyx_L8:;
48360         }
48361     }
48362 
48363     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":304
48364  *                 elif ret == 2:
48365  *                     selected = 2
48366  *         return selected             # <<<<<<<<<<<<<<
48367  *
48368  *     @cython.cdivision(True)
48369  */
48370     __pyx_r = __pyx_v_selected;
48371     goto __pyx_L3_return;
48372   }
48373 
48374   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":294
48375  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
48376  *                               np.float64_t right_edge[3]) nogil:
48377  *         cdef int selected = 1             # <<<<<<<<<<<<<<
48378  *         cdef int ret
48379  *         with gil:
48380  */
48381   /*finally:*/ {
48382     __pyx_L3_return: {
48383       #ifdef WITH_THREAD
48384       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48385       #endif
48386       goto __pyx_L0;
48387     }
48388     __pyx_L4_error: {
48389       #ifdef WITH_THREAD
48390       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48391       #endif
48392       goto __pyx_L1_error;
48393     }
48394   }
48395 
48396   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":292
48397  *     @cython.boundscheck(False)
48398  *     @cython.wraparound(False)
48399  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
48400  *                               np.float64_t right_edge[3]) nogil:
48401  *         cdef int selected = 1
48402  */
48403 
48404   /* function exit code */
48405   __pyx_r = 0;
48406   goto __pyx_L0;
48407   __pyx_L1_error:;
48408   __Pyx_XDECREF(__pyx_t_4);
48409   __Pyx_WriteUnraisable("yt.geometry.selection_routines.ChainedBooleanANDSelector.select_bbox_edge", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
48410   __pyx_r = 0;
48411   __pyx_L0:;
48412   #ifdef WITH_THREAD
48413   __Pyx_PyGILState_Release(__pyx_gilstate_save);
48414   #endif
48415   return __pyx_r;
48416 }
48417 
48418 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":309
48419  *     @cython.boundscheck(False)
48420  *     @cython.wraparound(False)
48421  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
48422  *                          np.float64_t right_edge[3], np.int32_t level,
48423  *                          Oct *o = NULL) nogil:
48424  */
48425 
48426 static int __pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_grid *__pyx_optional_args) {
48427 
48428   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":311
48429  *     cdef int select_grid(self, np.float64_t left_edge[3],
48430  *                          np.float64_t right_edge[3], np.int32_t level,
48431  *                          Oct *o = NULL) nogil:             # <<<<<<<<<<<<<<
48432  *         with gil:
48433  *             for i in range(self.n_obj):
48434  */
48435   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_o = ((struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *)NULL);
48436   int __pyx_v_i;
48437   int __pyx_r;
48438   __Pyx_RefNannyDeclarations
48439   int __pyx_t_1;
48440   int __pyx_t_2;
48441   int __pyx_t_3;
48442   PyObject *__pyx_t_4 = NULL;
48443   int __pyx_t_5;
48444   struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid __pyx_t_6;
48445   int __pyx_t_7;
48446   #ifdef WITH_THREAD
48447   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48448   #endif
48449   __Pyx_RefNannySetupContext("select_grid", 0);
48450   if (__pyx_optional_args) {
48451     if (__pyx_optional_args->__pyx_n > 0) {
48452       __pyx_v_o = __pyx_optional_args->o;
48453     }
48454   }
48455   #ifdef WITH_THREAD
48456   __Pyx_PyGILState_Release(__pyx_gilstate_save);
48457   #endif
48458 
48459   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":312
48460  *                          np.float64_t right_edge[3], np.int32_t level,
48461  *                          Oct *o = NULL) nogil:
48462  *         with gil:             # <<<<<<<<<<<<<<
48463  *             for i in range(self.n_obj):
48464  *                 if (<SelectorObject>self.selectors[i]).select_grid(
48465  */
48466   /*try:*/ {
48467     {
48468         #ifdef WITH_THREAD
48469         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48470         #endif
48471         /*try:*/ {
48472 
48473           /* "yt/geometry/_selection_routines/boolean_selectors.pxi":313
48474  *                          Oct *o = NULL) nogil:
48475  *         with gil:
48476  *             for i in range(self.n_obj):             # <<<<<<<<<<<<<<
48477  *                 if (<SelectorObject>self.selectors[i]).select_grid(
48478  *                         left_edge, right_edge, level, o) == 0:
48479  */
48480           __pyx_t_1 = __pyx_v_self->__pyx_base.n_obj;
48481           __pyx_t_2 = __pyx_t_1;
48482           for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
48483             __pyx_v_i = __pyx_t_3;
48484 
48485             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":314
48486  *         with gil:
48487  *             for i in range(self.n_obj):
48488  *                 if (<SelectorObject>self.selectors[i]).select_grid(             # <<<<<<<<<<<<<<
48489  *                         left_edge, right_edge, level, o) == 0:
48490  *                     return 0
48491  */
48492             __pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.selectors), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 314, __pyx_L7_error)
48493             __Pyx_GOTREF(__pyx_t_4);
48494 
48495             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":315
48496  *             for i in range(self.n_obj):
48497  *                 if (<SelectorObject>self.selectors[i]).select_grid(
48498  *                         left_edge, right_edge, level, o) == 0:             # <<<<<<<<<<<<<<
48499  *                     return 0
48500  *         return 1
48501  */
48502             __pyx_t_6.__pyx_n = 1;
48503             __pyx_t_6.o = __pyx_v_o;
48504             __pyx_t_5 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4)->__pyx_vtab)->select_grid(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4), __pyx_v_left_edge, __pyx_v_right_edge, __pyx_v_level, &__pyx_t_6);
48505             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
48506             __pyx_t_7 = ((__pyx_t_5 == 0) != 0);
48507 
48508             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":314
48509  *         with gil:
48510  *             for i in range(self.n_obj):
48511  *                 if (<SelectorObject>self.selectors[i]).select_grid(             # <<<<<<<<<<<<<<
48512  *                         left_edge, right_edge, level, o) == 0:
48513  *                     return 0
48514  */
48515             if (__pyx_t_7) {
48516 
48517               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":316
48518  *                 if (<SelectorObject>self.selectors[i]).select_grid(
48519  *                         left_edge, right_edge, level, o) == 0:
48520  *                     return 0             # <<<<<<<<<<<<<<
48521  *         return 1
48522  *
48523  */
48524               __pyx_r = 0;
48525               goto __pyx_L6_return;
48526 
48527               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":314
48528  *         with gil:
48529  *             for i in range(self.n_obj):
48530  *                 if (<SelectorObject>self.selectors[i]).select_grid(             # <<<<<<<<<<<<<<
48531  *                         left_edge, right_edge, level, o) == 0:
48532  *                     return 0
48533  */
48534             }
48535           }
48536         }
48537 
48538         /* "yt/geometry/_selection_routines/boolean_selectors.pxi":312
48539  *                          np.float64_t right_edge[3], np.int32_t level,
48540  *                          Oct *o = NULL) nogil:
48541  *         with gil:             # <<<<<<<<<<<<<<
48542  *             for i in range(self.n_obj):
48543  *                 if (<SelectorObject>self.selectors[i]).select_grid(
48544  */
48545         /*finally:*/ {
48546           /*normal exit:*/{
48547             #ifdef WITH_THREAD
48548             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48549             #endif
48550             goto __pyx_L8;
48551           }
48552           __pyx_L6_return: {
48553             #ifdef WITH_THREAD
48554             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48555             #endif
48556             goto __pyx_L3_return;
48557           }
48558           __pyx_L7_error: {
48559             #ifdef WITH_THREAD
48560             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48561             #endif
48562             goto __pyx_L4_error;
48563           }
48564           __pyx_L8:;
48565         }
48566     }
48567 
48568     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":317
48569  *                         left_edge, right_edge, level, o) == 0:
48570  *                     return 0
48571  *         return 1             # <<<<<<<<<<<<<<
48572  *
48573  *     @cython.cdivision(True)
48574  */
48575     __pyx_r = 1;
48576     goto __pyx_L3_return;
48577   }
48578 
48579   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":312
48580  *                          np.float64_t right_edge[3], np.int32_t level,
48581  *                          Oct *o = NULL) nogil:
48582  *         with gil:             # <<<<<<<<<<<<<<
48583  *             for i in range(self.n_obj):
48584  *                 if (<SelectorObject>self.selectors[i]).select_grid(
48585  */
48586   /*finally:*/ {
48587     __pyx_L3_return: {
48588       #ifdef WITH_THREAD
48589       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48590       #endif
48591       goto __pyx_L0;
48592     }
48593     __pyx_L4_error: {
48594       #ifdef WITH_THREAD
48595       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48596       #endif
48597       goto __pyx_L1_error;
48598     }
48599   }
48600 
48601   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":309
48602  *     @cython.boundscheck(False)
48603  *     @cython.wraparound(False)
48604  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
48605  *                          np.float64_t right_edge[3], np.int32_t level,
48606  *                          Oct *o = NULL) nogil:
48607  */
48608 
48609   /* function exit code */
48610   __pyx_r = 0;
48611   goto __pyx_L0;
48612   __pyx_L1_error:;
48613   __Pyx_XDECREF(__pyx_t_4);
48614   __Pyx_WriteUnraisable("yt.geometry.selection_routines.ChainedBooleanANDSelector.select_grid", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
48615   __pyx_r = 0;
48616   __pyx_L0:;
48617   #ifdef WITH_THREAD
48618   __Pyx_PyGILState_Release(__pyx_gilstate_save);
48619   #endif
48620   return __pyx_r;
48621 }
48622 
48623 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":322
48624  *     @cython.boundscheck(False)
48625  *     @cython.wraparound(False)
48626  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
48627  *         with gil:
48628  *             for i in range(self.n_obj):
48629  */
48630 
48631 static int __pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
48632   int __pyx_v_i;
48633   int __pyx_r;
48634   __Pyx_RefNannyDeclarations
48635   int __pyx_t_1;
48636   int __pyx_t_2;
48637   int __pyx_t_3;
48638   PyObject *__pyx_t_4 = NULL;
48639   int __pyx_t_5;
48640   #ifdef WITH_THREAD
48641   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48642   #endif
48643   __Pyx_RefNannySetupContext("select_cell", 0);
48644   #ifdef WITH_THREAD
48645   __Pyx_PyGILState_Release(__pyx_gilstate_save);
48646   #endif
48647 
48648   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":323
48649  *     @cython.wraparound(False)
48650  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
48651  *         with gil:             # <<<<<<<<<<<<<<
48652  *             for i in range(self.n_obj):
48653  *                 if (<SelectorObject>self.selectors[i]).select_cell(
48654  */
48655   /*try:*/ {
48656     {
48657         #ifdef WITH_THREAD
48658         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48659         #endif
48660         /*try:*/ {
48661 
48662           /* "yt/geometry/_selection_routines/boolean_selectors.pxi":324
48663  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
48664  *         with gil:
48665  *             for i in range(self.n_obj):             # <<<<<<<<<<<<<<
48666  *                 if (<SelectorObject>self.selectors[i]).select_cell(
48667  *                         pos, dds) == 0:
48668  */
48669           __pyx_t_1 = __pyx_v_self->__pyx_base.n_obj;
48670           __pyx_t_2 = __pyx_t_1;
48671           for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
48672             __pyx_v_i = __pyx_t_3;
48673 
48674             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":325
48675  *         with gil:
48676  *             for i in range(self.n_obj):
48677  *                 if (<SelectorObject>self.selectors[i]).select_cell(             # <<<<<<<<<<<<<<
48678  *                         pos, dds) == 0:
48679  *                     return 0
48680  */
48681             __pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.selectors), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 325, __pyx_L7_error)
48682             __Pyx_GOTREF(__pyx_t_4);
48683 
48684             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":326
48685  *             for i in range(self.n_obj):
48686  *                 if (<SelectorObject>self.selectors[i]).select_cell(
48687  *                         pos, dds) == 0:             # <<<<<<<<<<<<<<
48688  *                     return 0
48689  *         return 1
48690  */
48691             __pyx_t_5 = ((((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4)->__pyx_vtab)->select_cell(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4), __pyx_v_pos, __pyx_v_dds) == 0) != 0);
48692             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
48693 
48694             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":325
48695  *         with gil:
48696  *             for i in range(self.n_obj):
48697  *                 if (<SelectorObject>self.selectors[i]).select_cell(             # <<<<<<<<<<<<<<
48698  *                         pos, dds) == 0:
48699  *                     return 0
48700  */
48701             if (__pyx_t_5) {
48702 
48703               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":327
48704  *                 if (<SelectorObject>self.selectors[i]).select_cell(
48705  *                         pos, dds) == 0:
48706  *                     return 0             # <<<<<<<<<<<<<<
48707  *         return 1
48708  *
48709  */
48710               __pyx_r = 0;
48711               goto __pyx_L6_return;
48712 
48713               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":325
48714  *         with gil:
48715  *             for i in range(self.n_obj):
48716  *                 if (<SelectorObject>self.selectors[i]).select_cell(             # <<<<<<<<<<<<<<
48717  *                         pos, dds) == 0:
48718  *                     return 0
48719  */
48720             }
48721           }
48722         }
48723 
48724         /* "yt/geometry/_selection_routines/boolean_selectors.pxi":323
48725  *     @cython.wraparound(False)
48726  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
48727  *         with gil:             # <<<<<<<<<<<<<<
48728  *             for i in range(self.n_obj):
48729  *                 if (<SelectorObject>self.selectors[i]).select_cell(
48730  */
48731         /*finally:*/ {
48732           /*normal exit:*/{
48733             #ifdef WITH_THREAD
48734             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48735             #endif
48736             goto __pyx_L8;
48737           }
48738           __pyx_L6_return: {
48739             #ifdef WITH_THREAD
48740             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48741             #endif
48742             goto __pyx_L3_return;
48743           }
48744           __pyx_L7_error: {
48745             #ifdef WITH_THREAD
48746             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48747             #endif
48748             goto __pyx_L4_error;
48749           }
48750           __pyx_L8:;
48751         }
48752     }
48753 
48754     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":328
48755  *                         pos, dds) == 0:
48756  *                     return 0
48757  *         return 1             # <<<<<<<<<<<<<<
48758  *
48759  *     @cython.cdivision(True)
48760  */
48761     __pyx_r = 1;
48762     goto __pyx_L3_return;
48763   }
48764 
48765   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":323
48766  *     @cython.wraparound(False)
48767  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
48768  *         with gil:             # <<<<<<<<<<<<<<
48769  *             for i in range(self.n_obj):
48770  *                 if (<SelectorObject>self.selectors[i]).select_cell(
48771  */
48772   /*finally:*/ {
48773     __pyx_L3_return: {
48774       #ifdef WITH_THREAD
48775       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48776       #endif
48777       goto __pyx_L0;
48778     }
48779     __pyx_L4_error: {
48780       #ifdef WITH_THREAD
48781       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48782       #endif
48783       goto __pyx_L1_error;
48784     }
48785   }
48786 
48787   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":322
48788  *     @cython.boundscheck(False)
48789  *     @cython.wraparound(False)
48790  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
48791  *         with gil:
48792  *             for i in range(self.n_obj):
48793  */
48794 
48795   /* function exit code */
48796   __pyx_r = 0;
48797   goto __pyx_L0;
48798   __pyx_L1_error:;
48799   __Pyx_XDECREF(__pyx_t_4);
48800   __Pyx_WriteUnraisable("yt.geometry.selection_routines.ChainedBooleanANDSelector.select_cell", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
48801   __pyx_r = 0;
48802   __pyx_L0:;
48803   #ifdef WITH_THREAD
48804   __Pyx_PyGILState_Release(__pyx_gilstate_save);
48805   #endif
48806   return __pyx_r;
48807 }
48808 
48809 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":333
48810  *     @cython.boundscheck(False)
48811  *     @cython.wraparound(False)
48812  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
48813  *         with gil:
48814  *             for i in range(self.n_obj):
48815  */
48816 
48817 static int __pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
48818   int __pyx_v_i;
48819   int __pyx_r;
48820   __Pyx_RefNannyDeclarations
48821   int __pyx_t_1;
48822   int __pyx_t_2;
48823   int __pyx_t_3;
48824   PyObject *__pyx_t_4 = NULL;
48825   int __pyx_t_5;
48826   #ifdef WITH_THREAD
48827   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48828   #endif
48829   __Pyx_RefNannySetupContext("select_point", 0);
48830   #ifdef WITH_THREAD
48831   __Pyx_PyGILState_Release(__pyx_gilstate_save);
48832   #endif
48833 
48834   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":334
48835  *     @cython.wraparound(False)
48836  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
48837  *         with gil:             # <<<<<<<<<<<<<<
48838  *             for i in range(self.n_obj):
48839  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 0:
48840  */
48841   /*try:*/ {
48842     {
48843         #ifdef WITH_THREAD
48844         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48845         #endif
48846         /*try:*/ {
48847 
48848           /* "yt/geometry/_selection_routines/boolean_selectors.pxi":335
48849  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
48850  *         with gil:
48851  *             for i in range(self.n_obj):             # <<<<<<<<<<<<<<
48852  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 0:
48853  *                     return 0
48854  */
48855           __pyx_t_1 = __pyx_v_self->__pyx_base.n_obj;
48856           __pyx_t_2 = __pyx_t_1;
48857           for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
48858             __pyx_v_i = __pyx_t_3;
48859 
48860             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":336
48861  *         with gil:
48862  *             for i in range(self.n_obj):
48863  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 0:             # <<<<<<<<<<<<<<
48864  *                     return 0
48865  *         return 1
48866  */
48867             __pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.selectors), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 336, __pyx_L7_error)
48868             __Pyx_GOTREF(__pyx_t_4);
48869             __pyx_t_5 = ((((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4)->__pyx_vtab)->select_point(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4), __pyx_v_pos) == 0) != 0);
48870             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
48871             if (__pyx_t_5) {
48872 
48873               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":337
48874  *             for i in range(self.n_obj):
48875  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 0:
48876  *                     return 0             # <<<<<<<<<<<<<<
48877  *         return 1
48878  *
48879  */
48880               __pyx_r = 0;
48881               goto __pyx_L6_return;
48882 
48883               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":336
48884  *         with gil:
48885  *             for i in range(self.n_obj):
48886  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 0:             # <<<<<<<<<<<<<<
48887  *                     return 0
48888  *         return 1
48889  */
48890             }
48891           }
48892         }
48893 
48894         /* "yt/geometry/_selection_routines/boolean_selectors.pxi":334
48895  *     @cython.wraparound(False)
48896  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
48897  *         with gil:             # <<<<<<<<<<<<<<
48898  *             for i in range(self.n_obj):
48899  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 0:
48900  */
48901         /*finally:*/ {
48902           /*normal exit:*/{
48903             #ifdef WITH_THREAD
48904             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48905             #endif
48906             goto __pyx_L8;
48907           }
48908           __pyx_L6_return: {
48909             #ifdef WITH_THREAD
48910             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48911             #endif
48912             goto __pyx_L3_return;
48913           }
48914           __pyx_L7_error: {
48915             #ifdef WITH_THREAD
48916             __Pyx_PyGILState_Release(__pyx_gilstate_save);
48917             #endif
48918             goto __pyx_L4_error;
48919           }
48920           __pyx_L8:;
48921         }
48922     }
48923 
48924     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":338
48925  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 0:
48926  *                     return 0
48927  *         return 1             # <<<<<<<<<<<<<<
48928  *
48929  *     @cython.cdivision(True)
48930  */
48931     __pyx_r = 1;
48932     goto __pyx_L3_return;
48933   }
48934 
48935   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":334
48936  *     @cython.wraparound(False)
48937  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
48938  *         with gil:             # <<<<<<<<<<<<<<
48939  *             for i in range(self.n_obj):
48940  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 0:
48941  */
48942   /*finally:*/ {
48943     __pyx_L3_return: {
48944       #ifdef WITH_THREAD
48945       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48946       #endif
48947       goto __pyx_L0;
48948     }
48949     __pyx_L4_error: {
48950       #ifdef WITH_THREAD
48951       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48952       #endif
48953       goto __pyx_L1_error;
48954     }
48955   }
48956 
48957   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":333
48958  *     @cython.boundscheck(False)
48959  *     @cython.wraparound(False)
48960  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
48961  *         with gil:
48962  *             for i in range(self.n_obj):
48963  */
48964 
48965   /* function exit code */
48966   __pyx_r = 0;
48967   goto __pyx_L0;
48968   __pyx_L1_error:;
48969   __Pyx_XDECREF(__pyx_t_4);
48970   __Pyx_WriteUnraisable("yt.geometry.selection_routines.ChainedBooleanANDSelector.select_point", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
48971   __pyx_r = 0;
48972   __pyx_L0:;
48973   #ifdef WITH_THREAD
48974   __Pyx_PyGILState_Release(__pyx_gilstate_save);
48975   #endif
48976   return __pyx_r;
48977 }
48978 
48979 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":343
48980  *     @cython.boundscheck(False)
48981  *     @cython.wraparound(False)
48982  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
48983  *         with gil:
48984  *             for i in range(self.n_obj):
48985  */
48986 
48987 static int __pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
48988   int __pyx_v_i;
48989   int __pyx_r;
48990   __Pyx_RefNannyDeclarations
48991   int __pyx_t_1;
48992   int __pyx_t_2;
48993   int __pyx_t_3;
48994   PyObject *__pyx_t_4 = NULL;
48995   int __pyx_t_5;
48996   #ifdef WITH_THREAD
48997   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
48998   #endif
48999   __Pyx_RefNannySetupContext("select_sphere", 0);
49000   #ifdef WITH_THREAD
49001   __Pyx_PyGILState_Release(__pyx_gilstate_save);
49002   #endif
49003 
49004   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":344
49005  *     @cython.wraparound(False)
49006  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
49007  *         with gil:             # <<<<<<<<<<<<<<
49008  *             for i in range(self.n_obj):
49009  *                 if (<SelectorObject>self.selectors[i]).select_sphere(
49010  */
49011   /*try:*/ {
49012     {
49013         #ifdef WITH_THREAD
49014         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49015         #endif
49016         /*try:*/ {
49017 
49018           /* "yt/geometry/_selection_routines/boolean_selectors.pxi":345
49019  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
49020  *         with gil:
49021  *             for i in range(self.n_obj):             # <<<<<<<<<<<<<<
49022  *                 if (<SelectorObject>self.selectors[i]).select_sphere(
49023  *                         pos, radius) == 0:
49024  */
49025           __pyx_t_1 = __pyx_v_self->__pyx_base.n_obj;
49026           __pyx_t_2 = __pyx_t_1;
49027           for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
49028             __pyx_v_i = __pyx_t_3;
49029 
49030             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":346
49031  *         with gil:
49032  *             for i in range(self.n_obj):
49033  *                 if (<SelectorObject>self.selectors[i]).select_sphere(             # <<<<<<<<<<<<<<
49034  *                         pos, radius) == 0:
49035  *                     return 0
49036  */
49037             __pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.selectors), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 346, __pyx_L7_error)
49038             __Pyx_GOTREF(__pyx_t_4);
49039 
49040             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":347
49041  *             for i in range(self.n_obj):
49042  *                 if (<SelectorObject>self.selectors[i]).select_sphere(
49043  *                         pos, radius) == 0:             # <<<<<<<<<<<<<<
49044  *                     return 0
49045  *         return 1
49046  */
49047             __pyx_t_5 = ((((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4)->__pyx_vtab)->select_sphere(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4), __pyx_v_pos, __pyx_v_radius) == 0) != 0);
49048             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
49049 
49050             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":346
49051  *         with gil:
49052  *             for i in range(self.n_obj):
49053  *                 if (<SelectorObject>self.selectors[i]).select_sphere(             # <<<<<<<<<<<<<<
49054  *                         pos, radius) == 0:
49055  *                     return 0
49056  */
49057             if (__pyx_t_5) {
49058 
49059               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":348
49060  *                 if (<SelectorObject>self.selectors[i]).select_sphere(
49061  *                         pos, radius) == 0:
49062  *                     return 0             # <<<<<<<<<<<<<<
49063  *         return 1
49064  *
49065  */
49066               __pyx_r = 0;
49067               goto __pyx_L6_return;
49068 
49069               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":346
49070  *         with gil:
49071  *             for i in range(self.n_obj):
49072  *                 if (<SelectorObject>self.selectors[i]).select_sphere(             # <<<<<<<<<<<<<<
49073  *                         pos, radius) == 0:
49074  *                     return 0
49075  */
49076             }
49077           }
49078         }
49079 
49080         /* "yt/geometry/_selection_routines/boolean_selectors.pxi":344
49081  *     @cython.wraparound(False)
49082  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
49083  *         with gil:             # <<<<<<<<<<<<<<
49084  *             for i in range(self.n_obj):
49085  *                 if (<SelectorObject>self.selectors[i]).select_sphere(
49086  */
49087         /*finally:*/ {
49088           /*normal exit:*/{
49089             #ifdef WITH_THREAD
49090             __Pyx_PyGILState_Release(__pyx_gilstate_save);
49091             #endif
49092             goto __pyx_L8;
49093           }
49094           __pyx_L6_return: {
49095             #ifdef WITH_THREAD
49096             __Pyx_PyGILState_Release(__pyx_gilstate_save);
49097             #endif
49098             goto __pyx_L3_return;
49099           }
49100           __pyx_L7_error: {
49101             #ifdef WITH_THREAD
49102             __Pyx_PyGILState_Release(__pyx_gilstate_save);
49103             #endif
49104             goto __pyx_L4_error;
49105           }
49106           __pyx_L8:;
49107         }
49108     }
49109 
49110     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":349
49111  *                         pos, radius) == 0:
49112  *                     return 0
49113  *         return 1             # <<<<<<<<<<<<<<
49114  *
49115  *     def _hash_vals(self):
49116  */
49117     __pyx_r = 1;
49118     goto __pyx_L3_return;
49119   }
49120 
49121   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":344
49122  *     @cython.wraparound(False)
49123  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
49124  *         with gil:             # <<<<<<<<<<<<<<
49125  *             for i in range(self.n_obj):
49126  *                 if (<SelectorObject>self.selectors[i]).select_sphere(
49127  */
49128   /*finally:*/ {
49129     __pyx_L3_return: {
49130       #ifdef WITH_THREAD
49131       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49132       #endif
49133       goto __pyx_L0;
49134     }
49135     __pyx_L4_error: {
49136       #ifdef WITH_THREAD
49137       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49138       #endif
49139       goto __pyx_L1_error;
49140     }
49141   }
49142 
49143   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":343
49144  *     @cython.boundscheck(False)
49145  *     @cython.wraparound(False)
49146  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
49147  *         with gil:
49148  *             for i in range(self.n_obj):
49149  */
49150 
49151   /* function exit code */
49152   __pyx_r = 0;
49153   goto __pyx_L0;
49154   __pyx_L1_error:;
49155   __Pyx_XDECREF(__pyx_t_4);
49156   __Pyx_WriteUnraisable("yt.geometry.selection_routines.ChainedBooleanANDSelector.select_sphere", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
49157   __pyx_r = 0;
49158   __pyx_L0:;
49159   #ifdef WITH_THREAD
49160   __Pyx_PyGILState_Release(__pyx_gilstate_save);
49161   #endif
49162   return __pyx_r;
49163 }
49164 
49165 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":351
49166  *         return 1
49167  *
49168  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
49169  *         v = ("chained_and",)
49170  *         for s in self.selectors:
49171  */
49172 
49173 /* Python wrapper */
49174 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
49175 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
49176   PyObject *__pyx_r = 0;
49177   __Pyx_RefNannyDeclarations
49178   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
49179   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector__hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *)__pyx_v_self));
49180 
49181   /* function exit code */
49182   __Pyx_RefNannyFinishContext();
49183   return __pyx_r;
49184 }
49185 
49186 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self) {
49187   PyObject *__pyx_v_v = NULL;
49188   PyObject *__pyx_v_s = NULL;
49189   PyObject *__pyx_r = NULL;
49190   __Pyx_RefNannyDeclarations
49191   PyObject *__pyx_t_1 = NULL;
49192   Py_ssize_t __pyx_t_2;
49193   PyObject *(*__pyx_t_3)(PyObject *);
49194   PyObject *__pyx_t_4 = NULL;
49195   PyObject *__pyx_t_5 = NULL;
49196   PyObject *__pyx_t_6 = NULL;
49197   __Pyx_RefNannySetupContext("_hash_vals", 0);
49198 
49199   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":352
49200  *
49201  *     def _hash_vals(self):
49202  *         v = ("chained_and",)             # <<<<<<<<<<<<<<
49203  *         for s in self.selectors:
49204  *             v += s._hash_vals()
49205  */
49206   __Pyx_INCREF(__pyx_tuple__75);
49207   __pyx_v_v = __pyx_tuple__75;
49208 
49209   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":353
49210  *     def _hash_vals(self):
49211  *         v = ("chained_and",)
49212  *         for s in self.selectors:             # <<<<<<<<<<<<<<
49213  *             v += s._hash_vals()
49214  *         return v
49215  */
49216   if (likely(PyList_CheckExact(((PyObject *)__pyx_v_self->__pyx_base.selectors))) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->__pyx_base.selectors))) {
49217     __pyx_t_1 = ((PyObject *)__pyx_v_self->__pyx_base.selectors); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
49218     __pyx_t_3 = NULL;
49219   } else {
49220     __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)__pyx_v_self->__pyx_base.selectors)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 353, __pyx_L1_error)
49221     __Pyx_GOTREF(__pyx_t_1);
49222     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 353, __pyx_L1_error)
49223   }
49224   for (;;) {
49225     if (likely(!__pyx_t_3)) {
49226       if (likely(PyList_CheckExact(__pyx_t_1))) {
49227         if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
49228         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
49229         __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(21, 353, __pyx_L1_error)
49230         #else
49231         __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 353, __pyx_L1_error)
49232         __Pyx_GOTREF(__pyx_t_4);
49233         #endif
49234       } else {
49235         if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
49236         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
49237         __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(21, 353, __pyx_L1_error)
49238         #else
49239         __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 353, __pyx_L1_error)
49240         __Pyx_GOTREF(__pyx_t_4);
49241         #endif
49242       }
49243     } else {
49244       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
49245       if (unlikely(!__pyx_t_4)) {
49246         PyObject* exc_type = PyErr_Occurred();
49247         if (exc_type) {
49248           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
49249           else __PYX_ERR(21, 353, __pyx_L1_error)
49250         }
49251         break;
49252       }
49253       __Pyx_GOTREF(__pyx_t_4);
49254     }
49255     __Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_4);
49256     __pyx_t_4 = 0;
49257 
49258     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":354
49259  *         v = ("chained_and",)
49260  *         for s in self.selectors:
49261  *             v += s._hash_vals()             # <<<<<<<<<<<<<<
49262  *         return v
49263  *
49264  */
49265     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_hash_vals); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 354, __pyx_L1_error)
49266     __Pyx_GOTREF(__pyx_t_5);
49267     __pyx_t_6 = NULL;
49268     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
49269       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
49270       if (likely(__pyx_t_6)) {
49271         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
49272         __Pyx_INCREF(__pyx_t_6);
49273         __Pyx_INCREF(function);
49274         __Pyx_DECREF_SET(__pyx_t_5, function);
49275       }
49276     }
49277     __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
49278     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
49279     if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 354, __pyx_L1_error)
49280     __Pyx_GOTREF(__pyx_t_4);
49281     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
49282     __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_v_v, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 354, __pyx_L1_error)
49283     __Pyx_GOTREF(__pyx_t_5);
49284     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
49285     __Pyx_DECREF_SET(__pyx_v_v, __pyx_t_5);
49286     __pyx_t_5 = 0;
49287 
49288     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":353
49289  *     def _hash_vals(self):
49290  *         v = ("chained_and",)
49291  *         for s in self.selectors:             # <<<<<<<<<<<<<<
49292  *             v += s._hash_vals()
49293  *         return v
49294  */
49295   }
49296   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
49297 
49298   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":355
49299  *         for s in self.selectors:
49300  *             v += s._hash_vals()
49301  *         return v             # <<<<<<<<<<<<<<
49302  *
49303  * intersection_selector = ChainedBooleanANDSelector
49304  */
49305   __Pyx_XDECREF(__pyx_r);
49306   __Pyx_INCREF(__pyx_v_v);
49307   __pyx_r = __pyx_v_v;
49308   goto __pyx_L0;
49309 
49310   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":351
49311  *         return 1
49312  *
49313  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
49314  *         v = ("chained_and",)
49315  *         for s in self.selectors:
49316  */
49317 
49318   /* function exit code */
49319   __pyx_L1_error:;
49320   __Pyx_XDECREF(__pyx_t_1);
49321   __Pyx_XDECREF(__pyx_t_4);
49322   __Pyx_XDECREF(__pyx_t_5);
49323   __Pyx_XDECREF(__pyx_t_6);
49324   __Pyx_AddTraceback("yt.geometry.selection_routines.ChainedBooleanANDSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
49325   __pyx_r = NULL;
49326   __pyx_L0:;
49327   __Pyx_XDECREF(__pyx_v_v);
49328   __Pyx_XDECREF(__pyx_v_s);
49329   __Pyx_XGIVEREF(__pyx_r);
49330   __Pyx_RefNannyFinishContext();
49331   return __pyx_r;
49332 }
49333 
49334 /* "(tree fragment)":1
49335  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
49336  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
49337  * def __setstate_cython__(self, __pyx_state):
49338  */
49339 
49340 /* Python wrapper */
49341 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
49342 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
49343   PyObject *__pyx_r = 0;
49344   __Pyx_RefNannyDeclarations
49345   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
49346   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_2__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *)__pyx_v_self));
49347 
49348   /* function exit code */
49349   __Pyx_RefNannyFinishContext();
49350   return __pyx_r;
49351 }
49352 
49353 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self) {
49354   PyObject *__pyx_r = NULL;
49355   __Pyx_RefNannyDeclarations
49356   PyObject *__pyx_t_1 = NULL;
49357   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
49358 
49359   /* "(tree fragment)":2
49360  * def __reduce_cython__(self):
49361  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
49362  * def __setstate_cython__(self, __pyx_state):
49363  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
49364  */
49365   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__76, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
49366   __Pyx_GOTREF(__pyx_t_1);
49367   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
49368   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
49369   __PYX_ERR(5, 2, __pyx_L1_error)
49370 
49371   /* "(tree fragment)":1
49372  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
49373  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
49374  * def __setstate_cython__(self, __pyx_state):
49375  */
49376 
49377   /* function exit code */
49378   __pyx_L1_error:;
49379   __Pyx_XDECREF(__pyx_t_1);
49380   __Pyx_AddTraceback("yt.geometry.selection_routines.ChainedBooleanANDSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
49381   __pyx_r = NULL;
49382   __Pyx_XGIVEREF(__pyx_r);
49383   __Pyx_RefNannyFinishContext();
49384   return __pyx_r;
49385 }
49386 
49387 /* "(tree fragment)":3
49388  * def __reduce_cython__(self):
49389  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
49390  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
49391  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
49392  */
49393 
49394 /* Python wrapper */
49395 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
49396 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
49397   PyObject *__pyx_r = 0;
49398   __Pyx_RefNannyDeclarations
49399   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
49400   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_4__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
49401 
49402   /* function exit code */
49403   __Pyx_RefNannyFinishContext();
49404   return __pyx_r;
49405 }
49406 
49407 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
49408   PyObject *__pyx_r = NULL;
49409   __Pyx_RefNannyDeclarations
49410   PyObject *__pyx_t_1 = NULL;
49411   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
49412 
49413   /* "(tree fragment)":4
49414  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
49415  * def __setstate_cython__(self, __pyx_state):
49416  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
49417  */
49418   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__77, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
49419   __Pyx_GOTREF(__pyx_t_1);
49420   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
49421   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
49422   __PYX_ERR(5, 4, __pyx_L1_error)
49423 
49424   /* "(tree fragment)":3
49425  * def __reduce_cython__(self):
49426  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
49427  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
49428  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
49429  */
49430 
49431   /* function exit code */
49432   __pyx_L1_error:;
49433   __Pyx_XDECREF(__pyx_t_1);
49434   __Pyx_AddTraceback("yt.geometry.selection_routines.ChainedBooleanANDSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
49435   __pyx_r = NULL;
49436   __Pyx_XGIVEREF(__pyx_r);
49437   __Pyx_RefNannyFinishContext();
49438   return __pyx_r;
49439 }
49440 
49441 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":363
49442  *     @cython.boundscheck(False)
49443  *     @cython.wraparound(False)
49444  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
49445  *                          np.float64_t right_edge[3]) nogil:
49446  *         with gil:
49447  */
49448 
49449 static int __pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_bbox(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
49450   int __pyx_v_i;
49451   int __pyx_r;
49452   __Pyx_RefNannyDeclarations
49453   int __pyx_t_1;
49454   int __pyx_t_2;
49455   int __pyx_t_3;
49456   PyObject *__pyx_t_4 = NULL;
49457   int __pyx_t_5;
49458   #ifdef WITH_THREAD
49459   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49460   #endif
49461   __Pyx_RefNannySetupContext("select_bbox", 0);
49462   #ifdef WITH_THREAD
49463   __Pyx_PyGILState_Release(__pyx_gilstate_save);
49464   #endif
49465 
49466   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":365
49467  *     cdef int select_bbox(self, np.float64_t left_edge[3],
49468  *                          np.float64_t right_edge[3]) nogil:
49469  *         with gil:             # <<<<<<<<<<<<<<
49470  *             for i in range(self.n_obj):
49471  *                 if (<SelectorObject>self.selectors[i]).select_bbox(
49472  */
49473   /*try:*/ {
49474     {
49475         #ifdef WITH_THREAD
49476         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49477         #endif
49478         /*try:*/ {
49479 
49480           /* "yt/geometry/_selection_routines/boolean_selectors.pxi":366
49481  *                          np.float64_t right_edge[3]) nogil:
49482  *         with gil:
49483  *             for i in range(self.n_obj):             # <<<<<<<<<<<<<<
49484  *                 if (<SelectorObject>self.selectors[i]).select_bbox(
49485  *                         left_edge, right_edge) == 1:
49486  */
49487           __pyx_t_1 = __pyx_v_self->__pyx_base.n_obj;
49488           __pyx_t_2 = __pyx_t_1;
49489           for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
49490             __pyx_v_i = __pyx_t_3;
49491 
49492             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":367
49493  *         with gil:
49494  *             for i in range(self.n_obj):
49495  *                 if (<SelectorObject>self.selectors[i]).select_bbox(             # <<<<<<<<<<<<<<
49496  *                         left_edge, right_edge) == 1:
49497  *                     return 1
49498  */
49499             __pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.selectors), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 367, __pyx_L7_error)
49500             __Pyx_GOTREF(__pyx_t_4);
49501 
49502             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":368
49503  *             for i in range(self.n_obj):
49504  *                 if (<SelectorObject>self.selectors[i]).select_bbox(
49505  *                         left_edge, right_edge) == 1:             # <<<<<<<<<<<<<<
49506  *                     return 1
49507  *         return 0
49508  */
49509             __pyx_t_5 = ((((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4)->__pyx_vtab)->select_bbox(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4), __pyx_v_left_edge, __pyx_v_right_edge) == 1) != 0);
49510             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
49511 
49512             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":367
49513  *         with gil:
49514  *             for i in range(self.n_obj):
49515  *                 if (<SelectorObject>self.selectors[i]).select_bbox(             # <<<<<<<<<<<<<<
49516  *                         left_edge, right_edge) == 1:
49517  *                     return 1
49518  */
49519             if (__pyx_t_5) {
49520 
49521               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":369
49522  *                 if (<SelectorObject>self.selectors[i]).select_bbox(
49523  *                         left_edge, right_edge) == 1:
49524  *                     return 1             # <<<<<<<<<<<<<<
49525  *         return 0
49526  *
49527  */
49528               __pyx_r = 1;
49529               goto __pyx_L6_return;
49530 
49531               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":367
49532  *         with gil:
49533  *             for i in range(self.n_obj):
49534  *                 if (<SelectorObject>self.selectors[i]).select_bbox(             # <<<<<<<<<<<<<<
49535  *                         left_edge, right_edge) == 1:
49536  *                     return 1
49537  */
49538             }
49539           }
49540         }
49541 
49542         /* "yt/geometry/_selection_routines/boolean_selectors.pxi":365
49543  *     cdef int select_bbox(self, np.float64_t left_edge[3],
49544  *                          np.float64_t right_edge[3]) nogil:
49545  *         with gil:             # <<<<<<<<<<<<<<
49546  *             for i in range(self.n_obj):
49547  *                 if (<SelectorObject>self.selectors[i]).select_bbox(
49548  */
49549         /*finally:*/ {
49550           /*normal exit:*/{
49551             #ifdef WITH_THREAD
49552             __Pyx_PyGILState_Release(__pyx_gilstate_save);
49553             #endif
49554             goto __pyx_L8;
49555           }
49556           __pyx_L6_return: {
49557             #ifdef WITH_THREAD
49558             __Pyx_PyGILState_Release(__pyx_gilstate_save);
49559             #endif
49560             goto __pyx_L3_return;
49561           }
49562           __pyx_L7_error: {
49563             #ifdef WITH_THREAD
49564             __Pyx_PyGILState_Release(__pyx_gilstate_save);
49565             #endif
49566             goto __pyx_L4_error;
49567           }
49568           __pyx_L8:;
49569         }
49570     }
49571 
49572     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":370
49573  *                         left_edge, right_edge) == 1:
49574  *                     return 1
49575  *         return 0             # <<<<<<<<<<<<<<
49576  *
49577  *     @cython.cdivision(True)
49578  */
49579     __pyx_r = 0;
49580     goto __pyx_L3_return;
49581   }
49582 
49583   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":365
49584  *     cdef int select_bbox(self, np.float64_t left_edge[3],
49585  *                          np.float64_t right_edge[3]) nogil:
49586  *         with gil:             # <<<<<<<<<<<<<<
49587  *             for i in range(self.n_obj):
49588  *                 if (<SelectorObject>self.selectors[i]).select_bbox(
49589  */
49590   /*finally:*/ {
49591     __pyx_L3_return: {
49592       #ifdef WITH_THREAD
49593       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49594       #endif
49595       goto __pyx_L0;
49596     }
49597     __pyx_L4_error: {
49598       #ifdef WITH_THREAD
49599       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49600       #endif
49601       goto __pyx_L1_error;
49602     }
49603   }
49604 
49605   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":363
49606  *     @cython.boundscheck(False)
49607  *     @cython.wraparound(False)
49608  *     cdef int select_bbox(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
49609  *                          np.float64_t right_edge[3]) nogil:
49610  *         with gil:
49611  */
49612 
49613   /* function exit code */
49614   __pyx_r = 0;
49615   goto __pyx_L0;
49616   __pyx_L1_error:;
49617   __Pyx_XDECREF(__pyx_t_4);
49618   __Pyx_WriteUnraisable("yt.geometry.selection_routines.ChainedBooleanORSelector.select_bbox", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
49619   __pyx_r = 0;
49620   __pyx_L0:;
49621   #ifdef WITH_THREAD
49622   __Pyx_PyGILState_Release(__pyx_gilstate_save);
49623   #endif
49624   return __pyx_r;
49625 }
49626 
49627 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":375
49628  *     @cython.boundscheck(False)
49629  *     @cython.wraparound(False)
49630  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
49631  *                          np.float64_t right_edge[3]) nogil:
49632  *         cdef int selected = 0
49633  */
49634 
49635 static int __pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_bbox_edge(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge) {
49636   int __pyx_v_selected;
49637   int __pyx_v_ret;
49638   int __pyx_v_i;
49639   int __pyx_r;
49640   __Pyx_RefNannyDeclarations
49641   int __pyx_t_1;
49642   int __pyx_t_2;
49643   int __pyx_t_3;
49644   PyObject *__pyx_t_4 = NULL;
49645   #ifdef WITH_THREAD
49646   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49647   #endif
49648   __Pyx_RefNannySetupContext("select_bbox_edge", 0);
49649   #ifdef WITH_THREAD
49650   __Pyx_PyGILState_Release(__pyx_gilstate_save);
49651   #endif
49652 
49653   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":377
49654  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
49655  *                          np.float64_t right_edge[3]) nogil:
49656  *         cdef int selected = 0             # <<<<<<<<<<<<<<
49657  *         cdef int ret
49658  *         with gil:
49659  */
49660   /*try:*/ {
49661     __pyx_v_selected = 0;
49662 
49663     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":379
49664  *         cdef int selected = 0
49665  *         cdef int ret
49666  *         with gil:             # <<<<<<<<<<<<<<
49667  *             for i in range(self.n_obj):
49668  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(
49669  */
49670     {
49671         #ifdef WITH_THREAD
49672         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49673         #endif
49674         /*try:*/ {
49675 
49676           /* "yt/geometry/_selection_routines/boolean_selectors.pxi":380
49677  *         cdef int ret
49678  *         with gil:
49679  *             for i in range(self.n_obj):             # <<<<<<<<<<<<<<
49680  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(
49681  *                     left_edge, right_edge)
49682  */
49683           __pyx_t_1 = __pyx_v_self->__pyx_base.n_obj;
49684           __pyx_t_2 = __pyx_t_1;
49685           for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
49686             __pyx_v_i = __pyx_t_3;
49687 
49688             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":381
49689  *         with gil:
49690  *             for i in range(self.n_obj):
49691  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(             # <<<<<<<<<<<<<<
49692  *                     left_edge, right_edge)
49693  *                 if ret == 1:
49694  */
49695             __pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.selectors), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 381, __pyx_L7_error)
49696             __Pyx_GOTREF(__pyx_t_4);
49697 
49698             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":382
49699  *             for i in range(self.n_obj):
49700  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(
49701  *                     left_edge, right_edge)             # <<<<<<<<<<<<<<
49702  *                 if ret == 1:
49703  *                     return 1
49704  */
49705             __pyx_v_ret = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4)->__pyx_vtab)->select_bbox_edge(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4), __pyx_v_left_edge, __pyx_v_right_edge);
49706             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
49707 
49708             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":383
49709  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(
49710  *                     left_edge, right_edge)
49711  *                 if ret == 1:             # <<<<<<<<<<<<<<
49712  *                     return 1
49713  *                 elif ret == 2:
49714  */
49715             switch (__pyx_v_ret) {
49716               case 1:
49717 
49718               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":384
49719  *                     left_edge, right_edge)
49720  *                 if ret == 1:
49721  *                     return 1             # <<<<<<<<<<<<<<
49722  *                 elif ret == 2:
49723  *                     selected = 2
49724  */
49725               __pyx_r = 1;
49726               goto __pyx_L6_return;
49727 
49728               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":383
49729  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(
49730  *                     left_edge, right_edge)
49731  *                 if ret == 1:             # <<<<<<<<<<<<<<
49732  *                     return 1
49733  *                 elif ret == 2:
49734  */
49735               break;
49736               case 2:
49737 
49738               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":386
49739  *                     return 1
49740  *                 elif ret == 2:
49741  *                     selected = 2             # <<<<<<<<<<<<<<
49742  *         return selected
49743  *
49744  */
49745               __pyx_v_selected = 2;
49746 
49747               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":385
49748  *                 if ret == 1:
49749  *                     return 1
49750  *                 elif ret == 2:             # <<<<<<<<<<<<<<
49751  *                     selected = 2
49752  *         return selected
49753  */
49754               break;
49755               default: break;
49756             }
49757           }
49758         }
49759 
49760         /* "yt/geometry/_selection_routines/boolean_selectors.pxi":379
49761  *         cdef int selected = 0
49762  *         cdef int ret
49763  *         with gil:             # <<<<<<<<<<<<<<
49764  *             for i in range(self.n_obj):
49765  *                 ret = (<SelectorObject>self.selectors[i]).select_bbox_edge(
49766  */
49767         /*finally:*/ {
49768           /*normal exit:*/{
49769             #ifdef WITH_THREAD
49770             __Pyx_PyGILState_Release(__pyx_gilstate_save);
49771             #endif
49772             goto __pyx_L8;
49773           }
49774           __pyx_L6_return: {
49775             #ifdef WITH_THREAD
49776             __Pyx_PyGILState_Release(__pyx_gilstate_save);
49777             #endif
49778             goto __pyx_L3_return;
49779           }
49780           __pyx_L7_error: {
49781             #ifdef WITH_THREAD
49782             __Pyx_PyGILState_Release(__pyx_gilstate_save);
49783             #endif
49784             goto __pyx_L4_error;
49785           }
49786           __pyx_L8:;
49787         }
49788     }
49789 
49790     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":387
49791  *                 elif ret == 2:
49792  *                     selected = 2
49793  *         return selected             # <<<<<<<<<<<<<<
49794  *
49795  *     @cython.cdivision(True)
49796  */
49797     __pyx_r = __pyx_v_selected;
49798     goto __pyx_L3_return;
49799   }
49800 
49801   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":377
49802  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],
49803  *                          np.float64_t right_edge[3]) nogil:
49804  *         cdef int selected = 0             # <<<<<<<<<<<<<<
49805  *         cdef int ret
49806  *         with gil:
49807  */
49808   /*finally:*/ {
49809     __pyx_L3_return: {
49810       #ifdef WITH_THREAD
49811       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49812       #endif
49813       goto __pyx_L0;
49814     }
49815     __pyx_L4_error: {
49816       #ifdef WITH_THREAD
49817       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49818       #endif
49819       goto __pyx_L1_error;
49820     }
49821   }
49822 
49823   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":375
49824  *     @cython.boundscheck(False)
49825  *     @cython.wraparound(False)
49826  *     cdef int select_bbox_edge(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
49827  *                          np.float64_t right_edge[3]) nogil:
49828  *         cdef int selected = 0
49829  */
49830 
49831   /* function exit code */
49832   __pyx_r = 0;
49833   goto __pyx_L0;
49834   __pyx_L1_error:;
49835   __Pyx_XDECREF(__pyx_t_4);
49836   __Pyx_WriteUnraisable("yt.geometry.selection_routines.ChainedBooleanORSelector.select_bbox_edge", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
49837   __pyx_r = 0;
49838   __pyx_L0:;
49839   #ifdef WITH_THREAD
49840   __Pyx_PyGILState_Release(__pyx_gilstate_save);
49841   #endif
49842   return __pyx_r;
49843 }
49844 
49845 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":392
49846  *     @cython.boundscheck(False)
49847  *     @cython.wraparound(False)
49848  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
49849  *                          np.float64_t right_edge[3], np.int32_t level,
49850  *                          Oct *o = NULL) nogil:
49851  */
49852 
49853 static int __pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_grid(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_left_edge, __pyx_t_5numpy_float64_t *__pyx_v_right_edge, __pyx_t_5numpy_int32_t __pyx_v_level, struct __pyx_opt_args_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_grid *__pyx_optional_args) {
49854 
49855   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":394
49856  *     cdef int select_grid(self, np.float64_t left_edge[3],
49857  *                          np.float64_t right_edge[3], np.int32_t level,
49858  *                          Oct *o = NULL) nogil:             # <<<<<<<<<<<<<<
49859  *         with gil:
49860  *             for i in range(self.n_obj):
49861  */
49862   struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *__pyx_v_o = ((struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *)NULL);
49863   int __pyx_v_i;
49864   int __pyx_r;
49865   __Pyx_RefNannyDeclarations
49866   int __pyx_t_1;
49867   int __pyx_t_2;
49868   int __pyx_t_3;
49869   PyObject *__pyx_t_4 = NULL;
49870   int __pyx_t_5;
49871   struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid __pyx_t_6;
49872   int __pyx_t_7;
49873   #ifdef WITH_THREAD
49874   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49875   #endif
49876   __Pyx_RefNannySetupContext("select_grid", 0);
49877   if (__pyx_optional_args) {
49878     if (__pyx_optional_args->__pyx_n > 0) {
49879       __pyx_v_o = __pyx_optional_args->o;
49880     }
49881   }
49882   #ifdef WITH_THREAD
49883   __Pyx_PyGILState_Release(__pyx_gilstate_save);
49884   #endif
49885 
49886   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":395
49887  *                          np.float64_t right_edge[3], np.int32_t level,
49888  *                          Oct *o = NULL) nogil:
49889  *         with gil:             # <<<<<<<<<<<<<<
49890  *             for i in range(self.n_obj):
49891  *                 if (<SelectorObject>self.selectors[i]).select_grid(
49892  */
49893   /*try:*/ {
49894     {
49895         #ifdef WITH_THREAD
49896         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
49897         #endif
49898         /*try:*/ {
49899 
49900           /* "yt/geometry/_selection_routines/boolean_selectors.pxi":396
49901  *                          Oct *o = NULL) nogil:
49902  *         with gil:
49903  *             for i in range(self.n_obj):             # <<<<<<<<<<<<<<
49904  *                 if (<SelectorObject>self.selectors[i]).select_grid(
49905  *                         left_edge, right_edge, level, o) == 1:
49906  */
49907           __pyx_t_1 = __pyx_v_self->__pyx_base.n_obj;
49908           __pyx_t_2 = __pyx_t_1;
49909           for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
49910             __pyx_v_i = __pyx_t_3;
49911 
49912             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":397
49913  *         with gil:
49914  *             for i in range(self.n_obj):
49915  *                 if (<SelectorObject>self.selectors[i]).select_grid(             # <<<<<<<<<<<<<<
49916  *                         left_edge, right_edge, level, o) == 1:
49917  *                     return 1
49918  */
49919             __pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.selectors), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 397, __pyx_L7_error)
49920             __Pyx_GOTREF(__pyx_t_4);
49921 
49922             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":398
49923  *             for i in range(self.n_obj):
49924  *                 if (<SelectorObject>self.selectors[i]).select_grid(
49925  *                         left_edge, right_edge, level, o) == 1:             # <<<<<<<<<<<<<<
49926  *                     return 1
49927  *         return 0
49928  */
49929             __pyx_t_6.__pyx_n = 1;
49930             __pyx_t_6.o = __pyx_v_o;
49931             __pyx_t_5 = ((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4)->__pyx_vtab)->select_grid(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4), __pyx_v_left_edge, __pyx_v_right_edge, __pyx_v_level, &__pyx_t_6);
49932             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
49933             __pyx_t_7 = ((__pyx_t_5 == 1) != 0);
49934 
49935             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":397
49936  *         with gil:
49937  *             for i in range(self.n_obj):
49938  *                 if (<SelectorObject>self.selectors[i]).select_grid(             # <<<<<<<<<<<<<<
49939  *                         left_edge, right_edge, level, o) == 1:
49940  *                     return 1
49941  */
49942             if (__pyx_t_7) {
49943 
49944               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":399
49945  *                 if (<SelectorObject>self.selectors[i]).select_grid(
49946  *                         left_edge, right_edge, level, o) == 1:
49947  *                     return 1             # <<<<<<<<<<<<<<
49948  *         return 0
49949  *
49950  */
49951               __pyx_r = 1;
49952               goto __pyx_L6_return;
49953 
49954               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":397
49955  *         with gil:
49956  *             for i in range(self.n_obj):
49957  *                 if (<SelectorObject>self.selectors[i]).select_grid(             # <<<<<<<<<<<<<<
49958  *                         left_edge, right_edge, level, o) == 1:
49959  *                     return 1
49960  */
49961             }
49962           }
49963         }
49964 
49965         /* "yt/geometry/_selection_routines/boolean_selectors.pxi":395
49966  *                          np.float64_t right_edge[3], np.int32_t level,
49967  *                          Oct *o = NULL) nogil:
49968  *         with gil:             # <<<<<<<<<<<<<<
49969  *             for i in range(self.n_obj):
49970  *                 if (<SelectorObject>self.selectors[i]).select_grid(
49971  */
49972         /*finally:*/ {
49973           /*normal exit:*/{
49974             #ifdef WITH_THREAD
49975             __Pyx_PyGILState_Release(__pyx_gilstate_save);
49976             #endif
49977             goto __pyx_L8;
49978           }
49979           __pyx_L6_return: {
49980             #ifdef WITH_THREAD
49981             __Pyx_PyGILState_Release(__pyx_gilstate_save);
49982             #endif
49983             goto __pyx_L3_return;
49984           }
49985           __pyx_L7_error: {
49986             #ifdef WITH_THREAD
49987             __Pyx_PyGILState_Release(__pyx_gilstate_save);
49988             #endif
49989             goto __pyx_L4_error;
49990           }
49991           __pyx_L8:;
49992         }
49993     }
49994 
49995     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":400
49996  *                         left_edge, right_edge, level, o) == 1:
49997  *                     return 1
49998  *         return 0             # <<<<<<<<<<<<<<
49999  *
50000  *     @cython.cdivision(True)
50001  */
50002     __pyx_r = 0;
50003     goto __pyx_L3_return;
50004   }
50005 
50006   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":395
50007  *                          np.float64_t right_edge[3], np.int32_t level,
50008  *                          Oct *o = NULL) nogil:
50009  *         with gil:             # <<<<<<<<<<<<<<
50010  *             for i in range(self.n_obj):
50011  *                 if (<SelectorObject>self.selectors[i]).select_grid(
50012  */
50013   /*finally:*/ {
50014     __pyx_L3_return: {
50015       #ifdef WITH_THREAD
50016       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50017       #endif
50018       goto __pyx_L0;
50019     }
50020     __pyx_L4_error: {
50021       #ifdef WITH_THREAD
50022       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50023       #endif
50024       goto __pyx_L1_error;
50025     }
50026   }
50027 
50028   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":392
50029  *     @cython.boundscheck(False)
50030  *     @cython.wraparound(False)
50031  *     cdef int select_grid(self, np.float64_t left_edge[3],             # <<<<<<<<<<<<<<
50032  *                          np.float64_t right_edge[3], np.int32_t level,
50033  *                          Oct *o = NULL) nogil:
50034  */
50035 
50036   /* function exit code */
50037   __pyx_r = 0;
50038   goto __pyx_L0;
50039   __pyx_L1_error:;
50040   __Pyx_XDECREF(__pyx_t_4);
50041   __Pyx_WriteUnraisable("yt.geometry.selection_routines.ChainedBooleanORSelector.select_grid", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
50042   __pyx_r = 0;
50043   __pyx_L0:;
50044   #ifdef WITH_THREAD
50045   __Pyx_PyGILState_Release(__pyx_gilstate_save);
50046   #endif
50047   return __pyx_r;
50048 }
50049 
50050 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":405
50051  *     @cython.boundscheck(False)
50052  *     @cython.wraparound(False)
50053  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
50054  *         with gil:
50055  *             for i in range(self.n_obj):
50056  */
50057 
50058 static int __pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_cell(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
50059   int __pyx_v_i;
50060   int __pyx_r;
50061   __Pyx_RefNannyDeclarations
50062   int __pyx_t_1;
50063   int __pyx_t_2;
50064   int __pyx_t_3;
50065   PyObject *__pyx_t_4 = NULL;
50066   int __pyx_t_5;
50067   #ifdef WITH_THREAD
50068   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50069   #endif
50070   __Pyx_RefNannySetupContext("select_cell", 0);
50071   #ifdef WITH_THREAD
50072   __Pyx_PyGILState_Release(__pyx_gilstate_save);
50073   #endif
50074 
50075   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":406
50076  *     @cython.wraparound(False)
50077  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
50078  *         with gil:             # <<<<<<<<<<<<<<
50079  *             for i in range(self.n_obj):
50080  *                 if (<SelectorObject>self.selectors[i]).select_cell(
50081  */
50082   /*try:*/ {
50083     {
50084         #ifdef WITH_THREAD
50085         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50086         #endif
50087         /*try:*/ {
50088 
50089           /* "yt/geometry/_selection_routines/boolean_selectors.pxi":407
50090  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
50091  *         with gil:
50092  *             for i in range(self.n_obj):             # <<<<<<<<<<<<<<
50093  *                 if (<SelectorObject>self.selectors[i]).select_cell(
50094  *                         pos, dds) == 1:
50095  */
50096           __pyx_t_1 = __pyx_v_self->__pyx_base.n_obj;
50097           __pyx_t_2 = __pyx_t_1;
50098           for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
50099             __pyx_v_i = __pyx_t_3;
50100 
50101             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":408
50102  *         with gil:
50103  *             for i in range(self.n_obj):
50104  *                 if (<SelectorObject>self.selectors[i]).select_cell(             # <<<<<<<<<<<<<<
50105  *                         pos, dds) == 1:
50106  *                     return 1
50107  */
50108             __pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.selectors), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 408, __pyx_L7_error)
50109             __Pyx_GOTREF(__pyx_t_4);
50110 
50111             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":409
50112  *             for i in range(self.n_obj):
50113  *                 if (<SelectorObject>self.selectors[i]).select_cell(
50114  *                         pos, dds) == 1:             # <<<<<<<<<<<<<<
50115  *                     return 1
50116  *         return 0
50117  */
50118             __pyx_t_5 = ((((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4)->__pyx_vtab)->select_cell(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4), __pyx_v_pos, __pyx_v_dds) == 1) != 0);
50119             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
50120 
50121             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":408
50122  *         with gil:
50123  *             for i in range(self.n_obj):
50124  *                 if (<SelectorObject>self.selectors[i]).select_cell(             # <<<<<<<<<<<<<<
50125  *                         pos, dds) == 1:
50126  *                     return 1
50127  */
50128             if (__pyx_t_5) {
50129 
50130               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":410
50131  *                 if (<SelectorObject>self.selectors[i]).select_cell(
50132  *                         pos, dds) == 1:
50133  *                     return 1             # <<<<<<<<<<<<<<
50134  *         return 0
50135  *
50136  */
50137               __pyx_r = 1;
50138               goto __pyx_L6_return;
50139 
50140               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":408
50141  *         with gil:
50142  *             for i in range(self.n_obj):
50143  *                 if (<SelectorObject>self.selectors[i]).select_cell(             # <<<<<<<<<<<<<<
50144  *                         pos, dds) == 1:
50145  *                     return 1
50146  */
50147             }
50148           }
50149         }
50150 
50151         /* "yt/geometry/_selection_routines/boolean_selectors.pxi":406
50152  *     @cython.wraparound(False)
50153  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
50154  *         with gil:             # <<<<<<<<<<<<<<
50155  *             for i in range(self.n_obj):
50156  *                 if (<SelectorObject>self.selectors[i]).select_cell(
50157  */
50158         /*finally:*/ {
50159           /*normal exit:*/{
50160             #ifdef WITH_THREAD
50161             __Pyx_PyGILState_Release(__pyx_gilstate_save);
50162             #endif
50163             goto __pyx_L8;
50164           }
50165           __pyx_L6_return: {
50166             #ifdef WITH_THREAD
50167             __Pyx_PyGILState_Release(__pyx_gilstate_save);
50168             #endif
50169             goto __pyx_L3_return;
50170           }
50171           __pyx_L7_error: {
50172             #ifdef WITH_THREAD
50173             __Pyx_PyGILState_Release(__pyx_gilstate_save);
50174             #endif
50175             goto __pyx_L4_error;
50176           }
50177           __pyx_L8:;
50178         }
50179     }
50180 
50181     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":411
50182  *                         pos, dds) == 1:
50183  *                     return 1
50184  *         return 0             # <<<<<<<<<<<<<<
50185  *
50186  *     @cython.cdivision(True)
50187  */
50188     __pyx_r = 0;
50189     goto __pyx_L3_return;
50190   }
50191 
50192   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":406
50193  *     @cython.wraparound(False)
50194  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:
50195  *         with gil:             # <<<<<<<<<<<<<<
50196  *             for i in range(self.n_obj):
50197  *                 if (<SelectorObject>self.selectors[i]).select_cell(
50198  */
50199   /*finally:*/ {
50200     __pyx_L3_return: {
50201       #ifdef WITH_THREAD
50202       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50203       #endif
50204       goto __pyx_L0;
50205     }
50206     __pyx_L4_error: {
50207       #ifdef WITH_THREAD
50208       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50209       #endif
50210       goto __pyx_L1_error;
50211     }
50212   }
50213 
50214   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":405
50215  *     @cython.boundscheck(False)
50216  *     @cython.wraparound(False)
50217  *     cdef int select_cell(self, np.float64_t pos[3], np.float64_t dds[3]) nogil:             # <<<<<<<<<<<<<<
50218  *         with gil:
50219  *             for i in range(self.n_obj):
50220  */
50221 
50222   /* function exit code */
50223   __pyx_r = 0;
50224   goto __pyx_L0;
50225   __pyx_L1_error:;
50226   __Pyx_XDECREF(__pyx_t_4);
50227   __Pyx_WriteUnraisable("yt.geometry.selection_routines.ChainedBooleanORSelector.select_cell", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
50228   __pyx_r = 0;
50229   __pyx_L0:;
50230   #ifdef WITH_THREAD
50231   __Pyx_PyGILState_Release(__pyx_gilstate_save);
50232   #endif
50233   return __pyx_r;
50234 }
50235 
50236 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":416
50237  *     @cython.boundscheck(False)
50238  *     @cython.wraparound(False)
50239  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
50240  *         with gil:
50241  *             for i in range(self.n_obj):
50242  */
50243 
50244 static int __pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_point(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos) {
50245   int __pyx_v_i;
50246   int __pyx_r;
50247   __Pyx_RefNannyDeclarations
50248   int __pyx_t_1;
50249   int __pyx_t_2;
50250   int __pyx_t_3;
50251   PyObject *__pyx_t_4 = NULL;
50252   int __pyx_t_5;
50253   #ifdef WITH_THREAD
50254   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50255   #endif
50256   __Pyx_RefNannySetupContext("select_point", 0);
50257   #ifdef WITH_THREAD
50258   __Pyx_PyGILState_Release(__pyx_gilstate_save);
50259   #endif
50260 
50261   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":417
50262  *     @cython.wraparound(False)
50263  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
50264  *         with gil:             # <<<<<<<<<<<<<<
50265  *             for i in range(self.n_obj):
50266  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 1:
50267  */
50268   /*try:*/ {
50269     {
50270         #ifdef WITH_THREAD
50271         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50272         #endif
50273         /*try:*/ {
50274 
50275           /* "yt/geometry/_selection_routines/boolean_selectors.pxi":418
50276  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
50277  *         with gil:
50278  *             for i in range(self.n_obj):             # <<<<<<<<<<<<<<
50279  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 1:
50280  *                     return 1
50281  */
50282           __pyx_t_1 = __pyx_v_self->__pyx_base.n_obj;
50283           __pyx_t_2 = __pyx_t_1;
50284           for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
50285             __pyx_v_i = __pyx_t_3;
50286 
50287             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":419
50288  *         with gil:
50289  *             for i in range(self.n_obj):
50290  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 1:             # <<<<<<<<<<<<<<
50291  *                     return 1
50292  *         return 0
50293  */
50294             __pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.selectors), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 419, __pyx_L7_error)
50295             __Pyx_GOTREF(__pyx_t_4);
50296             __pyx_t_5 = ((((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4)->__pyx_vtab)->select_point(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4), __pyx_v_pos) == 1) != 0);
50297             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
50298             if (__pyx_t_5) {
50299 
50300               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":420
50301  *             for i in range(self.n_obj):
50302  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 1:
50303  *                     return 1             # <<<<<<<<<<<<<<
50304  *         return 0
50305  *
50306  */
50307               __pyx_r = 1;
50308               goto __pyx_L6_return;
50309 
50310               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":419
50311  *         with gil:
50312  *             for i in range(self.n_obj):
50313  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 1:             # <<<<<<<<<<<<<<
50314  *                     return 1
50315  *         return 0
50316  */
50317             }
50318           }
50319         }
50320 
50321         /* "yt/geometry/_selection_routines/boolean_selectors.pxi":417
50322  *     @cython.wraparound(False)
50323  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
50324  *         with gil:             # <<<<<<<<<<<<<<
50325  *             for i in range(self.n_obj):
50326  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 1:
50327  */
50328         /*finally:*/ {
50329           /*normal exit:*/{
50330             #ifdef WITH_THREAD
50331             __Pyx_PyGILState_Release(__pyx_gilstate_save);
50332             #endif
50333             goto __pyx_L8;
50334           }
50335           __pyx_L6_return: {
50336             #ifdef WITH_THREAD
50337             __Pyx_PyGILState_Release(__pyx_gilstate_save);
50338             #endif
50339             goto __pyx_L3_return;
50340           }
50341           __pyx_L7_error: {
50342             #ifdef WITH_THREAD
50343             __Pyx_PyGILState_Release(__pyx_gilstate_save);
50344             #endif
50345             goto __pyx_L4_error;
50346           }
50347           __pyx_L8:;
50348         }
50349     }
50350 
50351     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":421
50352  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 1:
50353  *                     return 1
50354  *         return 0             # <<<<<<<<<<<<<<
50355  *
50356  *     @cython.cdivision(True)
50357  */
50358     __pyx_r = 0;
50359     goto __pyx_L3_return;
50360   }
50361 
50362   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":417
50363  *     @cython.wraparound(False)
50364  *     cdef int select_point(self, np.float64_t pos[3]) nogil:
50365  *         with gil:             # <<<<<<<<<<<<<<
50366  *             for i in range(self.n_obj):
50367  *                 if (<SelectorObject>self.selectors[i]).select_point(pos) == 1:
50368  */
50369   /*finally:*/ {
50370     __pyx_L3_return: {
50371       #ifdef WITH_THREAD
50372       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50373       #endif
50374       goto __pyx_L0;
50375     }
50376     __pyx_L4_error: {
50377       #ifdef WITH_THREAD
50378       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50379       #endif
50380       goto __pyx_L1_error;
50381     }
50382   }
50383 
50384   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":416
50385  *     @cython.boundscheck(False)
50386  *     @cython.wraparound(False)
50387  *     cdef int select_point(self, np.float64_t pos[3]) nogil:             # <<<<<<<<<<<<<<
50388  *         with gil:
50389  *             for i in range(self.n_obj):
50390  */
50391 
50392   /* function exit code */
50393   __pyx_r = 0;
50394   goto __pyx_L0;
50395   __pyx_L1_error:;
50396   __Pyx_XDECREF(__pyx_t_4);
50397   __Pyx_WriteUnraisable("yt.geometry.selection_routines.ChainedBooleanORSelector.select_point", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
50398   __pyx_r = 0;
50399   __pyx_L0:;
50400   #ifdef WITH_THREAD
50401   __Pyx_PyGILState_Release(__pyx_gilstate_save);
50402   #endif
50403   return __pyx_r;
50404 }
50405 
50406 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":426
50407  *     @cython.boundscheck(False)
50408  *     @cython.wraparound(False)
50409  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
50410  *         with gil:
50411  *             for i in range(self.n_obj):
50412  */
50413 
50414 static int __pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_sphere(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, __pyx_t_5numpy_float64_t *__pyx_v_pos, __pyx_t_5numpy_float64_t __pyx_v_radius) {
50415   int __pyx_v_i;
50416   int __pyx_r;
50417   __Pyx_RefNannyDeclarations
50418   int __pyx_t_1;
50419   int __pyx_t_2;
50420   int __pyx_t_3;
50421   PyObject *__pyx_t_4 = NULL;
50422   int __pyx_t_5;
50423   #ifdef WITH_THREAD
50424   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50425   #endif
50426   __Pyx_RefNannySetupContext("select_sphere", 0);
50427   #ifdef WITH_THREAD
50428   __Pyx_PyGILState_Release(__pyx_gilstate_save);
50429   #endif
50430 
50431   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":427
50432  *     @cython.wraparound(False)
50433  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
50434  *         with gil:             # <<<<<<<<<<<<<<
50435  *             for i in range(self.n_obj):
50436  *                 if (<SelectorObject>self.selectors[i]).select_sphere(
50437  */
50438   /*try:*/ {
50439     {
50440         #ifdef WITH_THREAD
50441         PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50442         #endif
50443         /*try:*/ {
50444 
50445           /* "yt/geometry/_selection_routines/boolean_selectors.pxi":428
50446  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
50447  *         with gil:
50448  *             for i in range(self.n_obj):             # <<<<<<<<<<<<<<
50449  *                 if (<SelectorObject>self.selectors[i]).select_sphere(
50450  *                         pos, radius) == 1:
50451  */
50452           __pyx_t_1 = __pyx_v_self->__pyx_base.n_obj;
50453           __pyx_t_2 = __pyx_t_1;
50454           for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
50455             __pyx_v_i = __pyx_t_3;
50456 
50457             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":429
50458  *         with gil:
50459  *             for i in range(self.n_obj):
50460  *                 if (<SelectorObject>self.selectors[i]).select_sphere(             # <<<<<<<<<<<<<<
50461  *                         pos, radius) == 1:
50462  *                     return 1
50463  */
50464             __pyx_t_4 = __Pyx_GetItemInt(((PyObject *)__pyx_v_self->__pyx_base.selectors), __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 429, __pyx_L7_error)
50465             __Pyx_GOTREF(__pyx_t_4);
50466 
50467             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":430
50468  *             for i in range(self.n_obj):
50469  *                 if (<SelectorObject>self.selectors[i]).select_sphere(
50470  *                         pos, radius) == 1:             # <<<<<<<<<<<<<<
50471  *                     return 1
50472  *         return 0
50473  */
50474             __pyx_t_5 = ((((struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject *)((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4)->__pyx_vtab)->select_sphere(((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)__pyx_t_4), __pyx_v_pos, __pyx_v_radius) == 1) != 0);
50475             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
50476 
50477             /* "yt/geometry/_selection_routines/boolean_selectors.pxi":429
50478  *         with gil:
50479  *             for i in range(self.n_obj):
50480  *                 if (<SelectorObject>self.selectors[i]).select_sphere(             # <<<<<<<<<<<<<<
50481  *                         pos, radius) == 1:
50482  *                     return 1
50483  */
50484             if (__pyx_t_5) {
50485 
50486               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":431
50487  *                 if (<SelectorObject>self.selectors[i]).select_sphere(
50488  *                         pos, radius) == 1:
50489  *                     return 1             # <<<<<<<<<<<<<<
50490  *         return 0
50491  *
50492  */
50493               __pyx_r = 1;
50494               goto __pyx_L6_return;
50495 
50496               /* "yt/geometry/_selection_routines/boolean_selectors.pxi":429
50497  *         with gil:
50498  *             for i in range(self.n_obj):
50499  *                 if (<SelectorObject>self.selectors[i]).select_sphere(             # <<<<<<<<<<<<<<
50500  *                         pos, radius) == 1:
50501  *                     return 1
50502  */
50503             }
50504           }
50505         }
50506 
50507         /* "yt/geometry/_selection_routines/boolean_selectors.pxi":427
50508  *     @cython.wraparound(False)
50509  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
50510  *         with gil:             # <<<<<<<<<<<<<<
50511  *             for i in range(self.n_obj):
50512  *                 if (<SelectorObject>self.selectors[i]).select_sphere(
50513  */
50514         /*finally:*/ {
50515           /*normal exit:*/{
50516             #ifdef WITH_THREAD
50517             __Pyx_PyGILState_Release(__pyx_gilstate_save);
50518             #endif
50519             goto __pyx_L8;
50520           }
50521           __pyx_L6_return: {
50522             #ifdef WITH_THREAD
50523             __Pyx_PyGILState_Release(__pyx_gilstate_save);
50524             #endif
50525             goto __pyx_L3_return;
50526           }
50527           __pyx_L7_error: {
50528             #ifdef WITH_THREAD
50529             __Pyx_PyGILState_Release(__pyx_gilstate_save);
50530             #endif
50531             goto __pyx_L4_error;
50532           }
50533           __pyx_L8:;
50534         }
50535     }
50536 
50537     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":432
50538  *                         pos, radius) == 1:
50539  *                     return 1
50540  *         return 0             # <<<<<<<<<<<<<<
50541  *
50542  *     def _hash_vals(self):
50543  */
50544     __pyx_r = 0;
50545     goto __pyx_L3_return;
50546   }
50547 
50548   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":427
50549  *     @cython.wraparound(False)
50550  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:
50551  *         with gil:             # <<<<<<<<<<<<<<
50552  *             for i in range(self.n_obj):
50553  *                 if (<SelectorObject>self.selectors[i]).select_sphere(
50554  */
50555   /*finally:*/ {
50556     __pyx_L3_return: {
50557       #ifdef WITH_THREAD
50558       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50559       #endif
50560       goto __pyx_L0;
50561     }
50562     __pyx_L4_error: {
50563       #ifdef WITH_THREAD
50564       __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
50565       #endif
50566       goto __pyx_L1_error;
50567     }
50568   }
50569 
50570   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":426
50571  *     @cython.boundscheck(False)
50572  *     @cython.wraparound(False)
50573  *     cdef int select_sphere(self, np.float64_t pos[3], np.float64_t radius) nogil:             # <<<<<<<<<<<<<<
50574  *         with gil:
50575  *             for i in range(self.n_obj):
50576  */
50577 
50578   /* function exit code */
50579   __pyx_r = 0;
50580   goto __pyx_L0;
50581   __pyx_L1_error:;
50582   __Pyx_XDECREF(__pyx_t_4);
50583   __Pyx_WriteUnraisable("yt.geometry.selection_routines.ChainedBooleanORSelector.select_sphere", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 1);
50584   __pyx_r = 0;
50585   __pyx_L0:;
50586   #ifdef WITH_THREAD
50587   __Pyx_PyGILState_Release(__pyx_gilstate_save);
50588   #endif
50589   return __pyx_r;
50590 }
50591 
50592 /* "yt/geometry/_selection_routines/boolean_selectors.pxi":434
50593  *         return 0
50594  *
50595  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
50596  *         v = ("chained_or",)
50597  *         for s in self.selectors:
50598  */
50599 
50600 /* Python wrapper */
50601 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
50602 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_1_hash_vals(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
50603   PyObject *__pyx_r = 0;
50604   __Pyx_RefNannyDeclarations
50605   __Pyx_RefNannySetupContext("_hash_vals (wrapper)", 0);
50606   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector__hash_vals(((struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *)__pyx_v_self));
50607 
50608   /* function exit code */
50609   __Pyx_RefNannyFinishContext();
50610   return __pyx_r;
50611 }
50612 
50613 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector__hash_vals(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self) {
50614   PyObject *__pyx_v_v = NULL;
50615   PyObject *__pyx_v_s = NULL;
50616   PyObject *__pyx_r = NULL;
50617   __Pyx_RefNannyDeclarations
50618   PyObject *__pyx_t_1 = NULL;
50619   Py_ssize_t __pyx_t_2;
50620   PyObject *(*__pyx_t_3)(PyObject *);
50621   PyObject *__pyx_t_4 = NULL;
50622   PyObject *__pyx_t_5 = NULL;
50623   PyObject *__pyx_t_6 = NULL;
50624   __Pyx_RefNannySetupContext("_hash_vals", 0);
50625 
50626   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":435
50627  *
50628  *     def _hash_vals(self):
50629  *         v = ("chained_or",)             # <<<<<<<<<<<<<<
50630  *         for s in self.selectors:
50631  *             v += s._hash_vals()
50632  */
50633   __Pyx_INCREF(__pyx_tuple__78);
50634   __pyx_v_v = __pyx_tuple__78;
50635 
50636   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":436
50637  *     def _hash_vals(self):
50638  *         v = ("chained_or",)
50639  *         for s in self.selectors:             # <<<<<<<<<<<<<<
50640  *             v += s._hash_vals()
50641  *         return v
50642  */
50643   if (likely(PyList_CheckExact(((PyObject *)__pyx_v_self->__pyx_base.selectors))) || PyTuple_CheckExact(((PyObject *)__pyx_v_self->__pyx_base.selectors))) {
50644     __pyx_t_1 = ((PyObject *)__pyx_v_self->__pyx_base.selectors); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
50645     __pyx_t_3 = NULL;
50646   } else {
50647     __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)__pyx_v_self->__pyx_base.selectors)); if (unlikely(!__pyx_t_1)) __PYX_ERR(21, 436, __pyx_L1_error)
50648     __Pyx_GOTREF(__pyx_t_1);
50649     __pyx_t_3 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_3)) __PYX_ERR(21, 436, __pyx_L1_error)
50650   }
50651   for (;;) {
50652     if (likely(!__pyx_t_3)) {
50653       if (likely(PyList_CheckExact(__pyx_t_1))) {
50654         if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
50655         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
50656         __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(21, 436, __pyx_L1_error)
50657         #else
50658         __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 436, __pyx_L1_error)
50659         __Pyx_GOTREF(__pyx_t_4);
50660         #endif
50661       } else {
50662         if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
50663         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
50664         __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_4); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(21, 436, __pyx_L1_error)
50665         #else
50666         __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 436, __pyx_L1_error)
50667         __Pyx_GOTREF(__pyx_t_4);
50668         #endif
50669       }
50670     } else {
50671       __pyx_t_4 = __pyx_t_3(__pyx_t_1);
50672       if (unlikely(!__pyx_t_4)) {
50673         PyObject* exc_type = PyErr_Occurred();
50674         if (exc_type) {
50675           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
50676           else __PYX_ERR(21, 436, __pyx_L1_error)
50677         }
50678         break;
50679       }
50680       __Pyx_GOTREF(__pyx_t_4);
50681     }
50682     __Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_4);
50683     __pyx_t_4 = 0;
50684 
50685     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":437
50686  *         v = ("chained_or",)
50687  *         for s in self.selectors:
50688  *             v += s._hash_vals()             # <<<<<<<<<<<<<<
50689  *         return v
50690  *
50691  */
50692     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_hash_vals); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 437, __pyx_L1_error)
50693     __Pyx_GOTREF(__pyx_t_5);
50694     __pyx_t_6 = NULL;
50695     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
50696       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
50697       if (likely(__pyx_t_6)) {
50698         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
50699         __Pyx_INCREF(__pyx_t_6);
50700         __Pyx_INCREF(function);
50701         __Pyx_DECREF_SET(__pyx_t_5, function);
50702       }
50703     }
50704     __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
50705     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
50706     if (unlikely(!__pyx_t_4)) __PYX_ERR(21, 437, __pyx_L1_error)
50707     __Pyx_GOTREF(__pyx_t_4);
50708     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
50709     __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_v_v, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(21, 437, __pyx_L1_error)
50710     __Pyx_GOTREF(__pyx_t_5);
50711     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
50712     __Pyx_DECREF_SET(__pyx_v_v, __pyx_t_5);
50713     __pyx_t_5 = 0;
50714 
50715     /* "yt/geometry/_selection_routines/boolean_selectors.pxi":436
50716  *     def _hash_vals(self):
50717  *         v = ("chained_or",)
50718  *         for s in self.selectors:             # <<<<<<<<<<<<<<
50719  *             v += s._hash_vals()
50720  *         return v
50721  */
50722   }
50723   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
50724 
50725   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":438
50726  *         for s in self.selectors:
50727  *             v += s._hash_vals()
50728  *         return v             # <<<<<<<<<<<<<<
50729  *
50730  * union_selector = ChainedBooleanORSelector
50731  */
50732   __Pyx_XDECREF(__pyx_r);
50733   __Pyx_INCREF(__pyx_v_v);
50734   __pyx_r = __pyx_v_v;
50735   goto __pyx_L0;
50736 
50737   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":434
50738  *         return 0
50739  *
50740  *     def _hash_vals(self):             # <<<<<<<<<<<<<<
50741  *         v = ("chained_or",)
50742  *         for s in self.selectors:
50743  */
50744 
50745   /* function exit code */
50746   __pyx_L1_error:;
50747   __Pyx_XDECREF(__pyx_t_1);
50748   __Pyx_XDECREF(__pyx_t_4);
50749   __Pyx_XDECREF(__pyx_t_5);
50750   __Pyx_XDECREF(__pyx_t_6);
50751   __Pyx_AddTraceback("yt.geometry.selection_routines.ChainedBooleanORSelector._hash_vals", __pyx_clineno, __pyx_lineno, __pyx_filename);
50752   __pyx_r = NULL;
50753   __pyx_L0:;
50754   __Pyx_XDECREF(__pyx_v_v);
50755   __Pyx_XDECREF(__pyx_v_s);
50756   __Pyx_XGIVEREF(__pyx_r);
50757   __Pyx_RefNannyFinishContext();
50758   return __pyx_r;
50759 }
50760 
50761 /* "(tree fragment)":1
50762  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
50763  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
50764  * def __setstate_cython__(self, __pyx_state):
50765  */
50766 
50767 /* Python wrapper */
50768 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
50769 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
50770   PyObject *__pyx_r = 0;
50771   __Pyx_RefNannyDeclarations
50772   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
50773   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_2__reduce_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *)__pyx_v_self));
50774 
50775   /* function exit code */
50776   __Pyx_RefNannyFinishContext();
50777   return __pyx_r;
50778 }
50779 
50780 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self) {
50781   PyObject *__pyx_r = NULL;
50782   __Pyx_RefNannyDeclarations
50783   PyObject *__pyx_t_1 = NULL;
50784   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
50785 
50786   /* "(tree fragment)":2
50787  * def __reduce_cython__(self):
50788  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
50789  * def __setstate_cython__(self, __pyx_state):
50790  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
50791  */
50792   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__79, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
50793   __Pyx_GOTREF(__pyx_t_1);
50794   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
50795   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
50796   __PYX_ERR(5, 2, __pyx_L1_error)
50797 
50798   /* "(tree fragment)":1
50799  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
50800  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
50801  * def __setstate_cython__(self, __pyx_state):
50802  */
50803 
50804   /* function exit code */
50805   __pyx_L1_error:;
50806   __Pyx_XDECREF(__pyx_t_1);
50807   __Pyx_AddTraceback("yt.geometry.selection_routines.ChainedBooleanORSelector.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
50808   __pyx_r = NULL;
50809   __Pyx_XGIVEREF(__pyx_r);
50810   __Pyx_RefNannyFinishContext();
50811   return __pyx_r;
50812 }
50813 
50814 /* "(tree fragment)":3
50815  * def __reduce_cython__(self):
50816  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
50817  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
50818  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
50819  */
50820 
50821 /* Python wrapper */
50822 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
50823 static PyObject *__pyx_pw_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
50824   PyObject *__pyx_r = 0;
50825   __Pyx_RefNannyDeclarations
50826   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
50827   __pyx_r = __pyx_pf_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_4__setstate_cython__(((struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
50828 
50829   /* function exit code */
50830   __Pyx_RefNannyFinishContext();
50831   return __pyx_r;
50832 }
50833 
50834 static PyObject *__pyx_pf_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
50835   PyObject *__pyx_r = NULL;
50836   __Pyx_RefNannyDeclarations
50837   PyObject *__pyx_t_1 = NULL;
50838   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
50839 
50840   /* "(tree fragment)":4
50841  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
50842  * def __setstate_cython__(self, __pyx_state):
50843  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
50844  */
50845   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__80, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
50846   __Pyx_GOTREF(__pyx_t_1);
50847   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
50848   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
50849   __PYX_ERR(5, 4, __pyx_L1_error)
50850 
50851   /* "(tree fragment)":3
50852  * def __reduce_cython__(self):
50853  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
50854  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
50855  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
50856  */
50857 
50858   /* function exit code */
50859   __pyx_L1_error:;
50860   __Pyx_XDECREF(__pyx_t_1);
50861   __Pyx_AddTraceback("yt.geometry.selection_routines.ChainedBooleanORSelector.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
50862   __pyx_r = NULL;
50863   __Pyx_XGIVEREF(__pyx_r);
50864   __Pyx_RefNannyFinishContext();
50865   return __pyx_r;
50866 }
50867 
50868 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":258
50869  *         # experimental exception made for __getbuffer__ and __releasebuffer__
50870  *         # -- the details of this may change.
50871  *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
50872  *             # This implementation of getbuffer is geared towards Cython
50873  *             # requirements, and does not yet fulfill the PEP.
50874  */
50875 
50876 /* Python wrapper */
50877 static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
50878 static CYTHON_UNUSED int __pyx_pw_5numpy_7ndarray_1__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
50879   int __pyx_r;
50880   __Pyx_RefNannyDeclarations
50881   __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
50882   __pyx_r = __pyx_pf_5numpy_7ndarray___getbuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
50883 
50884   /* function exit code */
50885   __Pyx_RefNannyFinishContext();
50886   return __pyx_r;
50887 }
50888 
50889 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
50890   int __pyx_v_i;
50891   int __pyx_v_ndim;
50892   int __pyx_v_endian_detector;
50893   int __pyx_v_little_endian;
50894   int __pyx_v_t;
50895   char *__pyx_v_f;
50896   PyArray_Descr *__pyx_v_descr = 0;
50897   int __pyx_v_offset;
50898   int __pyx_r;
50899   __Pyx_RefNannyDeclarations
50900   int __pyx_t_1;
50901   int __pyx_t_2;
50902   PyObject *__pyx_t_3 = NULL;
50903   int __pyx_t_4;
50904   int __pyx_t_5;
50905   int __pyx_t_6;
50906   PyArray_Descr *__pyx_t_7;
50907   PyObject *__pyx_t_8 = NULL;
50908   char *__pyx_t_9;
50909   if (__pyx_v_info == NULL) {
50910     PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");
50911     return -1;
50912   }
50913   __Pyx_RefNannySetupContext("__getbuffer__", 0);
50914   __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
50915   __Pyx_GIVEREF(__pyx_v_info->obj);
50916 
50917   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":265
50918  *
50919  *             cdef int i, ndim
50920  *             cdef int endian_detector = 1             # <<<<<<<<<<<<<<
50921  *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
50922  *
50923  */
50924   __pyx_v_endian_detector = 1;
50925 
50926   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":266
50927  *             cdef int i, ndim
50928  *             cdef int endian_detector = 1
50929  *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
50930  *
50931  *             ndim = PyArray_NDIM(self)
50932  */
50933   __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
50934 
50935   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":268
50936  *             cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
50937  *
50938  *             ndim = PyArray_NDIM(self)             # <<<<<<<<<<<<<<
50939  *
50940  *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
50941  */
50942   __pyx_v_ndim = PyArray_NDIM(__pyx_v_self);
50943 
50944   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":270
50945  *             ndim = PyArray_NDIM(self)
50946  *
50947  *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
50948  *                 and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)):
50949  *                 raise ValueError(u"ndarray is not C contiguous")
50950  */
50951   __pyx_t_2 = (((__pyx_v_flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS) != 0);
50952   if (__pyx_t_2) {
50953   } else {
50954     __pyx_t_1 = __pyx_t_2;
50955     goto __pyx_L4_bool_binop_done;
50956   }
50957 
50958   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":271
50959  *
50960  *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
50961  *                 and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)):             # <<<<<<<<<<<<<<
50962  *                 raise ValueError(u"ndarray is not C contiguous")
50963  *
50964  */
50965   __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_ARRAY_C_CONTIGUOUS) != 0)) != 0);
50966   __pyx_t_1 = __pyx_t_2;
50967   __pyx_L4_bool_binop_done:;
50968 
50969   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":270
50970  *             ndim = PyArray_NDIM(self)
50971  *
50972  *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
50973  *                 and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)):
50974  *                 raise ValueError(u"ndarray is not C contiguous")
50975  */
50976   if (unlikely(__pyx_t_1)) {
50977 
50978     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":272
50979  *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
50980  *                 and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)):
50981  *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
50982  *
50983  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
50984  */
50985     __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__81, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 272, __pyx_L1_error)
50986     __Pyx_GOTREF(__pyx_t_3);
50987     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
50988     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
50989     __PYX_ERR(22, 272, __pyx_L1_error)
50990 
50991     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":270
50992  *             ndim = PyArray_NDIM(self)
50993  *
50994  *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)             # <<<<<<<<<<<<<<
50995  *                 and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)):
50996  *                 raise ValueError(u"ndarray is not C contiguous")
50997  */
50998   }
50999 
51000   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":274
51001  *                 raise ValueError(u"ndarray is not C contiguous")
51002  *
51003  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
51004  *                 and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)):
51005  *                 raise ValueError(u"ndarray is not Fortran contiguous")
51006  */
51007   __pyx_t_2 = (((__pyx_v_flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS) != 0);
51008   if (__pyx_t_2) {
51009   } else {
51010     __pyx_t_1 = __pyx_t_2;
51011     goto __pyx_L7_bool_binop_done;
51012   }
51013 
51014   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":275
51015  *
51016  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
51017  *                 and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)):             # <<<<<<<<<<<<<<
51018  *                 raise ValueError(u"ndarray is not Fortran contiguous")
51019  *
51020  */
51021   __pyx_t_2 = ((!(PyArray_CHKFLAGS(__pyx_v_self, NPY_ARRAY_F_CONTIGUOUS) != 0)) != 0);
51022   __pyx_t_1 = __pyx_t_2;
51023   __pyx_L7_bool_binop_done:;
51024 
51025   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":274
51026  *                 raise ValueError(u"ndarray is not C contiguous")
51027  *
51028  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
51029  *                 and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)):
51030  *                 raise ValueError(u"ndarray is not Fortran contiguous")
51031  */
51032   if (unlikely(__pyx_t_1)) {
51033 
51034     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":276
51035  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
51036  *                 and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)):
51037  *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
51038  *
51039  *             info.buf = PyArray_DATA(self)
51040  */
51041     __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__82, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 276, __pyx_L1_error)
51042     __Pyx_GOTREF(__pyx_t_3);
51043     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
51044     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
51045     __PYX_ERR(22, 276, __pyx_L1_error)
51046 
51047     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":274
51048  *                 raise ValueError(u"ndarray is not C contiguous")
51049  *
51050  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)             # <<<<<<<<<<<<<<
51051  *                 and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)):
51052  *                 raise ValueError(u"ndarray is not Fortran contiguous")
51053  */
51054   }
51055 
51056   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":278
51057  *                 raise ValueError(u"ndarray is not Fortran contiguous")
51058  *
51059  *             info.buf = PyArray_DATA(self)             # <<<<<<<<<<<<<<
51060  *             info.ndim = ndim
51061  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
51062  */
51063   __pyx_v_info->buf = PyArray_DATA(__pyx_v_self);
51064 
51065   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":279
51066  *
51067  *             info.buf = PyArray_DATA(self)
51068  *             info.ndim = ndim             # <<<<<<<<<<<<<<
51069  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
51070  *                 # Allocate new buffer for strides and shape info.
51071  */
51072   __pyx_v_info->ndim = __pyx_v_ndim;
51073 
51074   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":280
51075  *             info.buf = PyArray_DATA(self)
51076  *             info.ndim = ndim
51077  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
51078  *                 # Allocate new buffer for strides and shape info.
51079  *                 # This is allocated as one block, strides first.
51080  */
51081   __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
51082   if (__pyx_t_1) {
51083 
51084     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":283
51085  *                 # Allocate new buffer for strides and shape info.
51086  *                 # This is allocated as one block, strides first.
51087  *                 info.strides = <Py_ssize_t*>PyObject_Malloc(sizeof(Py_ssize_t) * 2 * <size_t>ndim)             # <<<<<<<<<<<<<<
51088  *                 info.shape = info.strides + ndim
51089  *                 for i in range(ndim):
51090  */
51091     __pyx_v_info->strides = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * 2) * ((size_t)__pyx_v_ndim))));
51092 
51093     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":284
51094  *                 # This is allocated as one block, strides first.
51095  *                 info.strides = <Py_ssize_t*>PyObject_Malloc(sizeof(Py_ssize_t) * 2 * <size_t>ndim)
51096  *                 info.shape = info.strides + ndim             # <<<<<<<<<<<<<<
51097  *                 for i in range(ndim):
51098  *                     info.strides[i] = PyArray_STRIDES(self)[i]
51099  */
51100     __pyx_v_info->shape = (__pyx_v_info->strides + __pyx_v_ndim);
51101 
51102     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":285
51103  *                 info.strides = <Py_ssize_t*>PyObject_Malloc(sizeof(Py_ssize_t) * 2 * <size_t>ndim)
51104  *                 info.shape = info.strides + ndim
51105  *                 for i in range(ndim):             # <<<<<<<<<<<<<<
51106  *                     info.strides[i] = PyArray_STRIDES(self)[i]
51107  *                     info.shape[i] = PyArray_DIMS(self)[i]
51108  */
51109     __pyx_t_4 = __pyx_v_ndim;
51110     __pyx_t_5 = __pyx_t_4;
51111     for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
51112       __pyx_v_i = __pyx_t_6;
51113 
51114       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":286
51115  *                 info.shape = info.strides + ndim
51116  *                 for i in range(ndim):
51117  *                     info.strides[i] = PyArray_STRIDES(self)[i]             # <<<<<<<<<<<<<<
51118  *                     info.shape[i] = PyArray_DIMS(self)[i]
51119  *             else:
51120  */
51121       (__pyx_v_info->strides[__pyx_v_i]) = (PyArray_STRIDES(__pyx_v_self)[__pyx_v_i]);
51122 
51123       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":287
51124  *                 for i in range(ndim):
51125  *                     info.strides[i] = PyArray_STRIDES(self)[i]
51126  *                     info.shape[i] = PyArray_DIMS(self)[i]             # <<<<<<<<<<<<<<
51127  *             else:
51128  *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
51129  */
51130       (__pyx_v_info->shape[__pyx_v_i]) = (PyArray_DIMS(__pyx_v_self)[__pyx_v_i]);
51131     }
51132 
51133     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":280
51134  *             info.buf = PyArray_DATA(self)
51135  *             info.ndim = ndim
51136  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
51137  *                 # Allocate new buffer for strides and shape info.
51138  *                 # This is allocated as one block, strides first.
51139  */
51140     goto __pyx_L9;
51141   }
51142 
51143   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":289
51144  *                     info.shape[i] = PyArray_DIMS(self)[i]
51145  *             else:
51146  *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
51147  *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
51148  *             info.suboffsets = NULL
51149  */
51150   /*else*/ {
51151     __pyx_v_info->strides = ((Py_ssize_t *)PyArray_STRIDES(__pyx_v_self));
51152 
51153     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":290
51154  *             else:
51155  *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
51156  *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)             # <<<<<<<<<<<<<<
51157  *             info.suboffsets = NULL
51158  *             info.itemsize = PyArray_ITEMSIZE(self)
51159  */
51160     __pyx_v_info->shape = ((Py_ssize_t *)PyArray_DIMS(__pyx_v_self));
51161   }
51162   __pyx_L9:;
51163 
51164   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":291
51165  *                 info.strides = <Py_ssize_t*>PyArray_STRIDES(self)
51166  *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
51167  *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
51168  *             info.itemsize = PyArray_ITEMSIZE(self)
51169  *             info.readonly = not PyArray_ISWRITEABLE(self)
51170  */
51171   __pyx_v_info->suboffsets = NULL;
51172 
51173   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":292
51174  *                 info.shape = <Py_ssize_t*>PyArray_DIMS(self)
51175  *             info.suboffsets = NULL
51176  *             info.itemsize = PyArray_ITEMSIZE(self)             # <<<<<<<<<<<<<<
51177  *             info.readonly = not PyArray_ISWRITEABLE(self)
51178  *
51179  */
51180   __pyx_v_info->itemsize = PyArray_ITEMSIZE(__pyx_v_self);
51181 
51182   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":293
51183  *             info.suboffsets = NULL
51184  *             info.itemsize = PyArray_ITEMSIZE(self)
51185  *             info.readonly = not PyArray_ISWRITEABLE(self)             # <<<<<<<<<<<<<<
51186  *
51187  *             cdef int t
51188  */
51189   __pyx_v_info->readonly = (!(PyArray_ISWRITEABLE(__pyx_v_self) != 0));
51190 
51191   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":296
51192  *
51193  *             cdef int t
51194  *             cdef char* f = NULL             # <<<<<<<<<<<<<<
51195  *             cdef dtype descr = <dtype>PyArray_DESCR(self)
51196  *             cdef int offset
51197  */
51198   __pyx_v_f = NULL;
51199 
51200   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":297
51201  *             cdef int t
51202  *             cdef char* f = NULL
51203  *             cdef dtype descr = <dtype>PyArray_DESCR(self)             # <<<<<<<<<<<<<<
51204  *             cdef int offset
51205  *
51206  */
51207   __pyx_t_7 = PyArray_DESCR(__pyx_v_self);
51208   __pyx_t_3 = ((PyObject *)__pyx_t_7);
51209   __Pyx_INCREF(__pyx_t_3);
51210   __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3);
51211   __pyx_t_3 = 0;
51212 
51213   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":300
51214  *             cdef int offset
51215  *
51216  *             info.obj = self             # <<<<<<<<<<<<<<
51217  *
51218  *             if not PyDataType_HASFIELDS(descr):
51219  */
51220   __Pyx_INCREF(((PyObject *)__pyx_v_self));
51221   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
51222   __Pyx_GOTREF(__pyx_v_info->obj);
51223   __Pyx_DECREF(__pyx_v_info->obj);
51224   __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
51225 
51226   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":302
51227  *             info.obj = self
51228  *
51229  *             if not PyDataType_HASFIELDS(descr):             # <<<<<<<<<<<<<<
51230  *                 t = descr.type_num
51231  *                 if ((descr.byteorder == c'>' and little_endian) or
51232  */
51233   __pyx_t_1 = ((!(PyDataType_HASFIELDS(__pyx_v_descr) != 0)) != 0);
51234   if (__pyx_t_1) {
51235 
51236     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":303
51237  *
51238  *             if not PyDataType_HASFIELDS(descr):
51239  *                 t = descr.type_num             # <<<<<<<<<<<<<<
51240  *                 if ((descr.byteorder == c'>' and little_endian) or
51241  *                     (descr.byteorder == c'<' and not little_endian)):
51242  */
51243     __pyx_t_4 = __pyx_v_descr->type_num;
51244     __pyx_v_t = __pyx_t_4;
51245 
51246     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":304
51247  *             if not PyDataType_HASFIELDS(descr):
51248  *                 t = descr.type_num
51249  *                 if ((descr.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
51250  *                     (descr.byteorder == c'<' and not little_endian)):
51251  *                     raise ValueError(u"Non-native byte order not supported")
51252  */
51253     __pyx_t_2 = ((__pyx_v_descr->byteorder == '>') != 0);
51254     if (!__pyx_t_2) {
51255       goto __pyx_L15_next_or;
51256     } else {
51257     }
51258     __pyx_t_2 = (__pyx_v_little_endian != 0);
51259     if (!__pyx_t_2) {
51260     } else {
51261       __pyx_t_1 = __pyx_t_2;
51262       goto __pyx_L14_bool_binop_done;
51263     }
51264     __pyx_L15_next_or:;
51265 
51266     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":305
51267  *                 t = descr.type_num
51268  *                 if ((descr.byteorder == c'>' and little_endian) or
51269  *                     (descr.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
51270  *                     raise ValueError(u"Non-native byte order not supported")
51271  *                 if   t == NPY_BYTE:        f = "b"
51272  */
51273     __pyx_t_2 = ((__pyx_v_descr->byteorder == '<') != 0);
51274     if (__pyx_t_2) {
51275     } else {
51276       __pyx_t_1 = __pyx_t_2;
51277       goto __pyx_L14_bool_binop_done;
51278     }
51279     __pyx_t_2 = ((!(__pyx_v_little_endian != 0)) != 0);
51280     __pyx_t_1 = __pyx_t_2;
51281     __pyx_L14_bool_binop_done:;
51282 
51283     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":304
51284  *             if not PyDataType_HASFIELDS(descr):
51285  *                 t = descr.type_num
51286  *                 if ((descr.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
51287  *                     (descr.byteorder == c'<' and not little_endian)):
51288  *                     raise ValueError(u"Non-native byte order not supported")
51289  */
51290     if (unlikely(__pyx_t_1)) {
51291 
51292       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":306
51293  *                 if ((descr.byteorder == c'>' and little_endian) or
51294  *                     (descr.byteorder == c'<' and not little_endian)):
51295  *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
51296  *                 if   t == NPY_BYTE:        f = "b"
51297  *                 elif t == NPY_UBYTE:       f = "B"
51298  */
51299       __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__83, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 306, __pyx_L1_error)
51300       __Pyx_GOTREF(__pyx_t_3);
51301       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
51302       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
51303       __PYX_ERR(22, 306, __pyx_L1_error)
51304 
51305       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":304
51306  *             if not PyDataType_HASFIELDS(descr):
51307  *                 t = descr.type_num
51308  *                 if ((descr.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
51309  *                     (descr.byteorder == c'<' and not little_endian)):
51310  *                     raise ValueError(u"Non-native byte order not supported")
51311  */
51312     }
51313 
51314     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":307
51315  *                     (descr.byteorder == c'<' and not little_endian)):
51316  *                     raise ValueError(u"Non-native byte order not supported")
51317  *                 if   t == NPY_BYTE:        f = "b"             # <<<<<<<<<<<<<<
51318  *                 elif t == NPY_UBYTE:       f = "B"
51319  *                 elif t == NPY_SHORT:       f = "h"
51320  */
51321     switch (__pyx_v_t) {
51322       case NPY_BYTE:
51323       __pyx_v_f = ((char *)"b");
51324       break;
51325       case NPY_UBYTE:
51326 
51327       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":308
51328  *                     raise ValueError(u"Non-native byte order not supported")
51329  *                 if   t == NPY_BYTE:        f = "b"
51330  *                 elif t == NPY_UBYTE:       f = "B"             # <<<<<<<<<<<<<<
51331  *                 elif t == NPY_SHORT:       f = "h"
51332  *                 elif t == NPY_USHORT:      f = "H"
51333  */
51334       __pyx_v_f = ((char *)"B");
51335       break;
51336       case NPY_SHORT:
51337 
51338       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":309
51339  *                 if   t == NPY_BYTE:        f = "b"
51340  *                 elif t == NPY_UBYTE:       f = "B"
51341  *                 elif t == NPY_SHORT:       f = "h"             # <<<<<<<<<<<<<<
51342  *                 elif t == NPY_USHORT:      f = "H"
51343  *                 elif t == NPY_INT:         f = "i"
51344  */
51345       __pyx_v_f = ((char *)"h");
51346       break;
51347       case NPY_USHORT:
51348 
51349       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":310
51350  *                 elif t == NPY_UBYTE:       f = "B"
51351  *                 elif t == NPY_SHORT:       f = "h"
51352  *                 elif t == NPY_USHORT:      f = "H"             # <<<<<<<<<<<<<<
51353  *                 elif t == NPY_INT:         f = "i"
51354  *                 elif t == NPY_UINT:        f = "I"
51355  */
51356       __pyx_v_f = ((char *)"H");
51357       break;
51358       case NPY_INT:
51359 
51360       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":311
51361  *                 elif t == NPY_SHORT:       f = "h"
51362  *                 elif t == NPY_USHORT:      f = "H"
51363  *                 elif t == NPY_INT:         f = "i"             # <<<<<<<<<<<<<<
51364  *                 elif t == NPY_UINT:        f = "I"
51365  *                 elif t == NPY_LONG:        f = "l"
51366  */
51367       __pyx_v_f = ((char *)"i");
51368       break;
51369       case NPY_UINT:
51370 
51371       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":312
51372  *                 elif t == NPY_USHORT:      f = "H"
51373  *                 elif t == NPY_INT:         f = "i"
51374  *                 elif t == NPY_UINT:        f = "I"             # <<<<<<<<<<<<<<
51375  *                 elif t == NPY_LONG:        f = "l"
51376  *                 elif t == NPY_ULONG:       f = "L"
51377  */
51378       __pyx_v_f = ((char *)"I");
51379       break;
51380       case NPY_LONG:
51381 
51382       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":313
51383  *                 elif t == NPY_INT:         f = "i"
51384  *                 elif t == NPY_UINT:        f = "I"
51385  *                 elif t == NPY_LONG:        f = "l"             # <<<<<<<<<<<<<<
51386  *                 elif t == NPY_ULONG:       f = "L"
51387  *                 elif t == NPY_LONGLONG:    f = "q"
51388  */
51389       __pyx_v_f = ((char *)"l");
51390       break;
51391       case NPY_ULONG:
51392 
51393       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":314
51394  *                 elif t == NPY_UINT:        f = "I"
51395  *                 elif t == NPY_LONG:        f = "l"
51396  *                 elif t == NPY_ULONG:       f = "L"             # <<<<<<<<<<<<<<
51397  *                 elif t == NPY_LONGLONG:    f = "q"
51398  *                 elif t == NPY_ULONGLONG:   f = "Q"
51399  */
51400       __pyx_v_f = ((char *)"L");
51401       break;
51402       case NPY_LONGLONG:
51403 
51404       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":315
51405  *                 elif t == NPY_LONG:        f = "l"
51406  *                 elif t == NPY_ULONG:       f = "L"
51407  *                 elif t == NPY_LONGLONG:    f = "q"             # <<<<<<<<<<<<<<
51408  *                 elif t == NPY_ULONGLONG:   f = "Q"
51409  *                 elif t == NPY_FLOAT:       f = "f"
51410  */
51411       __pyx_v_f = ((char *)"q");
51412       break;
51413       case NPY_ULONGLONG:
51414 
51415       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":316
51416  *                 elif t == NPY_ULONG:       f = "L"
51417  *                 elif t == NPY_LONGLONG:    f = "q"
51418  *                 elif t == NPY_ULONGLONG:   f = "Q"             # <<<<<<<<<<<<<<
51419  *                 elif t == NPY_FLOAT:       f = "f"
51420  *                 elif t == NPY_DOUBLE:      f = "d"
51421  */
51422       __pyx_v_f = ((char *)"Q");
51423       break;
51424       case NPY_FLOAT:
51425 
51426       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":317
51427  *                 elif t == NPY_LONGLONG:    f = "q"
51428  *                 elif t == NPY_ULONGLONG:   f = "Q"
51429  *                 elif t == NPY_FLOAT:       f = "f"             # <<<<<<<<<<<<<<
51430  *                 elif t == NPY_DOUBLE:      f = "d"
51431  *                 elif t == NPY_LONGDOUBLE:  f = "g"
51432  */
51433       __pyx_v_f = ((char *)"f");
51434       break;
51435       case NPY_DOUBLE:
51436 
51437       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":318
51438  *                 elif t == NPY_ULONGLONG:   f = "Q"
51439  *                 elif t == NPY_FLOAT:       f = "f"
51440  *                 elif t == NPY_DOUBLE:      f = "d"             # <<<<<<<<<<<<<<
51441  *                 elif t == NPY_LONGDOUBLE:  f = "g"
51442  *                 elif t == NPY_CFLOAT:      f = "Zf"
51443  */
51444       __pyx_v_f = ((char *)"d");
51445       break;
51446       case NPY_LONGDOUBLE:
51447 
51448       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":319
51449  *                 elif t == NPY_FLOAT:       f = "f"
51450  *                 elif t == NPY_DOUBLE:      f = "d"
51451  *                 elif t == NPY_LONGDOUBLE:  f = "g"             # <<<<<<<<<<<<<<
51452  *                 elif t == NPY_CFLOAT:      f = "Zf"
51453  *                 elif t == NPY_CDOUBLE:     f = "Zd"
51454  */
51455       __pyx_v_f = ((char *)"g");
51456       break;
51457       case NPY_CFLOAT:
51458 
51459       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":320
51460  *                 elif t == NPY_DOUBLE:      f = "d"
51461  *                 elif t == NPY_LONGDOUBLE:  f = "g"
51462  *                 elif t == NPY_CFLOAT:      f = "Zf"             # <<<<<<<<<<<<<<
51463  *                 elif t == NPY_CDOUBLE:     f = "Zd"
51464  *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
51465  */
51466       __pyx_v_f = ((char *)"Zf");
51467       break;
51468       case NPY_CDOUBLE:
51469 
51470       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":321
51471  *                 elif t == NPY_LONGDOUBLE:  f = "g"
51472  *                 elif t == NPY_CFLOAT:      f = "Zf"
51473  *                 elif t == NPY_CDOUBLE:     f = "Zd"             # <<<<<<<<<<<<<<
51474  *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
51475  *                 elif t == NPY_OBJECT:      f = "O"
51476  */
51477       __pyx_v_f = ((char *)"Zd");
51478       break;
51479       case NPY_CLONGDOUBLE:
51480 
51481       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":322
51482  *                 elif t == NPY_CFLOAT:      f = "Zf"
51483  *                 elif t == NPY_CDOUBLE:     f = "Zd"
51484  *                 elif t == NPY_CLONGDOUBLE: f = "Zg"             # <<<<<<<<<<<<<<
51485  *                 elif t == NPY_OBJECT:      f = "O"
51486  *                 else:
51487  */
51488       __pyx_v_f = ((char *)"Zg");
51489       break;
51490       case NPY_OBJECT:
51491 
51492       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":323
51493  *                 elif t == NPY_CDOUBLE:     f = "Zd"
51494  *                 elif t == NPY_CLONGDOUBLE: f = "Zg"
51495  *                 elif t == NPY_OBJECT:      f = "O"             # <<<<<<<<<<<<<<
51496  *                 else:
51497  *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
51498  */
51499       __pyx_v_f = ((char *)"O");
51500       break;
51501       default:
51502 
51503       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":325
51504  *                 elif t == NPY_OBJECT:      f = "O"
51505  *                 else:
51506  *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
51507  *                 info.format = f
51508  *                 return
51509  */
51510       __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 325, __pyx_L1_error)
51511       __Pyx_GOTREF(__pyx_t_3);
51512       __pyx_t_8 = PyUnicode_Format(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(22, 325, __pyx_L1_error)
51513       __Pyx_GOTREF(__pyx_t_8);
51514       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
51515       __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 325, __pyx_L1_error)
51516       __Pyx_GOTREF(__pyx_t_3);
51517       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
51518       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
51519       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
51520       __PYX_ERR(22, 325, __pyx_L1_error)
51521       break;
51522     }
51523 
51524     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":326
51525  *                 else:
51526  *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
51527  *                 info.format = f             # <<<<<<<<<<<<<<
51528  *                 return
51529  *             else:
51530  */
51531     __pyx_v_info->format = __pyx_v_f;
51532 
51533     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":327
51534  *                     raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
51535  *                 info.format = f
51536  *                 return             # <<<<<<<<<<<<<<
51537  *             else:
51538  *                 info.format = <char*>PyObject_Malloc(_buffer_format_string_len)
51539  */
51540     __pyx_r = 0;
51541     goto __pyx_L0;
51542 
51543     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":302
51544  *             info.obj = self
51545  *
51546  *             if not PyDataType_HASFIELDS(descr):             # <<<<<<<<<<<<<<
51547  *                 t = descr.type_num
51548  *                 if ((descr.byteorder == c'>' and little_endian) or
51549  */
51550   }
51551 
51552   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":329
51553  *                 return
51554  *             else:
51555  *                 info.format = <char*>PyObject_Malloc(_buffer_format_string_len)             # <<<<<<<<<<<<<<
51556  *                 info.format[0] = c'^' # Native data types, manual alignment
51557  *                 offset = 0
51558  */
51559   /*else*/ {
51560     __pyx_v_info->format = ((char *)PyObject_Malloc(0xFF));
51561 
51562     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":330
51563  *             else:
51564  *                 info.format = <char*>PyObject_Malloc(_buffer_format_string_len)
51565  *                 info.format[0] = c'^' # Native data types, manual alignment             # <<<<<<<<<<<<<<
51566  *                 offset = 0
51567  *                 f = _util_dtypestring(descr, info.format + 1,
51568  */
51569     (__pyx_v_info->format[0]) = '^';
51570 
51571     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":331
51572  *                 info.format = <char*>PyObject_Malloc(_buffer_format_string_len)
51573  *                 info.format[0] = c'^' # Native data types, manual alignment
51574  *                 offset = 0             # <<<<<<<<<<<<<<
51575  *                 f = _util_dtypestring(descr, info.format + 1,
51576  *                                       info.format + _buffer_format_string_len,
51577  */
51578     __pyx_v_offset = 0;
51579 
51580     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":332
51581  *                 info.format[0] = c'^' # Native data types, manual alignment
51582  *                 offset = 0
51583  *                 f = _util_dtypestring(descr, info.format + 1,             # <<<<<<<<<<<<<<
51584  *                                       info.format + _buffer_format_string_len,
51585  *                                       &offset)
51586  */
51587     __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_descr, (__pyx_v_info->format + 1), (__pyx_v_info->format + 0xFF), (&__pyx_v_offset)); if (unlikely(__pyx_t_9 == ((char *)NULL))) __PYX_ERR(22, 332, __pyx_L1_error)
51588     __pyx_v_f = __pyx_t_9;
51589 
51590     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":335
51591  *                                       info.format + _buffer_format_string_len,
51592  *                                       &offset)
51593  *                 f[0] = c'\0' # Terminate format string             # <<<<<<<<<<<<<<
51594  *
51595  *         def __releasebuffer__(ndarray self, Py_buffer* info):
51596  */
51597     (__pyx_v_f[0]) = '\x00';
51598   }
51599 
51600   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":258
51601  *         # experimental exception made for __getbuffer__ and __releasebuffer__
51602  *         # -- the details of this may change.
51603  *         def __getbuffer__(ndarray self, Py_buffer* info, int flags):             # <<<<<<<<<<<<<<
51604  *             # This implementation of getbuffer is geared towards Cython
51605  *             # requirements, and does not yet fulfill the PEP.
51606  */
51607 
51608   /* function exit code */
51609   __pyx_r = 0;
51610   goto __pyx_L0;
51611   __pyx_L1_error:;
51612   __Pyx_XDECREF(__pyx_t_3);
51613   __Pyx_XDECREF(__pyx_t_8);
51614   __Pyx_AddTraceback("numpy.ndarray.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
51615   __pyx_r = -1;
51616   if (__pyx_v_info->obj != NULL) {
51617     __Pyx_GOTREF(__pyx_v_info->obj);
51618     __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
51619   }
51620   goto __pyx_L2;
51621   __pyx_L0:;
51622   if (__pyx_v_info->obj == Py_None) {
51623     __Pyx_GOTREF(__pyx_v_info->obj);
51624     __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
51625   }
51626   __pyx_L2:;
51627   __Pyx_XDECREF((PyObject *)__pyx_v_descr);
51628   __Pyx_RefNannyFinishContext();
51629   return __pyx_r;
51630 }
51631 
51632 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":337
51633  *                 f[0] = c'\0' # Terminate format string
51634  *
51635  *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
51636  *             if PyArray_HASFIELDS(self):
51637  *                 PyObject_Free(info.format)
51638  */
51639 
51640 /* Python wrapper */
51641 static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info); /*proto*/
51642 static CYTHON_UNUSED void __pyx_pw_5numpy_7ndarray_3__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
51643   __Pyx_RefNannyDeclarations
51644   __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
51645   __pyx_pf_5numpy_7ndarray_2__releasebuffer__(((PyArrayObject *)__pyx_v_self), ((Py_buffer *)__pyx_v_info));
51646 
51647   /* function exit code */
51648   __Pyx_RefNannyFinishContext();
51649 }
51650 
51651 static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info) {
51652   __Pyx_RefNannyDeclarations
51653   int __pyx_t_1;
51654   __Pyx_RefNannySetupContext("__releasebuffer__", 0);
51655 
51656   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":338
51657  *
51658  *         def __releasebuffer__(ndarray self, Py_buffer* info):
51659  *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
51660  *                 PyObject_Free(info.format)
51661  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
51662  */
51663   __pyx_t_1 = (PyArray_HASFIELDS(__pyx_v_self) != 0);
51664   if (__pyx_t_1) {
51665 
51666     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":339
51667  *         def __releasebuffer__(ndarray self, Py_buffer* info):
51668  *             if PyArray_HASFIELDS(self):
51669  *                 PyObject_Free(info.format)             # <<<<<<<<<<<<<<
51670  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
51671  *                 PyObject_Free(info.strides)
51672  */
51673     PyObject_Free(__pyx_v_info->format);
51674 
51675     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":338
51676  *
51677  *         def __releasebuffer__(ndarray self, Py_buffer* info):
51678  *             if PyArray_HASFIELDS(self):             # <<<<<<<<<<<<<<
51679  *                 PyObject_Free(info.format)
51680  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
51681  */
51682   }
51683 
51684   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":340
51685  *             if PyArray_HASFIELDS(self):
51686  *                 PyObject_Free(info.format)
51687  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
51688  *                 PyObject_Free(info.strides)
51689  *                 # info.shape was stored after info.strides in the same block
51690  */
51691   __pyx_t_1 = (((sizeof(npy_intp)) != (sizeof(Py_ssize_t))) != 0);
51692   if (__pyx_t_1) {
51693 
51694     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":341
51695  *                 PyObject_Free(info.format)
51696  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):
51697  *                 PyObject_Free(info.strides)             # <<<<<<<<<<<<<<
51698  *                 # info.shape was stored after info.strides in the same block
51699  *
51700  */
51701     PyObject_Free(__pyx_v_info->strides);
51702 
51703     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":340
51704  *             if PyArray_HASFIELDS(self):
51705  *                 PyObject_Free(info.format)
51706  *             if sizeof(npy_intp) != sizeof(Py_ssize_t):             # <<<<<<<<<<<<<<
51707  *                 PyObject_Free(info.strides)
51708  *                 # info.shape was stored after info.strides in the same block
51709  */
51710   }
51711 
51712   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":337
51713  *                 f[0] = c'\0' # Terminate format string
51714  *
51715  *         def __releasebuffer__(ndarray self, Py_buffer* info):             # <<<<<<<<<<<<<<
51716  *             if PyArray_HASFIELDS(self):
51717  *                 PyObject_Free(info.format)
51718  */
51719 
51720   /* function exit code */
51721   __Pyx_RefNannyFinishContext();
51722 }
51723 
51724 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":821
51725  * ctypedef npy_cdouble     complex_t
51726  *
51727  * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
51728  *     return PyArray_MultiIterNew(1, <void*>a)
51729  *
51730  */
51731 
51732 static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
51733   PyObject *__pyx_r = NULL;
51734   __Pyx_RefNannyDeclarations
51735   PyObject *__pyx_t_1 = NULL;
51736   __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
51737 
51738   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":822
51739  *
51740  * cdef inline object PyArray_MultiIterNew1(a):
51741  *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
51742  *
51743  * cdef inline object PyArray_MultiIterNew2(a, b):
51744  */
51745   __Pyx_XDECREF(__pyx_r);
51746   __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(22, 822, __pyx_L1_error)
51747   __Pyx_GOTREF(__pyx_t_1);
51748   __pyx_r = __pyx_t_1;
51749   __pyx_t_1 = 0;
51750   goto __pyx_L0;
51751 
51752   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":821
51753  * ctypedef npy_cdouble     complex_t
51754  *
51755  * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
51756  *     return PyArray_MultiIterNew(1, <void*>a)
51757  *
51758  */
51759 
51760   /* function exit code */
51761   __pyx_L1_error:;
51762   __Pyx_XDECREF(__pyx_t_1);
51763   __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
51764   __pyx_r = 0;
51765   __pyx_L0:;
51766   __Pyx_XGIVEREF(__pyx_r);
51767   __Pyx_RefNannyFinishContext();
51768   return __pyx_r;
51769 }
51770 
51771 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":824
51772  *     return PyArray_MultiIterNew(1, <void*>a)
51773  *
51774  * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
51775  *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
51776  *
51777  */
51778 
51779 static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
51780   PyObject *__pyx_r = NULL;
51781   __Pyx_RefNannyDeclarations
51782   PyObject *__pyx_t_1 = NULL;
51783   __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
51784 
51785   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":825
51786  *
51787  * cdef inline object PyArray_MultiIterNew2(a, b):
51788  *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
51789  *
51790  * cdef inline object PyArray_MultiIterNew3(a, b, c):
51791  */
51792   __Pyx_XDECREF(__pyx_r);
51793   __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(22, 825, __pyx_L1_error)
51794   __Pyx_GOTREF(__pyx_t_1);
51795   __pyx_r = __pyx_t_1;
51796   __pyx_t_1 = 0;
51797   goto __pyx_L0;
51798 
51799   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":824
51800  *     return PyArray_MultiIterNew(1, <void*>a)
51801  *
51802  * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
51803  *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
51804  *
51805  */
51806 
51807   /* function exit code */
51808   __pyx_L1_error:;
51809   __Pyx_XDECREF(__pyx_t_1);
51810   __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
51811   __pyx_r = 0;
51812   __pyx_L0:;
51813   __Pyx_XGIVEREF(__pyx_r);
51814   __Pyx_RefNannyFinishContext();
51815   return __pyx_r;
51816 }
51817 
51818 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":827
51819  *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
51820  *
51821  * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
51822  *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
51823  *
51824  */
51825 
51826 static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
51827   PyObject *__pyx_r = NULL;
51828   __Pyx_RefNannyDeclarations
51829   PyObject *__pyx_t_1 = NULL;
51830   __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
51831 
51832   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":828
51833  *
51834  * cdef inline object PyArray_MultiIterNew3(a, b, c):
51835  *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
51836  *
51837  * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
51838  */
51839   __Pyx_XDECREF(__pyx_r);
51840   __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(22, 828, __pyx_L1_error)
51841   __Pyx_GOTREF(__pyx_t_1);
51842   __pyx_r = __pyx_t_1;
51843   __pyx_t_1 = 0;
51844   goto __pyx_L0;
51845 
51846   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":827
51847  *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
51848  *
51849  * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
51850  *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
51851  *
51852  */
51853 
51854   /* function exit code */
51855   __pyx_L1_error:;
51856   __Pyx_XDECREF(__pyx_t_1);
51857   __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
51858   __pyx_r = 0;
51859   __pyx_L0:;
51860   __Pyx_XGIVEREF(__pyx_r);
51861   __Pyx_RefNannyFinishContext();
51862   return __pyx_r;
51863 }
51864 
51865 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":830
51866  *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
51867  *
51868  * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
51869  *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
51870  *
51871  */
51872 
51873 static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
51874   PyObject *__pyx_r = NULL;
51875   __Pyx_RefNannyDeclarations
51876   PyObject *__pyx_t_1 = NULL;
51877   __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
51878 
51879   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":831
51880  *
51881  * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
51882  *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
51883  *
51884  * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
51885  */
51886   __Pyx_XDECREF(__pyx_r);
51887   __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(22, 831, __pyx_L1_error)
51888   __Pyx_GOTREF(__pyx_t_1);
51889   __pyx_r = __pyx_t_1;
51890   __pyx_t_1 = 0;
51891   goto __pyx_L0;
51892 
51893   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":830
51894  *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
51895  *
51896  * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
51897  *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
51898  *
51899  */
51900 
51901   /* function exit code */
51902   __pyx_L1_error:;
51903   __Pyx_XDECREF(__pyx_t_1);
51904   __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
51905   __pyx_r = 0;
51906   __pyx_L0:;
51907   __Pyx_XGIVEREF(__pyx_r);
51908   __Pyx_RefNannyFinishContext();
51909   return __pyx_r;
51910 }
51911 
51912 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":833
51913  *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
51914  *
51915  * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
51916  *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
51917  *
51918  */
51919 
51920 static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) {
51921   PyObject *__pyx_r = NULL;
51922   __Pyx_RefNannyDeclarations
51923   PyObject *__pyx_t_1 = NULL;
51924   __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
51925 
51926   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":834
51927  *
51928  * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
51929  *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
51930  *
51931  * cdef inline tuple PyDataType_SHAPE(dtype d):
51932  */
51933   __Pyx_XDECREF(__pyx_r);
51934   __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(22, 834, __pyx_L1_error)
51935   __Pyx_GOTREF(__pyx_t_1);
51936   __pyx_r = __pyx_t_1;
51937   __pyx_t_1 = 0;
51938   goto __pyx_L0;
51939 
51940   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":833
51941  *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
51942  *
51943  * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
51944  *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
51945  *
51946  */
51947 
51948   /* function exit code */
51949   __pyx_L1_error:;
51950   __Pyx_XDECREF(__pyx_t_1);
51951   __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
51952   __pyx_r = 0;
51953   __pyx_L0:;
51954   __Pyx_XGIVEREF(__pyx_r);
51955   __Pyx_RefNannyFinishContext();
51956   return __pyx_r;
51957 }
51958 
51959 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":836
51960  *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
51961  *
51962  * cdef inline tuple PyDataType_SHAPE(dtype d):             # <<<<<<<<<<<<<<
51963  *     if PyDataType_HASSUBARRAY(d):
51964  *         return <tuple>d.subarray.shape
51965  */
51966 
51967 static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) {
51968   PyObject *__pyx_r = NULL;
51969   __Pyx_RefNannyDeclarations
51970   int __pyx_t_1;
51971   __Pyx_RefNannySetupContext("PyDataType_SHAPE", 0);
51972 
51973   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":837
51974  *
51975  * cdef inline tuple PyDataType_SHAPE(dtype d):
51976  *     if PyDataType_HASSUBARRAY(d):             # <<<<<<<<<<<<<<
51977  *         return <tuple>d.subarray.shape
51978  *     else:
51979  */
51980   __pyx_t_1 = (PyDataType_HASSUBARRAY(__pyx_v_d) != 0);
51981   if (__pyx_t_1) {
51982 
51983     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":838
51984  * cdef inline tuple PyDataType_SHAPE(dtype d):
51985  *     if PyDataType_HASSUBARRAY(d):
51986  *         return <tuple>d.subarray.shape             # <<<<<<<<<<<<<<
51987  *     else:
51988  *         return ()
51989  */
51990     __Pyx_XDECREF(__pyx_r);
51991     __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape));
51992     __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape);
51993     goto __pyx_L0;
51994 
51995     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":837
51996  *
51997  * cdef inline tuple PyDataType_SHAPE(dtype d):
51998  *     if PyDataType_HASSUBARRAY(d):             # <<<<<<<<<<<<<<
51999  *         return <tuple>d.subarray.shape
52000  *     else:
52001  */
52002   }
52003 
52004   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":840
52005  *         return <tuple>d.subarray.shape
52006  *     else:
52007  *         return ()             # <<<<<<<<<<<<<<
52008  *
52009  * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:
52010  */
52011   /*else*/ {
52012     __Pyx_XDECREF(__pyx_r);
52013     __Pyx_INCREF(__pyx_empty_tuple);
52014     __pyx_r = __pyx_empty_tuple;
52015     goto __pyx_L0;
52016   }
52017 
52018   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":836
52019  *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
52020  *
52021  * cdef inline tuple PyDataType_SHAPE(dtype d):             # <<<<<<<<<<<<<<
52022  *     if PyDataType_HASSUBARRAY(d):
52023  *         return <tuple>d.subarray.shape
52024  */
52025 
52026   /* function exit code */
52027   __pyx_L0:;
52028   __Pyx_XGIVEREF(__pyx_r);
52029   __Pyx_RefNannyFinishContext();
52030   return __pyx_r;
52031 }
52032 
52033 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":842
52034  *         return ()
52035  *
52036  * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:             # <<<<<<<<<<<<<<
52037  *     # Recursive utility function used in __getbuffer__ to get format
52038  *     # string. The new location in the format string is returned.
52039  */
52040 
52041 static CYTHON_INLINE char *__pyx_f_5numpy__util_dtypestring(PyArray_Descr *__pyx_v_descr, char *__pyx_v_f, char *__pyx_v_end, int *__pyx_v_offset) {
52042   PyArray_Descr *__pyx_v_child = 0;
52043   int __pyx_v_endian_detector;
52044   int __pyx_v_little_endian;
52045   PyObject *__pyx_v_fields = 0;
52046   PyObject *__pyx_v_childname = NULL;
52047   PyObject *__pyx_v_new_offset = NULL;
52048   PyObject *__pyx_v_t = NULL;
52049   char *__pyx_r;
52050   __Pyx_RefNannyDeclarations
52051   PyObject *__pyx_t_1 = NULL;
52052   Py_ssize_t __pyx_t_2;
52053   PyObject *__pyx_t_3 = NULL;
52054   PyObject *__pyx_t_4 = NULL;
52055   int __pyx_t_5;
52056   int __pyx_t_6;
52057   int __pyx_t_7;
52058   long __pyx_t_8;
52059   char *__pyx_t_9;
52060   __Pyx_RefNannySetupContext("_util_dtypestring", 0);
52061 
52062   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":847
52063  *
52064  *     cdef dtype child
52065  *     cdef int endian_detector = 1             # <<<<<<<<<<<<<<
52066  *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)
52067  *     cdef tuple fields
52068  */
52069   __pyx_v_endian_detector = 1;
52070 
52071   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":848
52072  *     cdef dtype child
52073  *     cdef int endian_detector = 1
52074  *     cdef bint little_endian = ((<char*>&endian_detector)[0] != 0)             # <<<<<<<<<<<<<<
52075  *     cdef tuple fields
52076  *
52077  */
52078   __pyx_v_little_endian = ((((char *)(&__pyx_v_endian_detector))[0]) != 0);
52079 
52080   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":851
52081  *     cdef tuple fields
52082  *
52083  *     for childname in descr.names:             # <<<<<<<<<<<<<<
52084  *         fields = descr.fields[childname]
52085  *         child, new_offset = fields
52086  */
52087   if (unlikely(__pyx_v_descr->names == Py_None)) {
52088     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
52089     __PYX_ERR(22, 851, __pyx_L1_error)
52090   }
52091   __pyx_t_1 = __pyx_v_descr->names; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
52092   for (;;) {
52093     if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
52094     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
52095     __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(22, 851, __pyx_L1_error)
52096     #else
52097     __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 851, __pyx_L1_error)
52098     __Pyx_GOTREF(__pyx_t_3);
52099     #endif
52100     __Pyx_XDECREF_SET(__pyx_v_childname, __pyx_t_3);
52101     __pyx_t_3 = 0;
52102 
52103     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":852
52104  *
52105  *     for childname in descr.names:
52106  *         fields = descr.fields[childname]             # <<<<<<<<<<<<<<
52107  *         child, new_offset = fields
52108  *
52109  */
52110     if (unlikely(__pyx_v_descr->fields == Py_None)) {
52111       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
52112       __PYX_ERR(22, 852, __pyx_L1_error)
52113     }
52114     __pyx_t_3 = __Pyx_PyDict_GetItem(__pyx_v_descr->fields, __pyx_v_childname); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 852, __pyx_L1_error)
52115     __Pyx_GOTREF(__pyx_t_3);
52116     if (!(likely(PyTuple_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(22, 852, __pyx_L1_error)
52117     __Pyx_XDECREF_SET(__pyx_v_fields, ((PyObject*)__pyx_t_3));
52118     __pyx_t_3 = 0;
52119 
52120     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":853
52121  *     for childname in descr.names:
52122  *         fields = descr.fields[childname]
52123  *         child, new_offset = fields             # <<<<<<<<<<<<<<
52124  *
52125  *         if (end - f) - <int>(new_offset - offset[0]) < 15:
52126  */
52127     if (likely(__pyx_v_fields != Py_None)) {
52128       PyObject* sequence = __pyx_v_fields;
52129       Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
52130       if (unlikely(size != 2)) {
52131         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
52132         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
52133         __PYX_ERR(22, 853, __pyx_L1_error)
52134       }
52135       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
52136       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
52137       __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
52138       __Pyx_INCREF(__pyx_t_3);
52139       __Pyx_INCREF(__pyx_t_4);
52140       #else
52141       __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 853, __pyx_L1_error)
52142       __Pyx_GOTREF(__pyx_t_3);
52143       __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 853, __pyx_L1_error)
52144       __Pyx_GOTREF(__pyx_t_4);
52145       #endif
52146     } else {
52147       __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(22, 853, __pyx_L1_error)
52148     }
52149     if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_5numpy_dtype))))) __PYX_ERR(22, 853, __pyx_L1_error)
52150     __Pyx_XDECREF_SET(__pyx_v_child, ((PyArray_Descr *)__pyx_t_3));
52151     __pyx_t_3 = 0;
52152     __Pyx_XDECREF_SET(__pyx_v_new_offset, __pyx_t_4);
52153     __pyx_t_4 = 0;
52154 
52155     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":855
52156  *         child, new_offset = fields
52157  *
52158  *         if (end - f) - <int>(new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
52159  *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
52160  *
52161  */
52162     __pyx_t_4 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 855, __pyx_L1_error)
52163     __Pyx_GOTREF(__pyx_t_4);
52164     __pyx_t_3 = PyNumber_Subtract(__pyx_v_new_offset, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 855, __pyx_L1_error)
52165     __Pyx_GOTREF(__pyx_t_3);
52166     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52167     __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(22, 855, __pyx_L1_error)
52168     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52169     __pyx_t_6 = ((((__pyx_v_end - __pyx_v_f) - ((int)__pyx_t_5)) < 15) != 0);
52170     if (unlikely(__pyx_t_6)) {
52171 
52172       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":856
52173  *
52174  *         if (end - f) - <int>(new_offset - offset[0]) < 15:
52175  *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
52176  *
52177  *         if ((child.byteorder == c'>' and little_endian) or
52178  */
52179       __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__84, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 856, __pyx_L1_error)
52180       __Pyx_GOTREF(__pyx_t_3);
52181       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
52182       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52183       __PYX_ERR(22, 856, __pyx_L1_error)
52184 
52185       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":855
52186  *         child, new_offset = fields
52187  *
52188  *         if (end - f) - <int>(new_offset - offset[0]) < 15:             # <<<<<<<<<<<<<<
52189  *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
52190  *
52191  */
52192     }
52193 
52194     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":858
52195  *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
52196  *
52197  *         if ((child.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
52198  *             (child.byteorder == c'<' and not little_endian)):
52199  *             raise ValueError(u"Non-native byte order not supported")
52200  */
52201     __pyx_t_7 = ((__pyx_v_child->byteorder == '>') != 0);
52202     if (!__pyx_t_7) {
52203       goto __pyx_L8_next_or;
52204     } else {
52205     }
52206     __pyx_t_7 = (__pyx_v_little_endian != 0);
52207     if (!__pyx_t_7) {
52208     } else {
52209       __pyx_t_6 = __pyx_t_7;
52210       goto __pyx_L7_bool_binop_done;
52211     }
52212     __pyx_L8_next_or:;
52213 
52214     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":859
52215  *
52216  *         if ((child.byteorder == c'>' and little_endian) or
52217  *             (child.byteorder == c'<' and not little_endian)):             # <<<<<<<<<<<<<<
52218  *             raise ValueError(u"Non-native byte order not supported")
52219  *             # One could encode it in the format string and have Cython
52220  */
52221     __pyx_t_7 = ((__pyx_v_child->byteorder == '<') != 0);
52222     if (__pyx_t_7) {
52223     } else {
52224       __pyx_t_6 = __pyx_t_7;
52225       goto __pyx_L7_bool_binop_done;
52226     }
52227     __pyx_t_7 = ((!(__pyx_v_little_endian != 0)) != 0);
52228     __pyx_t_6 = __pyx_t_7;
52229     __pyx_L7_bool_binop_done:;
52230 
52231     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":858
52232  *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
52233  *
52234  *         if ((child.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
52235  *             (child.byteorder == c'<' and not little_endian)):
52236  *             raise ValueError(u"Non-native byte order not supported")
52237  */
52238     if (unlikely(__pyx_t_6)) {
52239 
52240       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":860
52241  *         if ((child.byteorder == c'>' and little_endian) or
52242  *             (child.byteorder == c'<' and not little_endian)):
52243  *             raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
52244  *             # One could encode it in the format string and have Cython
52245  *             # complain instead, BUT: < and > in format strings also imply
52246  */
52247       __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__83, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 860, __pyx_L1_error)
52248       __Pyx_GOTREF(__pyx_t_3);
52249       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
52250       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52251       __PYX_ERR(22, 860, __pyx_L1_error)
52252 
52253       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":858
52254  *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")
52255  *
52256  *         if ((child.byteorder == c'>' and little_endian) or             # <<<<<<<<<<<<<<
52257  *             (child.byteorder == c'<' and not little_endian)):
52258  *             raise ValueError(u"Non-native byte order not supported")
52259  */
52260     }
52261 
52262     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":870
52263  *
52264  *         # Output padding bytes
52265  *         while offset[0] < new_offset:             # <<<<<<<<<<<<<<
52266  *             f[0] = 120 # "x"; pad byte
52267  *             f += 1
52268  */
52269     while (1) {
52270       __pyx_t_3 = __Pyx_PyInt_From_int((__pyx_v_offset[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 870, __pyx_L1_error)
52271       __Pyx_GOTREF(__pyx_t_3);
52272       __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_v_new_offset, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 870, __pyx_L1_error)
52273       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52274       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 870, __pyx_L1_error)
52275       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52276       if (!__pyx_t_6) break;
52277 
52278       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":871
52279  *         # Output padding bytes
52280  *         while offset[0] < new_offset:
52281  *             f[0] = 120 # "x"; pad byte             # <<<<<<<<<<<<<<
52282  *             f += 1
52283  *             offset[0] += 1
52284  */
52285       (__pyx_v_f[0]) = 0x78;
52286 
52287       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":872
52288  *         while offset[0] < new_offset:
52289  *             f[0] = 120 # "x"; pad byte
52290  *             f += 1             # <<<<<<<<<<<<<<
52291  *             offset[0] += 1
52292  *
52293  */
52294       __pyx_v_f = (__pyx_v_f + 1);
52295 
52296       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":873
52297  *             f[0] = 120 # "x"; pad byte
52298  *             f += 1
52299  *             offset[0] += 1             # <<<<<<<<<<<<<<
52300  *
52301  *         offset[0] += child.itemsize
52302  */
52303       __pyx_t_8 = 0;
52304       (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + 1);
52305     }
52306 
52307     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":875
52308  *             offset[0] += 1
52309  *
52310  *         offset[0] += child.itemsize             # <<<<<<<<<<<<<<
52311  *
52312  *         if not PyDataType_HASFIELDS(child):
52313  */
52314     __pyx_t_8 = 0;
52315     (__pyx_v_offset[__pyx_t_8]) = ((__pyx_v_offset[__pyx_t_8]) + __pyx_v_child->elsize);
52316 
52317     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":877
52318  *         offset[0] += child.itemsize
52319  *
52320  *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
52321  *             t = child.type_num
52322  *             if end - f < 5:
52323  */
52324     __pyx_t_6 = ((!(PyDataType_HASFIELDS(__pyx_v_child) != 0)) != 0);
52325     if (__pyx_t_6) {
52326 
52327       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":878
52328  *
52329  *         if not PyDataType_HASFIELDS(child):
52330  *             t = child.type_num             # <<<<<<<<<<<<<<
52331  *             if end - f < 5:
52332  *                 raise RuntimeError(u"Format string allocated too short.")
52333  */
52334       __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_child->type_num); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 878, __pyx_L1_error)
52335       __Pyx_GOTREF(__pyx_t_4);
52336       __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_4);
52337       __pyx_t_4 = 0;
52338 
52339       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":879
52340  *         if not PyDataType_HASFIELDS(child):
52341  *             t = child.type_num
52342  *             if end - f < 5:             # <<<<<<<<<<<<<<
52343  *                 raise RuntimeError(u"Format string allocated too short.")
52344  *
52345  */
52346       __pyx_t_6 = (((__pyx_v_end - __pyx_v_f) < 5) != 0);
52347       if (unlikely(__pyx_t_6)) {
52348 
52349         /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":880
52350  *             t = child.type_num
52351  *             if end - f < 5:
52352  *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
52353  *
52354  *             # Until ticket #99 is fixed, use integers to avoid warnings
52355  */
52356         __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__85, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 880, __pyx_L1_error)
52357         __Pyx_GOTREF(__pyx_t_4);
52358         __Pyx_Raise(__pyx_t_4, 0, 0, 0);
52359         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52360         __PYX_ERR(22, 880, __pyx_L1_error)
52361 
52362         /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":879
52363  *         if not PyDataType_HASFIELDS(child):
52364  *             t = child.type_num
52365  *             if end - f < 5:             # <<<<<<<<<<<<<<
52366  *                 raise RuntimeError(u"Format string allocated too short.")
52367  *
52368  */
52369       }
52370 
52371       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":883
52372  *
52373  *             # Until ticket #99 is fixed, use integers to avoid warnings
52374  *             if   t == NPY_BYTE:        f[0] =  98 #"b"             # <<<<<<<<<<<<<<
52375  *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
52376  *             elif t == NPY_SHORT:       f[0] = 104 #"h"
52377  */
52378       __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_BYTE); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 883, __pyx_L1_error)
52379       __Pyx_GOTREF(__pyx_t_4);
52380       __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 883, __pyx_L1_error)
52381       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52382       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 883, __pyx_L1_error)
52383       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52384       if (__pyx_t_6) {
52385         (__pyx_v_f[0]) = 98;
52386         goto __pyx_L15;
52387       }
52388 
52389       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":884
52390  *             # Until ticket #99 is fixed, use integers to avoid warnings
52391  *             if   t == NPY_BYTE:        f[0] =  98 #"b"
52392  *             elif t == NPY_UBYTE:       f[0] =  66 #"B"             # <<<<<<<<<<<<<<
52393  *             elif t == NPY_SHORT:       f[0] = 104 #"h"
52394  *             elif t == NPY_USHORT:      f[0] =  72 #"H"
52395  */
52396       __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_UBYTE); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 884, __pyx_L1_error)
52397       __Pyx_GOTREF(__pyx_t_3);
52398       __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 884, __pyx_L1_error)
52399       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52400       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 884, __pyx_L1_error)
52401       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52402       if (__pyx_t_6) {
52403         (__pyx_v_f[0]) = 66;
52404         goto __pyx_L15;
52405       }
52406 
52407       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":885
52408  *             if   t == NPY_BYTE:        f[0] =  98 #"b"
52409  *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
52410  *             elif t == NPY_SHORT:       f[0] = 104 #"h"             # <<<<<<<<<<<<<<
52411  *             elif t == NPY_USHORT:      f[0] =  72 #"H"
52412  *             elif t == NPY_INT:         f[0] = 105 #"i"
52413  */
52414       __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_SHORT); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 885, __pyx_L1_error)
52415       __Pyx_GOTREF(__pyx_t_4);
52416       __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 885, __pyx_L1_error)
52417       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52418       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 885, __pyx_L1_error)
52419       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52420       if (__pyx_t_6) {
52421         (__pyx_v_f[0]) = 0x68;
52422         goto __pyx_L15;
52423       }
52424 
52425       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":886
52426  *             elif t == NPY_UBYTE:       f[0] =  66 #"B"
52427  *             elif t == NPY_SHORT:       f[0] = 104 #"h"
52428  *             elif t == NPY_USHORT:      f[0] =  72 #"H"             # <<<<<<<<<<<<<<
52429  *             elif t == NPY_INT:         f[0] = 105 #"i"
52430  *             elif t == NPY_UINT:        f[0] =  73 #"I"
52431  */
52432       __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_USHORT); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 886, __pyx_L1_error)
52433       __Pyx_GOTREF(__pyx_t_3);
52434       __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 886, __pyx_L1_error)
52435       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52436       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 886, __pyx_L1_error)
52437       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52438       if (__pyx_t_6) {
52439         (__pyx_v_f[0]) = 72;
52440         goto __pyx_L15;
52441       }
52442 
52443       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":887
52444  *             elif t == NPY_SHORT:       f[0] = 104 #"h"
52445  *             elif t == NPY_USHORT:      f[0] =  72 #"H"
52446  *             elif t == NPY_INT:         f[0] = 105 #"i"             # <<<<<<<<<<<<<<
52447  *             elif t == NPY_UINT:        f[0] =  73 #"I"
52448  *             elif t == NPY_LONG:        f[0] = 108 #"l"
52449  */
52450       __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_INT); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 887, __pyx_L1_error)
52451       __Pyx_GOTREF(__pyx_t_4);
52452       __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 887, __pyx_L1_error)
52453       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52454       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 887, __pyx_L1_error)
52455       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52456       if (__pyx_t_6) {
52457         (__pyx_v_f[0]) = 0x69;
52458         goto __pyx_L15;
52459       }
52460 
52461       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":888
52462  *             elif t == NPY_USHORT:      f[0] =  72 #"H"
52463  *             elif t == NPY_INT:         f[0] = 105 #"i"
52464  *             elif t == NPY_UINT:        f[0] =  73 #"I"             # <<<<<<<<<<<<<<
52465  *             elif t == NPY_LONG:        f[0] = 108 #"l"
52466  *             elif t == NPY_ULONG:       f[0] = 76  #"L"
52467  */
52468       __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_UINT); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 888, __pyx_L1_error)
52469       __Pyx_GOTREF(__pyx_t_3);
52470       __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 888, __pyx_L1_error)
52471       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52472       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 888, __pyx_L1_error)
52473       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52474       if (__pyx_t_6) {
52475         (__pyx_v_f[0]) = 73;
52476         goto __pyx_L15;
52477       }
52478 
52479       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":889
52480  *             elif t == NPY_INT:         f[0] = 105 #"i"
52481  *             elif t == NPY_UINT:        f[0] =  73 #"I"
52482  *             elif t == NPY_LONG:        f[0] = 108 #"l"             # <<<<<<<<<<<<<<
52483  *             elif t == NPY_ULONG:       f[0] = 76  #"L"
52484  *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
52485  */
52486       __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONG); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 889, __pyx_L1_error)
52487       __Pyx_GOTREF(__pyx_t_4);
52488       __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 889, __pyx_L1_error)
52489       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52490       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 889, __pyx_L1_error)
52491       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52492       if (__pyx_t_6) {
52493         (__pyx_v_f[0]) = 0x6C;
52494         goto __pyx_L15;
52495       }
52496 
52497       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":890
52498  *             elif t == NPY_UINT:        f[0] =  73 #"I"
52499  *             elif t == NPY_LONG:        f[0] = 108 #"l"
52500  *             elif t == NPY_ULONG:       f[0] = 76  #"L"             # <<<<<<<<<<<<<<
52501  *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
52502  *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
52503  */
52504       __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_ULONG); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 890, __pyx_L1_error)
52505       __Pyx_GOTREF(__pyx_t_3);
52506       __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 890, __pyx_L1_error)
52507       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52508       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 890, __pyx_L1_error)
52509       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52510       if (__pyx_t_6) {
52511         (__pyx_v_f[0]) = 76;
52512         goto __pyx_L15;
52513       }
52514 
52515       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":891
52516  *             elif t == NPY_LONG:        f[0] = 108 #"l"
52517  *             elif t == NPY_ULONG:       f[0] = 76  #"L"
52518  *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"             # <<<<<<<<<<<<<<
52519  *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
52520  *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
52521  */
52522       __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONGLONG); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 891, __pyx_L1_error)
52523       __Pyx_GOTREF(__pyx_t_4);
52524       __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 891, __pyx_L1_error)
52525       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52526       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 891, __pyx_L1_error)
52527       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52528       if (__pyx_t_6) {
52529         (__pyx_v_f[0]) = 0x71;
52530         goto __pyx_L15;
52531       }
52532 
52533       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":892
52534  *             elif t == NPY_ULONG:       f[0] = 76  #"L"
52535  *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
52536  *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"             # <<<<<<<<<<<<<<
52537  *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
52538  *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
52539  */
52540       __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_ULONGLONG); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 892, __pyx_L1_error)
52541       __Pyx_GOTREF(__pyx_t_3);
52542       __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 892, __pyx_L1_error)
52543       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52544       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 892, __pyx_L1_error)
52545       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52546       if (__pyx_t_6) {
52547         (__pyx_v_f[0]) = 81;
52548         goto __pyx_L15;
52549       }
52550 
52551       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":893
52552  *             elif t == NPY_LONGLONG:    f[0] = 113 #"q"
52553  *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
52554  *             elif t == NPY_FLOAT:       f[0] = 102 #"f"             # <<<<<<<<<<<<<<
52555  *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
52556  *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
52557  */
52558       __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_FLOAT); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 893, __pyx_L1_error)
52559       __Pyx_GOTREF(__pyx_t_4);
52560       __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 893, __pyx_L1_error)
52561       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52562       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 893, __pyx_L1_error)
52563       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52564       if (__pyx_t_6) {
52565         (__pyx_v_f[0]) = 0x66;
52566         goto __pyx_L15;
52567       }
52568 
52569       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":894
52570  *             elif t == NPY_ULONGLONG:   f[0] = 81  #"Q"
52571  *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
52572  *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"             # <<<<<<<<<<<<<<
52573  *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
52574  *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
52575  */
52576       __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_DOUBLE); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 894, __pyx_L1_error)
52577       __Pyx_GOTREF(__pyx_t_3);
52578       __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 894, __pyx_L1_error)
52579       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52580       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 894, __pyx_L1_error)
52581       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52582       if (__pyx_t_6) {
52583         (__pyx_v_f[0]) = 0x64;
52584         goto __pyx_L15;
52585       }
52586 
52587       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":895
52588  *             elif t == NPY_FLOAT:       f[0] = 102 #"f"
52589  *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
52590  *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"             # <<<<<<<<<<<<<<
52591  *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
52592  *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
52593  */
52594       __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_LONGDOUBLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 895, __pyx_L1_error)
52595       __Pyx_GOTREF(__pyx_t_4);
52596       __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 895, __pyx_L1_error)
52597       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52598       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 895, __pyx_L1_error)
52599       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52600       if (__pyx_t_6) {
52601         (__pyx_v_f[0]) = 0x67;
52602         goto __pyx_L15;
52603       }
52604 
52605       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":896
52606  *             elif t == NPY_DOUBLE:      f[0] = 100 #"d"
52607  *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
52608  *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf             # <<<<<<<<<<<<<<
52609  *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
52610  *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
52611  */
52612       __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CFLOAT); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 896, __pyx_L1_error)
52613       __Pyx_GOTREF(__pyx_t_3);
52614       __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 896, __pyx_L1_error)
52615       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52616       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 896, __pyx_L1_error)
52617       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52618       if (__pyx_t_6) {
52619         (__pyx_v_f[0]) = 90;
52620         (__pyx_v_f[1]) = 0x66;
52621         __pyx_v_f = (__pyx_v_f + 1);
52622         goto __pyx_L15;
52623       }
52624 
52625       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":897
52626  *             elif t == NPY_LONGDOUBLE:  f[0] = 103 #"g"
52627  *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
52628  *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd             # <<<<<<<<<<<<<<
52629  *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
52630  *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
52631  */
52632       __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CDOUBLE); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 897, __pyx_L1_error)
52633       __Pyx_GOTREF(__pyx_t_4);
52634       __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 897, __pyx_L1_error)
52635       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52636       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 897, __pyx_L1_error)
52637       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52638       if (__pyx_t_6) {
52639         (__pyx_v_f[0]) = 90;
52640         (__pyx_v_f[1]) = 0x64;
52641         __pyx_v_f = (__pyx_v_f + 1);
52642         goto __pyx_L15;
52643       }
52644 
52645       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":898
52646  *             elif t == NPY_CFLOAT:      f[0] = 90; f[1] = 102; f += 1 # Zf
52647  *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
52648  *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg             # <<<<<<<<<<<<<<
52649  *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
52650  *             else:
52651  */
52652       __pyx_t_3 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_CLONGDOUBLE); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 898, __pyx_L1_error)
52653       __Pyx_GOTREF(__pyx_t_3);
52654       __pyx_t_4 = PyObject_RichCompare(__pyx_v_t, __pyx_t_3, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 898, __pyx_L1_error)
52655       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52656       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 898, __pyx_L1_error)
52657       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52658       if (__pyx_t_6) {
52659         (__pyx_v_f[0]) = 90;
52660         (__pyx_v_f[1]) = 0x67;
52661         __pyx_v_f = (__pyx_v_f + 1);
52662         goto __pyx_L15;
52663       }
52664 
52665       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":899
52666  *             elif t == NPY_CDOUBLE:     f[0] = 90; f[1] = 100; f += 1 # Zd
52667  *             elif t == NPY_CLONGDOUBLE: f[0] = 90; f[1] = 103; f += 1 # Zg
52668  *             elif t == NPY_OBJECT:      f[0] = 79 #"O"             # <<<<<<<<<<<<<<
52669  *             else:
52670  *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
52671  */
52672       __pyx_t_4 = __Pyx_PyInt_From_enum__NPY_TYPES(NPY_OBJECT); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 899, __pyx_L1_error)
52673       __Pyx_GOTREF(__pyx_t_4);
52674       __pyx_t_3 = PyObject_RichCompare(__pyx_v_t, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 899, __pyx_L1_error)
52675       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52676       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(22, 899, __pyx_L1_error)
52677       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52678       if (likely(__pyx_t_6)) {
52679         (__pyx_v_f[0]) = 79;
52680         goto __pyx_L15;
52681       }
52682 
52683       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":901
52684  *             elif t == NPY_OBJECT:      f[0] = 79 #"O"
52685  *             else:
52686  *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)             # <<<<<<<<<<<<<<
52687  *             f += 1
52688  *         else:
52689  */
52690       /*else*/ {
52691         __pyx_t_3 = __Pyx_PyUnicode_FormatSafe(__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_v_t); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 901, __pyx_L1_error)
52692         __Pyx_GOTREF(__pyx_t_3);
52693         __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 901, __pyx_L1_error)
52694         __Pyx_GOTREF(__pyx_t_4);
52695         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
52696         __Pyx_Raise(__pyx_t_4, 0, 0, 0);
52697         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
52698         __PYX_ERR(22, 901, __pyx_L1_error)
52699       }
52700       __pyx_L15:;
52701 
52702       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":902
52703  *             else:
52704  *                 raise ValueError(u"unknown dtype code in numpy.pxd (%d)" % t)
52705  *             f += 1             # <<<<<<<<<<<<<<
52706  *         else:
52707  *             # Cython ignores struct boundary information ("T{...}"),
52708  */
52709       __pyx_v_f = (__pyx_v_f + 1);
52710 
52711       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":877
52712  *         offset[0] += child.itemsize
52713  *
52714  *         if not PyDataType_HASFIELDS(child):             # <<<<<<<<<<<<<<
52715  *             t = child.type_num
52716  *             if end - f < 5:
52717  */
52718       goto __pyx_L13;
52719     }
52720 
52721     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":906
52722  *             # Cython ignores struct boundary information ("T{...}"),
52723  *             # so don't output it
52724  *             f = _util_dtypestring(child, f, end, offset)             # <<<<<<<<<<<<<<
52725  *     return f
52726  *
52727  */
52728     /*else*/ {
52729       __pyx_t_9 = __pyx_f_5numpy__util_dtypestring(__pyx_v_child, __pyx_v_f, __pyx_v_end, __pyx_v_offset); if (unlikely(__pyx_t_9 == ((char *)NULL))) __PYX_ERR(22, 906, __pyx_L1_error)
52730       __pyx_v_f = __pyx_t_9;
52731     }
52732     __pyx_L13:;
52733 
52734     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":851
52735  *     cdef tuple fields
52736  *
52737  *     for childname in descr.names:             # <<<<<<<<<<<<<<
52738  *         fields = descr.fields[childname]
52739  *         child, new_offset = fields
52740  */
52741   }
52742   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
52743 
52744   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":907
52745  *             # so don't output it
52746  *             f = _util_dtypestring(child, f, end, offset)
52747  *     return f             # <<<<<<<<<<<<<<
52748  *
52749  *
52750  */
52751   __pyx_r = __pyx_v_f;
52752   goto __pyx_L0;
52753 
52754   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":842
52755  *         return ()
52756  *
52757  * cdef inline char* _util_dtypestring(dtype descr, char* f, char* end, int* offset) except NULL:             # <<<<<<<<<<<<<<
52758  *     # Recursive utility function used in __getbuffer__ to get format
52759  *     # string. The new location in the format string is returned.
52760  */
52761 
52762   /* function exit code */
52763   __pyx_L1_error:;
52764   __Pyx_XDECREF(__pyx_t_1);
52765   __Pyx_XDECREF(__pyx_t_3);
52766   __Pyx_XDECREF(__pyx_t_4);
52767   __Pyx_AddTraceback("numpy._util_dtypestring", __pyx_clineno, __pyx_lineno, __pyx_filename);
52768   __pyx_r = NULL;
52769   __pyx_L0:;
52770   __Pyx_XDECREF((PyObject *)__pyx_v_child);
52771   __Pyx_XDECREF(__pyx_v_fields);
52772   __Pyx_XDECREF(__pyx_v_childname);
52773   __Pyx_XDECREF(__pyx_v_new_offset);
52774   __Pyx_XDECREF(__pyx_v_t);
52775   __Pyx_RefNannyFinishContext();
52776   return __pyx_r;
52777 }
52778 
52779 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1022
52780  *     int _import_umath() except -1
52781  *
52782  * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
52783  *     Py_INCREF(base) # important to do this before stealing the reference below!
52784  *     PyArray_SetBaseObject(arr, base)
52785  */
52786 
52787 static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
52788   __Pyx_RefNannyDeclarations
52789   __Pyx_RefNannySetupContext("set_array_base", 0);
52790 
52791   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1023
52792  *
52793  * cdef inline void set_array_base(ndarray arr, object base):
52794  *     Py_INCREF(base) # important to do this before stealing the reference below!             # <<<<<<<<<<<<<<
52795  *     PyArray_SetBaseObject(arr, base)
52796  *
52797  */
52798   Py_INCREF(__pyx_v_base);
52799 
52800   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1024
52801  * cdef inline void set_array_base(ndarray arr, object base):
52802  *     Py_INCREF(base) # important to do this before stealing the reference below!
52803  *     PyArray_SetBaseObject(arr, base)             # <<<<<<<<<<<<<<
52804  *
52805  * cdef inline object get_array_base(ndarray arr):
52806  */
52807   (void)(PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base));
52808 
52809   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1022
52810  *     int _import_umath() except -1
52811  *
52812  * cdef inline void set_array_base(ndarray arr, object base):             # <<<<<<<<<<<<<<
52813  *     Py_INCREF(base) # important to do this before stealing the reference below!
52814  *     PyArray_SetBaseObject(arr, base)
52815  */
52816 
52817   /* function exit code */
52818   __Pyx_RefNannyFinishContext();
52819 }
52820 
52821 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1026
52822  *     PyArray_SetBaseObject(arr, base)
52823  *
52824  * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
52825  *     base = PyArray_BASE(arr)
52826  *     if base is NULL:
52827  */
52828 
52829 static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
52830   PyObject *__pyx_v_base;
52831   PyObject *__pyx_r = NULL;
52832   __Pyx_RefNannyDeclarations
52833   int __pyx_t_1;
52834   __Pyx_RefNannySetupContext("get_array_base", 0);
52835 
52836   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1027
52837  *
52838  * cdef inline object get_array_base(ndarray arr):
52839  *     base = PyArray_BASE(arr)             # <<<<<<<<<<<<<<
52840  *     if base is NULL:
52841  *         return None
52842  */
52843   __pyx_v_base = PyArray_BASE(__pyx_v_arr);
52844 
52845   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1028
52846  * cdef inline object get_array_base(ndarray arr):
52847  *     base = PyArray_BASE(arr)
52848  *     if base is NULL:             # <<<<<<<<<<<<<<
52849  *         return None
52850  *     return <object>base
52851  */
52852   __pyx_t_1 = ((__pyx_v_base == NULL) != 0);
52853   if (__pyx_t_1) {
52854 
52855     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1029
52856  *     base = PyArray_BASE(arr)
52857  *     if base is NULL:
52858  *         return None             # <<<<<<<<<<<<<<
52859  *     return <object>base
52860  *
52861  */
52862     __Pyx_XDECREF(__pyx_r);
52863     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
52864     goto __pyx_L0;
52865 
52866     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1028
52867  * cdef inline object get_array_base(ndarray arr):
52868  *     base = PyArray_BASE(arr)
52869  *     if base is NULL:             # <<<<<<<<<<<<<<
52870  *         return None
52871  *     return <object>base
52872  */
52873   }
52874 
52875   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1030
52876  *     if base is NULL:
52877  *         return None
52878  *     return <object>base             # <<<<<<<<<<<<<<
52879  *
52880  * # Versions of the import_* functions which are more suitable for
52881  */
52882   __Pyx_XDECREF(__pyx_r);
52883   __Pyx_INCREF(((PyObject *)__pyx_v_base));
52884   __pyx_r = ((PyObject *)__pyx_v_base);
52885   goto __pyx_L0;
52886 
52887   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1026
52888  *     PyArray_SetBaseObject(arr, base)
52889  *
52890  * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
52891  *     base = PyArray_BASE(arr)
52892  *     if base is NULL:
52893  */
52894 
52895   /* function exit code */
52896   __pyx_L0:;
52897   __Pyx_XGIVEREF(__pyx_r);
52898   __Pyx_RefNannyFinishContext();
52899   return __pyx_r;
52900 }
52901 
52902 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1034
52903  * # Versions of the import_* functions which are more suitable for
52904  * # Cython code.
52905  * cdef inline int import_array() except -1:             # <<<<<<<<<<<<<<
52906  *     try:
52907  *         _import_array()
52908  */
52909 
52910 static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) {
52911   int __pyx_r;
52912   __Pyx_RefNannyDeclarations
52913   PyObject *__pyx_t_1 = NULL;
52914   PyObject *__pyx_t_2 = NULL;
52915   PyObject *__pyx_t_3 = NULL;
52916   int __pyx_t_4;
52917   PyObject *__pyx_t_5 = NULL;
52918   PyObject *__pyx_t_6 = NULL;
52919   PyObject *__pyx_t_7 = NULL;
52920   PyObject *__pyx_t_8 = NULL;
52921   __Pyx_RefNannySetupContext("import_array", 0);
52922 
52923   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1035
52924  * # Cython code.
52925  * cdef inline int import_array() except -1:
52926  *     try:             # <<<<<<<<<<<<<<
52927  *         _import_array()
52928  *     except Exception:
52929  */
52930   {
52931     __Pyx_PyThreadState_declare
52932     __Pyx_PyThreadState_assign
52933     __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
52934     __Pyx_XGOTREF(__pyx_t_1);
52935     __Pyx_XGOTREF(__pyx_t_2);
52936     __Pyx_XGOTREF(__pyx_t_3);
52937     /*try:*/ {
52938 
52939       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1036
52940  * cdef inline int import_array() except -1:
52941  *     try:
52942  *         _import_array()             # <<<<<<<<<<<<<<
52943  *     except Exception:
52944  *         raise ImportError("numpy.core.multiarray failed to import")
52945  */
52946       __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(22, 1036, __pyx_L3_error)
52947 
52948       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1035
52949  * # Cython code.
52950  * cdef inline int import_array() except -1:
52951  *     try:             # <<<<<<<<<<<<<<
52952  *         _import_array()
52953  *     except Exception:
52954  */
52955     }
52956     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
52957     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
52958     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
52959     goto __pyx_L8_try_end;
52960     __pyx_L3_error:;
52961 
52962     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1037
52963  *     try:
52964  *         _import_array()
52965  *     except Exception:             # <<<<<<<<<<<<<<
52966  *         raise ImportError("numpy.core.multiarray failed to import")
52967  *
52968  */
52969     __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
52970     if (__pyx_t_4) {
52971       __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
52972       if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(22, 1037, __pyx_L5_except_error)
52973       __Pyx_GOTREF(__pyx_t_5);
52974       __Pyx_GOTREF(__pyx_t_6);
52975       __Pyx_GOTREF(__pyx_t_7);
52976 
52977       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1038
52978  *         _import_array()
52979  *     except Exception:
52980  *         raise ImportError("numpy.core.multiarray failed to import")             # <<<<<<<<<<<<<<
52981  *
52982  * cdef inline int import_umath() except -1:
52983  */
52984       __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__86, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(22, 1038, __pyx_L5_except_error)
52985       __Pyx_GOTREF(__pyx_t_8);
52986       __Pyx_Raise(__pyx_t_8, 0, 0, 0);
52987       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
52988       __PYX_ERR(22, 1038, __pyx_L5_except_error)
52989     }
52990     goto __pyx_L5_except_error;
52991     __pyx_L5_except_error:;
52992 
52993     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1035
52994  * # Cython code.
52995  * cdef inline int import_array() except -1:
52996  *     try:             # <<<<<<<<<<<<<<
52997  *         _import_array()
52998  *     except Exception:
52999  */
53000     __Pyx_XGIVEREF(__pyx_t_1);
53001     __Pyx_XGIVEREF(__pyx_t_2);
53002     __Pyx_XGIVEREF(__pyx_t_3);
53003     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
53004     goto __pyx_L1_error;
53005     __pyx_L8_try_end:;
53006   }
53007 
53008   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1034
53009  * # Versions of the import_* functions which are more suitable for
53010  * # Cython code.
53011  * cdef inline int import_array() except -1:             # <<<<<<<<<<<<<<
53012  *     try:
53013  *         _import_array()
53014  */
53015 
53016   /* function exit code */
53017   __pyx_r = 0;
53018   goto __pyx_L0;
53019   __pyx_L1_error:;
53020   __Pyx_XDECREF(__pyx_t_5);
53021   __Pyx_XDECREF(__pyx_t_6);
53022   __Pyx_XDECREF(__pyx_t_7);
53023   __Pyx_XDECREF(__pyx_t_8);
53024   __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
53025   __pyx_r = -1;
53026   __pyx_L0:;
53027   __Pyx_RefNannyFinishContext();
53028   return __pyx_r;
53029 }
53030 
53031 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1040
53032  *         raise ImportError("numpy.core.multiarray failed to import")
53033  *
53034  * cdef inline int import_umath() except -1:             # <<<<<<<<<<<<<<
53035  *     try:
53036  *         _import_umath()
53037  */
53038 
53039 static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) {
53040   int __pyx_r;
53041   __Pyx_RefNannyDeclarations
53042   PyObject *__pyx_t_1 = NULL;
53043   PyObject *__pyx_t_2 = NULL;
53044   PyObject *__pyx_t_3 = NULL;
53045   int __pyx_t_4;
53046   PyObject *__pyx_t_5 = NULL;
53047   PyObject *__pyx_t_6 = NULL;
53048   PyObject *__pyx_t_7 = NULL;
53049   PyObject *__pyx_t_8 = NULL;
53050   __Pyx_RefNannySetupContext("import_umath", 0);
53051 
53052   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1041
53053  *
53054  * cdef inline int import_umath() except -1:
53055  *     try:             # <<<<<<<<<<<<<<
53056  *         _import_umath()
53057  *     except Exception:
53058  */
53059   {
53060     __Pyx_PyThreadState_declare
53061     __Pyx_PyThreadState_assign
53062     __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
53063     __Pyx_XGOTREF(__pyx_t_1);
53064     __Pyx_XGOTREF(__pyx_t_2);
53065     __Pyx_XGOTREF(__pyx_t_3);
53066     /*try:*/ {
53067 
53068       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1042
53069  * cdef inline int import_umath() except -1:
53070  *     try:
53071  *         _import_umath()             # <<<<<<<<<<<<<<
53072  *     except Exception:
53073  *         raise ImportError("numpy.core.umath failed to import")
53074  */
53075       __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(22, 1042, __pyx_L3_error)
53076 
53077       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1041
53078  *
53079  * cdef inline int import_umath() except -1:
53080  *     try:             # <<<<<<<<<<<<<<
53081  *         _import_umath()
53082  *     except Exception:
53083  */
53084     }
53085     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
53086     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
53087     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
53088     goto __pyx_L8_try_end;
53089     __pyx_L3_error:;
53090 
53091     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1043
53092  *     try:
53093  *         _import_umath()
53094  *     except Exception:             # <<<<<<<<<<<<<<
53095  *         raise ImportError("numpy.core.umath failed to import")
53096  *
53097  */
53098     __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
53099     if (__pyx_t_4) {
53100       __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename);
53101       if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(22, 1043, __pyx_L5_except_error)
53102       __Pyx_GOTREF(__pyx_t_5);
53103       __Pyx_GOTREF(__pyx_t_6);
53104       __Pyx_GOTREF(__pyx_t_7);
53105 
53106       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1044
53107  *         _import_umath()
53108  *     except Exception:
53109  *         raise ImportError("numpy.core.umath failed to import")             # <<<<<<<<<<<<<<
53110  *
53111  * cdef inline int import_ufunc() except -1:
53112  */
53113       __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__87, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(22, 1044, __pyx_L5_except_error)
53114       __Pyx_GOTREF(__pyx_t_8);
53115       __Pyx_Raise(__pyx_t_8, 0, 0, 0);
53116       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
53117       __PYX_ERR(22, 1044, __pyx_L5_except_error)
53118     }
53119     goto __pyx_L5_except_error;
53120     __pyx_L5_except_error:;
53121 
53122     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1041
53123  *
53124  * cdef inline int import_umath() except -1:
53125  *     try:             # <<<<<<<<<<<<<<
53126  *         _import_umath()
53127  *     except Exception:
53128  */
53129     __Pyx_XGIVEREF(__pyx_t_1);
53130     __Pyx_XGIVEREF(__pyx_t_2);
53131     __Pyx_XGIVEREF(__pyx_t_3);
53132     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
53133     goto __pyx_L1_error;
53134     __pyx_L8_try_end:;
53135   }
53136 
53137   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1040
53138  *         raise ImportError("numpy.core.multiarray failed to import")
53139  *
53140  * cdef inline int import_umath() except -1:             # <<<<<<<<<<<<<<
53141  *     try:
53142  *         _import_umath()
53143  */
53144 
53145   /* function exit code */
53146   __pyx_r = 0;
53147   goto __pyx_L0;
53148   __pyx_L1_error:;
53149   __Pyx_XDECREF(__pyx_t_5);
53150   __Pyx_XDECREF(__pyx_t_6);
53151   __Pyx_XDECREF(__pyx_t_7);
53152   __Pyx_XDECREF(__pyx_t_8);
53153   __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename);
53154   __pyx_r = -1;
53155   __pyx_L0:;
53156   __Pyx_RefNannyFinishContext();
53157   return __pyx_r;
53158 }
53159 
53160 /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1046
53161  *         raise ImportError("numpy.core.umath failed to import")
53162  *
53163  * cdef inline int import_ufunc() except -1:             # <<<<<<<<<<<<<<
53164  *     try:
53165  *         _import_umath()
53166  */
53167 
53168 static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) {
53169   int __pyx_r;
53170   __Pyx_RefNannyDeclarations
53171   PyObject *__pyx_t_1 = NULL;
53172   PyObject *__pyx_t_2 = NULL;
53173   PyObject *__pyx_t_3 = NULL;
53174   int __pyx_t_4;
53175   PyObject *__pyx_t_5 = NULL;
53176   PyObject *__pyx_t_6 = NULL;
53177   PyObject *__pyx_t_7 = NULL;
53178   PyObject *__pyx_t_8 = NULL;
53179   __Pyx_RefNannySetupContext("import_ufunc", 0);
53180 
53181   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1047
53182  *
53183  * cdef inline int import_ufunc() except -1:
53184  *     try:             # <<<<<<<<<<<<<<
53185  *         _import_umath()
53186  *     except Exception:
53187  */
53188   {
53189     __Pyx_PyThreadState_declare
53190     __Pyx_PyThreadState_assign
53191     __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
53192     __Pyx_XGOTREF(__pyx_t_1);
53193     __Pyx_XGOTREF(__pyx_t_2);
53194     __Pyx_XGOTREF(__pyx_t_3);
53195     /*try:*/ {
53196 
53197       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1048
53198  * cdef inline int import_ufunc() except -1:
53199  *     try:
53200  *         _import_umath()             # <<<<<<<<<<<<<<
53201  *     except Exception:
53202  *         raise ImportError("numpy.core.umath failed to import")
53203  */
53204       __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(22, 1048, __pyx_L3_error)
53205 
53206       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1047
53207  *
53208  * cdef inline int import_ufunc() except -1:
53209  *     try:             # <<<<<<<<<<<<<<
53210  *         _import_umath()
53211  *     except Exception:
53212  */
53213     }
53214     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
53215     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
53216     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
53217     goto __pyx_L8_try_end;
53218     __pyx_L3_error:;
53219 
53220     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1049
53221  *     try:
53222  *         _import_umath()
53223  *     except Exception:             # <<<<<<<<<<<<<<
53224  *         raise ImportError("numpy.core.umath failed to import")
53225  */
53226     __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
53227     if (__pyx_t_4) {
53228       __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
53229       if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(22, 1049, __pyx_L5_except_error)
53230       __Pyx_GOTREF(__pyx_t_5);
53231       __Pyx_GOTREF(__pyx_t_6);
53232       __Pyx_GOTREF(__pyx_t_7);
53233 
53234       /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1050
53235  *         _import_umath()
53236  *     except Exception:
53237  *         raise ImportError("numpy.core.umath failed to import")             # <<<<<<<<<<<<<<
53238  */
53239       __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ImportError, __pyx_tuple__87, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(22, 1050, __pyx_L5_except_error)
53240       __Pyx_GOTREF(__pyx_t_8);
53241       __Pyx_Raise(__pyx_t_8, 0, 0, 0);
53242       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
53243       __PYX_ERR(22, 1050, __pyx_L5_except_error)
53244     }
53245     goto __pyx_L5_except_error;
53246     __pyx_L5_except_error:;
53247 
53248     /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1047
53249  *
53250  * cdef inline int import_ufunc() except -1:
53251  *     try:             # <<<<<<<<<<<<<<
53252  *         _import_umath()
53253  *     except Exception:
53254  */
53255     __Pyx_XGIVEREF(__pyx_t_1);
53256     __Pyx_XGIVEREF(__pyx_t_2);
53257     __Pyx_XGIVEREF(__pyx_t_3);
53258     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
53259     goto __pyx_L1_error;
53260     __pyx_L8_try_end:;
53261   }
53262 
53263   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1046
53264  *         raise ImportError("numpy.core.umath failed to import")
53265  *
53266  * cdef inline int import_ufunc() except -1:             # <<<<<<<<<<<<<<
53267  *     try:
53268  *         _import_umath()
53269  */
53270 
53271   /* function exit code */
53272   __pyx_r = 0;
53273   goto __pyx_L0;
53274   __pyx_L1_error:;
53275   __Pyx_XDECREF(__pyx_t_5);
53276   __Pyx_XDECREF(__pyx_t_6);
53277   __Pyx_XDECREF(__pyx_t_7);
53278   __Pyx_XDECREF(__pyx_t_8);
53279   __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
53280   __pyx_r = -1;
53281   __pyx_L0:;
53282   __Pyx_RefNannyFinishContext();
53283   return __pyx_r;
53284 }
53285 
53286 /* "oct_visitors.pxd":51
53287  *     cdef void visit(self, Oct*, np.uint8_t selected)
53288  *
53289  *     cdef inline int oind(self):             # <<<<<<<<<<<<<<
53290  *         cdef int d = (1 << self.oref)
53291  *         return (((self.ind[0]*d)+self.ind[1])*d+self.ind[2])
53292  */
53293 
53294 static CYTHON_INLINE int __pyx_f_2yt_8geometry_12oct_visitors_10OctVisitor_oind(struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *__pyx_v_self) {
53295   int __pyx_v_d;
53296   int __pyx_r;
53297   __Pyx_RefNannyDeclarations
53298   __Pyx_RefNannySetupContext("oind", 0);
53299 
53300   /* "oct_visitors.pxd":52
53301  *
53302  *     cdef inline int oind(self):
53303  *         cdef int d = (1 << self.oref)             # <<<<<<<<<<<<<<
53304  *         return (((self.ind[0]*d)+self.ind[1])*d+self.ind[2])
53305  *
53306  */
53307   __pyx_v_d = (1 << __pyx_v_self->oref);
53308 
53309   /* "oct_visitors.pxd":53
53310  *     cdef inline int oind(self):
53311  *         cdef int d = (1 << self.oref)
53312  *         return (((self.ind[0]*d)+self.ind[1])*d+self.ind[2])             # <<<<<<<<<<<<<<
53313  *
53314  *     cdef inline int rind(self):
53315  */
53316   __pyx_r = (((((__pyx_v_self->ind[0]) * __pyx_v_d) + (__pyx_v_self->ind[1])) * __pyx_v_d) + (__pyx_v_self->ind[2]));
53317   goto __pyx_L0;
53318 
53319   /* "oct_visitors.pxd":51
53320  *     cdef void visit(self, Oct*, np.uint8_t selected)
53321  *
53322  *     cdef inline int oind(self):             # <<<<<<<<<<<<<<
53323  *         cdef int d = (1 << self.oref)
53324  *         return (((self.ind[0]*d)+self.ind[1])*d+self.ind[2])
53325  */
53326 
53327   /* function exit code */
53328   __pyx_L0:;
53329   __Pyx_RefNannyFinishContext();
53330   return __pyx_r;
53331 }
53332 
53333 /* "oct_visitors.pxd":55
53334  *         return (((self.ind[0]*d)+self.ind[1])*d+self.ind[2])
53335  *
53336  *     cdef inline int rind(self):             # <<<<<<<<<<<<<<
53337  *         cdef int d = (1 << self.oref)
53338  *         return (((self.ind[2]*d)+self.ind[1])*d+self.ind[0])
53339  */
53340 
53341 static CYTHON_INLINE int __pyx_f_2yt_8geometry_12oct_visitors_10OctVisitor_rind(struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *__pyx_v_self) {
53342   int __pyx_v_d;
53343   int __pyx_r;
53344   __Pyx_RefNannyDeclarations
53345   __Pyx_RefNannySetupContext("rind", 0);
53346 
53347   /* "oct_visitors.pxd":56
53348  *
53349  *     cdef inline int rind(self):
53350  *         cdef int d = (1 << self.oref)             # <<<<<<<<<<<<<<
53351  *         return (((self.ind[2]*d)+self.ind[1])*d+self.ind[0])
53352  *
53353  */
53354   __pyx_v_d = (1 << __pyx_v_self->oref);
53355 
53356   /* "oct_visitors.pxd":57
53357  *     cdef inline int rind(self):
53358  *         cdef int d = (1 << self.oref)
53359  *         return (((self.ind[2]*d)+self.ind[1])*d+self.ind[0])             # <<<<<<<<<<<<<<
53360  *
53361  * cdef class CountTotalOcts(OctVisitor):
53362  */
53363   __pyx_r = (((((__pyx_v_self->ind[2]) * __pyx_v_d) + (__pyx_v_self->ind[1])) * __pyx_v_d) + (__pyx_v_self->ind[0]));
53364   goto __pyx_L0;
53365 
53366   /* "oct_visitors.pxd":55
53367  *         return (((self.ind[0]*d)+self.ind[1])*d+self.ind[2])
53368  *
53369  *     cdef inline int rind(self):             # <<<<<<<<<<<<<<
53370  *         cdef int d = (1 << self.oref)
53371  *         return (((self.ind[2]*d)+self.ind[1])*d+self.ind[0])
53372  */
53373 
53374   /* function exit code */
53375   __pyx_L0:;
53376   __Pyx_RefNannyFinishContext();
53377   return __pyx_r;
53378 }
53379 
53380 /* "oct_visitors.pxd":142
53381  *     cdef np.uint64_t[:] morton_ind
53382  *
53383  * cdef inline int cind(int i, int j, int k) nogil:             # <<<<<<<<<<<<<<
53384  *     # THIS ONLY WORKS FOR CHILDREN.  It is not general for zones.
53385  *     return (((i*2)+j)*2+k)
53386  */
53387 
53388 static CYTHON_INLINE int __pyx_f_2yt_8geometry_12oct_visitors_cind(int __pyx_v_i, int __pyx_v_j, int __pyx_v_k) {
53389   int __pyx_r;
53390 
53391   /* "oct_visitors.pxd":144
53392  * cdef inline int cind(int i, int j, int k) nogil:
53393  *     # THIS ONLY WORKS FOR CHILDREN.  It is not general for zones.
53394  *     return (((i*2)+j)*2+k)             # <<<<<<<<<<<<<<
53395  *
53396  * from oct_container cimport OctreeContainer
53397  */
53398   __pyx_r = ((((__pyx_v_i * 2) + __pyx_v_j) * 2) + __pyx_v_k);
53399   goto __pyx_L0;
53400 
53401   /* "oct_visitors.pxd":142
53402  *     cdef np.uint64_t[:] morton_ind
53403  *
53404  * cdef inline int cind(int i, int j, int k) nogil:             # <<<<<<<<<<<<<<
53405  *     # THIS ONLY WORKS FOR CHILDREN.  It is not general for zones.
53406  *     return (((i*2)+j)*2+k)
53407  */
53408 
53409   /* function exit code */
53410   __pyx_L0:;
53411   return __pyx_r;
53412 }
53413 
53414 /* "oct_visitors.pxd":165
53415  *     cdef void set_neighbour_info(self, Oct *o, int ishift[3])
53416  *
53417  *     cdef inline np.uint8_t neighbour_rind(self):             # <<<<<<<<<<<<<<
53418  *         cdef int d = (1 << self.oref)
53419  *         return (((self.neigh_ind[2]*d)+self.neigh_ind[1])*d+self.neigh_ind[0])
53420  */
53421 
53422 static CYTHON_INLINE __pyx_t_5numpy_uint8_t __pyx_f_2yt_8geometry_12oct_visitors_20BaseNeighbourVisitor_neighbour_rind(struct __pyx_obj_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor *__pyx_v_self) {
53423   int __pyx_v_d;
53424   __pyx_t_5numpy_uint8_t __pyx_r;
53425   __Pyx_RefNannyDeclarations
53426   __Pyx_RefNannySetupContext("neighbour_rind", 0);
53427 
53428   /* "oct_visitors.pxd":166
53429  *
53430  *     cdef inline np.uint8_t neighbour_rind(self):
53431  *         cdef int d = (1 << self.oref)             # <<<<<<<<<<<<<<
53432  *         return (((self.neigh_ind[2]*d)+self.neigh_ind[1])*d+self.neigh_ind[0])
53433  *
53434  */
53435   __pyx_v_d = (1 << __pyx_v_self->__pyx_base.oref);
53436 
53437   /* "oct_visitors.pxd":167
53438  *     cdef inline np.uint8_t neighbour_rind(self):
53439  *         cdef int d = (1 << self.oref)
53440  *         return (((self.neigh_ind[2]*d)+self.neigh_ind[1])*d+self.neigh_ind[0])             # <<<<<<<<<<<<<<
53441  *
53442  * cdef class NeighbourCellIndexVisitor(BaseNeighbourVisitor):
53443  */
53444   __pyx_r = (((((__pyx_v_self->neigh_ind[2]) * __pyx_v_d) + (__pyx_v_self->neigh_ind[1])) * __pyx_v_d) + (__pyx_v_self->neigh_ind[0]));
53445   goto __pyx_L0;
53446 
53447   /* "oct_visitors.pxd":165
53448  *     cdef void set_neighbour_info(self, Oct *o, int ishift[3])
53449  *
53450  *     cdef inline np.uint8_t neighbour_rind(self):             # <<<<<<<<<<<<<<
53451  *         cdef int d = (1 << self.oref)
53452  *         return (((self.neigh_ind[2]*d)+self.neigh_ind[1])*d+self.neigh_ind[0])
53453  */
53454 
53455   /* function exit code */
53456   __pyx_L0:;
53457   __Pyx_RefNannyFinishContext();
53458   return __pyx_r;
53459 }
53460 
53461 /* "yt/utilities/lib/fp_utils.pxd":13
53462  *
53463  *
53464  * cdef inline np.int64_t imax(np.int64_t i0, np.int64_t i1) nogil:             # <<<<<<<<<<<<<<
53465  *     if i0 > i1: return i0
53466  *     return i1
53467  */
53468 
53469 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_imax(__pyx_t_5numpy_int64_t __pyx_v_i0, __pyx_t_5numpy_int64_t __pyx_v_i1) {
53470   __pyx_t_5numpy_int64_t __pyx_r;
53471   int __pyx_t_1;
53472 
53473   /* "yt/utilities/lib/fp_utils.pxd":14
53474  *
53475  * cdef inline np.int64_t imax(np.int64_t i0, np.int64_t i1) nogil:
53476  *     if i0 > i1: return i0             # <<<<<<<<<<<<<<
53477  *     return i1
53478  *
53479  */
53480   __pyx_t_1 = ((__pyx_v_i0 > __pyx_v_i1) != 0);
53481   if (__pyx_t_1) {
53482     __pyx_r = __pyx_v_i0;
53483     goto __pyx_L0;
53484   }
53485 
53486   /* "yt/utilities/lib/fp_utils.pxd":15
53487  * cdef inline np.int64_t imax(np.int64_t i0, np.int64_t i1) nogil:
53488  *     if i0 > i1: return i0
53489  *     return i1             # <<<<<<<<<<<<<<
53490  *
53491  * cdef inline np.float64_t fmax(np.float64_t f0, np.float64_t f1) nogil:
53492  */
53493   __pyx_r = __pyx_v_i1;
53494   goto __pyx_L0;
53495 
53496   /* "yt/utilities/lib/fp_utils.pxd":13
53497  *
53498  *
53499  * cdef inline np.int64_t imax(np.int64_t i0, np.int64_t i1) nogil:             # <<<<<<<<<<<<<<
53500  *     if i0 > i1: return i0
53501  *     return i1
53502  */
53503 
53504   /* function exit code */
53505   __pyx_L0:;
53506   return __pyx_r;
53507 }
53508 
53509 /* "yt/utilities/lib/fp_utils.pxd":17
53510  *     return i1
53511  *
53512  * cdef inline np.float64_t fmax(np.float64_t f0, np.float64_t f1) nogil:             # <<<<<<<<<<<<<<
53513  *     if f0 > f1: return f0
53514  *     return f1
53515  */
53516 
53517 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_fmax(__pyx_t_5numpy_float64_t __pyx_v_f0, __pyx_t_5numpy_float64_t __pyx_v_f1) {
53518   __pyx_t_5numpy_float64_t __pyx_r;
53519   int __pyx_t_1;
53520 
53521   /* "yt/utilities/lib/fp_utils.pxd":18
53522  *
53523  * cdef inline np.float64_t fmax(np.float64_t f0, np.float64_t f1) nogil:
53524  *     if f0 > f1: return f0             # <<<<<<<<<<<<<<
53525  *     return f1
53526  *
53527  */
53528   __pyx_t_1 = ((__pyx_v_f0 > __pyx_v_f1) != 0);
53529   if (__pyx_t_1) {
53530     __pyx_r = __pyx_v_f0;
53531     goto __pyx_L0;
53532   }
53533 
53534   /* "yt/utilities/lib/fp_utils.pxd":19
53535  * cdef inline np.float64_t fmax(np.float64_t f0, np.float64_t f1) nogil:
53536  *     if f0 > f1: return f0
53537  *     return f1             # <<<<<<<<<<<<<<
53538  *
53539  * cdef inline np.int64_t imin(np.int64_t i0, np.int64_t i1) nogil:
53540  */
53541   __pyx_r = __pyx_v_f1;
53542   goto __pyx_L0;
53543 
53544   /* "yt/utilities/lib/fp_utils.pxd":17
53545  *     return i1
53546  *
53547  * cdef inline np.float64_t fmax(np.float64_t f0, np.float64_t f1) nogil:             # <<<<<<<<<<<<<<
53548  *     if f0 > f1: return f0
53549  *     return f1
53550  */
53551 
53552   /* function exit code */
53553   __pyx_L0:;
53554   return __pyx_r;
53555 }
53556 
53557 /* "yt/utilities/lib/fp_utils.pxd":21
53558  *     return f1
53559  *
53560  * cdef inline np.int64_t imin(np.int64_t i0, np.int64_t i1) nogil:             # <<<<<<<<<<<<<<
53561  *     if i0 < i1: return i0
53562  *     return i1
53563  */
53564 
53565 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_imin(__pyx_t_5numpy_int64_t __pyx_v_i0, __pyx_t_5numpy_int64_t __pyx_v_i1) {
53566   __pyx_t_5numpy_int64_t __pyx_r;
53567   int __pyx_t_1;
53568 
53569   /* "yt/utilities/lib/fp_utils.pxd":22
53570  *
53571  * cdef inline np.int64_t imin(np.int64_t i0, np.int64_t i1) nogil:
53572  *     if i0 < i1: return i0             # <<<<<<<<<<<<<<
53573  *     return i1
53574  *
53575  */
53576   __pyx_t_1 = ((__pyx_v_i0 < __pyx_v_i1) != 0);
53577   if (__pyx_t_1) {
53578     __pyx_r = __pyx_v_i0;
53579     goto __pyx_L0;
53580   }
53581 
53582   /* "yt/utilities/lib/fp_utils.pxd":23
53583  * cdef inline np.int64_t imin(np.int64_t i0, np.int64_t i1) nogil:
53584  *     if i0 < i1: return i0
53585  *     return i1             # <<<<<<<<<<<<<<
53586  *
53587  * cdef inline np.float64_t fmin(np.float64_t f0, np.float64_t f1) nogil:
53588  */
53589   __pyx_r = __pyx_v_i1;
53590   goto __pyx_L0;
53591 
53592   /* "yt/utilities/lib/fp_utils.pxd":21
53593  *     return f1
53594  *
53595  * cdef inline np.int64_t imin(np.int64_t i0, np.int64_t i1) nogil:             # <<<<<<<<<<<<<<
53596  *     if i0 < i1: return i0
53597  *     return i1
53598  */
53599 
53600   /* function exit code */
53601   __pyx_L0:;
53602   return __pyx_r;
53603 }
53604 
53605 /* "yt/utilities/lib/fp_utils.pxd":25
53606  *     return i1
53607  *
53608  * cdef inline np.float64_t fmin(np.float64_t f0, np.float64_t f1) nogil:             # <<<<<<<<<<<<<<
53609  *     if f0 < f1: return f0
53610  *     return f1
53611  */
53612 
53613 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_fmin(__pyx_t_5numpy_float64_t __pyx_v_f0, __pyx_t_5numpy_float64_t __pyx_v_f1) {
53614   __pyx_t_5numpy_float64_t __pyx_r;
53615   int __pyx_t_1;
53616 
53617   /* "yt/utilities/lib/fp_utils.pxd":26
53618  *
53619  * cdef inline np.float64_t fmin(np.float64_t f0, np.float64_t f1) nogil:
53620  *     if f0 < f1: return f0             # <<<<<<<<<<<<<<
53621  *     return f1
53622  *
53623  */
53624   __pyx_t_1 = ((__pyx_v_f0 < __pyx_v_f1) != 0);
53625   if (__pyx_t_1) {
53626     __pyx_r = __pyx_v_f0;
53627     goto __pyx_L0;
53628   }
53629 
53630   /* "yt/utilities/lib/fp_utils.pxd":27
53631  * cdef inline np.float64_t fmin(np.float64_t f0, np.float64_t f1) nogil:
53632  *     if f0 < f1: return f0
53633  *     return f1             # <<<<<<<<<<<<<<
53634  *
53635  * cdef inline np.float64_t fabs(np.float64_t f0) nogil:
53636  */
53637   __pyx_r = __pyx_v_f1;
53638   goto __pyx_L0;
53639 
53640   /* "yt/utilities/lib/fp_utils.pxd":25
53641  *     return i1
53642  *
53643  * cdef inline np.float64_t fmin(np.float64_t f0, np.float64_t f1) nogil:             # <<<<<<<<<<<<<<
53644  *     if f0 < f1: return f0
53645  *     return f1
53646  */
53647 
53648   /* function exit code */
53649   __pyx_L0:;
53650   return __pyx_r;
53651 }
53652 
53653 /* "yt/utilities/lib/fp_utils.pxd":29
53654  *     return f1
53655  *
53656  * cdef inline np.float64_t fabs(np.float64_t f0) nogil:             # <<<<<<<<<<<<<<
53657  *     if f0 < 0.0: return -f0
53658  *     return f0
53659  */
53660 
53661 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_fabs(__pyx_t_5numpy_float64_t __pyx_v_f0) {
53662   __pyx_t_5numpy_float64_t __pyx_r;
53663   int __pyx_t_1;
53664 
53665   /* "yt/utilities/lib/fp_utils.pxd":30
53666  *
53667  * cdef inline np.float64_t fabs(np.float64_t f0) nogil:
53668  *     if f0 < 0.0: return -f0             # <<<<<<<<<<<<<<
53669  *     return f0
53670  *
53671  */
53672   __pyx_t_1 = ((__pyx_v_f0 < 0.0) != 0);
53673   if (__pyx_t_1) {
53674     __pyx_r = (-__pyx_v_f0);
53675     goto __pyx_L0;
53676   }
53677 
53678   /* "yt/utilities/lib/fp_utils.pxd":31
53679  * cdef inline np.float64_t fabs(np.float64_t f0) nogil:
53680  *     if f0 < 0.0: return -f0
53681  *     return f0             # <<<<<<<<<<<<<<
53682  *
53683  * cdef inline np.int64_t iclip(np.int64_t i, np.int64_t a, np.int64_t b) nogil:
53684  */
53685   __pyx_r = __pyx_v_f0;
53686   goto __pyx_L0;
53687 
53688   /* "yt/utilities/lib/fp_utils.pxd":29
53689  *     return f1
53690  *
53691  * cdef inline np.float64_t fabs(np.float64_t f0) nogil:             # <<<<<<<<<<<<<<
53692  *     if f0 < 0.0: return -f0
53693  *     return f0
53694  */
53695 
53696   /* function exit code */
53697   __pyx_L0:;
53698   return __pyx_r;
53699 }
53700 
53701 /* "yt/utilities/lib/fp_utils.pxd":33
53702  *     return f0
53703  *
53704  * cdef inline np.int64_t iclip(np.int64_t i, np.int64_t a, np.int64_t b) nogil:             # <<<<<<<<<<<<<<
53705  *     if i < a: return a
53706  *     if i > b: return b
53707  */
53708 
53709 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_iclip(__pyx_t_5numpy_int64_t __pyx_v_i, __pyx_t_5numpy_int64_t __pyx_v_a, __pyx_t_5numpy_int64_t __pyx_v_b) {
53710   __pyx_t_5numpy_int64_t __pyx_r;
53711   int __pyx_t_1;
53712 
53713   /* "yt/utilities/lib/fp_utils.pxd":34
53714  *
53715  * cdef inline np.int64_t iclip(np.int64_t i, np.int64_t a, np.int64_t b) nogil:
53716  *     if i < a: return a             # <<<<<<<<<<<<<<
53717  *     if i > b: return b
53718  *     return i
53719  */
53720   __pyx_t_1 = ((__pyx_v_i < __pyx_v_a) != 0);
53721   if (__pyx_t_1) {
53722     __pyx_r = __pyx_v_a;
53723     goto __pyx_L0;
53724   }
53725 
53726   /* "yt/utilities/lib/fp_utils.pxd":35
53727  * cdef inline np.int64_t iclip(np.int64_t i, np.int64_t a, np.int64_t b) nogil:
53728  *     if i < a: return a
53729  *     if i > b: return b             # <<<<<<<<<<<<<<
53730  *     return i
53731  *
53732  */
53733   __pyx_t_1 = ((__pyx_v_i > __pyx_v_b) != 0);
53734   if (__pyx_t_1) {
53735     __pyx_r = __pyx_v_b;
53736     goto __pyx_L0;
53737   }
53738 
53739   /* "yt/utilities/lib/fp_utils.pxd":36
53740  *     if i < a: return a
53741  *     if i > b: return b
53742  *     return i             # <<<<<<<<<<<<<<
53743  *
53744  * cdef inline np.int64_t i64clip(np.int64_t i, np.int64_t a, np.int64_t b) nogil:
53745  */
53746   __pyx_r = __pyx_v_i;
53747   goto __pyx_L0;
53748 
53749   /* "yt/utilities/lib/fp_utils.pxd":33
53750  *     return f0
53751  *
53752  * cdef inline np.int64_t iclip(np.int64_t i, np.int64_t a, np.int64_t b) nogil:             # <<<<<<<<<<<<<<
53753  *     if i < a: return a
53754  *     if i > b: return b
53755  */
53756 
53757   /* function exit code */
53758   __pyx_L0:;
53759   return __pyx_r;
53760 }
53761 
53762 /* "yt/utilities/lib/fp_utils.pxd":38
53763  *     return i
53764  *
53765  * cdef inline np.int64_t i64clip(np.int64_t i, np.int64_t a, np.int64_t b) nogil:             # <<<<<<<<<<<<<<
53766  *     if i < a: return a
53767  *     if i > b: return b
53768  */
53769 
53770 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_i64clip(__pyx_t_5numpy_int64_t __pyx_v_i, __pyx_t_5numpy_int64_t __pyx_v_a, __pyx_t_5numpy_int64_t __pyx_v_b) {
53771   __pyx_t_5numpy_int64_t __pyx_r;
53772   int __pyx_t_1;
53773 
53774   /* "yt/utilities/lib/fp_utils.pxd":39
53775  *
53776  * cdef inline np.int64_t i64clip(np.int64_t i, np.int64_t a, np.int64_t b) nogil:
53777  *     if i < a: return a             # <<<<<<<<<<<<<<
53778  *     if i > b: return b
53779  *     return i
53780  */
53781   __pyx_t_1 = ((__pyx_v_i < __pyx_v_a) != 0);
53782   if (__pyx_t_1) {
53783     __pyx_r = __pyx_v_a;
53784     goto __pyx_L0;
53785   }
53786 
53787   /* "yt/utilities/lib/fp_utils.pxd":40
53788  * cdef inline np.int64_t i64clip(np.int64_t i, np.int64_t a, np.int64_t b) nogil:
53789  *     if i < a: return a
53790  *     if i > b: return b             # <<<<<<<<<<<<<<
53791  *     return i
53792  *
53793  */
53794   __pyx_t_1 = ((__pyx_v_i > __pyx_v_b) != 0);
53795   if (__pyx_t_1) {
53796     __pyx_r = __pyx_v_b;
53797     goto __pyx_L0;
53798   }
53799 
53800   /* "yt/utilities/lib/fp_utils.pxd":41
53801  *     if i < a: return a
53802  *     if i > b: return b
53803  *     return i             # <<<<<<<<<<<<<<
53804  *
53805  * cdef inline np.float64_t fclip(np.float64_t f,
53806  */
53807   __pyx_r = __pyx_v_i;
53808   goto __pyx_L0;
53809 
53810   /* "yt/utilities/lib/fp_utils.pxd":38
53811  *     return i
53812  *
53813  * cdef inline np.int64_t i64clip(np.int64_t i, np.int64_t a, np.int64_t b) nogil:             # <<<<<<<<<<<<<<
53814  *     if i < a: return a
53815  *     if i > b: return b
53816  */
53817 
53818   /* function exit code */
53819   __pyx_L0:;
53820   return __pyx_r;
53821 }
53822 
53823 /* "yt/utilities/lib/fp_utils.pxd":43
53824  *     return i
53825  *
53826  * cdef inline np.float64_t fclip(np.float64_t f,             # <<<<<<<<<<<<<<
53827  *                       np.float64_t a, np.float64_t b) nogil:
53828  *     return fmin(fmax(f, a), b)
53829  */
53830 
53831 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_fclip(__pyx_t_5numpy_float64_t __pyx_v_f, __pyx_t_5numpy_float64_t __pyx_v_a, __pyx_t_5numpy_float64_t __pyx_v_b) {
53832   __pyx_t_5numpy_float64_t __pyx_r;
53833 
53834   /* "yt/utilities/lib/fp_utils.pxd":45
53835  * cdef inline np.float64_t fclip(np.float64_t f,
53836  *                       np.float64_t a, np.float64_t b) nogil:
53837  *     return fmin(fmax(f, a), b)             # <<<<<<<<<<<<<<
53838  *
53839  * cdef inline np.int64_t i64max(np.int64_t i0, np.int64_t i1) nogil:
53840  */
53841   __pyx_r = __pyx_f_2yt_9utilities_3lib_8fp_utils_fmin(__pyx_f_2yt_9utilities_3lib_8fp_utils_fmax(__pyx_v_f, __pyx_v_a), __pyx_v_b);
53842   goto __pyx_L0;
53843 
53844   /* "yt/utilities/lib/fp_utils.pxd":43
53845  *     return i
53846  *
53847  * cdef inline np.float64_t fclip(np.float64_t f,             # <<<<<<<<<<<<<<
53848  *                       np.float64_t a, np.float64_t b) nogil:
53849  *     return fmin(fmax(f, a), b)
53850  */
53851 
53852   /* function exit code */
53853   __pyx_L0:;
53854   return __pyx_r;
53855 }
53856 
53857 /* "yt/utilities/lib/fp_utils.pxd":47
53858  *     return fmin(fmax(f, a), b)
53859  *
53860  * cdef inline np.int64_t i64max(np.int64_t i0, np.int64_t i1) nogil:             # <<<<<<<<<<<<<<
53861  *     if i0 > i1: return i0
53862  *     return i1
53863  */
53864 
53865 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_i64max(__pyx_t_5numpy_int64_t __pyx_v_i0, __pyx_t_5numpy_int64_t __pyx_v_i1) {
53866   __pyx_t_5numpy_int64_t __pyx_r;
53867   int __pyx_t_1;
53868 
53869   /* "yt/utilities/lib/fp_utils.pxd":48
53870  *
53871  * cdef inline np.int64_t i64max(np.int64_t i0, np.int64_t i1) nogil:
53872  *     if i0 > i1: return i0             # <<<<<<<<<<<<<<
53873  *     return i1
53874  *
53875  */
53876   __pyx_t_1 = ((__pyx_v_i0 > __pyx_v_i1) != 0);
53877   if (__pyx_t_1) {
53878     __pyx_r = __pyx_v_i0;
53879     goto __pyx_L0;
53880   }
53881 
53882   /* "yt/utilities/lib/fp_utils.pxd":49
53883  * cdef inline np.int64_t i64max(np.int64_t i0, np.int64_t i1) nogil:
53884  *     if i0 > i1: return i0
53885  *     return i1             # <<<<<<<<<<<<<<
53886  *
53887  * cdef inline np.int64_t i64min(np.int64_t i0, np.int64_t i1) nogil:
53888  */
53889   __pyx_r = __pyx_v_i1;
53890   goto __pyx_L0;
53891 
53892   /* "yt/utilities/lib/fp_utils.pxd":47
53893  *     return fmin(fmax(f, a), b)
53894  *
53895  * cdef inline np.int64_t i64max(np.int64_t i0, np.int64_t i1) nogil:             # <<<<<<<<<<<<<<
53896  *     if i0 > i1: return i0
53897  *     return i1
53898  */
53899 
53900   /* function exit code */
53901   __pyx_L0:;
53902   return __pyx_r;
53903 }
53904 
53905 /* "yt/utilities/lib/fp_utils.pxd":51
53906  *     return i1
53907  *
53908  * cdef inline np.int64_t i64min(np.int64_t i0, np.int64_t i1) nogil:             # <<<<<<<<<<<<<<
53909  *     if i0 < i1: return i0
53910  *     return i1
53911  */
53912 
53913 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_8fp_utils_i64min(__pyx_t_5numpy_int64_t __pyx_v_i0, __pyx_t_5numpy_int64_t __pyx_v_i1) {
53914   __pyx_t_5numpy_int64_t __pyx_r;
53915   int __pyx_t_1;
53916 
53917   /* "yt/utilities/lib/fp_utils.pxd":52
53918  *
53919  * cdef inline np.int64_t i64min(np.int64_t i0, np.int64_t i1) nogil:
53920  *     if i0 < i1: return i0             # <<<<<<<<<<<<<<
53921  *     return i1
53922  *
53923  */
53924   __pyx_t_1 = ((__pyx_v_i0 < __pyx_v_i1) != 0);
53925   if (__pyx_t_1) {
53926     __pyx_r = __pyx_v_i0;
53927     goto __pyx_L0;
53928   }
53929 
53930   /* "yt/utilities/lib/fp_utils.pxd":53
53931  * cdef inline np.int64_t i64min(np.int64_t i0, np.int64_t i1) nogil:
53932  *     if i0 < i1: return i0
53933  *     return i1             # <<<<<<<<<<<<<<
53934  *
53935  * cdef inline _ensure_code(arr):
53936  */
53937   __pyx_r = __pyx_v_i1;
53938   goto __pyx_L0;
53939 
53940   /* "yt/utilities/lib/fp_utils.pxd":51
53941  *     return i1
53942  *
53943  * cdef inline np.int64_t i64min(np.int64_t i0, np.int64_t i1) nogil:             # <<<<<<<<<<<<<<
53944  *     if i0 < i1: return i0
53945  *     return i1
53946  */
53947 
53948   /* function exit code */
53949   __pyx_L0:;
53950   return __pyx_r;
53951 }
53952 
53953 /* "yt/utilities/lib/fp_utils.pxd":55
53954  *     return i1
53955  *
53956  * cdef inline _ensure_code(arr):             # <<<<<<<<<<<<<<
53957  *     if hasattr(arr, "units"):
53958  *         if "code_length" == str(arr.units):
53959  */
53960 
53961 static CYTHON_INLINE PyObject *__pyx_f_2yt_9utilities_3lib_8fp_utils__ensure_code(PyObject *__pyx_v_arr) {
53962   PyObject *__pyx_r = NULL;
53963   __Pyx_RefNannyDeclarations
53964   int __pyx_t_1;
53965   int __pyx_t_2;
53966   PyObject *__pyx_t_3 = NULL;
53967   PyObject *__pyx_t_4 = NULL;
53968   PyObject *__pyx_t_5 = NULL;
53969   __Pyx_RefNannySetupContext("_ensure_code", 0);
53970 
53971   /* "yt/utilities/lib/fp_utils.pxd":56
53972  *
53973  * cdef inline _ensure_code(arr):
53974  *     if hasattr(arr, "units"):             # <<<<<<<<<<<<<<
53975  *         if "code_length" == str(arr.units):
53976  *             return arr
53977  */
53978   __pyx_t_1 = __Pyx_HasAttr(__pyx_v_arr, __pyx_n_s_units); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(23, 56, __pyx_L1_error)
53979   __pyx_t_2 = (__pyx_t_1 != 0);
53980   if (__pyx_t_2) {
53981 
53982     /* "yt/utilities/lib/fp_utils.pxd":57
53983  * cdef inline _ensure_code(arr):
53984  *     if hasattr(arr, "units"):
53985  *         if "code_length" == str(arr.units):             # <<<<<<<<<<<<<<
53986  *             return arr
53987  *         arr.convert_to_units("code_length")
53988  */
53989     __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_arr, __pyx_n_s_units); if (unlikely(!__pyx_t_3)) __PYX_ERR(23, 57, __pyx_L1_error)
53990     __Pyx_GOTREF(__pyx_t_3);
53991     __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyString_Type)), __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(23, 57, __pyx_L1_error)
53992     __Pyx_GOTREF(__pyx_t_4);
53993     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
53994     __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_n_s_code_length, __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(23, 57, __pyx_L1_error)
53995     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
53996     if (__pyx_t_2) {
53997 
53998       /* "yt/utilities/lib/fp_utils.pxd":58
53999  *     if hasattr(arr, "units"):
54000  *         if "code_length" == str(arr.units):
54001  *             return arr             # <<<<<<<<<<<<<<
54002  *         arr.convert_to_units("code_length")
54003  *     return arr
54004  */
54005       __Pyx_XDECREF(__pyx_r);
54006       __Pyx_INCREF(__pyx_v_arr);
54007       __pyx_r = __pyx_v_arr;
54008       goto __pyx_L0;
54009 
54010       /* "yt/utilities/lib/fp_utils.pxd":57
54011  * cdef inline _ensure_code(arr):
54012  *     if hasattr(arr, "units"):
54013  *         if "code_length" == str(arr.units):             # <<<<<<<<<<<<<<
54014  *             return arr
54015  *         arr.convert_to_units("code_length")
54016  */
54017     }
54018 
54019     /* "yt/utilities/lib/fp_utils.pxd":59
54020  *         if "code_length" == str(arr.units):
54021  *             return arr
54022  *         arr.convert_to_units("code_length")             # <<<<<<<<<<<<<<
54023  *     return arr
54024  */
54025     __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_arr, __pyx_n_s_convert_to_units); if (unlikely(!__pyx_t_3)) __PYX_ERR(23, 59, __pyx_L1_error)
54026     __Pyx_GOTREF(__pyx_t_3);
54027     __pyx_t_5 = NULL;
54028     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
54029       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
54030       if (likely(__pyx_t_5)) {
54031         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
54032         __Pyx_INCREF(__pyx_t_5);
54033         __Pyx_INCREF(function);
54034         __Pyx_DECREF_SET(__pyx_t_3, function);
54035       }
54036     }
54037     __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_n_s_code_length) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_n_s_code_length);
54038     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
54039     if (unlikely(!__pyx_t_4)) __PYX_ERR(23, 59, __pyx_L1_error)
54040     __Pyx_GOTREF(__pyx_t_4);
54041     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
54042     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
54043 
54044     /* "yt/utilities/lib/fp_utils.pxd":56
54045  *
54046  * cdef inline _ensure_code(arr):
54047  *     if hasattr(arr, "units"):             # <<<<<<<<<<<<<<
54048  *         if "code_length" == str(arr.units):
54049  *             return arr
54050  */
54051   }
54052 
54053   /* "yt/utilities/lib/fp_utils.pxd":60
54054  *             return arr
54055  *         arr.convert_to_units("code_length")
54056  *     return arr             # <<<<<<<<<<<<<<
54057  */
54058   __Pyx_XDECREF(__pyx_r);
54059   __Pyx_INCREF(__pyx_v_arr);
54060   __pyx_r = __pyx_v_arr;
54061   goto __pyx_L0;
54062 
54063   /* "yt/utilities/lib/fp_utils.pxd":55
54064  *     return i1
54065  *
54066  * cdef inline _ensure_code(arr):             # <<<<<<<<<<<<<<
54067  *     if hasattr(arr, "units"):
54068  *         if "code_length" == str(arr.units):
54069  */
54070 
54071   /* function exit code */
54072   __pyx_L1_error:;
54073   __Pyx_XDECREF(__pyx_t_3);
54074   __Pyx_XDECREF(__pyx_t_4);
54075   __Pyx_XDECREF(__pyx_t_5);
54076   __Pyx_AddTraceback("yt.utilities.lib.fp_utils._ensure_code", __pyx_clineno, __pyx_lineno, __pyx_filename);
54077   __pyx_r = 0;
54078   __pyx_L0:;
54079   __Pyx_XGIVEREF(__pyx_r);
54080   __Pyx_RefNannyFinishContext();
54081   return __pyx_r;
54082 }
54083 
54084 /* "oct_container.pxd":48
54085  *
54086  * cdef class OctObjectPool(ObjectPool):
54087  *     cdef inline OctAllocationContainer *get_cont(self, int i):             # <<<<<<<<<<<<<<
54088  *         return <OctAllocationContainer*> (&self.containers[i])
54089  *
54090  */
54091 
54092 static CYTHON_INLINE struct __pyx_t_2yt_8geometry_13oct_container_OctAllocationContainer *__pyx_f_2yt_8geometry_13oct_container_13OctObjectPool_get_cont(struct __pyx_obj_2yt_8geometry_13oct_container_OctObjectPool *__pyx_v_self, int __pyx_v_i) {
54093   struct __pyx_t_2yt_8geometry_13oct_container_OctAllocationContainer *__pyx_r;
54094   __Pyx_RefNannyDeclarations
54095   __Pyx_RefNannySetupContext("get_cont", 0);
54096 
54097   /* "oct_container.pxd":49
54098  * cdef class OctObjectPool(ObjectPool):
54099  *     cdef inline OctAllocationContainer *get_cont(self, int i):
54100  *         return <OctAllocationContainer*> (&self.containers[i])             # <<<<<<<<<<<<<<
54101  *
54102  * cdef OctList *OctList_append(OctList *list, Oct *o)
54103  */
54104   __pyx_r = ((struct __pyx_t_2yt_8geometry_13oct_container_OctAllocationContainer *)(&(__pyx_v_self->__pyx_base.containers[__pyx_v_i])));
54105   goto __pyx_L0;
54106 
54107   /* "oct_container.pxd":48
54108  *
54109  * cdef class OctObjectPool(ObjectPool):
54110  *     cdef inline OctAllocationContainer *get_cont(self, int i):             # <<<<<<<<<<<<<<
54111  *         return <OctAllocationContainer*> (&self.containers[i])
54112  *
54113  */
54114 
54115   /* function exit code */
54116   __pyx_L0:;
54117   __Pyx_RefNannyFinishContext();
54118   return __pyx_r;
54119 }
54120 
54121 /* "yt/utilities/lib/geometry_utils.pxd":24
54122  * @cython.boundscheck(False)
54123  * @cython.wraparound(False)
54124  * cdef inline np.int64_t ifrexp(np.float64_t x, np.int64_t *e):             # <<<<<<<<<<<<<<
54125  *     cdef np.float64_t m
54126  *     cdef int e0 = 0
54127  */
54128 
54129 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_ifrexp(__pyx_t_5numpy_float64_t __pyx_v_x, __pyx_t_5numpy_int64_t *__pyx_v_e) {
54130   __pyx_t_5numpy_float64_t __pyx_v_m;
54131   int __pyx_v_e0;
54132   __pyx_t_5numpy_int64_t __pyx_r;
54133   __Pyx_RefNannyDeclarations
54134   __Pyx_RefNannySetupContext("ifrexp", 0);
54135 
54136   /* "yt/utilities/lib/geometry_utils.pxd":26
54137  * cdef inline np.int64_t ifrexp(np.float64_t x, np.int64_t *e):
54138  *     cdef np.float64_t m
54139  *     cdef int e0 = 0             # <<<<<<<<<<<<<<
54140  *     m = frexp(x,&e0)
54141  *     e[0] = <np.int64_t>e0
54142  */
54143   __pyx_v_e0 = 0;
54144 
54145   /* "yt/utilities/lib/geometry_utils.pxd":27
54146  *     cdef np.float64_t m
54147  *     cdef int e0 = 0
54148  *     m = frexp(x,&e0)             # <<<<<<<<<<<<<<
54149  *     e[0] = <np.int64_t>e0
54150  *     return <np.int64_t>ldexp(m,<int>DBL_MANT_DIG)
54151  */
54152   __pyx_v_m = frexp(__pyx_v_x, (&__pyx_v_e0));
54153 
54154   /* "yt/utilities/lib/geometry_utils.pxd":28
54155  *     cdef int e0 = 0
54156  *     m = frexp(x,&e0)
54157  *     e[0] = <np.int64_t>e0             # <<<<<<<<<<<<<<
54158  *     return <np.int64_t>ldexp(m,<int>DBL_MANT_DIG)
54159  *
54160  */
54161   (__pyx_v_e[0]) = ((__pyx_t_5numpy_int64_t)__pyx_v_e0);
54162 
54163   /* "yt/utilities/lib/geometry_utils.pxd":29
54164  *     m = frexp(x,&e0)
54165  *     e[0] = <np.int64_t>e0
54166  *     return <np.int64_t>ldexp(m,<int>DBL_MANT_DIG)             # <<<<<<<<<<<<<<
54167  *
54168  * @cython.cdivision(True)
54169  */
54170   __pyx_r = ((__pyx_t_5numpy_int64_t)ldexp(__pyx_v_m, ((int)DBL_MANT_DIG)));
54171   goto __pyx_L0;
54172 
54173   /* "yt/utilities/lib/geometry_utils.pxd":24
54174  * @cython.boundscheck(False)
54175  * @cython.wraparound(False)
54176  * cdef inline np.int64_t ifrexp(np.float64_t x, np.int64_t *e):             # <<<<<<<<<<<<<<
54177  *     cdef np.float64_t m
54178  *     cdef int e0 = 0
54179  */
54180 
54181   /* function exit code */
54182   __pyx_L0:;
54183   __Pyx_RefNannyFinishContext();
54184   return __pyx_r;
54185 }
54186 
54187 /* "yt/utilities/lib/geometry_utils.pxd":34
54188  * @cython.boundscheck(False)
54189  * @cython.wraparound(False)
54190  * cdef inline np.int64_t msdb(np.int64_t a, np.int64_t b):             # <<<<<<<<<<<<<<
54191  *     """Get the most significant differing bit between a and b."""
54192  *     cdef np.int64_t c, ndx
54193  */
54194 
54195 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_msdb(__pyx_t_5numpy_int64_t __pyx_v_a, __pyx_t_5numpy_int64_t __pyx_v_b) {
54196   __pyx_t_5numpy_int64_t __pyx_v_c;
54197   __pyx_t_5numpy_int64_t __pyx_v_ndx;
54198   __pyx_t_5numpy_int64_t __pyx_r;
54199   __Pyx_RefNannyDeclarations
54200   int __pyx_t_1;
54201   __Pyx_RefNannySetupContext("msdb", 0);
54202 
54203   /* "yt/utilities/lib/geometry_utils.pxd":37
54204  *     """Get the most significant differing bit between a and b."""
54205  *     cdef np.int64_t c, ndx
54206  *     c = a ^ b             # <<<<<<<<<<<<<<
54207  *     ndx = 0
54208  *     while (0 < c):
54209  */
54210   __pyx_v_c = (__pyx_v_a ^ __pyx_v_b);
54211 
54212   /* "yt/utilities/lib/geometry_utils.pxd":38
54213  *     cdef np.int64_t c, ndx
54214  *     c = a ^ b
54215  *     ndx = 0             # <<<<<<<<<<<<<<
54216  *     while (0 < c):
54217  *         c = (c >> 1)
54218  */
54219   __pyx_v_ndx = 0;
54220 
54221   /* "yt/utilities/lib/geometry_utils.pxd":39
54222  *     c = a ^ b
54223  *     ndx = 0
54224  *     while (0 < c):             # <<<<<<<<<<<<<<
54225  *         c = (c >> 1)
54226  *         ndx+=1
54227  */
54228   while (1) {
54229     __pyx_t_1 = ((0 < __pyx_v_c) != 0);
54230     if (!__pyx_t_1) break;
54231 
54232     /* "yt/utilities/lib/geometry_utils.pxd":40
54233  *     ndx = 0
54234  *     while (0 < c):
54235  *         c = (c >> 1)             # <<<<<<<<<<<<<<
54236  *         ndx+=1
54237  *     return ndx
54238  */
54239     __pyx_v_c = (__pyx_v_c >> 1);
54240 
54241     /* "yt/utilities/lib/geometry_utils.pxd":41
54242  *     while (0 < c):
54243  *         c = (c >> 1)
54244  *         ndx+=1             # <<<<<<<<<<<<<<
54245  *     return ndx
54246  *
54247  */
54248     __pyx_v_ndx = (__pyx_v_ndx + 1);
54249   }
54250 
54251   /* "yt/utilities/lib/geometry_utils.pxd":42
54252  *         c = (c >> 1)
54253  *         ndx+=1
54254  *     return ndx             # <<<<<<<<<<<<<<
54255  *
54256  * @cython.cdivision(True)
54257  */
54258   __pyx_r = __pyx_v_ndx;
54259   goto __pyx_L0;
54260 
54261   /* "yt/utilities/lib/geometry_utils.pxd":34
54262  * @cython.boundscheck(False)
54263  * @cython.wraparound(False)
54264  * cdef inline np.int64_t msdb(np.int64_t a, np.int64_t b):             # <<<<<<<<<<<<<<
54265  *     """Get the most significant differing bit between a and b."""
54266  *     cdef np.int64_t c, ndx
54267  */
54268 
54269   /* function exit code */
54270   __pyx_L0:;
54271   __Pyx_RefNannyFinishContext();
54272   return __pyx_r;
54273 }
54274 
54275 /* "yt/utilities/lib/geometry_utils.pxd":47
54276  * @cython.boundscheck(False)
54277  * @cython.wraparound(False)
54278  * cdef inline np.int64_t xor_msb(np.float64_t a, np.float64_t b):             # <<<<<<<<<<<<<<
54279  *     """Get the exponent of the highest differing bit between a and b"""
54280  *     # Get mantissa and exponents for each number
54281  */
54282 
54283 static CYTHON_INLINE __pyx_t_5numpy_int64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_xor_msb(__pyx_t_5numpy_float64_t __pyx_v_a, __pyx_t_5numpy_float64_t __pyx_v_b) {
54284   __pyx_t_5numpy_int64_t __pyx_v_a_m;
54285   __pyx_t_5numpy_int64_t __pyx_v_a_e;
54286   __pyx_t_5numpy_int64_t __pyx_v_b_m;
54287   __pyx_t_5numpy_int64_t __pyx_v_b_e;
54288   __pyx_t_5numpy_int64_t __pyx_v_x;
54289   __pyx_t_5numpy_int64_t __pyx_v_y;
54290   __pyx_t_5numpy_int64_t __pyx_v_z;
54291   __pyx_t_5numpy_int64_t __pyx_r;
54292   __Pyx_RefNannyDeclarations
54293   int __pyx_t_1;
54294   __Pyx_RefNannySetupContext("xor_msb", 0);
54295 
54296   /* "yt/utilities/lib/geometry_utils.pxd":51
54297  *     # Get mantissa and exponents for each number
54298  *     cdef np.int64_t a_m, a_e, b_m, b_e, x, y, z
54299  *     b_e = 0             # <<<<<<<<<<<<<<
54300  *     a_e = 0
54301  *     a_m = ifrexp(a,&a_e)
54302  */
54303   __pyx_v_b_e = 0;
54304 
54305   /* "yt/utilities/lib/geometry_utils.pxd":52
54306  *     cdef np.int64_t a_m, a_e, b_m, b_e, x, y, z
54307  *     b_e = 0
54308  *     a_e = 0             # <<<<<<<<<<<<<<
54309  *     a_m = ifrexp(a,&a_e)
54310  *     b_m = ifrexp(b,&b_e)
54311  */
54312   __pyx_v_a_e = 0;
54313 
54314   /* "yt/utilities/lib/geometry_utils.pxd":53
54315  *     b_e = 0
54316  *     a_e = 0
54317  *     a_m = ifrexp(a,&a_e)             # <<<<<<<<<<<<<<
54318  *     b_m = ifrexp(b,&b_e)
54319  *     x = <np.int64_t> ((a_e+1)*DBL_MANT_DIG)
54320  */
54321   __pyx_v_a_m = __pyx_f_2yt_9utilities_3lib_14geometry_utils_ifrexp(__pyx_v_a, (&__pyx_v_a_e));
54322 
54323   /* "yt/utilities/lib/geometry_utils.pxd":54
54324  *     a_e = 0
54325  *     a_m = ifrexp(a,&a_e)
54326  *     b_m = ifrexp(b,&b_e)             # <<<<<<<<<<<<<<
54327  *     x = <np.int64_t> ((a_e+1)*DBL_MANT_DIG)
54328  *     y = <np.int64_t> ((b_e+1)*DBL_MANT_DIG)
54329  */
54330   __pyx_v_b_m = __pyx_f_2yt_9utilities_3lib_14geometry_utils_ifrexp(__pyx_v_b, (&__pyx_v_b_e));
54331 
54332   /* "yt/utilities/lib/geometry_utils.pxd":55
54333  *     a_m = ifrexp(a,&a_e)
54334  *     b_m = ifrexp(b,&b_e)
54335  *     x = <np.int64_t> ((a_e+1)*DBL_MANT_DIG)             # <<<<<<<<<<<<<<
54336  *     y = <np.int64_t> ((b_e+1)*DBL_MANT_DIG)
54337  *     # Compare mantissa if exponents equal
54338  */
54339   __pyx_v_x = ((__pyx_t_5numpy_int64_t)((__pyx_v_a_e + 1) * DBL_MANT_DIG));
54340 
54341   /* "yt/utilities/lib/geometry_utils.pxd":56
54342  *     b_m = ifrexp(b,&b_e)
54343  *     x = <np.int64_t> ((a_e+1)*DBL_MANT_DIG)
54344  *     y = <np.int64_t> ((b_e+1)*DBL_MANT_DIG)             # <<<<<<<<<<<<<<
54345  *     # Compare mantissa if exponents equal
54346  *     if x == y:
54347  */
54348   __pyx_v_y = ((__pyx_t_5numpy_int64_t)((__pyx_v_b_e + 1) * DBL_MANT_DIG));
54349 
54350   /* "yt/utilities/lib/geometry_utils.pxd":58
54351  *     y = <np.int64_t> ((b_e+1)*DBL_MANT_DIG)
54352  *     # Compare mantissa if exponents equal
54353  *     if x == y:             # <<<<<<<<<<<<<<
54354  *         if a_m == b_m: return 0
54355  *         z = msdb(a_m,b_m)
54356  */
54357   __pyx_t_1 = ((__pyx_v_x == __pyx_v_y) != 0);
54358   if (__pyx_t_1) {
54359 
54360     /* "yt/utilities/lib/geometry_utils.pxd":59
54361  *     # Compare mantissa if exponents equal
54362  *     if x == y:
54363  *         if a_m == b_m: return 0             # <<<<<<<<<<<<<<
54364  *         z = msdb(a_m,b_m)
54365  *         #if 1: return z
54366  */
54367     __pyx_t_1 = ((__pyx_v_a_m == __pyx_v_b_m) != 0);
54368     if (__pyx_t_1) {
54369       __pyx_r = 0;
54370       goto __pyx_L0;
54371     }
54372 
54373     /* "yt/utilities/lib/geometry_utils.pxd":60
54374  *     if x == y:
54375  *         if a_m == b_m: return 0
54376  *         z = msdb(a_m,b_m)             # <<<<<<<<<<<<<<
54377  *         #if 1: return z
54378  *         x = x - z
54379  */
54380     __pyx_v_z = __pyx_f_2yt_9utilities_3lib_14geometry_utils_msdb(__pyx_v_a_m, __pyx_v_b_m);
54381 
54382     /* "yt/utilities/lib/geometry_utils.pxd":62
54383  *         z = msdb(a_m,b_m)
54384  *         #if 1: return z
54385  *         x = x - z             # <<<<<<<<<<<<<<
54386  *         return x-1 # required so that xor_msb(0.0,1.0)!=xor_msb(1.0,1.0)
54387  *     # Otherwise return largest exponent
54388  */
54389     __pyx_v_x = (__pyx_v_x - __pyx_v_z);
54390 
54391     /* "yt/utilities/lib/geometry_utils.pxd":63
54392  *         #if 1: return z
54393  *         x = x - z
54394  *         return x-1 # required so that xor_msb(0.0,1.0)!=xor_msb(1.0,1.0)             # <<<<<<<<<<<<<<
54395  *     # Otherwise return largest exponent
54396  *     if y < x:
54397  */
54398     __pyx_r = (__pyx_v_x - 1);
54399     goto __pyx_L0;
54400 
54401     /* "yt/utilities/lib/geometry_utils.pxd":58
54402  *     y = <np.int64_t> ((b_e+1)*DBL_MANT_DIG)
54403  *     # Compare mantissa if exponents equal
54404  *     if x == y:             # <<<<<<<<<<<<<<
54405  *         if a_m == b_m: return 0
54406  *         z = msdb(a_m,b_m)
54407  */
54408   }
54409 
54410   /* "yt/utilities/lib/geometry_utils.pxd":65
54411  *         return x-1 # required so that xor_msb(0.0,1.0)!=xor_msb(1.0,1.0)
54412  *     # Otherwise return largest exponent
54413  *     if y < x:             # <<<<<<<<<<<<<<
54414  *         return x
54415  *     else:
54416  */
54417   __pyx_t_1 = ((__pyx_v_y < __pyx_v_x) != 0);
54418   if (__pyx_t_1) {
54419 
54420     /* "yt/utilities/lib/geometry_utils.pxd":66
54421  *     # Otherwise return largest exponent
54422  *     if y < x:
54423  *         return x             # <<<<<<<<<<<<<<
54424  *     else:
54425  *         return y
54426  */
54427     __pyx_r = __pyx_v_x;
54428     goto __pyx_L0;
54429 
54430     /* "yt/utilities/lib/geometry_utils.pxd":65
54431  *         return x-1 # required so that xor_msb(0.0,1.0)!=xor_msb(1.0,1.0)
54432  *     # Otherwise return largest exponent
54433  *     if y < x:             # <<<<<<<<<<<<<<
54434  *         return x
54435  *     else:
54436  */
54437   }
54438 
54439   /* "yt/utilities/lib/geometry_utils.pxd":68
54440  *         return x
54441  *     else:
54442  *         return y             # <<<<<<<<<<<<<<
54443  *
54444  * @cython.cdivision(True)
54445  */
54446   /*else*/ {
54447     __pyx_r = __pyx_v_y;
54448     goto __pyx_L0;
54449   }
54450 
54451   /* "yt/utilities/lib/geometry_utils.pxd":47
54452  * @cython.boundscheck(False)
54453  * @cython.wraparound(False)
54454  * cdef inline np.int64_t xor_msb(np.float64_t a, np.float64_t b):             # <<<<<<<<<<<<<<
54455  *     """Get the exponent of the highest differing bit between a and b"""
54456  *     # Get mantissa and exponents for each number
54457  */
54458 
54459   /* function exit code */
54460   __pyx_L0:;
54461   __Pyx_RefNannyFinishContext();
54462   return __pyx_r;
54463 }
54464 
54465 /* "yt/utilities/lib/geometry_utils.pxd":73
54466  * @cython.boundscheck(False)
54467  * @cython.wraparound(False)
54468  * cdef inline int compare_floats_morton(np.float64_t p[3], np.float64_t q[3]):             # <<<<<<<<<<<<<<
54469  *     cdef int j, out, dim
54470  *     cdef np.int64_t x, y
54471  */
54472 
54473 static CYTHON_INLINE int __pyx_f_2yt_9utilities_3lib_14geometry_utils_compare_floats_morton(__pyx_t_5numpy_float64_t *__pyx_v_p, __pyx_t_5numpy_float64_t *__pyx_v_q) {
54474   int __pyx_v_j;
54475   int __pyx_v_out;
54476   int __pyx_v_dim;
54477   __pyx_t_5numpy_int64_t __pyx_v_x;
54478   __pyx_t_5numpy_int64_t __pyx_v_y;
54479   int __pyx_r;
54480   __Pyx_RefNannyDeclarations
54481   int __pyx_t_1;
54482   int __pyx_t_2;
54483   __Pyx_RefNannySetupContext("compare_floats_morton", 0);
54484 
54485   /* "yt/utilities/lib/geometry_utils.pxd":76
54486  *     cdef int j, out, dim
54487  *     cdef np.int64_t x, y
54488  *     x = -9999999999             # <<<<<<<<<<<<<<
54489  *     y = 0
54490  *     dim = 0
54491  */
54492   __pyx_v_x = -9999999999LL;
54493 
54494   /* "yt/utilities/lib/geometry_utils.pxd":77
54495  *     cdef np.int64_t x, y
54496  *     x = -9999999999
54497  *     y = 0             # <<<<<<<<<<<<<<
54498  *     dim = 0
54499  *     for j in range(3):#[::-1]:
54500  */
54501   __pyx_v_y = 0;
54502 
54503   /* "yt/utilities/lib/geometry_utils.pxd":78
54504  *     x = -9999999999
54505  *     y = 0
54506  *     dim = 0             # <<<<<<<<<<<<<<
54507  *     for j in range(3):#[::-1]:
54508  *         y = xor_msb(p[j],q[j])
54509  */
54510   __pyx_v_dim = 0;
54511 
54512   /* "yt/utilities/lib/geometry_utils.pxd":79
54513  *     y = 0
54514  *     dim = 0
54515  *     for j in range(3):#[::-1]:             # <<<<<<<<<<<<<<
54516  *         y = xor_msb(p[j],q[j])
54517  *         if x < y:
54518  */
54519   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
54520     __pyx_v_j = __pyx_t_1;
54521 
54522     /* "yt/utilities/lib/geometry_utils.pxd":80
54523  *     dim = 0
54524  *     for j in range(3):#[::-1]:
54525  *         y = xor_msb(p[j],q[j])             # <<<<<<<<<<<<<<
54526  *         if x < y:
54527  *            x = y
54528  */
54529     __pyx_v_y = __pyx_f_2yt_9utilities_3lib_14geometry_utils_xor_msb((__pyx_v_p[__pyx_v_j]), (__pyx_v_q[__pyx_v_j]));
54530 
54531     /* "yt/utilities/lib/geometry_utils.pxd":81
54532  *     for j in range(3):#[::-1]:
54533  *         y = xor_msb(p[j],q[j])
54534  *         if x < y:             # <<<<<<<<<<<<<<
54535  *            x = y
54536  *            dim = j
54537  */
54538     __pyx_t_2 = ((__pyx_v_x < __pyx_v_y) != 0);
54539     if (__pyx_t_2) {
54540 
54541       /* "yt/utilities/lib/geometry_utils.pxd":82
54542  *         y = xor_msb(p[j],q[j])
54543  *         if x < y:
54544  *            x = y             # <<<<<<<<<<<<<<
54545  *            dim = j
54546  *     if p[dim] < q[dim]:
54547  */
54548       __pyx_v_x = __pyx_v_y;
54549 
54550       /* "yt/utilities/lib/geometry_utils.pxd":83
54551  *         if x < y:
54552  *            x = y
54553  *            dim = j             # <<<<<<<<<<<<<<
54554  *     if p[dim] < q[dim]:
54555  *         out = 1
54556  */
54557       __pyx_v_dim = __pyx_v_j;
54558 
54559       /* "yt/utilities/lib/geometry_utils.pxd":81
54560  *     for j in range(3):#[::-1]:
54561  *         y = xor_msb(p[j],q[j])
54562  *         if x < y:             # <<<<<<<<<<<<<<
54563  *            x = y
54564  *            dim = j
54565  */
54566     }
54567   }
54568 
54569   /* "yt/utilities/lib/geometry_utils.pxd":84
54570  *            x = y
54571  *            dim = j
54572  *     if p[dim] < q[dim]:             # <<<<<<<<<<<<<<
54573  *         out = 1
54574  *     else:
54575  */
54576   __pyx_t_2 = (((__pyx_v_p[__pyx_v_dim]) < (__pyx_v_q[__pyx_v_dim])) != 0);
54577   if (__pyx_t_2) {
54578 
54579     /* "yt/utilities/lib/geometry_utils.pxd":85
54580  *            dim = j
54581  *     if p[dim] < q[dim]:
54582  *         out = 1             # <<<<<<<<<<<<<<
54583  *     else:
54584  *         out = 0
54585  */
54586     __pyx_v_out = 1;
54587 
54588     /* "yt/utilities/lib/geometry_utils.pxd":84
54589  *            x = y
54590  *            dim = j
54591  *     if p[dim] < q[dim]:             # <<<<<<<<<<<<<<
54592  *         out = 1
54593  *     else:
54594  */
54595     goto __pyx_L6;
54596   }
54597 
54598   /* "yt/utilities/lib/geometry_utils.pxd":87
54599  *         out = 1
54600  *     else:
54601  *         out = 0             # <<<<<<<<<<<<<<
54602  *     return out
54603  *
54604  */
54605   /*else*/ {
54606     __pyx_v_out = 0;
54607   }
54608   __pyx_L6:;
54609 
54610   /* "yt/utilities/lib/geometry_utils.pxd":88
54611  *     else:
54612  *         out = 0
54613  *     return out             # <<<<<<<<<<<<<<
54614  *
54615  * @cython.cdivision(True)
54616  */
54617   __pyx_r = __pyx_v_out;
54618   goto __pyx_L0;
54619 
54620   /* "yt/utilities/lib/geometry_utils.pxd":73
54621  * @cython.boundscheck(False)
54622  * @cython.wraparound(False)
54623  * cdef inline int compare_floats_morton(np.float64_t p[3], np.float64_t q[3]):             # <<<<<<<<<<<<<<
54624  *     cdef int j, out, dim
54625  *     cdef np.int64_t x, y
54626  */
54627 
54628   /* function exit code */
54629   __pyx_L0:;
54630   __Pyx_RefNannyFinishContext();
54631   return __pyx_r;
54632 }
54633 
54634 /* "yt/utilities/lib/geometry_utils.pxd":93
54635  * @cython.boundscheck(False)
54636  * @cython.wraparound(False)
54637  * cdef inline np.float64_t euclidean_distance(np.float64_t[:] p, np.float64_t[:] q):             # <<<<<<<<<<<<<<
54638  *     cdef int j
54639  *     cdef np.float64_t d
54640  */
54641 
54642 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_euclidean_distance(__Pyx_memviewslice __pyx_v_p, __Pyx_memviewslice __pyx_v_q) {
54643   int __pyx_v_j;
54644   __pyx_t_5numpy_float64_t __pyx_v_d;
54645   __pyx_t_5numpy_float64_t __pyx_r;
54646   __Pyx_RefNannyDeclarations
54647   int __pyx_t_1;
54648   Py_ssize_t __pyx_t_2;
54649   int __pyx_t_3;
54650   Py_ssize_t __pyx_t_4;
54651   __Pyx_RefNannySetupContext("euclidean_distance", 0);
54652 
54653   /* "yt/utilities/lib/geometry_utils.pxd":96
54654  *     cdef int j
54655  *     cdef np.float64_t d
54656  *     d = 0.0             # <<<<<<<<<<<<<<
54657  *     for j in range(3):
54658  *         d+=(p[j]-q[j])**2
54659  */
54660   __pyx_v_d = 0.0;
54661 
54662   /* "yt/utilities/lib/geometry_utils.pxd":97
54663  *     cdef np.float64_t d
54664  *     d = 0.0
54665  *     for j in range(3):             # <<<<<<<<<<<<<<
54666  *         d+=(p[j]-q[j])**2
54667  *     return sqrt(d)
54668  */
54669   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
54670     __pyx_v_j = __pyx_t_1;
54671 
54672     /* "yt/utilities/lib/geometry_utils.pxd":98
54673  *     d = 0.0
54674  *     for j in range(3):
54675  *         d+=(p[j]-q[j])**2             # <<<<<<<<<<<<<<
54676  *     return sqrt(d)
54677  *
54678  */
54679     __pyx_t_2 = __pyx_v_j;
54680     __pyx_t_3 = -1;
54681     if (__pyx_t_2 < 0) {
54682       __pyx_t_2 += __pyx_v_p.shape[0];
54683       if (unlikely(__pyx_t_2 < 0)) __pyx_t_3 = 0;
54684     } else if (unlikely(__pyx_t_2 >= __pyx_v_p.shape[0])) __pyx_t_3 = 0;
54685     if (unlikely(__pyx_t_3 != -1)) {
54686       __Pyx_RaiseBufferIndexError(__pyx_t_3);
54687       __PYX_ERR(24, 98, __pyx_L1_error)
54688     }
54689     __pyx_t_4 = __pyx_v_j;
54690     __pyx_t_3 = -1;
54691     if (__pyx_t_4 < 0) {
54692       __pyx_t_4 += __pyx_v_q.shape[0];
54693       if (unlikely(__pyx_t_4 < 0)) __pyx_t_3 = 0;
54694     } else if (unlikely(__pyx_t_4 >= __pyx_v_q.shape[0])) __pyx_t_3 = 0;
54695     if (unlikely(__pyx_t_3 != -1)) {
54696       __Pyx_RaiseBufferIndexError(__pyx_t_3);
54697       __PYX_ERR(24, 98, __pyx_L1_error)
54698     }
54699     __pyx_v_d = (__pyx_v_d + pow(((*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_p.data + __pyx_t_2 * __pyx_v_p.strides[0]) ))) - (*((__pyx_t_5numpy_float64_t *) ( /* dim=0 */ (__pyx_v_q.data + __pyx_t_4 * __pyx_v_q.strides[0]) )))), 2.0));
54700   }
54701 
54702   /* "yt/utilities/lib/geometry_utils.pxd":99
54703  *     for j in range(3):
54704  *         d+=(p[j]-q[j])**2
54705  *     return sqrt(d)             # <<<<<<<<<<<<<<
54706  *
54707  * # Todo: allow radius reported independently in each dimension for rectangular domain
54708  */
54709   __pyx_r = sqrt(__pyx_v_d);
54710   goto __pyx_L0;
54711 
54712   /* "yt/utilities/lib/geometry_utils.pxd":93
54713  * @cython.boundscheck(False)
54714  * @cython.wraparound(False)
54715  * cdef inline np.float64_t euclidean_distance(np.float64_t[:] p, np.float64_t[:] q):             # <<<<<<<<<<<<<<
54716  *     cdef int j
54717  *     cdef np.float64_t d
54718  */
54719 
54720   /* function exit code */
54721   __pyx_L1_error:;
54722   __Pyx_WriteUnraisable("yt.utilities.lib.geometry_utils.euclidean_distance", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
54723   __pyx_r = 0;
54724   __pyx_L0:;
54725   __Pyx_RefNannyFinishContext();
54726   return __pyx_r;
54727 }
54728 
54729 /* "yt/utilities/lib/geometry_utils.pxd":105
54730  * @cython.boundscheck(False)
54731  * @cython.wraparound(False)
54732  * cdef inline np.float64_t smallest_quadtree_box(np.float64_t p[3], np.float64_t q[3], np.int32_t order,             # <<<<<<<<<<<<<<
54733  *                                                np.float64_t DLE[3], np.float64_t DRE[3],
54734  *                                                np.float64_t *cx, np.float64_t *cy, np.float64_t *cz):
54735  */
54736 
54737 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_smallest_quadtree_box(__pyx_t_5numpy_float64_t *__pyx_v_p, __pyx_t_5numpy_float64_t *__pyx_v_q, __pyx_t_5numpy_int32_t __pyx_v_order, __pyx_t_5numpy_float64_t *__pyx_v_DLE, __pyx_t_5numpy_float64_t *__pyx_v_DRE, __pyx_t_5numpy_float64_t *__pyx_v_cx, __pyx_t_5numpy_float64_t *__pyx_v_cy, __pyx_t_5numpy_float64_t *__pyx_v_cz) {
54738   int __pyx_v_j;
54739   __pyx_t_5numpy_float64_t __pyx_v_c[3];
54740   __pyx_t_5numpy_uint64_t __pyx_v_pidx[3];
54741   __pyx_t_5numpy_uint64_t __pyx_v_pidx_next[3];
54742   __pyx_t_5numpy_uint64_t __pyx_v_qidx_next[3];
54743   __pyx_t_5numpy_float64_t __pyx_v_dds[3];
54744   __pyx_t_5numpy_float64_t __pyx_v_rad;
54745   int __pyx_v_lvl;
54746   int __pyx_v_done;
54747   __pyx_t_5numpy_float64_t __pyx_r;
54748   __Pyx_RefNannyDeclarations
54749   int __pyx_t_1;
54750   int __pyx_t_2;
54751   __Pyx_RefNannySetupContext("smallest_quadtree_box", 0);
54752 
54753   /* "yt/utilities/lib/geometry_utils.pxd":112
54754  *     cdef np.uint64_t pidx[3]
54755  *     # cdef np.uint64_t qidx[3]
54756  *     for j in range(3):             # <<<<<<<<<<<<<<
54757  *         pidx[j] = 0
54758  *         # qidx[j] = 0
54759  */
54760   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
54761     __pyx_v_j = __pyx_t_1;
54762 
54763     /* "yt/utilities/lib/geometry_utils.pxd":113
54764  *     # cdef np.uint64_t qidx[3]
54765  *     for j in range(3):
54766  *         pidx[j] = 0             # <<<<<<<<<<<<<<
54767  *         # qidx[j] = 0
54768  *     cdef np.uint64_t pidx_next[3]
54769  */
54770     (__pyx_v_pidx[__pyx_v_j]) = 0;
54771   }
54772 
54773   /* "yt/utilities/lib/geometry_utils.pxd":119
54774  *     cdef np.float64_t dds[3]
54775  *     cdef np.float64_t rad
54776  *     cdef int lvl = 0             # <<<<<<<<<<<<<<
54777  *     cdef int done = 0
54778  *     while not done:
54779  */
54780   __pyx_v_lvl = 0;
54781 
54782   /* "yt/utilities/lib/geometry_utils.pxd":120
54783  *     cdef np.float64_t rad
54784  *     cdef int lvl = 0
54785  *     cdef int done = 0             # <<<<<<<<<<<<<<
54786  *     while not done:
54787  *         if (lvl+1 >= order):
54788  */
54789   __pyx_v_done = 0;
54790 
54791   /* "yt/utilities/lib/geometry_utils.pxd":121
54792  *     cdef int lvl = 0
54793  *     cdef int done = 0
54794  *     while not done:             # <<<<<<<<<<<<<<
54795  *         if (lvl+1 >= order):
54796  *             done = 1
54797  */
54798   while (1) {
54799     __pyx_t_2 = ((!(__pyx_v_done != 0)) != 0);
54800     if (!__pyx_t_2) break;
54801 
54802     /* "yt/utilities/lib/geometry_utils.pxd":122
54803  *     cdef int done = 0
54804  *     while not done:
54805  *         if (lvl+1 >= order):             # <<<<<<<<<<<<<<
54806  *             done = 1
54807  *         for j in range(3):
54808  */
54809     __pyx_t_2 = (((__pyx_v_lvl + 1) >= __pyx_v_order) != 0);
54810     if (__pyx_t_2) {
54811 
54812       /* "yt/utilities/lib/geometry_utils.pxd":123
54813  *     while not done:
54814  *         if (lvl+1 >= order):
54815  *             done = 1             # <<<<<<<<<<<<<<
54816  *         for j in range(3):
54817  *             dds[j] = (DRE[j] - DLE[j])/(1 << (<int> lvl+1))
54818  */
54819       __pyx_v_done = 1;
54820 
54821       /* "yt/utilities/lib/geometry_utils.pxd":122
54822  *     cdef int done = 0
54823  *     while not done:
54824  *         if (lvl+1 >= order):             # <<<<<<<<<<<<<<
54825  *             done = 1
54826  *         for j in range(3):
54827  */
54828     }
54829 
54830     /* "yt/utilities/lib/geometry_utils.pxd":124
54831  *         if (lvl+1 >= order):
54832  *             done = 1
54833  *         for j in range(3):             # <<<<<<<<<<<<<<
54834  *             dds[j] = (DRE[j] - DLE[j])/(1 << (<int> lvl+1))
54835  *             pidx_next[j] = <np.uint64_t>((p[j] - DLE[j])/dds[j])
54836  */
54837     for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
54838       __pyx_v_j = __pyx_t_1;
54839 
54840       /* "yt/utilities/lib/geometry_utils.pxd":125
54841  *             done = 1
54842  *         for j in range(3):
54843  *             dds[j] = (DRE[j] - DLE[j])/(1 << (<int> lvl+1))             # <<<<<<<<<<<<<<
54844  *             pidx_next[j] = <np.uint64_t>((p[j] - DLE[j])/dds[j])
54845  *             qidx_next[j] = <np.uint64_t>((q[j] - DLE[j])/dds[j])
54846  */
54847       (__pyx_v_dds[__pyx_v_j]) = (((__pyx_v_DRE[__pyx_v_j]) - (__pyx_v_DLE[__pyx_v_j])) / (1 << (((int)__pyx_v_lvl) + 1)));
54848 
54849       /* "yt/utilities/lib/geometry_utils.pxd":126
54850  *         for j in range(3):
54851  *             dds[j] = (DRE[j] - DLE[j])/(1 << (<int> lvl+1))
54852  *             pidx_next[j] = <np.uint64_t>((p[j] - DLE[j])/dds[j])             # <<<<<<<<<<<<<<
54853  *             qidx_next[j] = <np.uint64_t>((q[j] - DLE[j])/dds[j])
54854  *         for j in range(3):
54855  */
54856       (__pyx_v_pidx_next[__pyx_v_j]) = ((__pyx_t_5numpy_uint64_t)(((__pyx_v_p[__pyx_v_j]) - (__pyx_v_DLE[__pyx_v_j])) / (__pyx_v_dds[__pyx_v_j])));
54857 
54858       /* "yt/utilities/lib/geometry_utils.pxd":127
54859  *             dds[j] = (DRE[j] - DLE[j])/(1 << (<int> lvl+1))
54860  *             pidx_next[j] = <np.uint64_t>((p[j] - DLE[j])/dds[j])
54861  *             qidx_next[j] = <np.uint64_t>((q[j] - DLE[j])/dds[j])             # <<<<<<<<<<<<<<
54862  *         for j in range(3):
54863  *             if pidx_next[j]!=qidx_next[j]:
54864  */
54865       (__pyx_v_qidx_next[__pyx_v_j]) = ((__pyx_t_5numpy_uint64_t)(((__pyx_v_q[__pyx_v_j]) - (__pyx_v_DLE[__pyx_v_j])) / (__pyx_v_dds[__pyx_v_j])));
54866     }
54867 
54868     /* "yt/utilities/lib/geometry_utils.pxd":128
54869  *             pidx_next[j] = <np.uint64_t>((p[j] - DLE[j])/dds[j])
54870  *             qidx_next[j] = <np.uint64_t>((q[j] - DLE[j])/dds[j])
54871  *         for j in range(3):             # <<<<<<<<<<<<<<
54872  *             if pidx_next[j]!=qidx_next[j]:
54873  *                 done = 1
54874  */
54875     for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
54876       __pyx_v_j = __pyx_t_1;
54877 
54878       /* "yt/utilities/lib/geometry_utils.pxd":129
54879  *             qidx_next[j] = <np.uint64_t>((q[j] - DLE[j])/dds[j])
54880  *         for j in range(3):
54881  *             if pidx_next[j]!=qidx_next[j]:             # <<<<<<<<<<<<<<
54882  *                 done = 1
54883  *                 break
54884  */
54885       __pyx_t_2 = (((__pyx_v_pidx_next[__pyx_v_j]) != (__pyx_v_qidx_next[__pyx_v_j])) != 0);
54886       if (__pyx_t_2) {
54887 
54888         /* "yt/utilities/lib/geometry_utils.pxd":130
54889  *         for j in range(3):
54890  *             if pidx_next[j]!=qidx_next[j]:
54891  *                 done = 1             # <<<<<<<<<<<<<<
54892  *                 break
54893  *         if not done:
54894  */
54895         __pyx_v_done = 1;
54896 
54897         /* "yt/utilities/lib/geometry_utils.pxd":131
54898  *             if pidx_next[j]!=qidx_next[j]:
54899  *                 done = 1
54900  *                 break             # <<<<<<<<<<<<<<
54901  *         if not done:
54902  *             for j in range(3):
54903  */
54904         goto __pyx_L11_break;
54905 
54906         /* "yt/utilities/lib/geometry_utils.pxd":129
54907  *             qidx_next[j] = <np.uint64_t>((q[j] - DLE[j])/dds[j])
54908  *         for j in range(3):
54909  *             if pidx_next[j]!=qidx_next[j]:             # <<<<<<<<<<<<<<
54910  *                 done = 1
54911  *                 break
54912  */
54913       }
54914     }
54915     __pyx_L11_break:;
54916 
54917     /* "yt/utilities/lib/geometry_utils.pxd":132
54918  *                 done = 1
54919  *                 break
54920  *         if not done:             # <<<<<<<<<<<<<<
54921  *             for j in range(3):
54922  *                 pidx[j] = pidx_next[j]
54923  */
54924     __pyx_t_2 = ((!(__pyx_v_done != 0)) != 0);
54925     if (__pyx_t_2) {
54926 
54927       /* "yt/utilities/lib/geometry_utils.pxd":133
54928  *                 break
54929  *         if not done:
54930  *             for j in range(3):             # <<<<<<<<<<<<<<
54931  *                 pidx[j] = pidx_next[j]
54932  *                 # qidx[j] = qidx_next[j]
54933  */
54934       for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
54935         __pyx_v_j = __pyx_t_1;
54936 
54937         /* "yt/utilities/lib/geometry_utils.pxd":134
54938  *         if not done:
54939  *             for j in range(3):
54940  *                 pidx[j] = pidx_next[j]             # <<<<<<<<<<<<<<
54941  *                 # qidx[j] = qidx_next[j]
54942  *             lvl+=1
54943  */
54944         (__pyx_v_pidx[__pyx_v_j]) = (__pyx_v_pidx_next[__pyx_v_j]);
54945       }
54946 
54947       /* "yt/utilities/lib/geometry_utils.pxd":136
54948  *                 pidx[j] = pidx_next[j]
54949  *                 # qidx[j] = qidx_next[j]
54950  *             lvl+=1             # <<<<<<<<<<<<<<
54951  *     rad = 0.0
54952  *     for j in range(3):
54953  */
54954       __pyx_v_lvl = (__pyx_v_lvl + 1);
54955 
54956       /* "yt/utilities/lib/geometry_utils.pxd":132
54957  *                 done = 1
54958  *                 break
54959  *         if not done:             # <<<<<<<<<<<<<<
54960  *             for j in range(3):
54961  *                 pidx[j] = pidx_next[j]
54962  */
54963     }
54964   }
54965 
54966   /* "yt/utilities/lib/geometry_utils.pxd":137
54967  *                 # qidx[j] = qidx_next[j]
54968  *             lvl+=1
54969  *     rad = 0.0             # <<<<<<<<<<<<<<
54970  *     for j in range(3):
54971  *         dds[j] = (DRE[j] - DLE[j])/(1 << lvl)
54972  */
54973   __pyx_v_rad = 0.0;
54974 
54975   /* "yt/utilities/lib/geometry_utils.pxd":138
54976  *             lvl+=1
54977  *     rad = 0.0
54978  *     for j in range(3):             # <<<<<<<<<<<<<<
54979  *         dds[j] = (DRE[j] - DLE[j])/(1 << lvl)
54980  *         c[j] = dds[j]*(<np.float64_t>pidx[j]+0.5)
54981  */
54982   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
54983     __pyx_v_j = __pyx_t_1;
54984 
54985     /* "yt/utilities/lib/geometry_utils.pxd":139
54986  *     rad = 0.0
54987  *     for j in range(3):
54988  *         dds[j] = (DRE[j] - DLE[j])/(1 << lvl)             # <<<<<<<<<<<<<<
54989  *         c[j] = dds[j]*(<np.float64_t>pidx[j]+0.5)
54990  *         rad+=((dds[j]/2.0)**2)
54991  */
54992     (__pyx_v_dds[__pyx_v_j]) = (((__pyx_v_DRE[__pyx_v_j]) - (__pyx_v_DLE[__pyx_v_j])) / (1 << __pyx_v_lvl));
54993 
54994     /* "yt/utilities/lib/geometry_utils.pxd":140
54995  *     for j in range(3):
54996  *         dds[j] = (DRE[j] - DLE[j])/(1 << lvl)
54997  *         c[j] = dds[j]*(<np.float64_t>pidx[j]+0.5)             # <<<<<<<<<<<<<<
54998  *         rad+=((dds[j]/2.0)**2)
54999  *     cx[0] = c[0]
55000  */
55001     (__pyx_v_c[__pyx_v_j]) = ((__pyx_v_dds[__pyx_v_j]) * (((__pyx_t_5numpy_float64_t)(__pyx_v_pidx[__pyx_v_j])) + 0.5));
55002 
55003     /* "yt/utilities/lib/geometry_utils.pxd":141
55004  *         dds[j] = (DRE[j] - DLE[j])/(1 << lvl)
55005  *         c[j] = dds[j]*(<np.float64_t>pidx[j]+0.5)
55006  *         rad+=((dds[j]/2.0)**2)             # <<<<<<<<<<<<<<
55007  *     cx[0] = c[0]
55008  *     cy[0] = c[1]
55009  */
55010     __pyx_v_rad = (__pyx_v_rad + pow(((__pyx_v_dds[__pyx_v_j]) / 2.0), 2.0));
55011   }
55012 
55013   /* "yt/utilities/lib/geometry_utils.pxd":142
55014  *         c[j] = dds[j]*(<np.float64_t>pidx[j]+0.5)
55015  *         rad+=((dds[j]/2.0)**2)
55016  *     cx[0] = c[0]             # <<<<<<<<<<<<<<
55017  *     cy[0] = c[1]
55018  *     cz[0] = c[2]
55019  */
55020   (__pyx_v_cx[0]) = (__pyx_v_c[0]);
55021 
55022   /* "yt/utilities/lib/geometry_utils.pxd":143
55023  *         rad+=((dds[j]/2.0)**2)
55024  *     cx[0] = c[0]
55025  *     cy[0] = c[1]             # <<<<<<<<<<<<<<
55026  *     cz[0] = c[2]
55027  *     return sqrt(rad)
55028  */
55029   (__pyx_v_cy[0]) = (__pyx_v_c[1]);
55030 
55031   /* "yt/utilities/lib/geometry_utils.pxd":144
55032  *     cx[0] = c[0]
55033  *     cy[0] = c[1]
55034  *     cz[0] = c[2]             # <<<<<<<<<<<<<<
55035  *     return sqrt(rad)
55036  *
55037  */
55038   (__pyx_v_cz[0]) = (__pyx_v_c[2]);
55039 
55040   /* "yt/utilities/lib/geometry_utils.pxd":145
55041  *     cy[0] = c[1]
55042  *     cz[0] = c[2]
55043  *     return sqrt(rad)             # <<<<<<<<<<<<<<
55044  *
55045  * #-----------------------------------------------------------------------------
55046  */
55047   __pyx_r = sqrt(__pyx_v_rad);
55048   goto __pyx_L0;
55049 
55050   /* "yt/utilities/lib/geometry_utils.pxd":105
55051  * @cython.boundscheck(False)
55052  * @cython.wraparound(False)
55053  * cdef inline np.float64_t smallest_quadtree_box(np.float64_t p[3], np.float64_t q[3], np.int32_t order,             # <<<<<<<<<<<<<<
55054  *                                                np.float64_t DLE[3], np.float64_t DRE[3],
55055  *                                                np.float64_t *cx, np.float64_t *cy, np.float64_t *cz):
55056  */
55057 
55058   /* function exit code */
55059   __pyx_L0:;
55060   __Pyx_RefNannyFinishContext();
55061   return __pyx_r;
55062 }
55063 
55064 /* "yt/utilities/lib/geometry_utils.pxd":152
55065  * @cython.boundscheck(False)
55066  * @cython.wraparound(False)
55067  * cdef inline np.uint64_t spread_64bits_by3(np.uint64_t x):             # <<<<<<<<<<<<<<
55068  *     x=(x&(<np.uint64_t>0x00000000001FFFFF))
55069  *     x=(x|(x<<20))*(<np.uint64_t>0x000001FFC00003FF)
55070  */
55071 
55072 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_spread_64bits_by3(__pyx_t_5numpy_uint64_t __pyx_v_x) {
55073   __pyx_t_5numpy_uint64_t __pyx_r;
55074   __Pyx_RefNannyDeclarations
55075   __Pyx_RefNannySetupContext("spread_64bits_by3", 0);
55076 
55077   /* "yt/utilities/lib/geometry_utils.pxd":153
55078  * @cython.wraparound(False)
55079  * cdef inline np.uint64_t spread_64bits_by3(np.uint64_t x):
55080  *     x=(x&(<np.uint64_t>0x00000000001FFFFF))             # <<<<<<<<<<<<<<
55081  *     x=(x|(x<<20))*(<np.uint64_t>0x000001FFC00003FF)
55082  *
55083  */
55084   __pyx_v_x = (__pyx_v_x & ((__pyx_t_5numpy_uint64_t)0x00000000001FFFFF));
55085 
55086   /* "yt/utilities/lib/geometry_utils.pxd":154
55087  * cdef inline np.uint64_t spread_64bits_by3(np.uint64_t x):
55088  *     x=(x&(<np.uint64_t>0x00000000001FFFFF))
55089  *     x=(x|(x<<20))*(<np.uint64_t>0x000001FFC00003FF)             # <<<<<<<<<<<<<<
55090  *
55091  * #-----------------------------------------------------------------------------
55092  */
55093   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x << 20)) * ((__pyx_t_5numpy_uint64_t)0x000001FFC00003FF));
55094 
55095   /* "yt/utilities/lib/geometry_utils.pxd":152
55096  * @cython.boundscheck(False)
55097  * @cython.wraparound(False)
55098  * cdef inline np.uint64_t spread_64bits_by3(np.uint64_t x):             # <<<<<<<<<<<<<<
55099  *     x=(x&(<np.uint64_t>0x00000000001FFFFF))
55100  *     x=(x|(x<<20))*(<np.uint64_t>0x000001FFC00003FF)
55101  */
55102 
55103   /* function exit code */
55104   __pyx_r = 0;
55105   __Pyx_RefNannyFinishContext();
55106   return __pyx_r;
55107 }
55108 
55109 /* "yt/utilities/lib/geometry_utils.pxd":161
55110  * @cython.boundscheck(False)
55111  * @cython.wraparound(False)
55112  * cdef inline np.uint64_t spread_64bits_by2(np.uint64_t x):             # <<<<<<<<<<<<<<
55113  *     # This magic comes from http://stackoverflow.com/questions/1024754/how-to-compute-a-3d-morton-number-interleave-the-bits-of-3-ints
55114  *     # Only reversible up to 2097151
55115  */
55116 
55117 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_spread_64bits_by2(__pyx_t_5numpy_uint64_t __pyx_v_x) {
55118   __pyx_t_5numpy_uint64_t __pyx_r;
55119   __Pyx_RefNannyDeclarations
55120   __Pyx_RefNannySetupContext("spread_64bits_by2", 0);
55121 
55122   /* "yt/utilities/lib/geometry_utils.pxd":166
55123  *     # Select highest 21 bits (Required to be reversible to 21st bit)
55124  *     # x = ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---k jihg fedc ba98 7654 3210
55125  *     x=(x&(<np.uint64_t>0x00000000001FFFFF))             # <<<<<<<<<<<<<<
55126  *     # x = ---- ---- ---- ---- ---- ---k jihg fedc ba-- ---- ---- ---- ---- --98 7654 3210
55127  *     x=(x|(x<<20))&(<np.uint64_t>0x000001FFC00003FF)
55128  */
55129   __pyx_v_x = (__pyx_v_x & ((__pyx_t_5numpy_uint64_t)0x00000000001FFFFF));
55130 
55131   /* "yt/utilities/lib/geometry_utils.pxd":168
55132  *     x=(x&(<np.uint64_t>0x00000000001FFFFF))
55133  *     # x = ---- ---- ---- ---- ---- ---k jihg fedc ba-- ---- ---- ---- ---- --98 7654 3210
55134  *     x=(x|(x<<20))&(<np.uint64_t>0x000001FFC00003FF)             # <<<<<<<<<<<<<<
55135  *     # x = ---- ---- ---- -kji hgf- ---- ---- -edc ba-- ---- ---- 9876 5--- ---- ---4 3210
55136  *     x=(x|(x<<10))&(<np.uint64_t>0x0007E007C00F801F)
55137  */
55138   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x << 20)) & ((__pyx_t_5numpy_uint64_t)0x000001FFC00003FF));
55139 
55140   /* "yt/utilities/lib/geometry_utils.pxd":170
55141  *     x=(x|(x<<20))&(<np.uint64_t>0x000001FFC00003FF)
55142  *     # x = ---- ---- ---- -kji hgf- ---- ---- -edc ba-- ---- ---- 9876 5--- ---- ---4 3210
55143  *     x=(x|(x<<10))&(<np.uint64_t>0x0007E007C00F801F)             # <<<<<<<<<<<<<<
55144  *     # x = ---- ---- -kji h--- -gf- ---- -edc ---- ba-- ---- 987- ---6 5--- ---4 32-- --10
55145  *     x=(x|(x<<4))&(<np.uint64_t>0x00786070C0E181C3)
55146  */
55147   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x << 10)) & ((__pyx_t_5numpy_uint64_t)0x0007E007C00F801F));
55148 
55149   /* "yt/utilities/lib/geometry_utils.pxd":172
55150  *     x=(x|(x<<10))&(<np.uint64_t>0x0007E007C00F801F)
55151  *     # x = ---- ---- -kji h--- -gf- ---- -edc ---- ba-- ---- 987- ---6 5--- ---4 32-- --10
55152  *     x=(x|(x<<4))&(<np.uint64_t>0x00786070C0E181C3)             # <<<<<<<<<<<<<<
55153  *     # x = ---- ---k ji-- h--g --f- ---e d--c --b- -a-- --98 --7- -6-- 5--- -43- -2-- 1--0
55154  *     x=(x|(x<<2))&(<np.uint64_t>0x0199219243248649)
55155  */
55156   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x << 4)) & ((__pyx_t_5numpy_uint64_t)0x00786070C0E181C3));
55157 
55158   /* "yt/utilities/lib/geometry_utils.pxd":174
55159  *     x=(x|(x<<4))&(<np.uint64_t>0x00786070C0E181C3)
55160  *     # x = ---- ---k ji-- h--g --f- ---e d--c --b- -a-- --98 --7- -6-- 5--- -43- -2-- 1--0
55161  *     x=(x|(x<<2))&(<np.uint64_t>0x0199219243248649)             # <<<<<<<<<<<<<<
55162  *     # x = ---- -kj- -i-- h--g --f- -e-- d--c --b- -a-- 9--8 --7- -6-- 5--4 --3- -2-- 1--0
55163  *     x=(x|(x<<2))&(<np.uint64_t>0x0649249249249249)
55164  */
55165   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x << 2)) & ((__pyx_t_5numpy_uint64_t)0x0199219243248649));
55166 
55167   /* "yt/utilities/lib/geometry_utils.pxd":176
55168  *     x=(x|(x<<2))&(<np.uint64_t>0x0199219243248649)
55169  *     # x = ---- -kj- -i-- h--g --f- -e-- d--c --b- -a-- 9--8 --7- -6-- 5--4 --3- -2-- 1--0
55170  *     x=(x|(x<<2))&(<np.uint64_t>0x0649249249249249)             # <<<<<<<<<<<<<<
55171  *     # x = ---k --j- -i-- h--g --f- -e-- d--c --b- -a-- 9--8 --7- -6-- 5--4 --3- -2-- 1--0
55172  *     x=(x|(x<<2))&(<np.uint64_t>0x1249249249249249)
55173  */
55174   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x << 2)) & ((__pyx_t_5numpy_uint64_t)0x0649249249249249));
55175 
55176   /* "yt/utilities/lib/geometry_utils.pxd":178
55177  *     x=(x|(x<<2))&(<np.uint64_t>0x0649249249249249)
55178  *     # x = ---k --j- -i-- h--g --f- -e-- d--c --b- -a-- 9--8 --7- -6-- 5--4 --3- -2-- 1--0
55179  *     x=(x|(x<<2))&(<np.uint64_t>0x1249249249249249)             # <<<<<<<<<<<<<<
55180  *     return x
55181  *
55182  */
55183   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x << 2)) & ((__pyx_t_5numpy_uint64_t)0x1249249249249249));
55184 
55185   /* "yt/utilities/lib/geometry_utils.pxd":179
55186  *     # x = ---k --j- -i-- h--g --f- -e-- d--c --b- -a-- 9--8 --7- -6-- 5--4 --3- -2-- 1--0
55187  *     x=(x|(x<<2))&(<np.uint64_t>0x1249249249249249)
55188  *     return x             # <<<<<<<<<<<<<<
55189  *
55190  * @cython.cdivision(True)
55191  */
55192   __pyx_r = __pyx_v_x;
55193   goto __pyx_L0;
55194 
55195   /* "yt/utilities/lib/geometry_utils.pxd":161
55196  * @cython.boundscheck(False)
55197  * @cython.wraparound(False)
55198  * cdef inline np.uint64_t spread_64bits_by2(np.uint64_t x):             # <<<<<<<<<<<<<<
55199  *     # This magic comes from http://stackoverflow.com/questions/1024754/how-to-compute-a-3d-morton-number-interleave-the-bits-of-3-ints
55200  *     # Only reversible up to 2097151
55201  */
55202 
55203   /* function exit code */
55204   __pyx_L0:;
55205   __Pyx_RefNannyFinishContext();
55206   return __pyx_r;
55207 }
55208 
55209 /* "yt/utilities/lib/geometry_utils.pxd":184
55210  * @cython.boundscheck(False)
55211  * @cython.wraparound(False)
55212  * cdef inline np.uint64_t compact_64bits_by2(np.uint64_t x):             # <<<<<<<<<<<<<<
55213  *     # Reversed magic
55214  *     x=x&(<np.uint64_t>0x1249249249249249)
55215  */
55216 
55217 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_compact_64bits_by2(__pyx_t_5numpy_uint64_t __pyx_v_x) {
55218   __pyx_t_5numpy_uint64_t __pyx_r;
55219   __Pyx_RefNannyDeclarations
55220   __Pyx_RefNannySetupContext("compact_64bits_by2", 0);
55221 
55222   /* "yt/utilities/lib/geometry_utils.pxd":186
55223  * cdef inline np.uint64_t compact_64bits_by2(np.uint64_t x):
55224  *     # Reversed magic
55225  *     x=x&(<np.uint64_t>0x1249249249249249)             # <<<<<<<<<<<<<<
55226  *     x=(x|(x>>2))&(<np.uint64_t>0x0649249249249249)
55227  *     x=(x|(x>>2))&(<np.uint64_t>0x0199219243248649)
55228  */
55229   __pyx_v_x = (__pyx_v_x & ((__pyx_t_5numpy_uint64_t)0x1249249249249249));
55230 
55231   /* "yt/utilities/lib/geometry_utils.pxd":187
55232  *     # Reversed magic
55233  *     x=x&(<np.uint64_t>0x1249249249249249)
55234  *     x=(x|(x>>2))&(<np.uint64_t>0x0649249249249249)             # <<<<<<<<<<<<<<
55235  *     x=(x|(x>>2))&(<np.uint64_t>0x0199219243248649)
55236  *     x=(x|(x>>2))&(<np.uint64_t>0x00786070C0E181C3)
55237  */
55238   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x >> 2)) & ((__pyx_t_5numpy_uint64_t)0x0649249249249249));
55239 
55240   /* "yt/utilities/lib/geometry_utils.pxd":188
55241  *     x=x&(<np.uint64_t>0x1249249249249249)
55242  *     x=(x|(x>>2))&(<np.uint64_t>0x0649249249249249)
55243  *     x=(x|(x>>2))&(<np.uint64_t>0x0199219243248649)             # <<<<<<<<<<<<<<
55244  *     x=(x|(x>>2))&(<np.uint64_t>0x00786070C0E181C3)
55245  *     x=(x|(x>>4))&(<np.uint64_t>0x0007E007C00F801F)
55246  */
55247   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x >> 2)) & ((__pyx_t_5numpy_uint64_t)0x0199219243248649));
55248 
55249   /* "yt/utilities/lib/geometry_utils.pxd":189
55250  *     x=(x|(x>>2))&(<np.uint64_t>0x0649249249249249)
55251  *     x=(x|(x>>2))&(<np.uint64_t>0x0199219243248649)
55252  *     x=(x|(x>>2))&(<np.uint64_t>0x00786070C0E181C3)             # <<<<<<<<<<<<<<
55253  *     x=(x|(x>>4))&(<np.uint64_t>0x0007E007C00F801F)
55254  *     x=(x|(x>>10))&(<np.uint64_t>0x000001FFC00003FF)
55255  */
55256   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x >> 2)) & ((__pyx_t_5numpy_uint64_t)0x00786070C0E181C3));
55257 
55258   /* "yt/utilities/lib/geometry_utils.pxd":190
55259  *     x=(x|(x>>2))&(<np.uint64_t>0x0199219243248649)
55260  *     x=(x|(x>>2))&(<np.uint64_t>0x00786070C0E181C3)
55261  *     x=(x|(x>>4))&(<np.uint64_t>0x0007E007C00F801F)             # <<<<<<<<<<<<<<
55262  *     x=(x|(x>>10))&(<np.uint64_t>0x000001FFC00003FF)
55263  *     x=(x|(x>>20))&(<np.uint64_t>0x00000000001FFFFF)
55264  */
55265   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x >> 4)) & ((__pyx_t_5numpy_uint64_t)0x0007E007C00F801F));
55266 
55267   /* "yt/utilities/lib/geometry_utils.pxd":191
55268  *     x=(x|(x>>2))&(<np.uint64_t>0x00786070C0E181C3)
55269  *     x=(x|(x>>4))&(<np.uint64_t>0x0007E007C00F801F)
55270  *     x=(x|(x>>10))&(<np.uint64_t>0x000001FFC00003FF)             # <<<<<<<<<<<<<<
55271  *     x=(x|(x>>20))&(<np.uint64_t>0x00000000001FFFFF)
55272  *     return x
55273  */
55274   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x >> 10)) & ((__pyx_t_5numpy_uint64_t)0x000001FFC00003FF));
55275 
55276   /* "yt/utilities/lib/geometry_utils.pxd":192
55277  *     x=(x|(x>>4))&(<np.uint64_t>0x0007E007C00F801F)
55278  *     x=(x|(x>>10))&(<np.uint64_t>0x000001FFC00003FF)
55279  *     x=(x|(x>>20))&(<np.uint64_t>0x00000000001FFFFF)             # <<<<<<<<<<<<<<
55280  *     return x
55281  *
55282  */
55283   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x >> 20)) & ((__pyx_t_5numpy_uint64_t)0x00000000001FFFFF));
55284 
55285   /* "yt/utilities/lib/geometry_utils.pxd":193
55286  *     x=(x|(x>>10))&(<np.uint64_t>0x000001FFC00003FF)
55287  *     x=(x|(x>>20))&(<np.uint64_t>0x00000000001FFFFF)
55288  *     return x             # <<<<<<<<<<<<<<
55289  *
55290  * #-----------------------------------------------------------------------------
55291  */
55292   __pyx_r = __pyx_v_x;
55293   goto __pyx_L0;
55294 
55295   /* "yt/utilities/lib/geometry_utils.pxd":184
55296  * @cython.boundscheck(False)
55297  * @cython.wraparound(False)
55298  * cdef inline np.uint64_t compact_64bits_by2(np.uint64_t x):             # <<<<<<<<<<<<<<
55299  *     # Reversed magic
55300  *     x=x&(<np.uint64_t>0x1249249249249249)
55301  */
55302 
55303   /* function exit code */
55304   __pyx_L0:;
55305   __Pyx_RefNannyFinishContext();
55306   return __pyx_r;
55307 }
55308 
55309 /* "yt/utilities/lib/geometry_utils.pxd":200
55310  * @cython.boundscheck(False)
55311  * @cython.wraparound(False)
55312  * cdef inline np.uint32_t spread_32bits_by2(np.uint32_t x):             # <<<<<<<<<<<<<<
55313  *     # Only reversible up to 1023
55314  *     # Select highest 10 bits (Required to be reversible to 10st bit)
55315  */
55316 
55317 static CYTHON_INLINE __pyx_t_5numpy_uint32_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_spread_32bits_by2(__pyx_t_5numpy_uint32_t __pyx_v_x) {
55318   __pyx_t_5numpy_uint32_t __pyx_r;
55319   __Pyx_RefNannyDeclarations
55320   __Pyx_RefNannySetupContext("spread_32bits_by2", 0);
55321 
55322   /* "yt/utilities/lib/geometry_utils.pxd":204
55323  *     # Select highest 10 bits (Required to be reversible to 10st bit)
55324  *     # x = ---- ---- ---- ---- ---- --98 7654 3210
55325  *     x=(x&(<np.uint32_t>0x000003FF))             # <<<<<<<<<<<<<<
55326  *     # x = ---- --98 ---- ---- ---- ---- 7654 3210
55327  *     x=(x|(x<<16))&(<np.uint32_t>0xFF0000FF)
55328  */
55329   __pyx_v_x = (__pyx_v_x & ((__pyx_t_5numpy_uint32_t)0x000003FF));
55330 
55331   /* "yt/utilities/lib/geometry_utils.pxd":206
55332  *     x=(x&(<np.uint32_t>0x000003FF))
55333  *     # x = ---- --98 ---- ---- ---- ---- 7654 3210
55334  *     x=(x|(x<<16))&(<np.uint32_t>0xFF0000FF)             # <<<<<<<<<<<<<<
55335  *     # x = ---- --98 ---- ---- 7654 ---- ---- 3210
55336  *     x=(x|(x<<8))&(<np.uint32_t>0x0300F00F)
55337  */
55338   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x << 16)) & ((__pyx_t_5numpy_uint32_t)0xFF0000FF));
55339 
55340   /* "yt/utilities/lib/geometry_utils.pxd":208
55341  *     x=(x|(x<<16))&(<np.uint32_t>0xFF0000FF)
55342  *     # x = ---- --98 ---- ---- 7654 ---- ---- 3210
55343  *     x=(x|(x<<8))&(<np.uint32_t>0x0300F00F)             # <<<<<<<<<<<<<<
55344  *     # x = ---- --98 ---- 76-- --54 ---- 32-- --10
55345  *     x=(x|(x<<4))&(<np.uint32_t>0x030C30C3)
55346  */
55347   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x << 8)) & ((__pyx_t_5numpy_uint32_t)0x0300F00F));
55348 
55349   /* "yt/utilities/lib/geometry_utils.pxd":210
55350  *     x=(x|(x<<8))&(<np.uint32_t>0x0300F00F)
55351  *     # x = ---- --98 ---- 76-- --54 ---- 32-- --10
55352  *     x=(x|(x<<4))&(<np.uint32_t>0x030C30C3)             # <<<<<<<<<<<<<<
55353  *     # x = ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0
55354  *     x=(x|(x<<2))&(<np.uint32_t>0x09249249)
55355  */
55356   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x << 4)) & ((__pyx_t_5numpy_uint32_t)0x030C30C3));
55357 
55358   /* "yt/utilities/lib/geometry_utils.pxd":212
55359  *     x=(x|(x<<4))&(<np.uint32_t>0x030C30C3)
55360  *     # x = ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0
55361  *     x=(x|(x<<2))&(<np.uint32_t>0x09249249)             # <<<<<<<<<<<<<<
55362  *     return x
55363  *
55364  */
55365   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x << 2)) & ((__pyx_t_5numpy_uint32_t)0x09249249));
55366 
55367   /* "yt/utilities/lib/geometry_utils.pxd":213
55368  *     # x = ---- 9--8 --7- -6-- 5--4 --3- -2-- 1--0
55369  *     x=(x|(x<<2))&(<np.uint32_t>0x09249249)
55370  *     return x             # <<<<<<<<<<<<<<
55371  *
55372  * @cython.cdivision(True)
55373  */
55374   __pyx_r = __pyx_v_x;
55375   goto __pyx_L0;
55376 
55377   /* "yt/utilities/lib/geometry_utils.pxd":200
55378  * @cython.boundscheck(False)
55379  * @cython.wraparound(False)
55380  * cdef inline np.uint32_t spread_32bits_by2(np.uint32_t x):             # <<<<<<<<<<<<<<
55381  *     # Only reversible up to 1023
55382  *     # Select highest 10 bits (Required to be reversible to 10st bit)
55383  */
55384 
55385   /* function exit code */
55386   __pyx_L0:;
55387   __Pyx_RefNannyFinishContext();
55388   return __pyx_r;
55389 }
55390 
55391 /* "yt/utilities/lib/geometry_utils.pxd":218
55392  * @cython.boundscheck(False)
55393  * @cython.wraparound(False)
55394  * cdef inline np.uint32_t compact_32bits_by2(np.uint32_t x):             # <<<<<<<<<<<<<<
55395  *     # Reversed magic
55396  *     x=x&(<np.uint32_t>0x09249249)
55397  */
55398 
55399 static CYTHON_INLINE __pyx_t_5numpy_uint32_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_compact_32bits_by2(__pyx_t_5numpy_uint32_t __pyx_v_x) {
55400   __pyx_t_5numpy_uint32_t __pyx_r;
55401   __Pyx_RefNannyDeclarations
55402   __Pyx_RefNannySetupContext("compact_32bits_by2", 0);
55403 
55404   /* "yt/utilities/lib/geometry_utils.pxd":220
55405  * cdef inline np.uint32_t compact_32bits_by2(np.uint32_t x):
55406  *     # Reversed magic
55407  *     x=x&(<np.uint32_t>0x09249249)             # <<<<<<<<<<<<<<
55408  *     x=(x|(x>>2))&(<np.uint32_t>0x030C30C3)
55409  *     x=(x|(x>>4))&(<np.uint32_t>0x0300F00F)
55410  */
55411   __pyx_v_x = (__pyx_v_x & ((__pyx_t_5numpy_uint32_t)0x09249249));
55412 
55413   /* "yt/utilities/lib/geometry_utils.pxd":221
55414  *     # Reversed magic
55415  *     x=x&(<np.uint32_t>0x09249249)
55416  *     x=(x|(x>>2))&(<np.uint32_t>0x030C30C3)             # <<<<<<<<<<<<<<
55417  *     x=(x|(x>>4))&(<np.uint32_t>0x0300F00F)
55418  *     x=(x|(x>>8))&(<np.uint32_t>0xFF0000FF)
55419  */
55420   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x >> 2)) & ((__pyx_t_5numpy_uint32_t)0x030C30C3));
55421 
55422   /* "yt/utilities/lib/geometry_utils.pxd":222
55423  *     x=x&(<np.uint32_t>0x09249249)
55424  *     x=(x|(x>>2))&(<np.uint32_t>0x030C30C3)
55425  *     x=(x|(x>>4))&(<np.uint32_t>0x0300F00F)             # <<<<<<<<<<<<<<
55426  *     x=(x|(x>>8))&(<np.uint32_t>0xFF0000FF)
55427  *     x=(x|(x>>16))&(<np.uint32_t>0x000003FF)
55428  */
55429   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x >> 4)) & ((__pyx_t_5numpy_uint32_t)0x0300F00F));
55430 
55431   /* "yt/utilities/lib/geometry_utils.pxd":223
55432  *     x=(x|(x>>2))&(<np.uint32_t>0x030C30C3)
55433  *     x=(x|(x>>4))&(<np.uint32_t>0x0300F00F)
55434  *     x=(x|(x>>8))&(<np.uint32_t>0xFF0000FF)             # <<<<<<<<<<<<<<
55435  *     x=(x|(x>>16))&(<np.uint32_t>0x000003FF)
55436  *     return x
55437  */
55438   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x >> 8)) & ((__pyx_t_5numpy_uint32_t)0xFF0000FF));
55439 
55440   /* "yt/utilities/lib/geometry_utils.pxd":224
55441  *     x=(x|(x>>4))&(<np.uint32_t>0x0300F00F)
55442  *     x=(x|(x>>8))&(<np.uint32_t>0xFF0000FF)
55443  *     x=(x|(x>>16))&(<np.uint32_t>0x000003FF)             # <<<<<<<<<<<<<<
55444  *     return x
55445  *
55446  */
55447   __pyx_v_x = ((__pyx_v_x | (__pyx_v_x >> 16)) & ((__pyx_t_5numpy_uint32_t)0x000003FF));
55448 
55449   /* "yt/utilities/lib/geometry_utils.pxd":225
55450  *     x=(x|(x>>8))&(<np.uint32_t>0xFF0000FF)
55451  *     x=(x|(x>>16))&(<np.uint32_t>0x000003FF)
55452  *     return x             # <<<<<<<<<<<<<<
55453  *
55454  * @cython.cdivision(True)
55455  */
55456   __pyx_r = __pyx_v_x;
55457   goto __pyx_L0;
55458 
55459   /* "yt/utilities/lib/geometry_utils.pxd":218
55460  * @cython.boundscheck(False)
55461  * @cython.wraparound(False)
55462  * cdef inline np.uint32_t compact_32bits_by2(np.uint32_t x):             # <<<<<<<<<<<<<<
55463  *     # Reversed magic
55464  *     x=x&(<np.uint32_t>0x09249249)
55465  */
55466 
55467   /* function exit code */
55468   __pyx_L0:;
55469   __Pyx_RefNannyFinishContext();
55470   return __pyx_r;
55471 }
55472 
55473 /* "yt/utilities/lib/geometry_utils.pxd":230
55474  * @cython.boundscheck(False)
55475  * @cython.wraparound(False)
55476  * cdef inline np.uint64_t masked_merge_64bit(np.uint64_t a, np.uint64_t b, np.uint64_t mask):             # <<<<<<<<<<<<<<
55477  *     # https://graphics.stanford.edu/~seander/bithacks.html#MaskedMerge
55478  *     return a ^ ((a ^ b) & mask)
55479  */
55480 
55481 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_masked_merge_64bit(__pyx_t_5numpy_uint64_t __pyx_v_a, __pyx_t_5numpy_uint64_t __pyx_v_b, __pyx_t_5numpy_uint64_t __pyx_v_mask) {
55482   __pyx_t_5numpy_uint64_t __pyx_r;
55483   __Pyx_RefNannyDeclarations
55484   __Pyx_RefNannySetupContext("masked_merge_64bit", 0);
55485 
55486   /* "yt/utilities/lib/geometry_utils.pxd":232
55487  * cdef inline np.uint64_t masked_merge_64bit(np.uint64_t a, np.uint64_t b, np.uint64_t mask):
55488  *     # https://graphics.stanford.edu/~seander/bithacks.html#MaskedMerge
55489  *     return a ^ ((a ^ b) & mask)             # <<<<<<<<<<<<<<
55490  *
55491  * @cython.cdivision(True)
55492  */
55493   __pyx_r = (__pyx_v_a ^ ((__pyx_v_a ^ __pyx_v_b) & __pyx_v_mask));
55494   goto __pyx_L0;
55495 
55496   /* "yt/utilities/lib/geometry_utils.pxd":230
55497  * @cython.boundscheck(False)
55498  * @cython.wraparound(False)
55499  * cdef inline np.uint64_t masked_merge_64bit(np.uint64_t a, np.uint64_t b, np.uint64_t mask):             # <<<<<<<<<<<<<<
55500  *     # https://graphics.stanford.edu/~seander/bithacks.html#MaskedMerge
55501  *     return a ^ ((a ^ b) & mask)
55502  */
55503 
55504   /* function exit code */
55505   __pyx_L0:;
55506   __Pyx_RefNannyFinishContext();
55507   return __pyx_r;
55508 }
55509 
55510 /* "yt/utilities/lib/geometry_utils.pxd":235
55511  *
55512  * @cython.cdivision(True)
55513  * cdef inline np.uint64_t encode_morton_64bit(np.uint64_t x_ind, np.uint64_t y_ind, np.uint64_t z_ind):             # <<<<<<<<<<<<<<
55514  *     cdef np.uint64_t mi
55515  *     mi = 0
55516  */
55517 
55518 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_encode_morton_64bit(__pyx_t_5numpy_uint64_t __pyx_v_x_ind, __pyx_t_5numpy_uint64_t __pyx_v_y_ind, __pyx_t_5numpy_uint64_t __pyx_v_z_ind) {
55519   __pyx_t_5numpy_uint64_t __pyx_v_mi;
55520   __pyx_t_5numpy_uint64_t __pyx_r;
55521   __Pyx_RefNannyDeclarations
55522   __Pyx_RefNannySetupContext("encode_morton_64bit", 0);
55523 
55524   /* "yt/utilities/lib/geometry_utils.pxd":237
55525  * cdef inline np.uint64_t encode_morton_64bit(np.uint64_t x_ind, np.uint64_t y_ind, np.uint64_t z_ind):
55526  *     cdef np.uint64_t mi
55527  *     mi = 0             # <<<<<<<<<<<<<<
55528  *     mi |= spread_64bits_by2(z_ind)<<ZSHIFT
55529  *     mi |= spread_64bits_by2(y_ind)<<YSHIFT
55530  */
55531   __pyx_v_mi = 0;
55532 
55533   /* "yt/utilities/lib/geometry_utils.pxd":238
55534  *     cdef np.uint64_t mi
55535  *     mi = 0
55536  *     mi |= spread_64bits_by2(z_ind)<<ZSHIFT             # <<<<<<<<<<<<<<
55537  *     mi |= spread_64bits_by2(y_ind)<<YSHIFT
55538  *     mi |= spread_64bits_by2(x_ind)<<XSHIFT
55539  */
55540   __pyx_v_mi = (__pyx_v_mi | (__pyx_f_2yt_9utilities_3lib_14geometry_utils_spread_64bits_by2(__pyx_v_z_ind) << 0));
55541 
55542   /* "yt/utilities/lib/geometry_utils.pxd":239
55543  *     mi = 0
55544  *     mi |= spread_64bits_by2(z_ind)<<ZSHIFT
55545  *     mi |= spread_64bits_by2(y_ind)<<YSHIFT             # <<<<<<<<<<<<<<
55546  *     mi |= spread_64bits_by2(x_ind)<<XSHIFT
55547  *     return mi
55548  */
55549   __pyx_v_mi = (__pyx_v_mi | (__pyx_f_2yt_9utilities_3lib_14geometry_utils_spread_64bits_by2(__pyx_v_y_ind) << 1));
55550 
55551   /* "yt/utilities/lib/geometry_utils.pxd":240
55552  *     mi |= spread_64bits_by2(z_ind)<<ZSHIFT
55553  *     mi |= spread_64bits_by2(y_ind)<<YSHIFT
55554  *     mi |= spread_64bits_by2(x_ind)<<XSHIFT             # <<<<<<<<<<<<<<
55555  *     return mi
55556  *
55557  */
55558   __pyx_v_mi = (__pyx_v_mi | (__pyx_f_2yt_9utilities_3lib_14geometry_utils_spread_64bits_by2(__pyx_v_x_ind) << 2));
55559 
55560   /* "yt/utilities/lib/geometry_utils.pxd":241
55561  *     mi |= spread_64bits_by2(y_ind)<<YSHIFT
55562  *     mi |= spread_64bits_by2(x_ind)<<XSHIFT
55563  *     return mi             # <<<<<<<<<<<<<<
55564  *
55565  * @cython.cdivision(True)
55566  */
55567   __pyx_r = __pyx_v_mi;
55568   goto __pyx_L0;
55569 
55570   /* "yt/utilities/lib/geometry_utils.pxd":235
55571  *
55572  * @cython.cdivision(True)
55573  * cdef inline np.uint64_t encode_morton_64bit(np.uint64_t x_ind, np.uint64_t y_ind, np.uint64_t z_ind):             # <<<<<<<<<<<<<<
55574  *     cdef np.uint64_t mi
55575  *     mi = 0
55576  */
55577 
55578   /* function exit code */
55579   __pyx_L0:;
55580   __Pyx_RefNannyFinishContext();
55581   return __pyx_r;
55582 }
55583 
55584 /* "yt/utilities/lib/geometry_utils.pxd":244
55585  *
55586  * @cython.cdivision(True)
55587  * cdef inline void decode_morton_64bit(np.uint64_t mi, np.uint64_t *p):             # <<<<<<<<<<<<<<
55588  *     p[0] = compact_64bits_by2(mi>>XSHIFT)
55589  *     p[1] = compact_64bits_by2(mi>>YSHIFT)
55590  */
55591 
55592 static CYTHON_INLINE void __pyx_f_2yt_9utilities_3lib_14geometry_utils_decode_morton_64bit(__pyx_t_5numpy_uint64_t __pyx_v_mi, __pyx_t_5numpy_uint64_t *__pyx_v_p) {
55593   __Pyx_RefNannyDeclarations
55594   __Pyx_RefNannySetupContext("decode_morton_64bit", 0);
55595 
55596   /* "yt/utilities/lib/geometry_utils.pxd":245
55597  * @cython.cdivision(True)
55598  * cdef inline void decode_morton_64bit(np.uint64_t mi, np.uint64_t *p):
55599  *     p[0] = compact_64bits_by2(mi>>XSHIFT)             # <<<<<<<<<<<<<<
55600  *     p[1] = compact_64bits_by2(mi>>YSHIFT)
55601  *     p[2] = compact_64bits_by2(mi>>ZSHIFT)
55602  */
55603   (__pyx_v_p[0]) = __pyx_f_2yt_9utilities_3lib_14geometry_utils_compact_64bits_by2((__pyx_v_mi >> 2));
55604 
55605   /* "yt/utilities/lib/geometry_utils.pxd":246
55606  * cdef inline void decode_morton_64bit(np.uint64_t mi, np.uint64_t *p):
55607  *     p[0] = compact_64bits_by2(mi>>XSHIFT)
55608  *     p[1] = compact_64bits_by2(mi>>YSHIFT)             # <<<<<<<<<<<<<<
55609  *     p[2] = compact_64bits_by2(mi>>ZSHIFT)
55610  *
55611  */
55612   (__pyx_v_p[1]) = __pyx_f_2yt_9utilities_3lib_14geometry_utils_compact_64bits_by2((__pyx_v_mi >> 1));
55613 
55614   /* "yt/utilities/lib/geometry_utils.pxd":247
55615  *     p[0] = compact_64bits_by2(mi>>XSHIFT)
55616  *     p[1] = compact_64bits_by2(mi>>YSHIFT)
55617  *     p[2] = compact_64bits_by2(mi>>ZSHIFT)             # <<<<<<<<<<<<<<
55618  *
55619  * @cython.cdivision(True)
55620  */
55621   (__pyx_v_p[2]) = __pyx_f_2yt_9utilities_3lib_14geometry_utils_compact_64bits_by2((__pyx_v_mi >> 0));
55622 
55623   /* "yt/utilities/lib/geometry_utils.pxd":244
55624  *
55625  * @cython.cdivision(True)
55626  * cdef inline void decode_morton_64bit(np.uint64_t mi, np.uint64_t *p):             # <<<<<<<<<<<<<<
55627  *     p[0] = compact_64bits_by2(mi>>XSHIFT)
55628  *     p[1] = compact_64bits_by2(mi>>YSHIFT)
55629  */
55630 
55631   /* function exit code */
55632   __Pyx_RefNannyFinishContext();
55633 }
55634 
55635 /* "yt/utilities/lib/geometry_utils.pxd":250
55636  *
55637  * @cython.cdivision(True)
55638  * cdef inline np.uint64_t bounded_morton(np.float64_t x, np.float64_t y, np.float64_t z,             # <<<<<<<<<<<<<<
55639  *                                np.float64_t *DLE, np.float64_t *DRE, np.int32_t order):
55640  *     cdef int i
55641  */
55642 
55643 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_bounded_morton(__pyx_t_5numpy_float64_t __pyx_v_x, __pyx_t_5numpy_float64_t __pyx_v_y, __pyx_t_5numpy_float64_t __pyx_v_z, __pyx_t_5numpy_float64_t *__pyx_v_DLE, __pyx_t_5numpy_float64_t *__pyx_v_DRE, __pyx_t_5numpy_int32_t __pyx_v_order) {
55644   int __pyx_v_i;
55645   __pyx_t_5numpy_float64_t __pyx_v_dds[3];
55646   __pyx_t_5numpy_uint64_t __pyx_v_x_ind;
55647   __pyx_t_5numpy_uint64_t __pyx_v_y_ind;
55648   __pyx_t_5numpy_uint64_t __pyx_v_z_ind;
55649   __pyx_t_5numpy_uint64_t __pyx_v_mi;
55650   __pyx_t_5numpy_uint64_t __pyx_r;
55651   __Pyx_RefNannyDeclarations
55652   int __pyx_t_1;
55653   __Pyx_RefNannySetupContext("bounded_morton", 0);
55654 
55655   /* "yt/utilities/lib/geometry_utils.pxd":256
55656  *     cdef np.uint64_t x_ind, y_ind, z_ind
55657  *     cdef np.uint64_t mi
55658  *     for i in range(3):             # <<<<<<<<<<<<<<
55659  *         dds[i] = (DRE[i] - DLE[i]) / (1 << order)
55660  *     x_ind = <np.uint64_t> ((x - DLE[0])/dds[0])
55661  */
55662   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
55663     __pyx_v_i = __pyx_t_1;
55664 
55665     /* "yt/utilities/lib/geometry_utils.pxd":257
55666  *     cdef np.uint64_t mi
55667  *     for i in range(3):
55668  *         dds[i] = (DRE[i] - DLE[i]) / (1 << order)             # <<<<<<<<<<<<<<
55669  *     x_ind = <np.uint64_t> ((x - DLE[0])/dds[0])
55670  *     y_ind = <np.uint64_t> ((y - DLE[1])/dds[1])
55671  */
55672     (__pyx_v_dds[__pyx_v_i]) = (((__pyx_v_DRE[__pyx_v_i]) - (__pyx_v_DLE[__pyx_v_i])) / (1 << __pyx_v_order));
55673   }
55674 
55675   /* "yt/utilities/lib/geometry_utils.pxd":258
55676  *     for i in range(3):
55677  *         dds[i] = (DRE[i] - DLE[i]) / (1 << order)
55678  *     x_ind = <np.uint64_t> ((x - DLE[0])/dds[0])             # <<<<<<<<<<<<<<
55679  *     y_ind = <np.uint64_t> ((y - DLE[1])/dds[1])
55680  *     z_ind = <np.uint64_t> ((z - DLE[2])/dds[2])
55681  */
55682   __pyx_v_x_ind = ((__pyx_t_5numpy_uint64_t)((__pyx_v_x - (__pyx_v_DLE[0])) / (__pyx_v_dds[0])));
55683 
55684   /* "yt/utilities/lib/geometry_utils.pxd":259
55685  *         dds[i] = (DRE[i] - DLE[i]) / (1 << order)
55686  *     x_ind = <np.uint64_t> ((x - DLE[0])/dds[0])
55687  *     y_ind = <np.uint64_t> ((y - DLE[1])/dds[1])             # <<<<<<<<<<<<<<
55688  *     z_ind = <np.uint64_t> ((z - DLE[2])/dds[2])
55689  *     mi = encode_morton_64bit(x_ind,y_ind,z_ind)
55690  */
55691   __pyx_v_y_ind = ((__pyx_t_5numpy_uint64_t)((__pyx_v_y - (__pyx_v_DLE[1])) / (__pyx_v_dds[1])));
55692 
55693   /* "yt/utilities/lib/geometry_utils.pxd":260
55694  *     x_ind = <np.uint64_t> ((x - DLE[0])/dds[0])
55695  *     y_ind = <np.uint64_t> ((y - DLE[1])/dds[1])
55696  *     z_ind = <np.uint64_t> ((z - DLE[2])/dds[2])             # <<<<<<<<<<<<<<
55697  *     mi = encode_morton_64bit(x_ind,y_ind,z_ind)
55698  *     return mi
55699  */
55700   __pyx_v_z_ind = ((__pyx_t_5numpy_uint64_t)((__pyx_v_z - (__pyx_v_DLE[2])) / (__pyx_v_dds[2])));
55701 
55702   /* "yt/utilities/lib/geometry_utils.pxd":261
55703  *     y_ind = <np.uint64_t> ((y - DLE[1])/dds[1])
55704  *     z_ind = <np.uint64_t> ((z - DLE[2])/dds[2])
55705  *     mi = encode_morton_64bit(x_ind,y_ind,z_ind)             # <<<<<<<<<<<<<<
55706  *     return mi
55707  *
55708  */
55709   __pyx_v_mi = __pyx_f_2yt_9utilities_3lib_14geometry_utils_encode_morton_64bit(__pyx_v_x_ind, __pyx_v_y_ind, __pyx_v_z_ind);
55710 
55711   /* "yt/utilities/lib/geometry_utils.pxd":262
55712  *     z_ind = <np.uint64_t> ((z - DLE[2])/dds[2])
55713  *     mi = encode_morton_64bit(x_ind,y_ind,z_ind)
55714  *     return mi             # <<<<<<<<<<<<<<
55715  *
55716  * @cython.cdivision(True)
55717  */
55718   __pyx_r = __pyx_v_mi;
55719   goto __pyx_L0;
55720 
55721   /* "yt/utilities/lib/geometry_utils.pxd":250
55722  *
55723  * @cython.cdivision(True)
55724  * cdef inline np.uint64_t bounded_morton(np.float64_t x, np.float64_t y, np.float64_t z,             # <<<<<<<<<<<<<<
55725  *                                np.float64_t *DLE, np.float64_t *DRE, np.int32_t order):
55726  *     cdef int i
55727  */
55728 
55729   /* function exit code */
55730   __pyx_L0:;
55731   __Pyx_RefNannyFinishContext();
55732   return __pyx_r;
55733 }
55734 
55735 /* "yt/utilities/lib/geometry_utils.pxd":265
55736  *
55737  * @cython.cdivision(True)
55738  * cdef inline np.uint64_t bounded_morton_relative(np.float64_t x, np.float64_t y, np.float64_t z,             # <<<<<<<<<<<<<<
55739  *                                np.float64_t *DLE, np.float64_t *DRE,
55740  *                                np.int32_t order1, np.int32_t order2):
55741  */
55742 
55743 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_bounded_morton_relative(__pyx_t_5numpy_float64_t __pyx_v_x, __pyx_t_5numpy_float64_t __pyx_v_y, __pyx_t_5numpy_float64_t __pyx_v_z, __pyx_t_5numpy_float64_t *__pyx_v_DLE, __pyx_t_5numpy_float64_t *__pyx_v_DRE, __pyx_t_5numpy_int32_t __pyx_v_order1, __pyx_t_5numpy_int32_t __pyx_v_order2) {
55744   int __pyx_v_i;
55745   __pyx_t_5numpy_float64_t __pyx_v_dds1[3];
55746   __pyx_t_5numpy_float64_t __pyx_v_dds2[3];
55747   __pyx_t_5numpy_float64_t __pyx_v_DLE2[3];
55748   __pyx_t_5numpy_uint64_t __pyx_v_x_ind;
55749   __pyx_t_5numpy_uint64_t __pyx_v_y_ind;
55750   __pyx_t_5numpy_uint64_t __pyx_v_z_ind;
55751   __pyx_t_5numpy_uint64_t __pyx_v_mi2;
55752   __pyx_t_5numpy_uint64_t __pyx_r;
55753   __Pyx_RefNannyDeclarations
55754   int __pyx_t_1;
55755   __Pyx_RefNannySetupContext("bounded_morton_relative", 0);
55756 
55757   /* "yt/utilities/lib/geometry_utils.pxd":274
55758  *     cdef np.uint64_t x_ind, y_ind, z_ind
55759  *     cdef np.uint64_t mi2
55760  *     for i in range(3):             # <<<<<<<<<<<<<<
55761  *         dds1[i] = (DRE[i] - DLE[i]) / (1 << order1)
55762  *         dds2[i] = dds1[i] / (1 << order2)
55763  */
55764   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
55765     __pyx_v_i = __pyx_t_1;
55766 
55767     /* "yt/utilities/lib/geometry_utils.pxd":275
55768  *     cdef np.uint64_t mi2
55769  *     for i in range(3):
55770  *         dds1[i] = (DRE[i] - DLE[i]) / (1 << order1)             # <<<<<<<<<<<<<<
55771  *         dds2[i] = dds1[i] / (1 << order2)
55772  *     DLE2[0] = <np.float64_t> (<np.uint64_t> ((x - DLE[0])/dds1[0])) * dds1[0]
55773  */
55774     (__pyx_v_dds1[__pyx_v_i]) = (((__pyx_v_DRE[__pyx_v_i]) - (__pyx_v_DLE[__pyx_v_i])) / (1 << __pyx_v_order1));
55775 
55776     /* "yt/utilities/lib/geometry_utils.pxd":276
55777  *     for i in range(3):
55778  *         dds1[i] = (DRE[i] - DLE[i]) / (1 << order1)
55779  *         dds2[i] = dds1[i] / (1 << order2)             # <<<<<<<<<<<<<<
55780  *     DLE2[0] = <np.float64_t> (<np.uint64_t> ((x - DLE[0])/dds1[0])) * dds1[0]
55781  *     DLE2[1] = <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]
55782  */
55783     (__pyx_v_dds2[__pyx_v_i]) = ((__pyx_v_dds1[__pyx_v_i]) / (1 << __pyx_v_order2));
55784   }
55785 
55786   /* "yt/utilities/lib/geometry_utils.pxd":277
55787  *         dds1[i] = (DRE[i] - DLE[i]) / (1 << order1)
55788  *         dds2[i] = dds1[i] / (1 << order2)
55789  *     DLE2[0] = <np.float64_t> (<np.uint64_t> ((x - DLE[0])/dds1[0])) * dds1[0]             # <<<<<<<<<<<<<<
55790  *     DLE2[1] = <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]
55791  *     DLE2[2] = <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]
55792  */
55793   (__pyx_v_DLE2[0]) = (((__pyx_t_5numpy_float64_t)((__pyx_t_5numpy_uint64_t)((__pyx_v_x - (__pyx_v_DLE[0])) / (__pyx_v_dds1[0])))) * (__pyx_v_dds1[0]));
55794 
55795   /* "yt/utilities/lib/geometry_utils.pxd":278
55796  *         dds2[i] = dds1[i] / (1 << order2)
55797  *     DLE2[0] = <np.float64_t> (<np.uint64_t> ((x - DLE[0])/dds1[0])) * dds1[0]
55798  *     DLE2[1] = <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]             # <<<<<<<<<<<<<<
55799  *     DLE2[2] = <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]
55800  *     x_ind = <np.uint64_t> ((x - DLE2[0])/dds2[0])
55801  */
55802   (__pyx_v_DLE2[1]) = (((__pyx_t_5numpy_float64_t)((__pyx_t_5numpy_uint64_t)((__pyx_v_y - (__pyx_v_DLE[1])) / (__pyx_v_dds1[1])))) * (__pyx_v_dds1[1]));
55803 
55804   /* "yt/utilities/lib/geometry_utils.pxd":279
55805  *     DLE2[0] = <np.float64_t> (<np.uint64_t> ((x - DLE[0])/dds1[0])) * dds1[0]
55806  *     DLE2[1] = <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]
55807  *     DLE2[2] = <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]             # <<<<<<<<<<<<<<
55808  *     x_ind = <np.uint64_t> ((x - DLE2[0])/dds2[0])
55809  *     y_ind = <np.uint64_t> ((y - DLE2[1])/dds2[1])
55810  */
55811   (__pyx_v_DLE2[2]) = (((__pyx_t_5numpy_float64_t)((__pyx_t_5numpy_uint64_t)((__pyx_v_z - (__pyx_v_DLE[2])) / (__pyx_v_dds1[2])))) * (__pyx_v_dds1[2]));
55812 
55813   /* "yt/utilities/lib/geometry_utils.pxd":280
55814  *     DLE2[1] = <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]
55815  *     DLE2[2] = <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]
55816  *     x_ind = <np.uint64_t> ((x - DLE2[0])/dds2[0])             # <<<<<<<<<<<<<<
55817  *     y_ind = <np.uint64_t> ((y - DLE2[1])/dds2[1])
55818  *     z_ind = <np.uint64_t> ((z - DLE2[2])/dds2[2])
55819  */
55820   __pyx_v_x_ind = ((__pyx_t_5numpy_uint64_t)((__pyx_v_x - (__pyx_v_DLE2[0])) / (__pyx_v_dds2[0])));
55821 
55822   /* "yt/utilities/lib/geometry_utils.pxd":281
55823  *     DLE2[2] = <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]
55824  *     x_ind = <np.uint64_t> ((x - DLE2[0])/dds2[0])
55825  *     y_ind = <np.uint64_t> ((y - DLE2[1])/dds2[1])             # <<<<<<<<<<<<<<
55826  *     z_ind = <np.uint64_t> ((z - DLE2[2])/dds2[2])
55827  *     mi2 = encode_morton_64bit(x_ind,y_ind,z_ind)
55828  */
55829   __pyx_v_y_ind = ((__pyx_t_5numpy_uint64_t)((__pyx_v_y - (__pyx_v_DLE2[1])) / (__pyx_v_dds2[1])));
55830 
55831   /* "yt/utilities/lib/geometry_utils.pxd":282
55832  *     x_ind = <np.uint64_t> ((x - DLE2[0])/dds2[0])
55833  *     y_ind = <np.uint64_t> ((y - DLE2[1])/dds2[1])
55834  *     z_ind = <np.uint64_t> ((z - DLE2[2])/dds2[2])             # <<<<<<<<<<<<<<
55835  *     mi2 = encode_morton_64bit(x_ind,y_ind,z_ind)
55836  *     return mi2
55837  */
55838   __pyx_v_z_ind = ((__pyx_t_5numpy_uint64_t)((__pyx_v_z - (__pyx_v_DLE2[2])) / (__pyx_v_dds2[2])));
55839 
55840   /* "yt/utilities/lib/geometry_utils.pxd":283
55841  *     y_ind = <np.uint64_t> ((y - DLE2[1])/dds2[1])
55842  *     z_ind = <np.uint64_t> ((z - DLE2[2])/dds2[2])
55843  *     mi2 = encode_morton_64bit(x_ind,y_ind,z_ind)             # <<<<<<<<<<<<<<
55844  *     return mi2
55845  *
55846  */
55847   __pyx_v_mi2 = __pyx_f_2yt_9utilities_3lib_14geometry_utils_encode_morton_64bit(__pyx_v_x_ind, __pyx_v_y_ind, __pyx_v_z_ind);
55848 
55849   /* "yt/utilities/lib/geometry_utils.pxd":284
55850  *     z_ind = <np.uint64_t> ((z - DLE2[2])/dds2[2])
55851  *     mi2 = encode_morton_64bit(x_ind,y_ind,z_ind)
55852  *     return mi2             # <<<<<<<<<<<<<<
55853  *
55854  *
55855  */
55856   __pyx_r = __pyx_v_mi2;
55857   goto __pyx_L0;
55858 
55859   /* "yt/utilities/lib/geometry_utils.pxd":265
55860  *
55861  * @cython.cdivision(True)
55862  * cdef inline np.uint64_t bounded_morton_relative(np.float64_t x, np.float64_t y, np.float64_t z,             # <<<<<<<<<<<<<<
55863  *                                np.float64_t *DLE, np.float64_t *DRE,
55864  *                                np.int32_t order1, np.int32_t order2):
55865  */
55866 
55867   /* function exit code */
55868   __pyx_L0:;
55869   __Pyx_RefNannyFinishContext();
55870   return __pyx_r;
55871 }
55872 
55873 /* "yt/utilities/lib/geometry_utils.pxd":289
55874  * # This dosn't seem to be much, if at all, faster...
55875  * @cython.cdivision(True)
55876  * cdef inline np.uint64_t bounded_morton_dds(np.float64_t x, np.float64_t y, np.float64_t z,             # <<<<<<<<<<<<<<
55877  *                                np.float64_t *DLE, np.float64_t *dds):
55878  *     cdef np.uint64_t x_ind, y_ind, z_ind
55879  */
55880 
55881 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_bounded_morton_dds(__pyx_t_5numpy_float64_t __pyx_v_x, __pyx_t_5numpy_float64_t __pyx_v_y, __pyx_t_5numpy_float64_t __pyx_v_z, __pyx_t_5numpy_float64_t *__pyx_v_DLE, __pyx_t_5numpy_float64_t *__pyx_v_dds) {
55882   __pyx_t_5numpy_uint64_t __pyx_v_x_ind;
55883   __pyx_t_5numpy_uint64_t __pyx_v_y_ind;
55884   __pyx_t_5numpy_uint64_t __pyx_v_z_ind;
55885   __pyx_t_5numpy_uint64_t __pyx_v_mi;
55886   __pyx_t_5numpy_uint64_t __pyx_r;
55887   __Pyx_RefNannyDeclarations
55888   __Pyx_RefNannySetupContext("bounded_morton_dds", 0);
55889 
55890   /* "yt/utilities/lib/geometry_utils.pxd":293
55891  *     cdef np.uint64_t x_ind, y_ind, z_ind
55892  *     cdef np.uint64_t mi
55893  *     x_ind = <np.uint64_t> ((x - DLE[0])/dds[0])             # <<<<<<<<<<<<<<
55894  *     y_ind = <np.uint64_t> ((y - DLE[1])/dds[1])
55895  *     z_ind = <np.uint64_t> ((z - DLE[2])/dds[2])
55896  */
55897   __pyx_v_x_ind = ((__pyx_t_5numpy_uint64_t)((__pyx_v_x - (__pyx_v_DLE[0])) / (__pyx_v_dds[0])));
55898 
55899   /* "yt/utilities/lib/geometry_utils.pxd":294
55900  *     cdef np.uint64_t mi
55901  *     x_ind = <np.uint64_t> ((x - DLE[0])/dds[0])
55902  *     y_ind = <np.uint64_t> ((y - DLE[1])/dds[1])             # <<<<<<<<<<<<<<
55903  *     z_ind = <np.uint64_t> ((z - DLE[2])/dds[2])
55904  *     mi = encode_morton_64bit(x_ind,y_ind,z_ind)
55905  */
55906   __pyx_v_y_ind = ((__pyx_t_5numpy_uint64_t)((__pyx_v_y - (__pyx_v_DLE[1])) / (__pyx_v_dds[1])));
55907 
55908   /* "yt/utilities/lib/geometry_utils.pxd":295
55909  *     x_ind = <np.uint64_t> ((x - DLE[0])/dds[0])
55910  *     y_ind = <np.uint64_t> ((y - DLE[1])/dds[1])
55911  *     z_ind = <np.uint64_t> ((z - DLE[2])/dds[2])             # <<<<<<<<<<<<<<
55912  *     mi = encode_morton_64bit(x_ind,y_ind,z_ind)
55913  *     return mi
55914  */
55915   __pyx_v_z_ind = ((__pyx_t_5numpy_uint64_t)((__pyx_v_z - (__pyx_v_DLE[2])) / (__pyx_v_dds[2])));
55916 
55917   /* "yt/utilities/lib/geometry_utils.pxd":296
55918  *     y_ind = <np.uint64_t> ((y - DLE[1])/dds[1])
55919  *     z_ind = <np.uint64_t> ((z - DLE[2])/dds[2])
55920  *     mi = encode_morton_64bit(x_ind,y_ind,z_ind)             # <<<<<<<<<<<<<<
55921  *     return mi
55922  *
55923  */
55924   __pyx_v_mi = __pyx_f_2yt_9utilities_3lib_14geometry_utils_encode_morton_64bit(__pyx_v_x_ind, __pyx_v_y_ind, __pyx_v_z_ind);
55925 
55926   /* "yt/utilities/lib/geometry_utils.pxd":297
55927  *     z_ind = <np.uint64_t> ((z - DLE[2])/dds[2])
55928  *     mi = encode_morton_64bit(x_ind,y_ind,z_ind)
55929  *     return mi             # <<<<<<<<<<<<<<
55930  *
55931  * @cython.cdivision(True)
55932  */
55933   __pyx_r = __pyx_v_mi;
55934   goto __pyx_L0;
55935 
55936   /* "yt/utilities/lib/geometry_utils.pxd":289
55937  * # This dosn't seem to be much, if at all, faster...
55938  * @cython.cdivision(True)
55939  * cdef inline np.uint64_t bounded_morton_dds(np.float64_t x, np.float64_t y, np.float64_t z,             # <<<<<<<<<<<<<<
55940  *                                np.float64_t *DLE, np.float64_t *dds):
55941  *     cdef np.uint64_t x_ind, y_ind, z_ind
55942  */
55943 
55944   /* function exit code */
55945   __pyx_L0:;
55946   __Pyx_RefNannyFinishContext();
55947   return __pyx_r;
55948 }
55949 
55950 /* "yt/utilities/lib/geometry_utils.pxd":300
55951  *
55952  * @cython.cdivision(True)
55953  * cdef inline np.uint64_t bounded_morton_relative_dds(np.float64_t x, np.float64_t y, np.float64_t z,             # <<<<<<<<<<<<<<
55954  *                                np.float64_t *DLE, np.float64_t *dds1, np.float64_t *dds2):
55955  *     cdef np.float64_t DLE2[3]
55956  */
55957 
55958 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_bounded_morton_relative_dds(__pyx_t_5numpy_float64_t __pyx_v_x, __pyx_t_5numpy_float64_t __pyx_v_y, __pyx_t_5numpy_float64_t __pyx_v_z, __pyx_t_5numpy_float64_t *__pyx_v_DLE, __pyx_t_5numpy_float64_t *__pyx_v_dds1, __pyx_t_5numpy_float64_t *__pyx_v_dds2) {
55959   __pyx_t_5numpy_float64_t __pyx_v_DLE2[3];
55960   __pyx_t_5numpy_uint64_t __pyx_v_x_ind;
55961   __pyx_t_5numpy_uint64_t __pyx_v_y_ind;
55962   __pyx_t_5numpy_uint64_t __pyx_v_z_ind;
55963   __pyx_t_5numpy_uint64_t __pyx_v_mi2;
55964   __pyx_t_5numpy_uint64_t __pyx_r;
55965   __Pyx_RefNannyDeclarations
55966   __Pyx_RefNannySetupContext("bounded_morton_relative_dds", 0);
55967 
55968   /* "yt/utilities/lib/geometry_utils.pxd":305
55969  *     cdef np.uint64_t x_ind, y_ind, z_ind
55970  *     cdef np.uint64_t mi2
55971  *     DLE2[0] = <np.float64_t> (<np.uint64_t> ((x - DLE[0])/dds1[0])) * dds1[0]             # <<<<<<<<<<<<<<
55972  *     DLE2[1] = <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]
55973  *     DLE2[2] = <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]
55974  */
55975   (__pyx_v_DLE2[0]) = (((__pyx_t_5numpy_float64_t)((__pyx_t_5numpy_uint64_t)((__pyx_v_x - (__pyx_v_DLE[0])) / (__pyx_v_dds1[0])))) * (__pyx_v_dds1[0]));
55976 
55977   /* "yt/utilities/lib/geometry_utils.pxd":306
55978  *     cdef np.uint64_t mi2
55979  *     DLE2[0] = <np.float64_t> (<np.uint64_t> ((x - DLE[0])/dds1[0])) * dds1[0]
55980  *     DLE2[1] = <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]             # <<<<<<<<<<<<<<
55981  *     DLE2[2] = <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]
55982  *     x_ind = <np.uint64_t> ((x - DLE2[0])/dds2[0])
55983  */
55984   (__pyx_v_DLE2[1]) = (((__pyx_t_5numpy_float64_t)((__pyx_t_5numpy_uint64_t)((__pyx_v_y - (__pyx_v_DLE[1])) / (__pyx_v_dds1[1])))) * (__pyx_v_dds1[1]));
55985 
55986   /* "yt/utilities/lib/geometry_utils.pxd":307
55987  *     DLE2[0] = <np.float64_t> (<np.uint64_t> ((x - DLE[0])/dds1[0])) * dds1[0]
55988  *     DLE2[1] = <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]
55989  *     DLE2[2] = <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]             # <<<<<<<<<<<<<<
55990  *     x_ind = <np.uint64_t> ((x - DLE2[0])/dds2[0])
55991  *     y_ind = <np.uint64_t> ((y - DLE2[1])/dds2[1])
55992  */
55993   (__pyx_v_DLE2[2]) = (((__pyx_t_5numpy_float64_t)((__pyx_t_5numpy_uint64_t)((__pyx_v_z - (__pyx_v_DLE[2])) / (__pyx_v_dds1[2])))) * (__pyx_v_dds1[2]));
55994 
55995   /* "yt/utilities/lib/geometry_utils.pxd":308
55996  *     DLE2[1] = <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]
55997  *     DLE2[2] = <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]
55998  *     x_ind = <np.uint64_t> ((x - DLE2[0])/dds2[0])             # <<<<<<<<<<<<<<
55999  *     y_ind = <np.uint64_t> ((y - DLE2[1])/dds2[1])
56000  *     z_ind = <np.uint64_t> ((z - DLE2[2])/dds2[2])
56001  */
56002   __pyx_v_x_ind = ((__pyx_t_5numpy_uint64_t)((__pyx_v_x - (__pyx_v_DLE2[0])) / (__pyx_v_dds2[0])));
56003 
56004   /* "yt/utilities/lib/geometry_utils.pxd":309
56005  *     DLE2[2] = <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]
56006  *     x_ind = <np.uint64_t> ((x - DLE2[0])/dds2[0])
56007  *     y_ind = <np.uint64_t> ((y - DLE2[1])/dds2[1])             # <<<<<<<<<<<<<<
56008  *     z_ind = <np.uint64_t> ((z - DLE2[2])/dds2[2])
56009  *     mi2 = encode_morton_64bit(x_ind,y_ind,z_ind)
56010  */
56011   __pyx_v_y_ind = ((__pyx_t_5numpy_uint64_t)((__pyx_v_y - (__pyx_v_DLE2[1])) / (__pyx_v_dds2[1])));
56012 
56013   /* "yt/utilities/lib/geometry_utils.pxd":310
56014  *     x_ind = <np.uint64_t> ((x - DLE2[0])/dds2[0])
56015  *     y_ind = <np.uint64_t> ((y - DLE2[1])/dds2[1])
56016  *     z_ind = <np.uint64_t> ((z - DLE2[2])/dds2[2])             # <<<<<<<<<<<<<<
56017  *     mi2 = encode_morton_64bit(x_ind,y_ind,z_ind)
56018  *     return mi2
56019  */
56020   __pyx_v_z_ind = ((__pyx_t_5numpy_uint64_t)((__pyx_v_z - (__pyx_v_DLE2[2])) / (__pyx_v_dds2[2])));
56021 
56022   /* "yt/utilities/lib/geometry_utils.pxd":311
56023  *     y_ind = <np.uint64_t> ((y - DLE2[1])/dds2[1])
56024  *     z_ind = <np.uint64_t> ((z - DLE2[2])/dds2[2])
56025  *     mi2 = encode_morton_64bit(x_ind,y_ind,z_ind)             # <<<<<<<<<<<<<<
56026  *     return mi2
56027  *
56028  */
56029   __pyx_v_mi2 = __pyx_f_2yt_9utilities_3lib_14geometry_utils_encode_morton_64bit(__pyx_v_x_ind, __pyx_v_y_ind, __pyx_v_z_ind);
56030 
56031   /* "yt/utilities/lib/geometry_utils.pxd":312
56032  *     z_ind = <np.uint64_t> ((z - DLE2[2])/dds2[2])
56033  *     mi2 = encode_morton_64bit(x_ind,y_ind,z_ind)
56034  *     return mi2             # <<<<<<<<<<<<<<
56035  *
56036  *
56037  */
56038   __pyx_r = __pyx_v_mi2;
56039   goto __pyx_L0;
56040 
56041   /* "yt/utilities/lib/geometry_utils.pxd":300
56042  *
56043  * @cython.cdivision(True)
56044  * cdef inline np.uint64_t bounded_morton_relative_dds(np.float64_t x, np.float64_t y, np.float64_t z,             # <<<<<<<<<<<<<<
56045  *                                np.float64_t *DLE, np.float64_t *dds1, np.float64_t *dds2):
56046  *     cdef np.float64_t DLE2[3]
56047  */
56048 
56049   /* function exit code */
56050   __pyx_L0:;
56051   __Pyx_RefNannyFinishContext();
56052   return __pyx_r;
56053 }
56054 
56055 /* "yt/utilities/lib/geometry_utils.pxd":316
56056  *
56057  * @cython.cdivision(True)
56058  * cdef inline np.uint64_t bounded_morton_split_dds(np.float64_t x, np.float64_t y, np.float64_t z,             # <<<<<<<<<<<<<<
56059  *                                np.float64_t *DLE, np.float64_t *dds, np.uint64_t *p):
56060  *     cdef np.uint64_t mi
56061  */
56062 
56063 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_bounded_morton_split_dds(__pyx_t_5numpy_float64_t __pyx_v_x, __pyx_t_5numpy_float64_t __pyx_v_y, __pyx_t_5numpy_float64_t __pyx_v_z, __pyx_t_5numpy_float64_t *__pyx_v_DLE, __pyx_t_5numpy_float64_t *__pyx_v_dds, __pyx_t_5numpy_uint64_t *__pyx_v_p) {
56064   __pyx_t_5numpy_uint64_t __pyx_v_mi;
56065   __pyx_t_5numpy_uint64_t __pyx_r;
56066   __Pyx_RefNannyDeclarations
56067   __Pyx_RefNannySetupContext("bounded_morton_split_dds", 0);
56068 
56069   /* "yt/utilities/lib/geometry_utils.pxd":319
56070  *                                np.float64_t *DLE, np.float64_t *dds, np.uint64_t *p):
56071  *     cdef np.uint64_t mi
56072  *     p[0] = <np.uint64_t> ((x - DLE[0])/dds[0])             # <<<<<<<<<<<<<<
56073  *     p[1] = <np.uint64_t> ((y - DLE[1])/dds[1])
56074  *     p[2] = <np.uint64_t> ((z - DLE[2])/dds[2])
56075  */
56076   (__pyx_v_p[0]) = ((__pyx_t_5numpy_uint64_t)((__pyx_v_x - (__pyx_v_DLE[0])) / (__pyx_v_dds[0])));
56077 
56078   /* "yt/utilities/lib/geometry_utils.pxd":320
56079  *     cdef np.uint64_t mi
56080  *     p[0] = <np.uint64_t> ((x - DLE[0])/dds[0])
56081  *     p[1] = <np.uint64_t> ((y - DLE[1])/dds[1])             # <<<<<<<<<<<<<<
56082  *     p[2] = <np.uint64_t> ((z - DLE[2])/dds[2])
56083  *     mi = encode_morton_64bit(p[0], p[1], p[2])
56084  */
56085   (__pyx_v_p[1]) = ((__pyx_t_5numpy_uint64_t)((__pyx_v_y - (__pyx_v_DLE[1])) / (__pyx_v_dds[1])));
56086 
56087   /* "yt/utilities/lib/geometry_utils.pxd":321
56088  *     p[0] = <np.uint64_t> ((x - DLE[0])/dds[0])
56089  *     p[1] = <np.uint64_t> ((y - DLE[1])/dds[1])
56090  *     p[2] = <np.uint64_t> ((z - DLE[2])/dds[2])             # <<<<<<<<<<<<<<
56091  *     mi = encode_morton_64bit(p[0], p[1], p[2])
56092  *     return mi
56093  */
56094   (__pyx_v_p[2]) = ((__pyx_t_5numpy_uint64_t)((__pyx_v_z - (__pyx_v_DLE[2])) / (__pyx_v_dds[2])));
56095 
56096   /* "yt/utilities/lib/geometry_utils.pxd":322
56097  *     p[1] = <np.uint64_t> ((y - DLE[1])/dds[1])
56098  *     p[2] = <np.uint64_t> ((z - DLE[2])/dds[2])
56099  *     mi = encode_morton_64bit(p[0], p[1], p[2])             # <<<<<<<<<<<<<<
56100  *     return mi
56101  *
56102  */
56103   __pyx_v_mi = __pyx_f_2yt_9utilities_3lib_14geometry_utils_encode_morton_64bit((__pyx_v_p[0]), (__pyx_v_p[1]), (__pyx_v_p[2]));
56104 
56105   /* "yt/utilities/lib/geometry_utils.pxd":323
56106  *     p[2] = <np.uint64_t> ((z - DLE[2])/dds[2])
56107  *     mi = encode_morton_64bit(p[0], p[1], p[2])
56108  *     return mi             # <<<<<<<<<<<<<<
56109  *
56110  * @cython.cdivision(True)
56111  */
56112   __pyx_r = __pyx_v_mi;
56113   goto __pyx_L0;
56114 
56115   /* "yt/utilities/lib/geometry_utils.pxd":316
56116  *
56117  * @cython.cdivision(True)
56118  * cdef inline np.uint64_t bounded_morton_split_dds(np.float64_t x, np.float64_t y, np.float64_t z,             # <<<<<<<<<<<<<<
56119  *                                np.float64_t *DLE, np.float64_t *dds, np.uint64_t *p):
56120  *     cdef np.uint64_t mi
56121  */
56122 
56123   /* function exit code */
56124   __pyx_L0:;
56125   __Pyx_RefNannyFinishContext();
56126   return __pyx_r;
56127 }
56128 
56129 /* "yt/utilities/lib/geometry_utils.pxd":326
56130  *
56131  * @cython.cdivision(True)
56132  * cdef inline np.uint64_t bounded_morton_split_relative_dds(np.float64_t x, np.float64_t y, np.float64_t z,             # <<<<<<<<<<<<<<
56133  *                                np.float64_t *DLE, np.float64_t *dds1, np.float64_t *dds2,
56134  *                                np.uint64_t *p2):
56135  */
56136 
56137 static CYTHON_INLINE __pyx_t_5numpy_uint64_t __pyx_f_2yt_9utilities_3lib_14geometry_utils_bounded_morton_split_relative_dds(__pyx_t_5numpy_float64_t __pyx_v_x, __pyx_t_5numpy_float64_t __pyx_v_y, __pyx_t_5numpy_float64_t __pyx_v_z, __pyx_t_5numpy_float64_t *__pyx_v_DLE, __pyx_t_5numpy_float64_t *__pyx_v_dds1, __pyx_t_5numpy_float64_t *__pyx_v_dds2, __pyx_t_5numpy_uint64_t *__pyx_v_p2) {
56138   __pyx_t_5numpy_float64_t __pyx_v_DLE2[3];
56139   __pyx_t_5numpy_uint64_t __pyx_v_mi2;
56140   __pyx_t_5numpy_uint64_t __pyx_r;
56141   __Pyx_RefNannyDeclarations
56142   __Pyx_RefNannySetupContext("bounded_morton_split_relative_dds", 0);
56143 
56144   /* "yt/utilities/lib/geometry_utils.pxd":331
56145  *     cdef np.float64_t DLE2[3]
56146  *     cdef np.uint64_t mi2
56147  *     DLE2[0] = DLE[0] + <np.float64_t> (<np.uint64_t> ((x - DLE[0])/dds1[0])) * dds1[0]             # <<<<<<<<<<<<<<
56148  *     DLE2[1] = DLE[1] + <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]
56149  *     DLE2[2] = DLE[2] + <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]
56150  */
56151   (__pyx_v_DLE2[0]) = ((__pyx_v_DLE[0]) + (((__pyx_t_5numpy_float64_t)((__pyx_t_5numpy_uint64_t)((__pyx_v_x - (__pyx_v_DLE[0])) / (__pyx_v_dds1[0])))) * (__pyx_v_dds1[0])));
56152 
56153   /* "yt/utilities/lib/geometry_utils.pxd":332
56154  *     cdef np.uint64_t mi2
56155  *     DLE2[0] = DLE[0] + <np.float64_t> (<np.uint64_t> ((x - DLE[0])/dds1[0])) * dds1[0]
56156  *     DLE2[1] = DLE[1] + <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]             # <<<<<<<<<<<<<<
56157  *     DLE2[2] = DLE[2] + <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]
56158  *     p2[0] = <np.uint64_t> ((x - DLE2[0])/dds2[0])
56159  */
56160   (__pyx_v_DLE2[1]) = ((__pyx_v_DLE[1]) + (((__pyx_t_5numpy_float64_t)((__pyx_t_5numpy_uint64_t)((__pyx_v_y - (__pyx_v_DLE[1])) / (__pyx_v_dds1[1])))) * (__pyx_v_dds1[1])));
56161 
56162   /* "yt/utilities/lib/geometry_utils.pxd":333
56163  *     DLE2[0] = DLE[0] + <np.float64_t> (<np.uint64_t> ((x - DLE[0])/dds1[0])) * dds1[0]
56164  *     DLE2[1] = DLE[1] + <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]
56165  *     DLE2[2] = DLE[2] + <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]             # <<<<<<<<<<<<<<
56166  *     p2[0] = <np.uint64_t> ((x - DLE2[0])/dds2[0])
56167  *     p2[1] = <np.uint64_t> ((y - DLE2[1])/dds2[1])
56168  */
56169   (__pyx_v_DLE2[2]) = ((__pyx_v_DLE[2]) + (((__pyx_t_5numpy_float64_t)((__pyx_t_5numpy_uint64_t)((__pyx_v_z - (__pyx_v_DLE[2])) / (__pyx_v_dds1[2])))) * (__pyx_v_dds1[2])));
56170 
56171   /* "yt/utilities/lib/geometry_utils.pxd":334
56172  *     DLE2[1] = DLE[1] + <np.float64_t> (<np.uint64_t> ((y - DLE[1])/dds1[1])) * dds1[1]
56173  *     DLE2[2] = DLE[2] + <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]
56174  *     p2[0] = <np.uint64_t> ((x - DLE2[0])/dds2[0])             # <<<<<<<<<<<<<<
56175  *     p2[1] = <np.uint64_t> ((y - DLE2[1])/dds2[1])
56176  *     p2[2] = <np.uint64_t> ((z - DLE2[2])/dds2[2])
56177  */
56178   (__pyx_v_p2[0]) = ((__pyx_t_5numpy_uint64_t)((__pyx_v_x - (__pyx_v_DLE2[0])) / (__pyx_v_dds2[0])));
56179 
56180   /* "yt/utilities/lib/geometry_utils.pxd":335
56181  *     DLE2[2] = DLE[2] + <np.float64_t> (<np.uint64_t> ((z - DLE[2])/dds1[2])) * dds1[2]
56182  *     p2[0] = <np.uint64_t> ((x - DLE2[0])/dds2[0])
56183  *     p2[1] = <np.uint64_t> ((y - DLE2[1])/dds2[1])             # <<<<<<<<<<<<<<
56184  *     p2[2] = <np.uint64_t> ((z - DLE2[2])/dds2[2])
56185  *     mi2 = encode_morton_64bit(p2[0], p2[1], p2[2])
56186  */
56187   (__pyx_v_p2[1]) = ((__pyx_t_5numpy_uint64_t)((__pyx_v_y - (__pyx_v_DLE2[1])) / (__pyx_v_dds2[1])));
56188 
56189   /* "yt/utilities/lib/geometry_utils.pxd":336
56190  *     p2[0] = <np.uint64_t> ((x - DLE2[0])/dds2[0])
56191  *     p2[1] = <np.uint64_t> ((y - DLE2[1])/dds2[1])
56192  *     p2[2] = <np.uint64_t> ((z - DLE2[2])/dds2[2])             # <<<<<<<<<<<<<<
56193  *     mi2 = encode_morton_64bit(p2[0], p2[1], p2[2])
56194  *     return mi2
56195  */
56196   (__pyx_v_p2[2]) = ((__pyx_t_5numpy_uint64_t)((__pyx_v_z - (__pyx_v_DLE2[2])) / (__pyx_v_dds2[2])));
56197 
56198   /* "yt/utilities/lib/geometry_utils.pxd":337
56199  *     p2[1] = <np.uint64_t> ((y - DLE2[1])/dds2[1])
56200  *     p2[2] = <np.uint64_t> ((z - DLE2[2])/dds2[2])
56201  *     mi2 = encode_morton_64bit(p2[0], p2[1], p2[2])             # <<<<<<<<<<<<<<
56202  *     return mi2
56203  *
56204  */
56205   __pyx_v_mi2 = __pyx_f_2yt_9utilities_3lib_14geometry_utils_encode_morton_64bit((__pyx_v_p2[0]), (__pyx_v_p2[1]), (__pyx_v_p2[2]));
56206 
56207   /* "yt/utilities/lib/geometry_utils.pxd":338
56208  *     p2[2] = <np.uint64_t> ((z - DLE2[2])/dds2[2])
56209  *     mi2 = encode_morton_64bit(p2[0], p2[1], p2[2])
56210  *     return mi2             # <<<<<<<<<<<<<<
56211  *
56212  *
56213  */
56214   __pyx_r = __pyx_v_mi2;
56215   goto __pyx_L0;
56216 
56217   /* "yt/utilities/lib/geometry_utils.pxd":326
56218  *
56219  * @cython.cdivision(True)
56220  * cdef inline np.uint64_t bounded_morton_split_relative_dds(np.float64_t x, np.float64_t y, np.float64_t z,             # <<<<<<<<<<<<<<
56221  *                                np.float64_t *DLE, np.float64_t *dds1, np.float64_t *dds2,
56222  *                                np.uint64_t *p2):
56223  */
56224 
56225   /* function exit code */
56226   __pyx_L0:;
56227   __Pyx_RefNannyFinishContext();
56228   return __pyx_r;
56229 }
56230 
56231 /* "yt/geometry/selection_routines.pxd":81
56232  *     cdef public SelectorObject sel2
56233  *
56234  * cdef inline np.float64_t _periodic_dist(np.float64_t x1, np.float64_t x2,             # <<<<<<<<<<<<<<
56235  *                                         np.float64_t dw, bint periodic) nogil:
56236  *     cdef np.float64_t rel = x1 - x2
56237  */
56238 
56239 static CYTHON_INLINE __pyx_t_5numpy_float64_t __pyx_f_2yt_8geometry_18selection_routines__periodic_dist(__pyx_t_5numpy_float64_t __pyx_v_x1, __pyx_t_5numpy_float64_t __pyx_v_x2, __pyx_t_5numpy_float64_t __pyx_v_dw, int __pyx_v_periodic) {
56240   __pyx_t_5numpy_float64_t __pyx_v_rel;
56241   __pyx_t_5numpy_float64_t __pyx_r;
56242   int __pyx_t_1;
56243 
56244   /* "yt/geometry/selection_routines.pxd":83
56245  * cdef inline np.float64_t _periodic_dist(np.float64_t x1, np.float64_t x2,
56246  *                                         np.float64_t dw, bint periodic) nogil:
56247  *     cdef np.float64_t rel = x1 - x2             # <<<<<<<<<<<<<<
56248  *     if not periodic: return rel
56249  *     if rel > dw * 0.5:
56250  */
56251   __pyx_v_rel = (__pyx_v_x1 - __pyx_v_x2);
56252 
56253   /* "yt/geometry/selection_routines.pxd":84
56254  *                                         np.float64_t dw, bint periodic) nogil:
56255  *     cdef np.float64_t rel = x1 - x2
56256  *     if not periodic: return rel             # <<<<<<<<<<<<<<
56257  *     if rel > dw * 0.5:
56258  *         rel -= dw
56259  */
56260   __pyx_t_1 = ((!(__pyx_v_periodic != 0)) != 0);
56261   if (__pyx_t_1) {
56262     __pyx_r = __pyx_v_rel;
56263     goto __pyx_L0;
56264   }
56265 
56266   /* "yt/geometry/selection_routines.pxd":85
56267  *     cdef np.float64_t rel = x1 - x2
56268  *     if not periodic: return rel
56269  *     if rel > dw * 0.5:             # <<<<<<<<<<<<<<
56270  *         rel -= dw
56271  *     elif rel < -dw * 0.5:
56272  */
56273   __pyx_t_1 = ((__pyx_v_rel > (__pyx_v_dw * 0.5)) != 0);
56274   if (__pyx_t_1) {
56275 
56276     /* "yt/geometry/selection_routines.pxd":86
56277  *     if not periodic: return rel
56278  *     if rel > dw * 0.5:
56279  *         rel -= dw             # <<<<<<<<<<<<<<
56280  *     elif rel < -dw * 0.5:
56281  *         rel += dw
56282  */
56283     __pyx_v_rel = (__pyx_v_rel - __pyx_v_dw);
56284 
56285     /* "yt/geometry/selection_routines.pxd":85
56286  *     cdef np.float64_t rel = x1 - x2
56287  *     if not periodic: return rel
56288  *     if rel > dw * 0.5:             # <<<<<<<<<<<<<<
56289  *         rel -= dw
56290  *     elif rel < -dw * 0.5:
56291  */
56292     goto __pyx_L4;
56293   }
56294 
56295   /* "yt/geometry/selection_routines.pxd":87
56296  *     if rel > dw * 0.5:
56297  *         rel -= dw
56298  *     elif rel < -dw * 0.5:             # <<<<<<<<<<<<<<
56299  *         rel += dw
56300  *     return rel
56301  */
56302   __pyx_t_1 = ((__pyx_v_rel < ((-__pyx_v_dw) * 0.5)) != 0);
56303   if (__pyx_t_1) {
56304 
56305     /* "yt/geometry/selection_routines.pxd":88
56306  *         rel -= dw
56307  *     elif rel < -dw * 0.5:
56308  *         rel += dw             # <<<<<<<<<<<<<<
56309  *     return rel
56310  */
56311     __pyx_v_rel = (__pyx_v_rel + __pyx_v_dw);
56312 
56313     /* "yt/geometry/selection_routines.pxd":87
56314  *     if rel > dw * 0.5:
56315  *         rel -= dw
56316  *     elif rel < -dw * 0.5:             # <<<<<<<<<<<<<<
56317  *         rel += dw
56318  *     return rel
56319  */
56320   }
56321   __pyx_L4:;
56322 
56323   /* "yt/geometry/selection_routines.pxd":89
56324  *     elif rel < -dw * 0.5:
56325  *         rel += dw
56326  *     return rel             # <<<<<<<<<<<<<<
56327  */
56328   __pyx_r = __pyx_v_rel;
56329   goto __pyx_L0;
56330 
56331   /* "yt/geometry/selection_routines.pxd":81
56332  *     cdef public SelectorObject sel2
56333  *
56334  * cdef inline np.float64_t _periodic_dist(np.float64_t x1, np.float64_t x2,             # <<<<<<<<<<<<<<
56335  *                                         np.float64_t dw, bint periodic) nogil:
56336  *     cdef np.float64_t rel = x1 - x2
56337  */
56338 
56339   /* function exit code */
56340   __pyx_L0:;
56341   return __pyx_r;
56342 }
56343 
56344 /* "yt/utilities/lib/bitarray.pxd":15
56345  *
56346  *
56347  * cdef inline void ba_set_value(np.uint8_t *buf, np.uint64_t ind,             # <<<<<<<<<<<<<<
56348  *                               np.uint8_t val) nogil:
56349  *     # This assumes 8 bit buffer
56350  */
56351 
56352 static CYTHON_INLINE void __pyx_f_2yt_9utilities_3lib_8bitarray_ba_set_value(__pyx_t_5numpy_uint8_t *__pyx_v_buf, __pyx_t_5numpy_uint64_t __pyx_v_ind, __pyx_t_5numpy_uint8_t __pyx_v_val) {
56353   int __pyx_t_1;
56354   __pyx_t_5numpy_uint64_t __pyx_t_2;
56355 
56356   /* "yt/utilities/lib/bitarray.pxd":18
56357  *                               np.uint8_t val) nogil:
56358  *     # This assumes 8 bit buffer
56359  *     if val > 0:             # <<<<<<<<<<<<<<
56360  *         buf[ind >> 3] |= (1 << (ind & 7))
56361  *     else:
56362  */
56363   __pyx_t_1 = ((__pyx_v_val > 0) != 0);
56364   if (__pyx_t_1) {
56365 
56366     /* "yt/utilities/lib/bitarray.pxd":19
56367  *     # This assumes 8 bit buffer
56368  *     if val > 0:
56369  *         buf[ind >> 3] |= (1 << (ind & 7))             # <<<<<<<<<<<<<<
56370  *     else:
56371  *         buf[ind >> 3] &= ~(1 << (ind & 7))
56372  */
56373     __pyx_t_2 = (__pyx_v_ind >> 3);
56374     (__pyx_v_buf[__pyx_t_2]) = ((__pyx_v_buf[__pyx_t_2]) | (1 << (__pyx_v_ind & 7)));
56375 
56376     /* "yt/utilities/lib/bitarray.pxd":18
56377  *                               np.uint8_t val) nogil:
56378  *     # This assumes 8 bit buffer
56379  *     if val > 0:             # <<<<<<<<<<<<<<
56380  *         buf[ind >> 3] |= (1 << (ind & 7))
56381  *     else:
56382  */
56383     goto __pyx_L3;
56384   }
56385 
56386   /* "yt/utilities/lib/bitarray.pxd":21
56387  *         buf[ind >> 3] |= (1 << (ind & 7))
56388  *     else:
56389  *         buf[ind >> 3] &= ~(1 << (ind & 7))             # <<<<<<<<<<<<<<
56390  *
56391  * cdef inline np.uint8_t ba_get_value(np.uint8_t *buf, np.uint64_t ind) nogil:
56392  */
56393   /*else*/ {
56394     __pyx_t_2 = (__pyx_v_ind >> 3);
56395     (__pyx_v_buf[__pyx_t_2]) = ((__pyx_v_buf[__pyx_t_2]) & (~(1 << (__pyx_v_ind & 7))));
56396   }
56397   __pyx_L3:;
56398 
56399   /* "yt/utilities/lib/bitarray.pxd":15
56400  *
56401  *
56402  * cdef inline void ba_set_value(np.uint8_t *buf, np.uint64_t ind,             # <<<<<<<<<<<<<<
56403  *                               np.uint8_t val) nogil:
56404  *     # This assumes 8 bit buffer
56405  */
56406 
56407   /* function exit code */
56408 }
56409 
56410 /* "yt/utilities/lib/bitarray.pxd":23
56411  *         buf[ind >> 3] &= ~(1 << (ind & 7))
56412  *
56413  * cdef inline np.uint8_t ba_get_value(np.uint8_t *buf, np.uint64_t ind) nogil:             # <<<<<<<<<<<<<<
56414  *     cdef np.uint8_t rv = (buf[ind >> 3] & (1 << (ind & 7)))
56415  *     if rv == 0: return 0
56416  */
56417 
56418 static CYTHON_INLINE __pyx_t_5numpy_uint8_t __pyx_f_2yt_9utilities_3lib_8bitarray_ba_get_value(__pyx_t_5numpy_uint8_t *__pyx_v_buf, __pyx_t_5numpy_uint64_t __pyx_v_ind) {
56419   __pyx_t_5numpy_uint8_t __pyx_v_rv;
56420   __pyx_t_5numpy_uint8_t __pyx_r;
56421   int __pyx_t_1;
56422 
56423   /* "yt/utilities/lib/bitarray.pxd":24
56424  *
56425  * cdef inline np.uint8_t ba_get_value(np.uint8_t *buf, np.uint64_t ind) nogil:
56426  *     cdef np.uint8_t rv = (buf[ind >> 3] & (1 << (ind & 7)))             # <<<<<<<<<<<<<<
56427  *     if rv == 0: return 0
56428  *     return 1
56429  */
56430   __pyx_v_rv = ((__pyx_v_buf[(__pyx_v_ind >> 3)]) & (1 << (__pyx_v_ind & 7)));
56431 
56432   /* "yt/utilities/lib/bitarray.pxd":25
56433  * cdef inline np.uint8_t ba_get_value(np.uint8_t *buf, np.uint64_t ind) nogil:
56434  *     cdef np.uint8_t rv = (buf[ind >> 3] & (1 << (ind & 7)))
56435  *     if rv == 0: return 0             # <<<<<<<<<<<<<<
56436  *     return 1
56437  *
56438  */
56439   __pyx_t_1 = ((__pyx_v_rv == 0) != 0);
56440   if (__pyx_t_1) {
56441     __pyx_r = 0;
56442     goto __pyx_L0;
56443   }
56444 
56445   /* "yt/utilities/lib/bitarray.pxd":26
56446  *     cdef np.uint8_t rv = (buf[ind >> 3] & (1 << (ind & 7)))
56447  *     if rv == 0: return 0
56448  *     return 1             # <<<<<<<<<<<<<<
56449  *
56450  * cdef class bitarray:
56451  */
56452   __pyx_r = 1;
56453   goto __pyx_L0;
56454 
56455   /* "yt/utilities/lib/bitarray.pxd":23
56456  *         buf[ind >> 3] &= ~(1 << (ind & 7))
56457  *
56458  * cdef inline np.uint8_t ba_get_value(np.uint8_t *buf, np.uint64_t ind) nogil:             # <<<<<<<<<<<<<<
56459  *     cdef np.uint8_t rv = (buf[ind >> 3] & (1 << (ind & 7)))
56460  *     if rv == 0: return 0
56461  */
56462 
56463   /* function exit code */
56464   __pyx_L0:;
56465   return __pyx_r;
56466 }
56467 
56468 /* "volume_container.pxd":35
56469  *     int dims[3]
56470  *
56471  * cdef inline int vc_index(VolumeContainer *vc, int i, int j, int k):             # <<<<<<<<<<<<<<
56472  *     #-----------------------------------------------------------------------------
56473  *     # vc_index(VolumeContainer *vc, int i, int j, int k)
56474  */
56475 
56476 static CYTHON_INLINE int __pyx_f_2yt_9utilities_3lib_16volume_container_vc_index(struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer *__pyx_v_vc, int __pyx_v_i, int __pyx_v_j, int __pyx_v_k) {
56477   int __pyx_r;
56478   __Pyx_RefNannyDeclarations
56479   __Pyx_RefNannySetupContext("vc_index", 0);
56480 
56481   /* "volume_container.pxd":63
56482  *     # The 3-dimensional case (presented below) is similar.
56483  *     #-----------------------------------------------------------------------------
56484  *     return (i*vc.dims[1]+j)*vc.dims[2]+k             # <<<<<<<<<<<<<<
56485  *
56486  * cdef inline int vc_pos_index(VolumeContainer *vc, np.float64_t *spos):
56487  */
56488   __pyx_r = ((((__pyx_v_i * (__pyx_v_vc->dims[1])) + __pyx_v_j) * (__pyx_v_vc->dims[2])) + __pyx_v_k);
56489   goto __pyx_L0;
56490 
56491   /* "volume_container.pxd":35
56492  *     int dims[3]
56493  *
56494  * cdef inline int vc_index(VolumeContainer *vc, int i, int j, int k):             # <<<<<<<<<<<<<<
56495  *     #-----------------------------------------------------------------------------
56496  *     # vc_index(VolumeContainer *vc, int i, int j, int k)
56497  */
56498 
56499   /* function exit code */
56500   __pyx_L0:;
56501   __Pyx_RefNannyFinishContext();
56502   return __pyx_r;
56503 }
56504 
56505 /* "volume_container.pxd":65
56506  *     return (i*vc.dims[1]+j)*vc.dims[2]+k
56507  *
56508  * cdef inline int vc_pos_index(VolumeContainer *vc, np.float64_t *spos):             # <<<<<<<<<<<<<<
56509  *     cdef int index[3]
56510  *     cdef int i
56511  */
56512 
56513 static CYTHON_INLINE int __pyx_f_2yt_9utilities_3lib_16volume_container_vc_pos_index(struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer *__pyx_v_vc, __pyx_t_5numpy_float64_t *__pyx_v_spos) {
56514   int __pyx_v_index[3];
56515   int __pyx_v_i;
56516   int __pyx_r;
56517   __Pyx_RefNannyDeclarations
56518   int __pyx_t_1;
56519   __Pyx_RefNannySetupContext("vc_pos_index", 0);
56520 
56521   /* "volume_container.pxd":68
56522  *     cdef int index[3]
56523  *     cdef int i
56524  *     for i in range(3):             # <<<<<<<<<<<<<<
56525  *         index[i] = <int> ((spos[i] - vc.left_edge[i]) * vc.idds[i])
56526  *     return vc_index(vc, index[0], index[1], index[2])
56527  */
56528   for (__pyx_t_1 = 0; __pyx_t_1 < 3; __pyx_t_1+=1) {
56529     __pyx_v_i = __pyx_t_1;
56530 
56531     /* "volume_container.pxd":69
56532  *     cdef int i
56533  *     for i in range(3):
56534  *         index[i] = <int> ((spos[i] - vc.left_edge[i]) * vc.idds[i])             # <<<<<<<<<<<<<<
56535  *     return vc_index(vc, index[0], index[1], index[2])
56536  */
56537     (__pyx_v_index[__pyx_v_i]) = ((int)(((__pyx_v_spos[__pyx_v_i]) - (__pyx_v_vc->left_edge[__pyx_v_i])) * (__pyx_v_vc->idds[__pyx_v_i])));
56538   }
56539 
56540   /* "volume_container.pxd":70
56541  *     for i in range(3):
56542  *         index[i] = <int> ((spos[i] - vc.left_edge[i]) * vc.idds[i])
56543  *     return vc_index(vc, index[0], index[1], index[2])             # <<<<<<<<<<<<<<
56544  */
56545   __pyx_r = __pyx_f_2yt_9utilities_3lib_16volume_container_vc_index(__pyx_v_vc, (__pyx_v_index[0]), (__pyx_v_index[1]), (__pyx_v_index[2]));
56546   goto __pyx_L0;
56547 
56548   /* "volume_container.pxd":65
56549  *     return (i*vc.dims[1]+j)*vc.dims[2]+k
56550  *
56551  * cdef inline int vc_pos_index(VolumeContainer *vc, np.float64_t *spos):             # <<<<<<<<<<<<<<
56552  *     cdef int index[3]
56553  *     cdef int i
56554  */
56555 
56556   /* function exit code */
56557   __pyx_L0:;
56558   __Pyx_RefNannyFinishContext();
56559   return __pyx_r;
56560 }
56561 
56562 /* "carray.to_py":112
56563  *
56564  * @cname("__Pyx_carray_to_py___pyx_t_5numpy_float64_t")
56565  * cdef inline list __Pyx_carray_to_py___pyx_t_5numpy_float64_t(base_type *v, Py_ssize_t length):             # <<<<<<<<<<<<<<
56566  *     cdef size_t i
56567  *     cdef object value
56568  */
56569 
56570 static CYTHON_INLINE PyObject *__Pyx_carray_to_py___pyx_t_5numpy_float64_t(__pyx_t_5numpy_float64_t *__pyx_v_v, Py_ssize_t __pyx_v_length) {
56571   size_t __pyx_v_i;
56572   PyObject *__pyx_v_value = 0;
56573   PyObject *__pyx_v_l = NULL;
56574   PyObject *__pyx_r = NULL;
56575   __Pyx_RefNannyDeclarations
56576   PyObject *__pyx_t_1 = NULL;
56577   size_t __pyx_t_2;
56578   size_t __pyx_t_3;
56579   size_t __pyx_t_4;
56580   __Pyx_RefNannySetupContext("__Pyx_carray_to_py___pyx_t_5numpy_float64_t", 0);
56581 
56582   /* "carray.to_py":115
56583  *     cdef size_t i
56584  *     cdef object value
56585  *     l = PyList_New(length)             # <<<<<<<<<<<<<<
56586  *     for i in range(<size_t>length):
56587  *         value = v[i]
56588  */
56589   __pyx_t_1 = PyList_New(__pyx_v_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 115, __pyx_L1_error)
56590   __Pyx_GOTREF(__pyx_t_1);
56591   __pyx_v_l = ((PyObject*)__pyx_t_1);
56592   __pyx_t_1 = 0;
56593 
56594   /* "carray.to_py":116
56595  *     cdef object value
56596  *     l = PyList_New(length)
56597  *     for i in range(<size_t>length):             # <<<<<<<<<<<<<<
56598  *         value = v[i]
56599  *         Py_INCREF(value)
56600  */
56601   __pyx_t_2 = ((size_t)__pyx_v_length);
56602   __pyx_t_3 = __pyx_t_2;
56603   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
56604     __pyx_v_i = __pyx_t_4;
56605 
56606     /* "carray.to_py":117
56607  *     l = PyList_New(length)
56608  *     for i in range(<size_t>length):
56609  *         value = v[i]             # <<<<<<<<<<<<<<
56610  *         Py_INCREF(value)
56611  *         PyList_SET_ITEM(l, i, value)
56612  */
56613     __pyx_t_1 = PyFloat_FromDouble((__pyx_v_v[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 117, __pyx_L1_error)
56614     __Pyx_GOTREF(__pyx_t_1);
56615     __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_1);
56616     __pyx_t_1 = 0;
56617 
56618     /* "carray.to_py":118
56619  *     for i in range(<size_t>length):
56620  *         value = v[i]
56621  *         Py_INCREF(value)             # <<<<<<<<<<<<<<
56622  *         PyList_SET_ITEM(l, i, value)
56623  *     return l
56624  */
56625     Py_INCREF(__pyx_v_value);
56626 
56627     /* "carray.to_py":119
56628  *         value = v[i]
56629  *         Py_INCREF(value)
56630  *         PyList_SET_ITEM(l, i, value)             # <<<<<<<<<<<<<<
56631  *     return l
56632  *
56633  */
56634     PyList_SET_ITEM(__pyx_v_l, __pyx_v_i, __pyx_v_value);
56635   }
56636 
56637   /* "carray.to_py":120
56638  *         Py_INCREF(value)
56639  *         PyList_SET_ITEM(l, i, value)
56640  *     return l             # <<<<<<<<<<<<<<
56641  *
56642  *
56643  */
56644   __Pyx_XDECREF(__pyx_r);
56645   __Pyx_INCREF(__pyx_v_l);
56646   __pyx_r = __pyx_v_l;
56647   goto __pyx_L0;
56648 
56649   /* "carray.to_py":112
56650  *
56651  * @cname("__Pyx_carray_to_py___pyx_t_5numpy_float64_t")
56652  * cdef inline list __Pyx_carray_to_py___pyx_t_5numpy_float64_t(base_type *v, Py_ssize_t length):             # <<<<<<<<<<<<<<
56653  *     cdef size_t i
56654  *     cdef object value
56655  */
56656 
56657   /* function exit code */
56658   __pyx_L1_error:;
56659   __Pyx_XDECREF(__pyx_t_1);
56660   __Pyx_AddTraceback("carray.to_py.__Pyx_carray_to_py___pyx_t_5numpy_float64_t", __pyx_clineno, __pyx_lineno, __pyx_filename);
56661   __pyx_r = 0;
56662   __pyx_L0:;
56663   __Pyx_XDECREF(__pyx_v_value);
56664   __Pyx_XDECREF(__pyx_v_l);
56665   __Pyx_XGIVEREF(__pyx_r);
56666   __Pyx_RefNannyFinishContext();
56667   return __pyx_r;
56668 }
56669 
56670 /* "carray.to_py":124
56671  *
56672  * @cname("__Pyx_carray_to_tuple___pyx_t_5numpy_float64_t")
56673  * cdef inline tuple __Pyx_carray_to_tuple___pyx_t_5numpy_float64_t(base_type *v, Py_ssize_t length):             # <<<<<<<<<<<<<<
56674  *     cdef size_t i
56675  *     cdef object value
56676  */
56677 
56678 static CYTHON_INLINE PyObject *__Pyx_carray_to_tuple___pyx_t_5numpy_float64_t(__pyx_t_5numpy_float64_t *__pyx_v_v, Py_ssize_t __pyx_v_length) {
56679   size_t __pyx_v_i;
56680   PyObject *__pyx_v_value = 0;
56681   PyObject *__pyx_v_t = NULL;
56682   PyObject *__pyx_r = NULL;
56683   __Pyx_RefNannyDeclarations
56684   PyObject *__pyx_t_1 = NULL;
56685   size_t __pyx_t_2;
56686   size_t __pyx_t_3;
56687   size_t __pyx_t_4;
56688   __Pyx_RefNannySetupContext("__Pyx_carray_to_tuple___pyx_t_5numpy_float64_t", 0);
56689 
56690   /* "carray.to_py":127
56691  *     cdef size_t i
56692  *     cdef object value
56693  *     t = PyTuple_New(length)             # <<<<<<<<<<<<<<
56694  *     for i in range(<size_t>length):
56695  *         value = v[i]
56696  */
56697   __pyx_t_1 = PyTuple_New(__pyx_v_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 127, __pyx_L1_error)
56698   __Pyx_GOTREF(__pyx_t_1);
56699   __pyx_v_t = ((PyObject*)__pyx_t_1);
56700   __pyx_t_1 = 0;
56701 
56702   /* "carray.to_py":128
56703  *     cdef object value
56704  *     t = PyTuple_New(length)
56705  *     for i in range(<size_t>length):             # <<<<<<<<<<<<<<
56706  *         value = v[i]
56707  *         Py_INCREF(value)
56708  */
56709   __pyx_t_2 = ((size_t)__pyx_v_length);
56710   __pyx_t_3 = __pyx_t_2;
56711   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
56712     __pyx_v_i = __pyx_t_4;
56713 
56714     /* "carray.to_py":129
56715  *     t = PyTuple_New(length)
56716  *     for i in range(<size_t>length):
56717  *         value = v[i]             # <<<<<<<<<<<<<<
56718  *         Py_INCREF(value)
56719  *         PyTuple_SET_ITEM(t, i, value)
56720  */
56721     __pyx_t_1 = PyFloat_FromDouble((__pyx_v_v[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 129, __pyx_L1_error)
56722     __Pyx_GOTREF(__pyx_t_1);
56723     __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_1);
56724     __pyx_t_1 = 0;
56725 
56726     /* "carray.to_py":130
56727  *     for i in range(<size_t>length):
56728  *         value = v[i]
56729  *         Py_INCREF(value)             # <<<<<<<<<<<<<<
56730  *         PyTuple_SET_ITEM(t, i, value)
56731  *     return t
56732  */
56733     Py_INCREF(__pyx_v_value);
56734 
56735     /* "carray.to_py":131
56736  *         value = v[i]
56737  *         Py_INCREF(value)
56738  *         PyTuple_SET_ITEM(t, i, value)             # <<<<<<<<<<<<<<
56739  *     return t
56740  */
56741     PyTuple_SET_ITEM(__pyx_v_t, __pyx_v_i, __pyx_v_value);
56742   }
56743 
56744   /* "carray.to_py":132
56745  *         Py_INCREF(value)
56746  *         PyTuple_SET_ITEM(t, i, value)
56747  *     return t             # <<<<<<<<<<<<<<
56748  */
56749   __Pyx_XDECREF(__pyx_r);
56750   __Pyx_INCREF(__pyx_v_t);
56751   __pyx_r = __pyx_v_t;
56752   goto __pyx_L0;
56753 
56754   /* "carray.to_py":124
56755  *
56756  * @cname("__Pyx_carray_to_tuple___pyx_t_5numpy_float64_t")
56757  * cdef inline tuple __Pyx_carray_to_tuple___pyx_t_5numpy_float64_t(base_type *v, Py_ssize_t length):             # <<<<<<<<<<<<<<
56758  *     cdef size_t i
56759  *     cdef object value
56760  */
56761 
56762   /* function exit code */
56763   __pyx_L1_error:;
56764   __Pyx_XDECREF(__pyx_t_1);
56765   __Pyx_AddTraceback("carray.to_py.__Pyx_carray_to_tuple___pyx_t_5numpy_float64_t", __pyx_clineno, __pyx_lineno, __pyx_filename);
56766   __pyx_r = 0;
56767   __pyx_L0:;
56768   __Pyx_XDECREF(__pyx_v_value);
56769   __Pyx_XDECREF(__pyx_v_t);
56770   __Pyx_XGIVEREF(__pyx_r);
56771   __Pyx_RefNannyFinishContext();
56772   return __pyx_r;
56773 }
56774 
56775 /* "carray.from_py":77
56776  *
56777  * @cname("__Pyx_carray_from_py___pyx_t_5numpy_float64_t")
56778  * cdef int __Pyx_carray_from_py___pyx_t_5numpy_float64_t(object o, base_type *v, Py_ssize_t length) except -1:             # <<<<<<<<<<<<<<
56779  *     cdef Py_ssize_t i = length
56780  *     try:
56781  */
56782 
56783 static int __Pyx_carray_from_py___pyx_t_5numpy_float64_t(PyObject *__pyx_v_o, __pyx_t_5numpy_float64_t *__pyx_v_v, Py_ssize_t __pyx_v_length) {
56784   Py_ssize_t __pyx_v_i;
56785   PyObject *__pyx_v_item = NULL;
56786   int __pyx_r;
56787   __Pyx_RefNannyDeclarations
56788   PyObject *__pyx_t_1 = NULL;
56789   PyObject *__pyx_t_2 = NULL;
56790   PyObject *__pyx_t_3 = NULL;
56791   Py_ssize_t __pyx_t_4;
56792   int __pyx_t_5;
56793   int __pyx_t_6;
56794   PyObject *__pyx_t_7 = NULL;
56795   Py_ssize_t __pyx_t_8;
56796   PyObject *(*__pyx_t_9)(PyObject *);
56797   PyObject *__pyx_t_10 = NULL;
56798   __pyx_t_5numpy_float64_t __pyx_t_11;
56799   char const *__pyx_t_12;
56800   __Pyx_RefNannySetupContext("__Pyx_carray_from_py___pyx_t_5numpy_float64_t", 0);
56801 
56802   /* "carray.from_py":78
56803  * @cname("__Pyx_carray_from_py___pyx_t_5numpy_float64_t")
56804  * cdef int __Pyx_carray_from_py___pyx_t_5numpy_float64_t(object o, base_type *v, Py_ssize_t length) except -1:
56805  *     cdef Py_ssize_t i = length             # <<<<<<<<<<<<<<
56806  *     try:
56807  *         i = len(o)
56808  */
56809   __pyx_v_i = __pyx_v_length;
56810 
56811   /* "carray.from_py":79
56812  * cdef int __Pyx_carray_from_py___pyx_t_5numpy_float64_t(object o, base_type *v, Py_ssize_t length) except -1:
56813  *     cdef Py_ssize_t i = length
56814  *     try:             # <<<<<<<<<<<<<<
56815  *         i = len(o)
56816  *     except (TypeError, OverflowError):
56817  */
56818   {
56819     __Pyx_PyThreadState_declare
56820     __Pyx_PyThreadState_assign
56821     __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
56822     __Pyx_XGOTREF(__pyx_t_1);
56823     __Pyx_XGOTREF(__pyx_t_2);
56824     __Pyx_XGOTREF(__pyx_t_3);
56825     /*try:*/ {
56826 
56827       /* "carray.from_py":80
56828  *     cdef Py_ssize_t i = length
56829  *     try:
56830  *         i = len(o)             # <<<<<<<<<<<<<<
56831  *     except (TypeError, OverflowError):
56832  *         pass
56833  */
56834       __pyx_t_4 = PyObject_Length(__pyx_v_o); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(5, 80, __pyx_L3_error)
56835       __pyx_v_i = __pyx_t_4;
56836 
56837       /* "carray.from_py":79
56838  * cdef int __Pyx_carray_from_py___pyx_t_5numpy_float64_t(object o, base_type *v, Py_ssize_t length) except -1:
56839  *     cdef Py_ssize_t i = length
56840  *     try:             # <<<<<<<<<<<<<<
56841  *         i = len(o)
56842  *     except (TypeError, OverflowError):
56843  */
56844     }
56845     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
56846     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
56847     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
56848     goto __pyx_L8_try_end;
56849     __pyx_L3_error:;
56850 
56851     /* "carray.from_py":81
56852  *     try:
56853  *         i = len(o)
56854  *     except (TypeError, OverflowError):             # <<<<<<<<<<<<<<
56855  *         pass
56856  *     if i == length:
56857  */
56858     __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_OverflowError);
56859     if (__pyx_t_5) {
56860       __Pyx_ErrRestore(0,0,0);
56861       goto __pyx_L4_exception_handled;
56862     }
56863     goto __pyx_L5_except_error;
56864     __pyx_L5_except_error:;
56865 
56866     /* "carray.from_py":79
56867  * cdef int __Pyx_carray_from_py___pyx_t_5numpy_float64_t(object o, base_type *v, Py_ssize_t length) except -1:
56868  *     cdef Py_ssize_t i = length
56869  *     try:             # <<<<<<<<<<<<<<
56870  *         i = len(o)
56871  *     except (TypeError, OverflowError):
56872  */
56873     __Pyx_XGIVEREF(__pyx_t_1);
56874     __Pyx_XGIVEREF(__pyx_t_2);
56875     __Pyx_XGIVEREF(__pyx_t_3);
56876     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
56877     goto __pyx_L1_error;
56878     __pyx_L4_exception_handled:;
56879     __Pyx_XGIVEREF(__pyx_t_1);
56880     __Pyx_XGIVEREF(__pyx_t_2);
56881     __Pyx_XGIVEREF(__pyx_t_3);
56882     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
56883     __pyx_L8_try_end:;
56884   }
56885 
56886   /* "carray.from_py":83
56887  *     except (TypeError, OverflowError):
56888  *         pass
56889  *     if i == length:             # <<<<<<<<<<<<<<
56890  *         for i, item in enumerate(o):
56891  *             if i >= length:
56892  */
56893   __pyx_t_6 = ((__pyx_v_i == __pyx_v_length) != 0);
56894   if (__pyx_t_6) {
56895 
56896     /* "carray.from_py":84
56897  *         pass
56898  *     if i == length:
56899  *         for i, item in enumerate(o):             # <<<<<<<<<<<<<<
56900  *             if i >= length:
56901  *                 break
56902  */
56903     __pyx_t_4 = 0;
56904     if (likely(PyList_CheckExact(__pyx_v_o)) || PyTuple_CheckExact(__pyx_v_o)) {
56905       __pyx_t_7 = __pyx_v_o; __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = 0;
56906       __pyx_t_9 = NULL;
56907     } else {
56908       __pyx_t_8 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_o); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 84, __pyx_L1_error)
56909       __Pyx_GOTREF(__pyx_t_7);
56910       __pyx_t_9 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 84, __pyx_L1_error)
56911     }
56912     for (;;) {
56913       if (likely(!__pyx_t_9)) {
56914         if (likely(PyList_CheckExact(__pyx_t_7))) {
56915           if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_7)) break;
56916           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
56917           __pyx_t_10 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(5, 84, __pyx_L1_error)
56918           #else
56919           __pyx_t_10 = PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 84, __pyx_L1_error)
56920           __Pyx_GOTREF(__pyx_t_10);
56921           #endif
56922         } else {
56923           if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
56924           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
56925           __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(5, 84, __pyx_L1_error)
56926           #else
56927           __pyx_t_10 = PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 84, __pyx_L1_error)
56928           __Pyx_GOTREF(__pyx_t_10);
56929           #endif
56930         }
56931       } else {
56932         __pyx_t_10 = __pyx_t_9(__pyx_t_7);
56933         if (unlikely(!__pyx_t_10)) {
56934           PyObject* exc_type = PyErr_Occurred();
56935           if (exc_type) {
56936             if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
56937             else __PYX_ERR(5, 84, __pyx_L1_error)
56938           }
56939           break;
56940         }
56941         __Pyx_GOTREF(__pyx_t_10);
56942       }
56943       __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_10);
56944       __pyx_t_10 = 0;
56945       __pyx_v_i = __pyx_t_4;
56946       __pyx_t_4 = (__pyx_t_4 + 1);
56947 
56948       /* "carray.from_py":85
56949  *     if i == length:
56950  *         for i, item in enumerate(o):
56951  *             if i >= length:             # <<<<<<<<<<<<<<
56952  *                 break
56953  *             v[i] = item
56954  */
56955       __pyx_t_6 = ((__pyx_v_i >= __pyx_v_length) != 0);
56956       if (__pyx_t_6) {
56957 
56958         /* "carray.from_py":86
56959  *         for i, item in enumerate(o):
56960  *             if i >= length:
56961  *                 break             # <<<<<<<<<<<<<<
56962  *             v[i] = item
56963  *         else:
56964  */
56965         goto __pyx_L11_break;
56966 
56967         /* "carray.from_py":85
56968  *     if i == length:
56969  *         for i, item in enumerate(o):
56970  *             if i >= length:             # <<<<<<<<<<<<<<
56971  *                 break
56972  *             v[i] = item
56973  */
56974       }
56975 
56976       /* "carray.from_py":87
56977  *             if i >= length:
56978  *                 break
56979  *             v[i] = item             # <<<<<<<<<<<<<<
56980  *         else:
56981  *             i += 1  # convert index to length
56982  */
56983       __pyx_t_11 = __pyx_PyFloat_AsDouble(__pyx_v_item); if (unlikely((__pyx_t_11 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(5, 87, __pyx_L1_error)
56984       (__pyx_v_v[__pyx_v_i]) = __pyx_t_11;
56985 
56986       /* "carray.from_py":84
56987  *         pass
56988  *     if i == length:
56989  *         for i, item in enumerate(o):             # <<<<<<<<<<<<<<
56990  *             if i >= length:
56991  *                 break
56992  */
56993     }
56994     /*else*/ {
56995 
56996       /* "carray.from_py":89
56997  *             v[i] = item
56998  *         else:
56999  *             i += 1  # convert index to length             # <<<<<<<<<<<<<<
57000  *             if i == length:
57001  *                 return 0
57002  */
57003       __pyx_v_i = (__pyx_v_i + 1);
57004 
57005       /* "carray.from_py":90
57006  *         else:
57007  *             i += 1  # convert index to length
57008  *             if i == length:             # <<<<<<<<<<<<<<
57009  *                 return 0
57010  *
57011  */
57012       __pyx_t_6 = ((__pyx_v_i == __pyx_v_length) != 0);
57013       if (__pyx_t_6) {
57014 
57015         /* "carray.from_py":91
57016  *             i += 1  # convert index to length
57017  *             if i == length:
57018  *                 return 0             # <<<<<<<<<<<<<<
57019  *
57020  *     PyErr_Format(
57021  */
57022         __pyx_r = 0;
57023         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
57024         goto __pyx_L0;
57025 
57026         /* "carray.from_py":90
57027  *         else:
57028  *             i += 1  # convert index to length
57029  *             if i == length:             # <<<<<<<<<<<<<<
57030  *                 return 0
57031  *
57032  */
57033       }
57034     }
57035 
57036     /* "carray.from_py":84
57037  *         pass
57038  *     if i == length:
57039  *         for i, item in enumerate(o):             # <<<<<<<<<<<<<<
57040  *             if i >= length:
57041  *                 break
57042  */
57043     __pyx_L11_break:;
57044     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
57045 
57046     /* "carray.from_py":83
57047  *     except (TypeError, OverflowError):
57048  *         pass
57049  *     if i == length:             # <<<<<<<<<<<<<<
57050  *         for i, item in enumerate(o):
57051  *             if i >= length:
57052  */
57053   }
57054 
57055   /* "carray.from_py":96
57056  *         IndexError,
57057  *         ("too many values found during array assignment, expected %zd"
57058  *          if i >= length else             # <<<<<<<<<<<<<<
57059  *          "not enough values found during array assignment, expected %zd, got %zd"),
57060  *         length, i)
57061  */
57062   if (((__pyx_v_i >= __pyx_v_length) != 0)) {
57063     __pyx_t_12 = ((char const *)"too many values found during array assignment, expected %zd");
57064   } else {
57065     __pyx_t_12 = ((char const *)"not enough values found during array assignment, expected %zd, got %zd");
57066   }
57067 
57068   /* "carray.from_py":93
57069  *                 return 0
57070  *
57071  *     PyErr_Format(             # <<<<<<<<<<<<<<
57072  *         IndexError,
57073  *         ("too many values found during array assignment, expected %zd"
57074  */
57075   __pyx_t_7 = PyErr_Format(__pyx_builtin_IndexError, __pyx_t_12, __pyx_v_length, __pyx_v_i); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 93, __pyx_L1_error)
57076   __Pyx_GOTREF(__pyx_t_7);
57077   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
57078 
57079   /* "carray.from_py":77
57080  *
57081  * @cname("__Pyx_carray_from_py___pyx_t_5numpy_float64_t")
57082  * cdef int __Pyx_carray_from_py___pyx_t_5numpy_float64_t(object o, base_type *v, Py_ssize_t length) except -1:             # <<<<<<<<<<<<<<
57083  *     cdef Py_ssize_t i = length
57084  *     try:
57085  */
57086 
57087   /* function exit code */
57088   __pyx_r = 0;
57089   goto __pyx_L0;
57090   __pyx_L1_error:;
57091   __Pyx_XDECREF(__pyx_t_7);
57092   __Pyx_XDECREF(__pyx_t_10);
57093   __Pyx_AddTraceback("carray.from_py.__Pyx_carray_from_py___pyx_t_5numpy_float64_t", __pyx_clineno, __pyx_lineno, __pyx_filename);
57094   __pyx_r = -1;
57095   __pyx_L0:;
57096   __Pyx_XDECREF(__pyx_v_item);
57097   __Pyx_RefNannyFinishContext();
57098   return __pyx_r;
57099 }
57100 
57101 /* "carray.to_py":112
57102  *
57103  * @cname("__Pyx_carray_to_py_int")
57104  * cdef inline list __Pyx_carray_to_py_int(base_type *v, Py_ssize_t length):             # <<<<<<<<<<<<<<
57105  *     cdef size_t i
57106  *     cdef object value
57107  */
57108 
57109 static CYTHON_INLINE PyObject *__Pyx_carray_to_py_int(int *__pyx_v_v, Py_ssize_t __pyx_v_length) {
57110   size_t __pyx_v_i;
57111   PyObject *__pyx_v_value = 0;
57112   PyObject *__pyx_v_l = NULL;
57113   PyObject *__pyx_r = NULL;
57114   __Pyx_RefNannyDeclarations
57115   PyObject *__pyx_t_1 = NULL;
57116   size_t __pyx_t_2;
57117   size_t __pyx_t_3;
57118   size_t __pyx_t_4;
57119   __Pyx_RefNannySetupContext("__Pyx_carray_to_py_int", 0);
57120 
57121   /* "carray.to_py":115
57122  *     cdef size_t i
57123  *     cdef object value
57124  *     l = PyList_New(length)             # <<<<<<<<<<<<<<
57125  *     for i in range(<size_t>length):
57126  *         value = v[i]
57127  */
57128   __pyx_t_1 = PyList_New(__pyx_v_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 115, __pyx_L1_error)
57129   __Pyx_GOTREF(__pyx_t_1);
57130   __pyx_v_l = ((PyObject*)__pyx_t_1);
57131   __pyx_t_1 = 0;
57132 
57133   /* "carray.to_py":116
57134  *     cdef object value
57135  *     l = PyList_New(length)
57136  *     for i in range(<size_t>length):             # <<<<<<<<<<<<<<
57137  *         value = v[i]
57138  *         Py_INCREF(value)
57139  */
57140   __pyx_t_2 = ((size_t)__pyx_v_length);
57141   __pyx_t_3 = __pyx_t_2;
57142   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
57143     __pyx_v_i = __pyx_t_4;
57144 
57145     /* "carray.to_py":117
57146  *     l = PyList_New(length)
57147  *     for i in range(<size_t>length):
57148  *         value = v[i]             # <<<<<<<<<<<<<<
57149  *         Py_INCREF(value)
57150  *         PyList_SET_ITEM(l, i, value)
57151  */
57152     __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_v[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 117, __pyx_L1_error)
57153     __Pyx_GOTREF(__pyx_t_1);
57154     __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_1);
57155     __pyx_t_1 = 0;
57156 
57157     /* "carray.to_py":118
57158  *     for i in range(<size_t>length):
57159  *         value = v[i]
57160  *         Py_INCREF(value)             # <<<<<<<<<<<<<<
57161  *         PyList_SET_ITEM(l, i, value)
57162  *     return l
57163  */
57164     Py_INCREF(__pyx_v_value);
57165 
57166     /* "carray.to_py":119
57167  *         value = v[i]
57168  *         Py_INCREF(value)
57169  *         PyList_SET_ITEM(l, i, value)             # <<<<<<<<<<<<<<
57170  *     return l
57171  *
57172  */
57173     PyList_SET_ITEM(__pyx_v_l, __pyx_v_i, __pyx_v_value);
57174   }
57175 
57176   /* "carray.to_py":120
57177  *         Py_INCREF(value)
57178  *         PyList_SET_ITEM(l, i, value)
57179  *     return l             # <<<<<<<<<<<<<<
57180  *
57181  *
57182  */
57183   __Pyx_XDECREF(__pyx_r);
57184   __Pyx_INCREF(__pyx_v_l);
57185   __pyx_r = __pyx_v_l;
57186   goto __pyx_L0;
57187 
57188   /* "carray.to_py":112
57189  *
57190  * @cname("__Pyx_carray_to_py_int")
57191  * cdef inline list __Pyx_carray_to_py_int(base_type *v, Py_ssize_t length):             # <<<<<<<<<<<<<<
57192  *     cdef size_t i
57193  *     cdef object value
57194  */
57195 
57196   /* function exit code */
57197   __pyx_L1_error:;
57198   __Pyx_XDECREF(__pyx_t_1);
57199   __Pyx_AddTraceback("carray.to_py.__Pyx_carray_to_py_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
57200   __pyx_r = 0;
57201   __pyx_L0:;
57202   __Pyx_XDECREF(__pyx_v_value);
57203   __Pyx_XDECREF(__pyx_v_l);
57204   __Pyx_XGIVEREF(__pyx_r);
57205   __Pyx_RefNannyFinishContext();
57206   return __pyx_r;
57207 }
57208 
57209 /* "carray.to_py":124
57210  *
57211  * @cname("__Pyx_carray_to_tuple_int")
57212  * cdef inline tuple __Pyx_carray_to_tuple_int(base_type *v, Py_ssize_t length):             # <<<<<<<<<<<<<<
57213  *     cdef size_t i
57214  *     cdef object value
57215  */
57216 
57217 static CYTHON_INLINE PyObject *__Pyx_carray_to_tuple_int(int *__pyx_v_v, Py_ssize_t __pyx_v_length) {
57218   size_t __pyx_v_i;
57219   PyObject *__pyx_v_value = 0;
57220   PyObject *__pyx_v_t = NULL;
57221   PyObject *__pyx_r = NULL;
57222   __Pyx_RefNannyDeclarations
57223   PyObject *__pyx_t_1 = NULL;
57224   size_t __pyx_t_2;
57225   size_t __pyx_t_3;
57226   size_t __pyx_t_4;
57227   __Pyx_RefNannySetupContext("__Pyx_carray_to_tuple_int", 0);
57228 
57229   /* "carray.to_py":127
57230  *     cdef size_t i
57231  *     cdef object value
57232  *     t = PyTuple_New(length)             # <<<<<<<<<<<<<<
57233  *     for i in range(<size_t>length):
57234  *         value = v[i]
57235  */
57236   __pyx_t_1 = PyTuple_New(__pyx_v_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 127, __pyx_L1_error)
57237   __Pyx_GOTREF(__pyx_t_1);
57238   __pyx_v_t = ((PyObject*)__pyx_t_1);
57239   __pyx_t_1 = 0;
57240 
57241   /* "carray.to_py":128
57242  *     cdef object value
57243  *     t = PyTuple_New(length)
57244  *     for i in range(<size_t>length):             # <<<<<<<<<<<<<<
57245  *         value = v[i]
57246  *         Py_INCREF(value)
57247  */
57248   __pyx_t_2 = ((size_t)__pyx_v_length);
57249   __pyx_t_3 = __pyx_t_2;
57250   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
57251     __pyx_v_i = __pyx_t_4;
57252 
57253     /* "carray.to_py":129
57254  *     t = PyTuple_New(length)
57255  *     for i in range(<size_t>length):
57256  *         value = v[i]             # <<<<<<<<<<<<<<
57257  *         Py_INCREF(value)
57258  *         PyTuple_SET_ITEM(t, i, value)
57259  */
57260     __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_v[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 129, __pyx_L1_error)
57261     __Pyx_GOTREF(__pyx_t_1);
57262     __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_1);
57263     __pyx_t_1 = 0;
57264 
57265     /* "carray.to_py":130
57266  *     for i in range(<size_t>length):
57267  *         value = v[i]
57268  *         Py_INCREF(value)             # <<<<<<<<<<<<<<
57269  *         PyTuple_SET_ITEM(t, i, value)
57270  *     return t
57271  */
57272     Py_INCREF(__pyx_v_value);
57273 
57274     /* "carray.to_py":131
57275  *         value = v[i]
57276  *         Py_INCREF(value)
57277  *         PyTuple_SET_ITEM(t, i, value)             # <<<<<<<<<<<<<<
57278  *     return t
57279  */
57280     PyTuple_SET_ITEM(__pyx_v_t, __pyx_v_i, __pyx_v_value);
57281   }
57282 
57283   /* "carray.to_py":132
57284  *         Py_INCREF(value)
57285  *         PyTuple_SET_ITEM(t, i, value)
57286  *     return t             # <<<<<<<<<<<<<<
57287  */
57288   __Pyx_XDECREF(__pyx_r);
57289   __Pyx_INCREF(__pyx_v_t);
57290   __pyx_r = __pyx_v_t;
57291   goto __pyx_L0;
57292 
57293   /* "carray.to_py":124
57294  *
57295  * @cname("__Pyx_carray_to_tuple_int")
57296  * cdef inline tuple __Pyx_carray_to_tuple_int(base_type *v, Py_ssize_t length):             # <<<<<<<<<<<<<<
57297  *     cdef size_t i
57298  *     cdef object value
57299  */
57300 
57301   /* function exit code */
57302   __pyx_L1_error:;
57303   __Pyx_XDECREF(__pyx_t_1);
57304   __Pyx_AddTraceback("carray.to_py.__Pyx_carray_to_tuple_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
57305   __pyx_r = 0;
57306   __pyx_L0:;
57307   __Pyx_XDECREF(__pyx_v_value);
57308   __Pyx_XDECREF(__pyx_v_t);
57309   __Pyx_XGIVEREF(__pyx_r);
57310   __Pyx_RefNannyFinishContext();
57311   return __pyx_r;
57312 }
57313 
57314 /* "carray.from_py":77
57315  *
57316  * @cname("__Pyx_carray_from_py_int")
57317  * cdef int __Pyx_carray_from_py_int(object o, base_type *v, Py_ssize_t length) except -1:             # <<<<<<<<<<<<<<
57318  *     cdef Py_ssize_t i = length
57319  *     try:
57320  */
57321 
57322 static int __Pyx_carray_from_py_int(PyObject *__pyx_v_o, int *__pyx_v_v, Py_ssize_t __pyx_v_length) {
57323   Py_ssize_t __pyx_v_i;
57324   PyObject *__pyx_v_item = NULL;
57325   int __pyx_r;
57326   __Pyx_RefNannyDeclarations
57327   PyObject *__pyx_t_1 = NULL;
57328   PyObject *__pyx_t_2 = NULL;
57329   PyObject *__pyx_t_3 = NULL;
57330   Py_ssize_t __pyx_t_4;
57331   int __pyx_t_5;
57332   int __pyx_t_6;
57333   PyObject *__pyx_t_7 = NULL;
57334   Py_ssize_t __pyx_t_8;
57335   PyObject *(*__pyx_t_9)(PyObject *);
57336   PyObject *__pyx_t_10 = NULL;
57337   char const *__pyx_t_11;
57338   __Pyx_RefNannySetupContext("__Pyx_carray_from_py_int", 0);
57339 
57340   /* "carray.from_py":78
57341  * @cname("__Pyx_carray_from_py_int")
57342  * cdef int __Pyx_carray_from_py_int(object o, base_type *v, Py_ssize_t length) except -1:
57343  *     cdef Py_ssize_t i = length             # <<<<<<<<<<<<<<
57344  *     try:
57345  *         i = len(o)
57346  */
57347   __pyx_v_i = __pyx_v_length;
57348 
57349   /* "carray.from_py":79
57350  * cdef int __Pyx_carray_from_py_int(object o, base_type *v, Py_ssize_t length) except -1:
57351  *     cdef Py_ssize_t i = length
57352  *     try:             # <<<<<<<<<<<<<<
57353  *         i = len(o)
57354  *     except (TypeError, OverflowError):
57355  */
57356   {
57357     __Pyx_PyThreadState_declare
57358     __Pyx_PyThreadState_assign
57359     __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
57360     __Pyx_XGOTREF(__pyx_t_1);
57361     __Pyx_XGOTREF(__pyx_t_2);
57362     __Pyx_XGOTREF(__pyx_t_3);
57363     /*try:*/ {
57364 
57365       /* "carray.from_py":80
57366  *     cdef Py_ssize_t i = length
57367  *     try:
57368  *         i = len(o)             # <<<<<<<<<<<<<<
57369  *     except (TypeError, OverflowError):
57370  *         pass
57371  */
57372       __pyx_t_4 = PyObject_Length(__pyx_v_o); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(5, 80, __pyx_L3_error)
57373       __pyx_v_i = __pyx_t_4;
57374 
57375       /* "carray.from_py":79
57376  * cdef int __Pyx_carray_from_py_int(object o, base_type *v, Py_ssize_t length) except -1:
57377  *     cdef Py_ssize_t i = length
57378  *     try:             # <<<<<<<<<<<<<<
57379  *         i = len(o)
57380  *     except (TypeError, OverflowError):
57381  */
57382     }
57383     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
57384     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
57385     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
57386     goto __pyx_L8_try_end;
57387     __pyx_L3_error:;
57388 
57389     /* "carray.from_py":81
57390  *     try:
57391  *         i = len(o)
57392  *     except (TypeError, OverflowError):             # <<<<<<<<<<<<<<
57393  *         pass
57394  *     if i == length:
57395  */
57396     __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_OverflowError);
57397     if (__pyx_t_5) {
57398       __Pyx_ErrRestore(0,0,0);
57399       goto __pyx_L4_exception_handled;
57400     }
57401     goto __pyx_L5_except_error;
57402     __pyx_L5_except_error:;
57403 
57404     /* "carray.from_py":79
57405  * cdef int __Pyx_carray_from_py_int(object o, base_type *v, Py_ssize_t length) except -1:
57406  *     cdef Py_ssize_t i = length
57407  *     try:             # <<<<<<<<<<<<<<
57408  *         i = len(o)
57409  *     except (TypeError, OverflowError):
57410  */
57411     __Pyx_XGIVEREF(__pyx_t_1);
57412     __Pyx_XGIVEREF(__pyx_t_2);
57413     __Pyx_XGIVEREF(__pyx_t_3);
57414     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
57415     goto __pyx_L1_error;
57416     __pyx_L4_exception_handled:;
57417     __Pyx_XGIVEREF(__pyx_t_1);
57418     __Pyx_XGIVEREF(__pyx_t_2);
57419     __Pyx_XGIVEREF(__pyx_t_3);
57420     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
57421     __pyx_L8_try_end:;
57422   }
57423 
57424   /* "carray.from_py":83
57425  *     except (TypeError, OverflowError):
57426  *         pass
57427  *     if i == length:             # <<<<<<<<<<<<<<
57428  *         for i, item in enumerate(o):
57429  *             if i >= length:
57430  */
57431   __pyx_t_6 = ((__pyx_v_i == __pyx_v_length) != 0);
57432   if (__pyx_t_6) {
57433 
57434     /* "carray.from_py":84
57435  *         pass
57436  *     if i == length:
57437  *         for i, item in enumerate(o):             # <<<<<<<<<<<<<<
57438  *             if i >= length:
57439  *                 break
57440  */
57441     __pyx_t_4 = 0;
57442     if (likely(PyList_CheckExact(__pyx_v_o)) || PyTuple_CheckExact(__pyx_v_o)) {
57443       __pyx_t_7 = __pyx_v_o; __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = 0;
57444       __pyx_t_9 = NULL;
57445     } else {
57446       __pyx_t_8 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_o); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 84, __pyx_L1_error)
57447       __Pyx_GOTREF(__pyx_t_7);
57448       __pyx_t_9 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 84, __pyx_L1_error)
57449     }
57450     for (;;) {
57451       if (likely(!__pyx_t_9)) {
57452         if (likely(PyList_CheckExact(__pyx_t_7))) {
57453           if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_7)) break;
57454           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
57455           __pyx_t_10 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(5, 84, __pyx_L1_error)
57456           #else
57457           __pyx_t_10 = PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 84, __pyx_L1_error)
57458           __Pyx_GOTREF(__pyx_t_10);
57459           #endif
57460         } else {
57461           if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
57462           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
57463           __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(5, 84, __pyx_L1_error)
57464           #else
57465           __pyx_t_10 = PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 84, __pyx_L1_error)
57466           __Pyx_GOTREF(__pyx_t_10);
57467           #endif
57468         }
57469       } else {
57470         __pyx_t_10 = __pyx_t_9(__pyx_t_7);
57471         if (unlikely(!__pyx_t_10)) {
57472           PyObject* exc_type = PyErr_Occurred();
57473           if (exc_type) {
57474             if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
57475             else __PYX_ERR(5, 84, __pyx_L1_error)
57476           }
57477           break;
57478         }
57479         __Pyx_GOTREF(__pyx_t_10);
57480       }
57481       __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_10);
57482       __pyx_t_10 = 0;
57483       __pyx_v_i = __pyx_t_4;
57484       __pyx_t_4 = (__pyx_t_4 + 1);
57485 
57486       /* "carray.from_py":85
57487  *     if i == length:
57488  *         for i, item in enumerate(o):
57489  *             if i >= length:             # <<<<<<<<<<<<<<
57490  *                 break
57491  *             v[i] = item
57492  */
57493       __pyx_t_6 = ((__pyx_v_i >= __pyx_v_length) != 0);
57494       if (__pyx_t_6) {
57495 
57496         /* "carray.from_py":86
57497  *         for i, item in enumerate(o):
57498  *             if i >= length:
57499  *                 break             # <<<<<<<<<<<<<<
57500  *             v[i] = item
57501  *         else:
57502  */
57503         goto __pyx_L11_break;
57504 
57505         /* "carray.from_py":85
57506  *     if i == length:
57507  *         for i, item in enumerate(o):
57508  *             if i >= length:             # <<<<<<<<<<<<<<
57509  *                 break
57510  *             v[i] = item
57511  */
57512       }
57513 
57514       /* "carray.from_py":87
57515  *             if i >= length:
57516  *                 break
57517  *             v[i] = item             # <<<<<<<<<<<<<<
57518  *         else:
57519  *             i += 1  # convert index to length
57520  */
57521       __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_item); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 87, __pyx_L1_error)
57522       (__pyx_v_v[__pyx_v_i]) = __pyx_t_6;
57523 
57524       /* "carray.from_py":84
57525  *         pass
57526  *     if i == length:
57527  *         for i, item in enumerate(o):             # <<<<<<<<<<<<<<
57528  *             if i >= length:
57529  *                 break
57530  */
57531     }
57532     /*else*/ {
57533 
57534       /* "carray.from_py":89
57535  *             v[i] = item
57536  *         else:
57537  *             i += 1  # convert index to length             # <<<<<<<<<<<<<<
57538  *             if i == length:
57539  *                 return 0
57540  */
57541       __pyx_v_i = (__pyx_v_i + 1);
57542 
57543       /* "carray.from_py":90
57544  *         else:
57545  *             i += 1  # convert index to length
57546  *             if i == length:             # <<<<<<<<<<<<<<
57547  *                 return 0
57548  *
57549  */
57550       __pyx_t_6 = ((__pyx_v_i == __pyx_v_length) != 0);
57551       if (__pyx_t_6) {
57552 
57553         /* "carray.from_py":91
57554  *             i += 1  # convert index to length
57555  *             if i == length:
57556  *                 return 0             # <<<<<<<<<<<<<<
57557  *
57558  *     PyErr_Format(
57559  */
57560         __pyx_r = 0;
57561         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
57562         goto __pyx_L0;
57563 
57564         /* "carray.from_py":90
57565  *         else:
57566  *             i += 1  # convert index to length
57567  *             if i == length:             # <<<<<<<<<<<<<<
57568  *                 return 0
57569  *
57570  */
57571       }
57572     }
57573 
57574     /* "carray.from_py":84
57575  *         pass
57576  *     if i == length:
57577  *         for i, item in enumerate(o):             # <<<<<<<<<<<<<<
57578  *             if i >= length:
57579  *                 break
57580  */
57581     __pyx_L11_break:;
57582     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
57583 
57584     /* "carray.from_py":83
57585  *     except (TypeError, OverflowError):
57586  *         pass
57587  *     if i == length:             # <<<<<<<<<<<<<<
57588  *         for i, item in enumerate(o):
57589  *             if i >= length:
57590  */
57591   }
57592 
57593   /* "carray.from_py":96
57594  *         IndexError,
57595  *         ("too many values found during array assignment, expected %zd"
57596  *          if i >= length else             # <<<<<<<<<<<<<<
57597  *          "not enough values found during array assignment, expected %zd, got %zd"),
57598  *         length, i)
57599  */
57600   if (((__pyx_v_i >= __pyx_v_length) != 0)) {
57601     __pyx_t_11 = ((char const *)"too many values found during array assignment, expected %zd");
57602   } else {
57603     __pyx_t_11 = ((char const *)"not enough values found during array assignment, expected %zd, got %zd");
57604   }
57605 
57606   /* "carray.from_py":93
57607  *                 return 0
57608  *
57609  *     PyErr_Format(             # <<<<<<<<<<<<<<
57610  *         IndexError,
57611  *         ("too many values found during array assignment, expected %zd"
57612  */
57613   __pyx_t_7 = PyErr_Format(__pyx_builtin_IndexError, __pyx_t_11, __pyx_v_length, __pyx_v_i); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 93, __pyx_L1_error)
57614   __Pyx_GOTREF(__pyx_t_7);
57615   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
57616 
57617   /* "carray.from_py":77
57618  *
57619  * @cname("__Pyx_carray_from_py_int")
57620  * cdef int __Pyx_carray_from_py_int(object o, base_type *v, Py_ssize_t length) except -1:             # <<<<<<<<<<<<<<
57621  *     cdef Py_ssize_t i = length
57622  *     try:
57623  */
57624 
57625   /* function exit code */
57626   __pyx_r = 0;
57627   goto __pyx_L0;
57628   __pyx_L1_error:;
57629   __Pyx_XDECREF(__pyx_t_7);
57630   __Pyx_XDECREF(__pyx_t_10);
57631   __Pyx_AddTraceback("carray.from_py.__Pyx_carray_from_py_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
57632   __pyx_r = -1;
57633   __pyx_L0:;
57634   __Pyx_XDECREF(__pyx_v_item);
57635   __Pyx_RefNannyFinishContext();
57636   return __pyx_r;
57637 }
57638 
57639 /* "carray.to_py":112
57640  *
57641  * @cname("__Pyx_carray_to_py___pyx_t_5numpy_float64_t___5b_3_5d_")
57642  * cdef inline list __Pyx_carray_to_py___pyx_t_5numpy_float64_t___5b_3_5d_(base_type *v, Py_ssize_t length):             # <<<<<<<<<<<<<<
57643  *     cdef size_t i
57644  *     cdef object value
57645  */
57646 
57647 static CYTHON_INLINE PyObject *__Pyx_carray_to_py___pyx_t_5numpy_float64_t___5b_3_5d_(__pyx_t_5numpy_float64_t (*__pyx_v_v)[3], Py_ssize_t __pyx_v_length) {
57648   size_t __pyx_v_i;
57649   PyObject *__pyx_v_value = 0;
57650   PyObject *__pyx_v_l = NULL;
57651   PyObject *__pyx_r = NULL;
57652   __Pyx_RefNannyDeclarations
57653   PyObject *__pyx_t_1 = NULL;
57654   size_t __pyx_t_2;
57655   size_t __pyx_t_3;
57656   size_t __pyx_t_4;
57657   __Pyx_RefNannySetupContext("__Pyx_carray_to_py___pyx_t_5numpy_float64_t___5b_3_5d_", 0);
57658 
57659   /* "carray.to_py":115
57660  *     cdef size_t i
57661  *     cdef object value
57662  *     l = PyList_New(length)             # <<<<<<<<<<<<<<
57663  *     for i in range(<size_t>length):
57664  *         value = v[i]
57665  */
57666   __pyx_t_1 = PyList_New(__pyx_v_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 115, __pyx_L1_error)
57667   __Pyx_GOTREF(__pyx_t_1);
57668   __pyx_v_l = ((PyObject*)__pyx_t_1);
57669   __pyx_t_1 = 0;
57670 
57671   /* "carray.to_py":116
57672  *     cdef object value
57673  *     l = PyList_New(length)
57674  *     for i in range(<size_t>length):             # <<<<<<<<<<<<<<
57675  *         value = v[i]
57676  *         Py_INCREF(value)
57677  */
57678   __pyx_t_2 = ((size_t)__pyx_v_length);
57679   __pyx_t_3 = __pyx_t_2;
57680   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
57681     __pyx_v_i = __pyx_t_4;
57682 
57683     /* "carray.to_py":117
57684  *     l = PyList_New(length)
57685  *     for i in range(<size_t>length):
57686  *         value = v[i]             # <<<<<<<<<<<<<<
57687  *         Py_INCREF(value)
57688  *         PyList_SET_ITEM(l, i, value)
57689  */
57690     __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t((__pyx_v_v[__pyx_v_i]), 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 117, __pyx_L1_error)
57691     __Pyx_GOTREF(__pyx_t_1);
57692     __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_1);
57693     __pyx_t_1 = 0;
57694 
57695     /* "carray.to_py":118
57696  *     for i in range(<size_t>length):
57697  *         value = v[i]
57698  *         Py_INCREF(value)             # <<<<<<<<<<<<<<
57699  *         PyList_SET_ITEM(l, i, value)
57700  *     return l
57701  */
57702     Py_INCREF(__pyx_v_value);
57703 
57704     /* "carray.to_py":119
57705  *         value = v[i]
57706  *         Py_INCREF(value)
57707  *         PyList_SET_ITEM(l, i, value)             # <<<<<<<<<<<<<<
57708  *     return l
57709  *
57710  */
57711     PyList_SET_ITEM(__pyx_v_l, __pyx_v_i, __pyx_v_value);
57712   }
57713 
57714   /* "carray.to_py":120
57715  *         Py_INCREF(value)
57716  *         PyList_SET_ITEM(l, i, value)
57717  *     return l             # <<<<<<<<<<<<<<
57718  *
57719  *
57720  */
57721   __Pyx_XDECREF(__pyx_r);
57722   __Pyx_INCREF(__pyx_v_l);
57723   __pyx_r = __pyx_v_l;
57724   goto __pyx_L0;
57725 
57726   /* "carray.to_py":112
57727  *
57728  * @cname("__Pyx_carray_to_py___pyx_t_5numpy_float64_t___5b_3_5d_")
57729  * cdef inline list __Pyx_carray_to_py___pyx_t_5numpy_float64_t___5b_3_5d_(base_type *v, Py_ssize_t length):             # <<<<<<<<<<<<<<
57730  *     cdef size_t i
57731  *     cdef object value
57732  */
57733 
57734   /* function exit code */
57735   __pyx_L1_error:;
57736   __Pyx_XDECREF(__pyx_t_1);
57737   __Pyx_AddTraceback("carray.to_py.__Pyx_carray_to_py___pyx_t_5numpy_float64_t___5b_3_5d_", __pyx_clineno, __pyx_lineno, __pyx_filename);
57738   __pyx_r = 0;
57739   __pyx_L0:;
57740   __Pyx_XDECREF(__pyx_v_value);
57741   __Pyx_XDECREF(__pyx_v_l);
57742   __Pyx_XGIVEREF(__pyx_r);
57743   __Pyx_RefNannyFinishContext();
57744   return __pyx_r;
57745 }
57746 
57747 /* "carray.to_py":124
57748  *
57749  * @cname("__Pyx_carray_to_tuple___pyx_t_5numpy_float64_t___5b_3_5d_")
57750  * cdef inline tuple __Pyx_carray_to_tuple___pyx_t_5numpy_float64_t___5b_3_5d_(base_type *v, Py_ssize_t length):             # <<<<<<<<<<<<<<
57751  *     cdef size_t i
57752  *     cdef object value
57753  */
57754 
57755 static CYTHON_INLINE PyObject *__Pyx_carray_to_tuple___pyx_t_5numpy_float64_t___5b_3_5d_(__pyx_t_5numpy_float64_t (*__pyx_v_v)[3], Py_ssize_t __pyx_v_length) {
57756   size_t __pyx_v_i;
57757   PyObject *__pyx_v_value = 0;
57758   PyObject *__pyx_v_t = NULL;
57759   PyObject *__pyx_r = NULL;
57760   __Pyx_RefNannyDeclarations
57761   PyObject *__pyx_t_1 = NULL;
57762   size_t __pyx_t_2;
57763   size_t __pyx_t_3;
57764   size_t __pyx_t_4;
57765   __Pyx_RefNannySetupContext("__Pyx_carray_to_tuple___pyx_t_5numpy_float64_t___5b_3_5d_", 0);
57766 
57767   /* "carray.to_py":127
57768  *     cdef size_t i
57769  *     cdef object value
57770  *     t = PyTuple_New(length)             # <<<<<<<<<<<<<<
57771  *     for i in range(<size_t>length):
57772  *         value = v[i]
57773  */
57774   __pyx_t_1 = PyTuple_New(__pyx_v_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 127, __pyx_L1_error)
57775   __Pyx_GOTREF(__pyx_t_1);
57776   __pyx_v_t = ((PyObject*)__pyx_t_1);
57777   __pyx_t_1 = 0;
57778 
57779   /* "carray.to_py":128
57780  *     cdef object value
57781  *     t = PyTuple_New(length)
57782  *     for i in range(<size_t>length):             # <<<<<<<<<<<<<<
57783  *         value = v[i]
57784  *         Py_INCREF(value)
57785  */
57786   __pyx_t_2 = ((size_t)__pyx_v_length);
57787   __pyx_t_3 = __pyx_t_2;
57788   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
57789     __pyx_v_i = __pyx_t_4;
57790 
57791     /* "carray.to_py":129
57792  *     t = PyTuple_New(length)
57793  *     for i in range(<size_t>length):
57794  *         value = v[i]             # <<<<<<<<<<<<<<
57795  *         Py_INCREF(value)
57796  *         PyTuple_SET_ITEM(t, i, value)
57797  */
57798     __pyx_t_1 = __Pyx_carray_to_py___pyx_t_5numpy_float64_t((__pyx_v_v[__pyx_v_i]), 3); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 129, __pyx_L1_error)
57799     __Pyx_GOTREF(__pyx_t_1);
57800     __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_1);
57801     __pyx_t_1 = 0;
57802 
57803     /* "carray.to_py":130
57804  *     for i in range(<size_t>length):
57805  *         value = v[i]
57806  *         Py_INCREF(value)             # <<<<<<<<<<<<<<
57807  *         PyTuple_SET_ITEM(t, i, value)
57808  *     return t
57809  */
57810     Py_INCREF(__pyx_v_value);
57811 
57812     /* "carray.to_py":131
57813  *         value = v[i]
57814  *         Py_INCREF(value)
57815  *         PyTuple_SET_ITEM(t, i, value)             # <<<<<<<<<<<<<<
57816  *     return t
57817  */
57818     PyTuple_SET_ITEM(__pyx_v_t, __pyx_v_i, __pyx_v_value);
57819   }
57820 
57821   /* "carray.to_py":132
57822  *         Py_INCREF(value)
57823  *         PyTuple_SET_ITEM(t, i, value)
57824  *     return t             # <<<<<<<<<<<<<<
57825  */
57826   __Pyx_XDECREF(__pyx_r);
57827   __Pyx_INCREF(__pyx_v_t);
57828   __pyx_r = __pyx_v_t;
57829   goto __pyx_L0;
57830 
57831   /* "carray.to_py":124
57832  *
57833  * @cname("__Pyx_carray_to_tuple___pyx_t_5numpy_float64_t___5b_3_5d_")
57834  * cdef inline tuple __Pyx_carray_to_tuple___pyx_t_5numpy_float64_t___5b_3_5d_(base_type *v, Py_ssize_t length):             # <<<<<<<<<<<<<<
57835  *     cdef size_t i
57836  *     cdef object value
57837  */
57838 
57839   /* function exit code */
57840   __pyx_L1_error:;
57841   __Pyx_XDECREF(__pyx_t_1);
57842   __Pyx_AddTraceback("carray.to_py.__Pyx_carray_to_tuple___pyx_t_5numpy_float64_t___5b_3_5d_", __pyx_clineno, __pyx_lineno, __pyx_filename);
57843   __pyx_r = 0;
57844   __pyx_L0:;
57845   __Pyx_XDECREF(__pyx_v_value);
57846   __Pyx_XDECREF(__pyx_v_t);
57847   __Pyx_XGIVEREF(__pyx_r);
57848   __Pyx_RefNannyFinishContext();
57849   return __pyx_r;
57850 }
57851 
57852 /* "carray.from_py":77
57853  *
57854  * @cname("__Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_")
57855  * cdef int __Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_(object o, base_type *v, Py_ssize_t length) except -1:             # <<<<<<<<<<<<<<
57856  *     cdef Py_ssize_t i = length
57857  *     try:
57858  */
57859 
57860 static int __Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_(PyObject *__pyx_v_o, __pyx_t_5numpy_float64_t (*__pyx_v_v)[3], Py_ssize_t __pyx_v_length) {
57861   Py_ssize_t __pyx_v_i;
57862   PyObject *__pyx_v_item = NULL;
57863   int __pyx_r;
57864   __Pyx_RefNannyDeclarations
57865   PyObject *__pyx_t_1 = NULL;
57866   PyObject *__pyx_t_2 = NULL;
57867   PyObject *__pyx_t_3 = NULL;
57868   Py_ssize_t __pyx_t_4;
57869   int __pyx_t_5;
57870   int __pyx_t_6;
57871   PyObject *__pyx_t_7 = NULL;
57872   Py_ssize_t __pyx_t_8;
57873   PyObject *(*__pyx_t_9)(PyObject *);
57874   PyObject *__pyx_t_10 = NULL;
57875   __pyx_t_5numpy_float64_t __pyx_t_11[3];
57876   char const *__pyx_t_12;
57877   __Pyx_RefNannySetupContext("__Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_", 0);
57878 
57879   /* "carray.from_py":78
57880  * @cname("__Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_")
57881  * cdef int __Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_(object o, base_type *v, Py_ssize_t length) except -1:
57882  *     cdef Py_ssize_t i = length             # <<<<<<<<<<<<<<
57883  *     try:
57884  *         i = len(o)
57885  */
57886   __pyx_v_i = __pyx_v_length;
57887 
57888   /* "carray.from_py":79
57889  * cdef int __Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_(object o, base_type *v, Py_ssize_t length) except -1:
57890  *     cdef Py_ssize_t i = length
57891  *     try:             # <<<<<<<<<<<<<<
57892  *         i = len(o)
57893  *     except (TypeError, OverflowError):
57894  */
57895   {
57896     __Pyx_PyThreadState_declare
57897     __Pyx_PyThreadState_assign
57898     __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
57899     __Pyx_XGOTREF(__pyx_t_1);
57900     __Pyx_XGOTREF(__pyx_t_2);
57901     __Pyx_XGOTREF(__pyx_t_3);
57902     /*try:*/ {
57903 
57904       /* "carray.from_py":80
57905  *     cdef Py_ssize_t i = length
57906  *     try:
57907  *         i = len(o)             # <<<<<<<<<<<<<<
57908  *     except (TypeError, OverflowError):
57909  *         pass
57910  */
57911       __pyx_t_4 = PyObject_Length(__pyx_v_o); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(5, 80, __pyx_L3_error)
57912       __pyx_v_i = __pyx_t_4;
57913 
57914       /* "carray.from_py":79
57915  * cdef int __Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_(object o, base_type *v, Py_ssize_t length) except -1:
57916  *     cdef Py_ssize_t i = length
57917  *     try:             # <<<<<<<<<<<<<<
57918  *         i = len(o)
57919  *     except (TypeError, OverflowError):
57920  */
57921     }
57922     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
57923     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
57924     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
57925     goto __pyx_L8_try_end;
57926     __pyx_L3_error:;
57927 
57928     /* "carray.from_py":81
57929  *     try:
57930  *         i = len(o)
57931  *     except (TypeError, OverflowError):             # <<<<<<<<<<<<<<
57932  *         pass
57933  *     if i == length:
57934  */
57935     __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError) || __Pyx_PyErr_ExceptionMatches(__pyx_builtin_OverflowError);
57936     if (__pyx_t_5) {
57937       __Pyx_ErrRestore(0,0,0);
57938       goto __pyx_L4_exception_handled;
57939     }
57940     goto __pyx_L5_except_error;
57941     __pyx_L5_except_error:;
57942 
57943     /* "carray.from_py":79
57944  * cdef int __Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_(object o, base_type *v, Py_ssize_t length) except -1:
57945  *     cdef Py_ssize_t i = length
57946  *     try:             # <<<<<<<<<<<<<<
57947  *         i = len(o)
57948  *     except (TypeError, OverflowError):
57949  */
57950     __Pyx_XGIVEREF(__pyx_t_1);
57951     __Pyx_XGIVEREF(__pyx_t_2);
57952     __Pyx_XGIVEREF(__pyx_t_3);
57953     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
57954     goto __pyx_L1_error;
57955     __pyx_L4_exception_handled:;
57956     __Pyx_XGIVEREF(__pyx_t_1);
57957     __Pyx_XGIVEREF(__pyx_t_2);
57958     __Pyx_XGIVEREF(__pyx_t_3);
57959     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
57960     __pyx_L8_try_end:;
57961   }
57962 
57963   /* "carray.from_py":83
57964  *     except (TypeError, OverflowError):
57965  *         pass
57966  *     if i == length:             # <<<<<<<<<<<<<<
57967  *         for i, item in enumerate(o):
57968  *             if i >= length:
57969  */
57970   __pyx_t_6 = ((__pyx_v_i == __pyx_v_length) != 0);
57971   if (__pyx_t_6) {
57972 
57973     /* "carray.from_py":84
57974  *         pass
57975  *     if i == length:
57976  *         for i, item in enumerate(o):             # <<<<<<<<<<<<<<
57977  *             if i >= length:
57978  *                 break
57979  */
57980     __pyx_t_4 = 0;
57981     if (likely(PyList_CheckExact(__pyx_v_o)) || PyTuple_CheckExact(__pyx_v_o)) {
57982       __pyx_t_7 = __pyx_v_o; __Pyx_INCREF(__pyx_t_7); __pyx_t_8 = 0;
57983       __pyx_t_9 = NULL;
57984     } else {
57985       __pyx_t_8 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_o); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 84, __pyx_L1_error)
57986       __Pyx_GOTREF(__pyx_t_7);
57987       __pyx_t_9 = Py_TYPE(__pyx_t_7)->tp_iternext; if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 84, __pyx_L1_error)
57988     }
57989     for (;;) {
57990       if (likely(!__pyx_t_9)) {
57991         if (likely(PyList_CheckExact(__pyx_t_7))) {
57992           if (__pyx_t_8 >= PyList_GET_SIZE(__pyx_t_7)) break;
57993           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
57994           __pyx_t_10 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(5, 84, __pyx_L1_error)
57995           #else
57996           __pyx_t_10 = PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 84, __pyx_L1_error)
57997           __Pyx_GOTREF(__pyx_t_10);
57998           #endif
57999         } else {
58000           if (__pyx_t_8 >= PyTuple_GET_SIZE(__pyx_t_7)) break;
58001           #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
58002           __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely(0 < 0)) __PYX_ERR(5, 84, __pyx_L1_error)
58003           #else
58004           __pyx_t_10 = PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 84, __pyx_L1_error)
58005           __Pyx_GOTREF(__pyx_t_10);
58006           #endif
58007         }
58008       } else {
58009         __pyx_t_10 = __pyx_t_9(__pyx_t_7);
58010         if (unlikely(!__pyx_t_10)) {
58011           PyObject* exc_type = PyErr_Occurred();
58012           if (exc_type) {
58013             if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
58014             else __PYX_ERR(5, 84, __pyx_L1_error)
58015           }
58016           break;
58017         }
58018         __Pyx_GOTREF(__pyx_t_10);
58019       }
58020       __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_10);
58021       __pyx_t_10 = 0;
58022       __pyx_v_i = __pyx_t_4;
58023       __pyx_t_4 = (__pyx_t_4 + 1);
58024 
58025       /* "carray.from_py":85
58026  *     if i == length:
58027  *         for i, item in enumerate(o):
58028  *             if i >= length:             # <<<<<<<<<<<<<<
58029  *                 break
58030  *             v[i] = item
58031  */
58032       __pyx_t_6 = ((__pyx_v_i >= __pyx_v_length) != 0);
58033       if (__pyx_t_6) {
58034 
58035         /* "carray.from_py":86
58036  *         for i, item in enumerate(o):
58037  *             if i >= length:
58038  *                 break             # <<<<<<<<<<<<<<
58039  *             v[i] = item
58040  *         else:
58041  */
58042         goto __pyx_L11_break;
58043 
58044         /* "carray.from_py":85
58045  *     if i == length:
58046  *         for i, item in enumerate(o):
58047  *             if i >= length:             # <<<<<<<<<<<<<<
58048  *                 break
58049  *             v[i] = item
58050  */
58051       }
58052 
58053       /* "carray.from_py":87
58054  *             if i >= length:
58055  *                 break
58056  *             v[i] = item             # <<<<<<<<<<<<<<
58057  *         else:
58058  *             i += 1  # convert index to length
58059  */
58060       if (unlikely(__Pyx_carray_from_py___pyx_t_5numpy_float64_t(__pyx_v_item, __pyx_t_11, 3) < 0)) __PYX_ERR(5, 87, __pyx_L1_error)
58061       memcpy(&((__pyx_v_v[__pyx_v_i])[0]), __pyx_t_11, sizeof((__pyx_v_v[__pyx_v_i])[0]) * (3));
58062 
58063       /* "carray.from_py":84
58064  *         pass
58065  *     if i == length:
58066  *         for i, item in enumerate(o):             # <<<<<<<<<<<<<<
58067  *             if i >= length:
58068  *                 break
58069  */
58070     }
58071     /*else*/ {
58072 
58073       /* "carray.from_py":89
58074  *             v[i] = item
58075  *         else:
58076  *             i += 1  # convert index to length             # <<<<<<<<<<<<<<
58077  *             if i == length:
58078  *                 return 0
58079  */
58080       __pyx_v_i = (__pyx_v_i + 1);
58081 
58082       /* "carray.from_py":90
58083  *         else:
58084  *             i += 1  # convert index to length
58085  *             if i == length:             # <<<<<<<<<<<<<<
58086  *                 return 0
58087  *
58088  */
58089       __pyx_t_6 = ((__pyx_v_i == __pyx_v_length) != 0);
58090       if (__pyx_t_6) {
58091 
58092         /* "carray.from_py":91
58093  *             i += 1  # convert index to length
58094  *             if i == length:
58095  *                 return 0             # <<<<<<<<<<<<<<
58096  *
58097  *     PyErr_Format(
58098  */
58099         __pyx_r = 0;
58100         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
58101         goto __pyx_L0;
58102 
58103         /* "carray.from_py":90
58104  *         else:
58105  *             i += 1  # convert index to length
58106  *             if i == length:             # <<<<<<<<<<<<<<
58107  *                 return 0
58108  *
58109  */
58110       }
58111     }
58112 
58113     /* "carray.from_py":84
58114  *         pass
58115  *     if i == length:
58116  *         for i, item in enumerate(o):             # <<<<<<<<<<<<<<
58117  *             if i >= length:
58118  *                 break
58119  */
58120     __pyx_L11_break:;
58121     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
58122 
58123     /* "carray.from_py":83
58124  *     except (TypeError, OverflowError):
58125  *         pass
58126  *     if i == length:             # <<<<<<<<<<<<<<
58127  *         for i, item in enumerate(o):
58128  *             if i >= length:
58129  */
58130   }
58131 
58132   /* "carray.from_py":96
58133  *         IndexError,
58134  *         ("too many values found during array assignment, expected %zd"
58135  *          if i >= length else             # <<<<<<<<<<<<<<
58136  *          "not enough values found during array assignment, expected %zd, got %zd"),
58137  *         length, i)
58138  */
58139   if (((__pyx_v_i >= __pyx_v_length) != 0)) {
58140     __pyx_t_12 = ((char const *)"too many values found during array assignment, expected %zd");
58141   } else {
58142     __pyx_t_12 = ((char const *)"not enough values found during array assignment, expected %zd, got %zd");
58143   }
58144 
58145   /* "carray.from_py":93
58146  *                 return 0
58147  *
58148  *     PyErr_Format(             # <<<<<<<<<<<<<<
58149  *         IndexError,
58150  *         ("too many values found during array assignment, expected %zd"
58151  */
58152   __pyx_t_7 = PyErr_Format(__pyx_builtin_IndexError, __pyx_t_12, __pyx_v_length, __pyx_v_i); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 93, __pyx_L1_error)
58153   __Pyx_GOTREF(__pyx_t_7);
58154   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
58155 
58156   /* "carray.from_py":77
58157  *
58158  * @cname("__Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_")
58159  * cdef int __Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_(object o, base_type *v, Py_ssize_t length) except -1:             # <<<<<<<<<<<<<<
58160  *     cdef Py_ssize_t i = length
58161  *     try:
58162  */
58163 
58164   /* function exit code */
58165   __pyx_r = 0;
58166   goto __pyx_L0;
58167   __pyx_L1_error:;
58168   __Pyx_XDECREF(__pyx_t_7);
58169   __Pyx_XDECREF(__pyx_t_10);
58170   __Pyx_AddTraceback("carray.from_py.__Pyx_carray_from_py___pyx_t_5numpy_float64_t___5b_3_5d_", __pyx_clineno, __pyx_lineno, __pyx_filename);
58171   __pyx_r = -1;
58172   __pyx_L0:;
58173   __Pyx_XDECREF(__pyx_v_item);
58174   __Pyx_RefNannyFinishContext();
58175   return __pyx_r;
58176 }
58177 
58178 /* "View.MemoryView":122
58179  *         cdef bint dtype_is_object
58180  *
58181  *     def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None,             # <<<<<<<<<<<<<<
58182  *                   mode="c", bint allocate_buffer=True):
58183  *
58184  */
58185 
58186 /* Python wrapper */
58187 static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
58188 static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
58189   PyObject *__pyx_v_shape = 0;
58190   Py_ssize_t __pyx_v_itemsize;
58191   PyObject *__pyx_v_format = 0;
58192   PyObject *__pyx_v_mode = 0;
58193   int __pyx_v_allocate_buffer;
58194   int __pyx_r;
58195   __Pyx_RefNannyDeclarations
58196   __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
58197   {
58198     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0};
58199     PyObject* values[5] = {0,0,0,0,0};
58200     values[3] = ((PyObject *)__pyx_n_s_c);
58201     if (unlikely(__pyx_kwds)) {
58202       Py_ssize_t kw_args;
58203       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
58204       switch (pos_args) {
58205         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
58206         CYTHON_FALLTHROUGH;
58207         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
58208         CYTHON_FALLTHROUGH;
58209         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
58210         CYTHON_FALLTHROUGH;
58211         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
58212         CYTHON_FALLTHROUGH;
58213         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
58214         CYTHON_FALLTHROUGH;
58215         case  0: break;
58216         default: goto __pyx_L5_argtuple_error;
58217       }
58218       kw_args = PyDict_Size(__pyx_kwds);
58219       switch (pos_args) {
58220         case  0:
58221         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--;
58222         else goto __pyx_L5_argtuple_error;
58223         CYTHON_FALLTHROUGH;
58224         case  1:
58225         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--;
58226         else {
58227           __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(5, 122, __pyx_L3_error)
58228         }
58229         CYTHON_FALLTHROUGH;
58230         case  2:
58231         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--;
58232         else {
58233           __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(5, 122, __pyx_L3_error)
58234         }
58235         CYTHON_FALLTHROUGH;
58236         case  3:
58237         if (kw_args > 0) {
58238           PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode);
58239           if (value) { values[3] = value; kw_args--; }
58240         }
58241         CYTHON_FALLTHROUGH;
58242         case  4:
58243         if (kw_args > 0) {
58244           PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allocate_buffer);
58245           if (value) { values[4] = value; kw_args--; }
58246         }
58247       }
58248       if (unlikely(kw_args > 0)) {
58249         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(5, 122, __pyx_L3_error)
58250       }
58251     } else {
58252       switch (PyTuple_GET_SIZE(__pyx_args)) {
58253         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
58254         CYTHON_FALLTHROUGH;
58255         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
58256         CYTHON_FALLTHROUGH;
58257         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
58258         values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
58259         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
58260         break;
58261         default: goto __pyx_L5_argtuple_error;
58262       }
58263     }
58264     __pyx_v_shape = ((PyObject*)values[0]);
58265     __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(5, 122, __pyx_L3_error)
58266     __pyx_v_format = values[2];
58267     __pyx_v_mode = values[3];
58268     if (values[4]) {
58269       __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 123, __pyx_L3_error)
58270     } else {
58271 
58272       /* "View.MemoryView":123
58273  *
58274  *     def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None,
58275  *                   mode="c", bint allocate_buffer=True):             # <<<<<<<<<<<<<<
58276  *
58277  *         cdef int idx
58278  */
58279       __pyx_v_allocate_buffer = ((int)1);
58280     }
58281   }
58282   goto __pyx_L4_argument_unpacking_done;
58283   __pyx_L5_argtuple_error:;
58284   __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(5, 122, __pyx_L3_error)
58285   __pyx_L3_error:;
58286   __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
58287   __Pyx_RefNannyFinishContext();
58288   return -1;
58289   __pyx_L4_argument_unpacking_done:;
58290   if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(5, 122, __pyx_L1_error)
58291   if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) {
58292     PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(5, 122, __pyx_L1_error)
58293   }
58294   __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer);
58295 
58296   /* "View.MemoryView":122
58297  *         cdef bint dtype_is_object
58298  *
58299  *     def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None,             # <<<<<<<<<<<<<<
58300  *                   mode="c", bint allocate_buffer=True):
58301  *
58302  */
58303 
58304   /* function exit code */
58305   goto __pyx_L0;
58306   __pyx_L1_error:;
58307   __pyx_r = -1;
58308   __pyx_L0:;
58309   __Pyx_RefNannyFinishContext();
58310   return __pyx_r;
58311 }
58312 
58313 static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer) {
58314   int __pyx_v_idx;
58315   Py_ssize_t __pyx_v_i;
58316   Py_ssize_t __pyx_v_dim;
58317   PyObject **__pyx_v_p;
58318   char __pyx_v_order;
58319   int __pyx_r;
58320   __Pyx_RefNannyDeclarations
58321   Py_ssize_t __pyx_t_1;
58322   int __pyx_t_2;
58323   PyObject *__pyx_t_3 = NULL;
58324   int __pyx_t_4;
58325   PyObject *__pyx_t_5 = NULL;
58326   PyObject *__pyx_t_6 = NULL;
58327   char *__pyx_t_7;
58328   int __pyx_t_8;
58329   Py_ssize_t __pyx_t_9;
58330   PyObject *__pyx_t_10 = NULL;
58331   Py_ssize_t __pyx_t_11;
58332   __Pyx_RefNannySetupContext("__cinit__", 0);
58333   __Pyx_INCREF(__pyx_v_format);
58334 
58335   /* "View.MemoryView":129
58336  *         cdef PyObject **p
58337  *
58338  *         self.ndim = <int> len(shape)             # <<<<<<<<<<<<<<
58339  *         self.itemsize = itemsize
58340  *
58341  */
58342   if (unlikely(__pyx_v_shape == Py_None)) {
58343     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
58344     __PYX_ERR(5, 129, __pyx_L1_error)
58345   }
58346   __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(5, 129, __pyx_L1_error)
58347   __pyx_v_self->ndim = ((int)__pyx_t_1);
58348 
58349   /* "View.MemoryView":130
58350  *
58351  *         self.ndim = <int> len(shape)
58352  *         self.itemsize = itemsize             # <<<<<<<<<<<<<<
58353  *
58354  *         if not self.ndim:
58355  */
58356   __pyx_v_self->itemsize = __pyx_v_itemsize;
58357 
58358   /* "View.MemoryView":132
58359  *         self.itemsize = itemsize
58360  *
58361  *         if not self.ndim:             # <<<<<<<<<<<<<<
58362  *             raise ValueError("Empty shape tuple for cython.array")
58363  *
58364  */
58365   __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0);
58366   if (unlikely(__pyx_t_2)) {
58367 
58368     /* "View.MemoryView":133
58369  *
58370  *         if not self.ndim:
58371  *             raise ValueError("Empty shape tuple for cython.array")             # <<<<<<<<<<<<<<
58372  *
58373  *         if itemsize <= 0:
58374  */
58375     __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__88, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 133, __pyx_L1_error)
58376     __Pyx_GOTREF(__pyx_t_3);
58377     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
58378     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
58379     __PYX_ERR(5, 133, __pyx_L1_error)
58380 
58381     /* "View.MemoryView":132
58382  *         self.itemsize = itemsize
58383  *
58384  *         if not self.ndim:             # <<<<<<<<<<<<<<
58385  *             raise ValueError("Empty shape tuple for cython.array")
58386  *
58387  */
58388   }
58389 
58390   /* "View.MemoryView":135
58391  *             raise ValueError("Empty shape tuple for cython.array")
58392  *
58393  *         if itemsize <= 0:             # <<<<<<<<<<<<<<
58394  *             raise ValueError("itemsize <= 0 for cython.array")
58395  *
58396  */
58397   __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0);
58398   if (unlikely(__pyx_t_2)) {
58399 
58400     /* "View.MemoryView":136
58401  *
58402  *         if itemsize <= 0:
58403  *             raise ValueError("itemsize <= 0 for cython.array")             # <<<<<<<<<<<<<<
58404  *
58405  *         if not isinstance(format, bytes):
58406  */
58407     __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__89, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 136, __pyx_L1_error)
58408     __Pyx_GOTREF(__pyx_t_3);
58409     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
58410     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
58411     __PYX_ERR(5, 136, __pyx_L1_error)
58412 
58413     /* "View.MemoryView":135
58414  *             raise ValueError("Empty shape tuple for cython.array")
58415  *
58416  *         if itemsize <= 0:             # <<<<<<<<<<<<<<
58417  *             raise ValueError("itemsize <= 0 for cython.array")
58418  *
58419  */
58420   }
58421 
58422   /* "View.MemoryView":138
58423  *             raise ValueError("itemsize <= 0 for cython.array")
58424  *
58425  *         if not isinstance(format, bytes):             # <<<<<<<<<<<<<<
58426  *             format = format.encode('ASCII')
58427  *         self._format = format  # keep a reference to the byte string
58428  */
58429   __pyx_t_2 = PyBytes_Check(__pyx_v_format);
58430   __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0);
58431   if (__pyx_t_4) {
58432 
58433     /* "View.MemoryView":139
58434  *
58435  *         if not isinstance(format, bytes):
58436  *             format = format.encode('ASCII')             # <<<<<<<<<<<<<<
58437  *         self._format = format  # keep a reference to the byte string
58438  *         self.format = self._format
58439  */
58440     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 139, __pyx_L1_error)
58441     __Pyx_GOTREF(__pyx_t_5);
58442     __pyx_t_6 = NULL;
58443     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
58444       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
58445       if (likely(__pyx_t_6)) {
58446         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
58447         __Pyx_INCREF(__pyx_t_6);
58448         __Pyx_INCREF(function);
58449         __Pyx_DECREF_SET(__pyx_t_5, function);
58450       }
58451     }
58452     __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_n_s_ASCII) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ASCII);
58453     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
58454     if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 139, __pyx_L1_error)
58455     __Pyx_GOTREF(__pyx_t_3);
58456     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
58457     __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3);
58458     __pyx_t_3 = 0;
58459 
58460     /* "View.MemoryView":138
58461  *             raise ValueError("itemsize <= 0 for cython.array")
58462  *
58463  *         if not isinstance(format, bytes):             # <<<<<<<<<<<<<<
58464  *             format = format.encode('ASCII')
58465  *         self._format = format  # keep a reference to the byte string
58466  */
58467   }
58468 
58469   /* "View.MemoryView":140
58470  *         if not isinstance(format, bytes):
58471  *             format = format.encode('ASCII')
58472  *         self._format = format  # keep a reference to the byte string             # <<<<<<<<<<<<<<
58473  *         self.format = self._format
58474  *
58475  */
58476   if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) __PYX_ERR(5, 140, __pyx_L1_error)
58477   __pyx_t_3 = __pyx_v_format;
58478   __Pyx_INCREF(__pyx_t_3);
58479   __Pyx_GIVEREF(__pyx_t_3);
58480   __Pyx_GOTREF(__pyx_v_self->_format);
58481   __Pyx_DECREF(__pyx_v_self->_format);
58482   __pyx_v_self->_format = ((PyObject*)__pyx_t_3);
58483   __pyx_t_3 = 0;
58484 
58485   /* "View.MemoryView":141
58486  *             format = format.encode('ASCII')
58487  *         self._format = format  # keep a reference to the byte string
58488  *         self.format = self._format             # <<<<<<<<<<<<<<
58489  *
58490  *
58491  */
58492   if (unlikely(__pyx_v_self->_format == Py_None)) {
58493     PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
58494     __PYX_ERR(5, 141, __pyx_L1_error)
58495   }
58496   __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(5, 141, __pyx_L1_error)
58497   __pyx_v_self->format = __pyx_t_7;
58498 
58499   /* "View.MemoryView":144
58500  *
58501  *
58502  *         self._shape = <Py_ssize_t *> PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2)             # <<<<<<<<<<<<<<
58503  *         self._strides = self._shape + self.ndim
58504  *
58505  */
58506   __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2)));
58507 
58508   /* "View.MemoryView":145
58509  *
58510  *         self._shape = <Py_ssize_t *> PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2)
58511  *         self._strides = self._shape + self.ndim             # <<<<<<<<<<<<<<
58512  *
58513  *         if not self._shape:
58514  */
58515   __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim);
58516 
58517   /* "View.MemoryView":147
58518  *         self._strides = self._shape + self.ndim
58519  *
58520  *         if not self._shape:             # <<<<<<<<<<<<<<
58521  *             raise MemoryError("unable to allocate shape and strides.")
58522  *
58523  */
58524   __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0);
58525   if (unlikely(__pyx_t_4)) {
58526 
58527     /* "View.MemoryView":148
58528  *
58529  *         if not self._shape:
58530  *             raise MemoryError("unable to allocate shape and strides.")             # <<<<<<<<<<<<<<
58531  *
58532  *
58533  */
58534     __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__90, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 148, __pyx_L1_error)
58535     __Pyx_GOTREF(__pyx_t_3);
58536     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
58537     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
58538     __PYX_ERR(5, 148, __pyx_L1_error)
58539 
58540     /* "View.MemoryView":147
58541  *         self._strides = self._shape + self.ndim
58542  *
58543  *         if not self._shape:             # <<<<<<<<<<<<<<
58544  *             raise MemoryError("unable to allocate shape and strides.")
58545  *
58546  */
58547   }
58548 
58549   /* "View.MemoryView":151
58550  *
58551  *
58552  *         for idx, dim in enumerate(shape):             # <<<<<<<<<<<<<<
58553  *             if dim <= 0:
58554  *                 raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
58555  */
58556   __pyx_t_8 = 0;
58557   __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0;
58558   for (;;) {
58559     if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
58560     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
58561     __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(5, 151, __pyx_L1_error)
58562     #else
58563     __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 151, __pyx_L1_error)
58564     __Pyx_GOTREF(__pyx_t_5);
58565     #endif
58566     __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(5, 151, __pyx_L1_error)
58567     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
58568     __pyx_v_dim = __pyx_t_9;
58569     __pyx_v_idx = __pyx_t_8;
58570     __pyx_t_8 = (__pyx_t_8 + 1);
58571 
58572     /* "View.MemoryView":152
58573  *
58574  *         for idx, dim in enumerate(shape):
58575  *             if dim <= 0:             # <<<<<<<<<<<<<<
58576  *                 raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
58577  *             self._shape[idx] = dim
58578  */
58579     __pyx_t_4 = ((__pyx_v_dim <= 0) != 0);
58580     if (unlikely(__pyx_t_4)) {
58581 
58582       /* "View.MemoryView":153
58583  *         for idx, dim in enumerate(shape):
58584  *             if dim <= 0:
58585  *                 raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))             # <<<<<<<<<<<<<<
58586  *             self._shape[idx] = dim
58587  *
58588  */
58589       __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 153, __pyx_L1_error)
58590       __Pyx_GOTREF(__pyx_t_5);
58591       __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 153, __pyx_L1_error)
58592       __Pyx_GOTREF(__pyx_t_6);
58593       __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 153, __pyx_L1_error)
58594       __Pyx_GOTREF(__pyx_t_10);
58595       __Pyx_GIVEREF(__pyx_t_5);
58596       PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5);
58597       __Pyx_GIVEREF(__pyx_t_6);
58598       PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6);
58599       __pyx_t_5 = 0;
58600       __pyx_t_6 = 0;
58601       __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 153, __pyx_L1_error)
58602       __Pyx_GOTREF(__pyx_t_6);
58603       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
58604       __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 153, __pyx_L1_error)
58605       __Pyx_GOTREF(__pyx_t_10);
58606       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
58607       __Pyx_Raise(__pyx_t_10, 0, 0, 0);
58608       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
58609       __PYX_ERR(5, 153, __pyx_L1_error)
58610 
58611       /* "View.MemoryView":152
58612  *
58613  *         for idx, dim in enumerate(shape):
58614  *             if dim <= 0:             # <<<<<<<<<<<<<<
58615  *                 raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
58616  *             self._shape[idx] = dim
58617  */
58618     }
58619 
58620     /* "View.MemoryView":154
58621  *             if dim <= 0:
58622  *                 raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
58623  *             self._shape[idx] = dim             # <<<<<<<<<<<<<<
58624  *
58625  *         cdef char order
58626  */
58627     (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim;
58628 
58629     /* "View.MemoryView":151
58630  *
58631  *
58632  *         for idx, dim in enumerate(shape):             # <<<<<<<<<<<<<<
58633  *             if dim <= 0:
58634  *                 raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
58635  */
58636   }
58637   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
58638 
58639   /* "View.MemoryView":157
58640  *
58641  *         cdef char order
58642  *         if mode == 'fortran':             # <<<<<<<<<<<<<<
58643  *             order = b'F'
58644  *             self.mode = u'fortran'
58645  */
58646   __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(5, 157, __pyx_L1_error)
58647   if (__pyx_t_4) {
58648 
58649     /* "View.MemoryView":158
58650  *         cdef char order
58651  *         if mode == 'fortran':
58652  *             order = b'F'             # <<<<<<<<<<<<<<
58653  *             self.mode = u'fortran'
58654  *         elif mode == 'c':
58655  */
58656     __pyx_v_order = 'F';
58657 
58658     /* "View.MemoryView":159
58659  *         if mode == 'fortran':
58660  *             order = b'F'
58661  *             self.mode = u'fortran'             # <<<<<<<<<<<<<<
58662  *         elif mode == 'c':
58663  *             order = b'C'
58664  */
58665     __Pyx_INCREF(__pyx_n_u_fortran);
58666     __Pyx_GIVEREF(__pyx_n_u_fortran);
58667     __Pyx_GOTREF(__pyx_v_self->mode);
58668     __Pyx_DECREF(__pyx_v_self->mode);
58669     __pyx_v_self->mode = __pyx_n_u_fortran;
58670 
58671     /* "View.MemoryView":157
58672  *
58673  *         cdef char order
58674  *         if mode == 'fortran':             # <<<<<<<<<<<<<<
58675  *             order = b'F'
58676  *             self.mode = u'fortran'
58677  */
58678     goto __pyx_L10;
58679   }
58680 
58681   /* "View.MemoryView":160
58682  *             order = b'F'
58683  *             self.mode = u'fortran'
58684  *         elif mode == 'c':             # <<<<<<<<<<<<<<
58685  *             order = b'C'
58686  *             self.mode = u'c'
58687  */
58688   __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(5, 160, __pyx_L1_error)
58689   if (likely(__pyx_t_4)) {
58690 
58691     /* "View.MemoryView":161
58692  *             self.mode = u'fortran'
58693  *         elif mode == 'c':
58694  *             order = b'C'             # <<<<<<<<<<<<<<
58695  *             self.mode = u'c'
58696  *         else:
58697  */
58698     __pyx_v_order = 'C';
58699 
58700     /* "View.MemoryView":162
58701  *         elif mode == 'c':
58702  *             order = b'C'
58703  *             self.mode = u'c'             # <<<<<<<<<<<<<<
58704  *         else:
58705  *             raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode)
58706  */
58707     __Pyx_INCREF(__pyx_n_u_c);
58708     __Pyx_GIVEREF(__pyx_n_u_c);
58709     __Pyx_GOTREF(__pyx_v_self->mode);
58710     __Pyx_DECREF(__pyx_v_self->mode);
58711     __pyx_v_self->mode = __pyx_n_u_c;
58712 
58713     /* "View.MemoryView":160
58714  *             order = b'F'
58715  *             self.mode = u'fortran'
58716  *         elif mode == 'c':             # <<<<<<<<<<<<<<
58717  *             order = b'C'
58718  *             self.mode = u'c'
58719  */
58720     goto __pyx_L10;
58721   }
58722 
58723   /* "View.MemoryView":164
58724  *             self.mode = u'c'
58725  *         else:
58726  *             raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode)             # <<<<<<<<<<<<<<
58727  *
58728  *         self.len = fill_contig_strides_array(self._shape, self._strides,
58729  */
58730   /*else*/ {
58731     __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 164, __pyx_L1_error)
58732     __Pyx_GOTREF(__pyx_t_3);
58733     __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 164, __pyx_L1_error)
58734     __Pyx_GOTREF(__pyx_t_10);
58735     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
58736     __Pyx_Raise(__pyx_t_10, 0, 0, 0);
58737     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
58738     __PYX_ERR(5, 164, __pyx_L1_error)
58739   }
58740   __pyx_L10:;
58741 
58742   /* "View.MemoryView":166
58743  *             raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode)
58744  *
58745  *         self.len = fill_contig_strides_array(self._shape, self._strides,             # <<<<<<<<<<<<<<
58746  *                                              itemsize, self.ndim, order)
58747  *
58748  */
58749   __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order);
58750 
58751   /* "View.MemoryView":169
58752  *                                              itemsize, self.ndim, order)
58753  *
58754  *         self.free_data = allocate_buffer             # <<<<<<<<<<<<<<
58755  *         self.dtype_is_object = format == b'O'
58756  *         if allocate_buffer:
58757  */
58758   __pyx_v_self->free_data = __pyx_v_allocate_buffer;
58759 
58760   /* "View.MemoryView":170
58761  *
58762  *         self.free_data = allocate_buffer
58763  *         self.dtype_is_object = format == b'O'             # <<<<<<<<<<<<<<
58764  *         if allocate_buffer:
58765  *
58766  */
58767   __pyx_t_10 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 170, __pyx_L1_error)
58768   __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 170, __pyx_L1_error)
58769   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
58770   __pyx_v_self->dtype_is_object = __pyx_t_4;
58771 
58772   /* "View.MemoryView":171
58773  *         self.free_data = allocate_buffer
58774  *         self.dtype_is_object = format == b'O'
58775  *         if allocate_buffer:             # <<<<<<<<<<<<<<
58776  *
58777  *
58778  */
58779   __pyx_t_4 = (__pyx_v_allocate_buffer != 0);
58780   if (__pyx_t_4) {
58781 
58782     /* "View.MemoryView":174
58783  *
58784  *
58785  *             self.data = <char *>malloc(self.len)             # <<<<<<<<<<<<<<
58786  *             if not self.data:
58787  *                 raise MemoryError("unable to allocate array data.")
58788  */
58789     __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len));
58790 
58791     /* "View.MemoryView":175
58792  *
58793  *             self.data = <char *>malloc(self.len)
58794  *             if not self.data:             # <<<<<<<<<<<<<<
58795  *                 raise MemoryError("unable to allocate array data.")
58796  *
58797  */
58798     __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0);
58799     if (unlikely(__pyx_t_4)) {
58800 
58801       /* "View.MemoryView":176
58802  *             self.data = <char *>malloc(self.len)
58803  *             if not self.data:
58804  *                 raise MemoryError("unable to allocate array data.")             # <<<<<<<<<<<<<<
58805  *
58806  *             if self.dtype_is_object:
58807  */
58808       __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__91, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 176, __pyx_L1_error)
58809       __Pyx_GOTREF(__pyx_t_10);
58810       __Pyx_Raise(__pyx_t_10, 0, 0, 0);
58811       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
58812       __PYX_ERR(5, 176, __pyx_L1_error)
58813 
58814       /* "View.MemoryView":175
58815  *
58816  *             self.data = <char *>malloc(self.len)
58817  *             if not self.data:             # <<<<<<<<<<<<<<
58818  *                 raise MemoryError("unable to allocate array data.")
58819  *
58820  */
58821     }
58822 
58823     /* "View.MemoryView":178
58824  *                 raise MemoryError("unable to allocate array data.")
58825  *
58826  *             if self.dtype_is_object:             # <<<<<<<<<<<<<<
58827  *                 p = <PyObject **> self.data
58828  *                 for i in range(self.len / itemsize):
58829  */
58830     __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0);
58831     if (__pyx_t_4) {
58832 
58833       /* "View.MemoryView":179
58834  *
58835  *             if self.dtype_is_object:
58836  *                 p = <PyObject **> self.data             # <<<<<<<<<<<<<<
58837  *                 for i in range(self.len / itemsize):
58838  *                     p[i] = Py_None
58839  */
58840       __pyx_v_p = ((PyObject **)__pyx_v_self->data);
58841 
58842       /* "View.MemoryView":180
58843  *             if self.dtype_is_object:
58844  *                 p = <PyObject **> self.data
58845  *                 for i in range(self.len / itemsize):             # <<<<<<<<<<<<<<
58846  *                     p[i] = Py_None
58847  *                     Py_INCREF(Py_None)
58848  */
58849       if (unlikely(__pyx_v_itemsize == 0)) {
58850         PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
58851         __PYX_ERR(5, 180, __pyx_L1_error)
58852       }
58853       else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1)  && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) {
58854         PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
58855         __PYX_ERR(5, 180, __pyx_L1_error)
58856       }
58857       __pyx_t_1 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_itemsize);
58858       __pyx_t_9 = __pyx_t_1;
58859       for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_9; __pyx_t_11+=1) {
58860         __pyx_v_i = __pyx_t_11;
58861 
58862         /* "View.MemoryView":181
58863  *                 p = <PyObject **> self.data
58864  *                 for i in range(self.len / itemsize):
58865  *                     p[i] = Py_None             # <<<<<<<<<<<<<<
58866  *                     Py_INCREF(Py_None)
58867  *
58868  */
58869         (__pyx_v_p[__pyx_v_i]) = Py_None;
58870 
58871         /* "View.MemoryView":182
58872  *                 for i in range(self.len / itemsize):
58873  *                     p[i] = Py_None
58874  *                     Py_INCREF(Py_None)             # <<<<<<<<<<<<<<
58875  *
58876  *     @cname('getbuffer')
58877  */
58878         Py_INCREF(Py_None);
58879       }
58880 
58881       /* "View.MemoryView":178
58882  *                 raise MemoryError("unable to allocate array data.")
58883  *
58884  *             if self.dtype_is_object:             # <<<<<<<<<<<<<<
58885  *                 p = <PyObject **> self.data
58886  *                 for i in range(self.len / itemsize):
58887  */
58888     }
58889 
58890     /* "View.MemoryView":171
58891  *         self.free_data = allocate_buffer
58892  *         self.dtype_is_object = format == b'O'
58893  *         if allocate_buffer:             # <<<<<<<<<<<<<<
58894  *
58895  *
58896  */
58897   }
58898 
58899   /* "View.MemoryView":122
58900  *         cdef bint dtype_is_object
58901  *
58902  *     def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None,             # <<<<<<<<<<<<<<
58903  *                   mode="c", bint allocate_buffer=True):
58904  *
58905  */
58906 
58907   /* function exit code */
58908   __pyx_r = 0;
58909   goto __pyx_L0;
58910   __pyx_L1_error:;
58911   __Pyx_XDECREF(__pyx_t_3);
58912   __Pyx_XDECREF(__pyx_t_5);
58913   __Pyx_XDECREF(__pyx_t_6);
58914   __Pyx_XDECREF(__pyx_t_10);
58915   __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
58916   __pyx_r = -1;
58917   __pyx_L0:;
58918   __Pyx_XDECREF(__pyx_v_format);
58919   __Pyx_RefNannyFinishContext();
58920   return __pyx_r;
58921 }
58922 
58923 /* "View.MemoryView":185
58924  *
58925  *     @cname('getbuffer')
58926  *     def __getbuffer__(self, Py_buffer *info, int flags):             # <<<<<<<<<<<<<<
58927  *         cdef int bufmode = -1
58928  *         if self.mode == u"c":
58929  */
58930 
58931 /* Python wrapper */
58932 static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
58933 static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
58934   int __pyx_r;
58935   __Pyx_RefNannyDeclarations
58936   __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
58937   __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(((struct __pyx_array_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
58938 
58939   /* function exit code */
58940   __Pyx_RefNannyFinishContext();
58941   return __pyx_r;
58942 }
58943 
58944 static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
58945   int __pyx_v_bufmode;
58946   int __pyx_r;
58947   __Pyx_RefNannyDeclarations
58948   int __pyx_t_1;
58949   int __pyx_t_2;
58950   PyObject *__pyx_t_3 = NULL;
58951   char *__pyx_t_4;
58952   Py_ssize_t __pyx_t_5;
58953   int __pyx_t_6;
58954   Py_ssize_t *__pyx_t_7;
58955   if (__pyx_v_info == NULL) {
58956     PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");
58957     return -1;
58958   }
58959   __Pyx_RefNannySetupContext("__getbuffer__", 0);
58960   __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
58961   __Pyx_GIVEREF(__pyx_v_info->obj);
58962 
58963   /* "View.MemoryView":186
58964  *     @cname('getbuffer')
58965  *     def __getbuffer__(self, Py_buffer *info, int flags):
58966  *         cdef int bufmode = -1             # <<<<<<<<<<<<<<
58967  *         if self.mode == u"c":
58968  *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
58969  */
58970   __pyx_v_bufmode = -1;
58971 
58972   /* "View.MemoryView":187
58973  *     def __getbuffer__(self, Py_buffer *info, int flags):
58974  *         cdef int bufmode = -1
58975  *         if self.mode == u"c":             # <<<<<<<<<<<<<<
58976  *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
58977  *         elif self.mode == u"fortran":
58978  */
58979   __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(5, 187, __pyx_L1_error)
58980   __pyx_t_2 = (__pyx_t_1 != 0);
58981   if (__pyx_t_2) {
58982 
58983     /* "View.MemoryView":188
58984  *         cdef int bufmode = -1
58985  *         if self.mode == u"c":
58986  *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS             # <<<<<<<<<<<<<<
58987  *         elif self.mode == u"fortran":
58988  *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
58989  */
58990     __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS);
58991 
58992     /* "View.MemoryView":187
58993  *     def __getbuffer__(self, Py_buffer *info, int flags):
58994  *         cdef int bufmode = -1
58995  *         if self.mode == u"c":             # <<<<<<<<<<<<<<
58996  *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
58997  *         elif self.mode == u"fortran":
58998  */
58999     goto __pyx_L3;
59000   }
59001 
59002   /* "View.MemoryView":189
59003  *         if self.mode == u"c":
59004  *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
59005  *         elif self.mode == u"fortran":             # <<<<<<<<<<<<<<
59006  *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
59007  *         if not (flags & bufmode):
59008  */
59009   __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(5, 189, __pyx_L1_error)
59010   __pyx_t_1 = (__pyx_t_2 != 0);
59011   if (__pyx_t_1) {
59012 
59013     /* "View.MemoryView":190
59014  *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
59015  *         elif self.mode == u"fortran":
59016  *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS             # <<<<<<<<<<<<<<
59017  *         if not (flags & bufmode):
59018  *             raise ValueError("Can only create a buffer that is contiguous in memory.")
59019  */
59020     __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS);
59021 
59022     /* "View.MemoryView":189
59023  *         if self.mode == u"c":
59024  *             bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
59025  *         elif self.mode == u"fortran":             # <<<<<<<<<<<<<<
59026  *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
59027  *         if not (flags & bufmode):
59028  */
59029   }
59030   __pyx_L3:;
59031 
59032   /* "View.MemoryView":191
59033  *         elif self.mode == u"fortran":
59034  *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
59035  *         if not (flags & bufmode):             # <<<<<<<<<<<<<<
59036  *             raise ValueError("Can only create a buffer that is contiguous in memory.")
59037  *         info.buf = self.data
59038  */
59039   __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0);
59040   if (unlikely(__pyx_t_1)) {
59041 
59042     /* "View.MemoryView":192
59043  *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
59044  *         if not (flags & bufmode):
59045  *             raise ValueError("Can only create a buffer that is contiguous in memory.")             # <<<<<<<<<<<<<<
59046  *         info.buf = self.data
59047  *         info.len = self.len
59048  */
59049     __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__92, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 192, __pyx_L1_error)
59050     __Pyx_GOTREF(__pyx_t_3);
59051     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
59052     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
59053     __PYX_ERR(5, 192, __pyx_L1_error)
59054 
59055     /* "View.MemoryView":191
59056  *         elif self.mode == u"fortran":
59057  *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
59058  *         if not (flags & bufmode):             # <<<<<<<<<<<<<<
59059  *             raise ValueError("Can only create a buffer that is contiguous in memory.")
59060  *         info.buf = self.data
59061  */
59062   }
59063 
59064   /* "View.MemoryView":193
59065  *         if not (flags & bufmode):
59066  *             raise ValueError("Can only create a buffer that is contiguous in memory.")
59067  *         info.buf = self.data             # <<<<<<<<<<<<<<
59068  *         info.len = self.len
59069  *         info.ndim = self.ndim
59070  */
59071   __pyx_t_4 = __pyx_v_self->data;
59072   __pyx_v_info->buf = __pyx_t_4;
59073 
59074   /* "View.MemoryView":194
59075  *             raise ValueError("Can only create a buffer that is contiguous in memory.")
59076  *         info.buf = self.data
59077  *         info.len = self.len             # <<<<<<<<<<<<<<
59078  *         info.ndim = self.ndim
59079  *         info.shape = self._shape
59080  */
59081   __pyx_t_5 = __pyx_v_self->len;
59082   __pyx_v_info->len = __pyx_t_5;
59083 
59084   /* "View.MemoryView":195
59085  *         info.buf = self.data
59086  *         info.len = self.len
59087  *         info.ndim = self.ndim             # <<<<<<<<<<<<<<
59088  *         info.shape = self._shape
59089  *         info.strides = self._strides
59090  */
59091   __pyx_t_6 = __pyx_v_self->ndim;
59092   __pyx_v_info->ndim = __pyx_t_6;
59093 
59094   /* "View.MemoryView":196
59095  *         info.len = self.len
59096  *         info.ndim = self.ndim
59097  *         info.shape = self._shape             # <<<<<<<<<<<<<<
59098  *         info.strides = self._strides
59099  *         info.suboffsets = NULL
59100  */
59101   __pyx_t_7 = __pyx_v_self->_shape;
59102   __pyx_v_info->shape = __pyx_t_7;
59103 
59104   /* "View.MemoryView":197
59105  *         info.ndim = self.ndim
59106  *         info.shape = self._shape
59107  *         info.strides = self._strides             # <<<<<<<<<<<<<<
59108  *         info.suboffsets = NULL
59109  *         info.itemsize = self.itemsize
59110  */
59111   __pyx_t_7 = __pyx_v_self->_strides;
59112   __pyx_v_info->strides = __pyx_t_7;
59113 
59114   /* "View.MemoryView":198
59115  *         info.shape = self._shape
59116  *         info.strides = self._strides
59117  *         info.suboffsets = NULL             # <<<<<<<<<<<<<<
59118  *         info.itemsize = self.itemsize
59119  *         info.readonly = 0
59120  */
59121   __pyx_v_info->suboffsets = NULL;
59122 
59123   /* "View.MemoryView":199
59124  *         info.strides = self._strides
59125  *         info.suboffsets = NULL
59126  *         info.itemsize = self.itemsize             # <<<<<<<<<<<<<<
59127  *         info.readonly = 0
59128  *
59129  */
59130   __pyx_t_5 = __pyx_v_self->itemsize;
59131   __pyx_v_info->itemsize = __pyx_t_5;
59132 
59133   /* "View.MemoryView":200
59134  *         info.suboffsets = NULL
59135  *         info.itemsize = self.itemsize
59136  *         info.readonly = 0             # <<<<<<<<<<<<<<
59137  *
59138  *         if flags & PyBUF_FORMAT:
59139  */
59140   __pyx_v_info->readonly = 0;
59141 
59142   /* "View.MemoryView":202
59143  *         info.readonly = 0
59144  *
59145  *         if flags & PyBUF_FORMAT:             # <<<<<<<<<<<<<<
59146  *             info.format = self.format
59147  *         else:
59148  */
59149   __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
59150   if (__pyx_t_1) {
59151 
59152     /* "View.MemoryView":203
59153  *
59154  *         if flags & PyBUF_FORMAT:
59155  *             info.format = self.format             # <<<<<<<<<<<<<<
59156  *         else:
59157  *             info.format = NULL
59158  */
59159     __pyx_t_4 = __pyx_v_self->format;
59160     __pyx_v_info->format = __pyx_t_4;
59161 
59162     /* "View.MemoryView":202
59163  *         info.readonly = 0
59164  *
59165  *         if flags & PyBUF_FORMAT:             # <<<<<<<<<<<<<<
59166  *             info.format = self.format
59167  *         else:
59168  */
59169     goto __pyx_L5;
59170   }
59171 
59172   /* "View.MemoryView":205
59173  *             info.format = self.format
59174  *         else:
59175  *             info.format = NULL             # <<<<<<<<<<<<<<
59176  *
59177  *         info.obj = self
59178  */
59179   /*else*/ {
59180     __pyx_v_info->format = NULL;
59181   }
59182   __pyx_L5:;
59183 
59184   /* "View.MemoryView":207
59185  *             info.format = NULL
59186  *
59187  *         info.obj = self             # <<<<<<<<<<<<<<
59188  *
59189  *     __pyx_getbuffer = capsule(<void *> &__pyx_array_getbuffer, "getbuffer(obj, view, flags)")
59190  */
59191   __Pyx_INCREF(((PyObject *)__pyx_v_self));
59192   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
59193   __Pyx_GOTREF(__pyx_v_info->obj);
59194   __Pyx_DECREF(__pyx_v_info->obj);
59195   __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
59196 
59197   /* "View.MemoryView":185
59198  *
59199  *     @cname('getbuffer')
59200  *     def __getbuffer__(self, Py_buffer *info, int flags):             # <<<<<<<<<<<<<<
59201  *         cdef int bufmode = -1
59202  *         if self.mode == u"c":
59203  */
59204 
59205   /* function exit code */
59206   __pyx_r = 0;
59207   goto __pyx_L0;
59208   __pyx_L1_error:;
59209   __Pyx_XDECREF(__pyx_t_3);
59210   __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
59211   __pyx_r = -1;
59212   if (__pyx_v_info->obj != NULL) {
59213     __Pyx_GOTREF(__pyx_v_info->obj);
59214     __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
59215   }
59216   goto __pyx_L2;
59217   __pyx_L0:;
59218   if (__pyx_v_info->obj == Py_None) {
59219     __Pyx_GOTREF(__pyx_v_info->obj);
59220     __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
59221   }
59222   __pyx_L2:;
59223   __Pyx_RefNannyFinishContext();
59224   return __pyx_r;
59225 }
59226 
59227 /* "View.MemoryView":211
59228  *     __pyx_getbuffer = capsule(<void *> &__pyx_array_getbuffer, "getbuffer(obj, view, flags)")
59229  *
59230  *     def __dealloc__(array self):             # <<<<<<<<<<<<<<
59231  *         if self.callback_free_data != NULL:
59232  *             self.callback_free_data(self.data)
59233  */
59234 
59235 /* Python wrapper */
59236 static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/
59237 static void __pyx_array___dealloc__(PyObject *__pyx_v_self) {
59238   __Pyx_RefNannyDeclarations
59239   __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
59240   __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self));
59241 
59242   /* function exit code */
59243   __Pyx_RefNannyFinishContext();
59244 }
59245 
59246 static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) {
59247   __Pyx_RefNannyDeclarations
59248   int __pyx_t_1;
59249   __Pyx_RefNannySetupContext("__dealloc__", 0);
59250 
59251   /* "View.MemoryView":212
59252  *
59253  *     def __dealloc__(array self):
59254  *         if self.callback_free_data != NULL:             # <<<<<<<<<<<<<<
59255  *             self.callback_free_data(self.data)
59256  *         elif self.free_data:
59257  */
59258   __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0);
59259   if (__pyx_t_1) {
59260 
59261     /* "View.MemoryView":213
59262  *     def __dealloc__(array self):
59263  *         if self.callback_free_data != NULL:
59264  *             self.callback_free_data(self.data)             # <<<<<<<<<<<<<<
59265  *         elif self.free_data:
59266  *             if self.dtype_is_object:
59267  */
59268     __pyx_v_self->callback_free_data(__pyx_v_self->data);
59269 
59270     /* "View.MemoryView":212
59271  *
59272  *     def __dealloc__(array self):
59273  *         if self.callback_free_data != NULL:             # <<<<<<<<<<<<<<
59274  *             self.callback_free_data(self.data)
59275  *         elif self.free_data:
59276  */
59277     goto __pyx_L3;
59278   }
59279 
59280   /* "View.MemoryView":214
59281  *         if self.callback_free_data != NULL:
59282  *             self.callback_free_data(self.data)
59283  *         elif self.free_data:             # <<<<<<<<<<<<<<
59284  *             if self.dtype_is_object:
59285  *                 refcount_objects_in_slice(self.data, self._shape,
59286  */
59287   __pyx_t_1 = (__pyx_v_self->free_data != 0);
59288   if (__pyx_t_1) {
59289 
59290     /* "View.MemoryView":215
59291  *             self.callback_free_data(self.data)
59292  *         elif self.free_data:
59293  *             if self.dtype_is_object:             # <<<<<<<<<<<<<<
59294  *                 refcount_objects_in_slice(self.data, self._shape,
59295  *                                           self._strides, self.ndim, False)
59296  */
59297     __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0);
59298     if (__pyx_t_1) {
59299 
59300       /* "View.MemoryView":216
59301  *         elif self.free_data:
59302  *             if self.dtype_is_object:
59303  *                 refcount_objects_in_slice(self.data, self._shape,             # <<<<<<<<<<<<<<
59304  *                                           self._strides, self.ndim, False)
59305  *             free(self.data)
59306  */
59307       __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0);
59308 
59309       /* "View.MemoryView":215
59310  *             self.callback_free_data(self.data)
59311  *         elif self.free_data:
59312  *             if self.dtype_is_object:             # <<<<<<<<<<<<<<
59313  *                 refcount_objects_in_slice(self.data, self._shape,
59314  *                                           self._strides, self.ndim, False)
59315  */
59316     }
59317 
59318     /* "View.MemoryView":218
59319  *                 refcount_objects_in_slice(self.data, self._shape,
59320  *                                           self._strides, self.ndim, False)
59321  *             free(self.data)             # <<<<<<<<<<<<<<
59322  *         PyObject_Free(self._shape)
59323  *
59324  */
59325     free(__pyx_v_self->data);
59326 
59327     /* "View.MemoryView":214
59328  *         if self.callback_free_data != NULL:
59329  *             self.callback_free_data(self.data)
59330  *         elif self.free_data:             # <<<<<<<<<<<<<<
59331  *             if self.dtype_is_object:
59332  *                 refcount_objects_in_slice(self.data, self._shape,
59333  */
59334   }
59335   __pyx_L3:;
59336 
59337   /* "View.MemoryView":219
59338  *                                           self._strides, self.ndim, False)
59339  *             free(self.data)
59340  *         PyObject_Free(self._shape)             # <<<<<<<<<<<<<<
59341  *
59342  *     @property
59343  */
59344   PyObject_Free(__pyx_v_self->_shape);
59345 
59346   /* "View.MemoryView":211
59347  *     __pyx_getbuffer = capsule(<void *> &__pyx_array_getbuffer, "getbuffer(obj, view, flags)")
59348  *
59349  *     def __dealloc__(array self):             # <<<<<<<<<<<<<<
59350  *         if self.callback_free_data != NULL:
59351  *             self.callback_free_data(self.data)
59352  */
59353 
59354   /* function exit code */
59355   __Pyx_RefNannyFinishContext();
59356 }
59357 
59358 /* "View.MemoryView":222
59359  *
59360  *     @property
59361  *     def memview(self):             # <<<<<<<<<<<<<<
59362  *         return self.get_memview()
59363  *
59364  */
59365 
59366 /* Python wrapper */
59367 static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/
59368 static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) {
59369   PyObject *__pyx_r = 0;
59370   __Pyx_RefNannyDeclarations
59371   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
59372   __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self));
59373 
59374   /* function exit code */
59375   __Pyx_RefNannyFinishContext();
59376   return __pyx_r;
59377 }
59378 
59379 static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self) {
59380   PyObject *__pyx_r = NULL;
59381   __Pyx_RefNannyDeclarations
59382   PyObject *__pyx_t_1 = NULL;
59383   __Pyx_RefNannySetupContext("__get__", 0);
59384 
59385   /* "View.MemoryView":223
59386  *     @property
59387  *     def memview(self):
59388  *         return self.get_memview()             # <<<<<<<<<<<<<<
59389  *
59390  *     @cname('get_memview')
59391  */
59392   __Pyx_XDECREF(__pyx_r);
59393   __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 223, __pyx_L1_error)
59394   __Pyx_GOTREF(__pyx_t_1);
59395   __pyx_r = __pyx_t_1;
59396   __pyx_t_1 = 0;
59397   goto __pyx_L0;
59398 
59399   /* "View.MemoryView":222
59400  *
59401  *     @property
59402  *     def memview(self):             # <<<<<<<<<<<<<<
59403  *         return self.get_memview()
59404  *
59405  */
59406 
59407   /* function exit code */
59408   __pyx_L1_error:;
59409   __Pyx_XDECREF(__pyx_t_1);
59410   __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
59411   __pyx_r = NULL;
59412   __pyx_L0:;
59413   __Pyx_XGIVEREF(__pyx_r);
59414   __Pyx_RefNannyFinishContext();
59415   return __pyx_r;
59416 }
59417 
59418 /* "View.MemoryView":226
59419  *
59420  *     @cname('get_memview')
59421  *     cdef get_memview(self):             # <<<<<<<<<<<<<<
59422  *         flags =  PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE
59423  *         return  memoryview(self, flags, self.dtype_is_object)
59424  */
59425 
59426 static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) {
59427   int __pyx_v_flags;
59428   PyObject *__pyx_r = NULL;
59429   __Pyx_RefNannyDeclarations
59430   PyObject *__pyx_t_1 = NULL;
59431   PyObject *__pyx_t_2 = NULL;
59432   PyObject *__pyx_t_3 = NULL;
59433   __Pyx_RefNannySetupContext("get_memview", 0);
59434 
59435   /* "View.MemoryView":227
59436  *     @cname('get_memview')
59437  *     cdef get_memview(self):
59438  *         flags =  PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE             # <<<<<<<<<<<<<<
59439  *         return  memoryview(self, flags, self.dtype_is_object)
59440  *
59441  */
59442   __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE);
59443 
59444   /* "View.MemoryView":228
59445  *     cdef get_memview(self):
59446  *         flags =  PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE
59447  *         return  memoryview(self, flags, self.dtype_is_object)             # <<<<<<<<<<<<<<
59448  *
59449  *     def __len__(self):
59450  */
59451   __Pyx_XDECREF(__pyx_r);
59452   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 228, __pyx_L1_error)
59453   __Pyx_GOTREF(__pyx_t_1);
59454   __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 228, __pyx_L1_error)
59455   __Pyx_GOTREF(__pyx_t_2);
59456   __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 228, __pyx_L1_error)
59457   __Pyx_GOTREF(__pyx_t_3);
59458   __Pyx_INCREF(((PyObject *)__pyx_v_self));
59459   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
59460   PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
59461   __Pyx_GIVEREF(__pyx_t_1);
59462   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
59463   __Pyx_GIVEREF(__pyx_t_2);
59464   PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
59465   __pyx_t_1 = 0;
59466   __pyx_t_2 = 0;
59467   __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 228, __pyx_L1_error)
59468   __Pyx_GOTREF(__pyx_t_2);
59469   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
59470   __pyx_r = __pyx_t_2;
59471   __pyx_t_2 = 0;
59472   goto __pyx_L0;
59473 
59474   /* "View.MemoryView":226
59475  *
59476  *     @cname('get_memview')
59477  *     cdef get_memview(self):             # <<<<<<<<<<<<<<
59478  *         flags =  PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE
59479  *         return  memoryview(self, flags, self.dtype_is_object)
59480  */
59481 
59482   /* function exit code */
59483   __pyx_L1_error:;
59484   __Pyx_XDECREF(__pyx_t_1);
59485   __Pyx_XDECREF(__pyx_t_2);
59486   __Pyx_XDECREF(__pyx_t_3);
59487   __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename);
59488   __pyx_r = 0;
59489   __pyx_L0:;
59490   __Pyx_XGIVEREF(__pyx_r);
59491   __Pyx_RefNannyFinishContext();
59492   return __pyx_r;
59493 }
59494 
59495 /* "View.MemoryView":230
59496  *         return  memoryview(self, flags, self.dtype_is_object)
59497  *
59498  *     def __len__(self):             # <<<<<<<<<<<<<<
59499  *         return self._shape[0]
59500  *
59501  */
59502 
59503 /* Python wrapper */
59504 static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/
59505 static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) {
59506   Py_ssize_t __pyx_r;
59507   __Pyx_RefNannyDeclarations
59508   __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
59509   __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self));
59510 
59511   /* function exit code */
59512   __Pyx_RefNannyFinishContext();
59513   return __pyx_r;
59514 }
59515 
59516 static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) {
59517   Py_ssize_t __pyx_r;
59518   __Pyx_RefNannyDeclarations
59519   __Pyx_RefNannySetupContext("__len__", 0);
59520 
59521   /* "View.MemoryView":231
59522  *
59523  *     def __len__(self):
59524  *         return self._shape[0]             # <<<<<<<<<<<<<<
59525  *
59526  *     def __getattr__(self, attr):
59527  */
59528   __pyx_r = (__pyx_v_self->_shape[0]);
59529   goto __pyx_L0;
59530 
59531   /* "View.MemoryView":230
59532  *         return  memoryview(self, flags, self.dtype_is_object)
59533  *
59534  *     def __len__(self):             # <<<<<<<<<<<<<<
59535  *         return self._shape[0]
59536  *
59537  */
59538 
59539   /* function exit code */
59540   __pyx_L0:;
59541   __Pyx_RefNannyFinishContext();
59542   return __pyx_r;
59543 }
59544 
59545 /* "View.MemoryView":233
59546  *         return self._shape[0]
59547  *
59548  *     def __getattr__(self, attr):             # <<<<<<<<<<<<<<
59549  *         return getattr(self.memview, attr)
59550  *
59551  */
59552 
59553 /* Python wrapper */
59554 static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/
59555 static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) {
59556   PyObject *__pyx_r = 0;
59557   __Pyx_RefNannyDeclarations
59558   __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0);
59559   __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr));
59560 
59561   /* function exit code */
59562   __Pyx_RefNannyFinishContext();
59563   return __pyx_r;
59564 }
59565 
59566 static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) {
59567   PyObject *__pyx_r = NULL;
59568   __Pyx_RefNannyDeclarations
59569   PyObject *__pyx_t_1 = NULL;
59570   PyObject *__pyx_t_2 = NULL;
59571   __Pyx_RefNannySetupContext("__getattr__", 0);
59572 
59573   /* "View.MemoryView":234
59574  *
59575  *     def __getattr__(self, attr):
59576  *         return getattr(self.memview, attr)             # <<<<<<<<<<<<<<
59577  *
59578  *     def __getitem__(self, item):
59579  */
59580   __Pyx_XDECREF(__pyx_r);
59581   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 234, __pyx_L1_error)
59582   __Pyx_GOTREF(__pyx_t_1);
59583   __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 234, __pyx_L1_error)
59584   __Pyx_GOTREF(__pyx_t_2);
59585   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
59586   __pyx_r = __pyx_t_2;
59587   __pyx_t_2 = 0;
59588   goto __pyx_L0;
59589 
59590   /* "View.MemoryView":233
59591  *         return self._shape[0]
59592  *
59593  *     def __getattr__(self, attr):             # <<<<<<<<<<<<<<
59594  *         return getattr(self.memview, attr)
59595  *
59596  */
59597 
59598   /* function exit code */
59599   __pyx_L1_error:;
59600   __Pyx_XDECREF(__pyx_t_1);
59601   __Pyx_XDECREF(__pyx_t_2);
59602   __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
59603   __pyx_r = NULL;
59604   __pyx_L0:;
59605   __Pyx_XGIVEREF(__pyx_r);
59606   __Pyx_RefNannyFinishContext();
59607   return __pyx_r;
59608 }
59609 
59610 /* "View.MemoryView":236
59611  *         return getattr(self.memview, attr)
59612  *
59613  *     def __getitem__(self, item):             # <<<<<<<<<<<<<<
59614  *         return self.memview[item]
59615  *
59616  */
59617 
59618 /* Python wrapper */
59619 static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
59620 static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
59621   PyObject *__pyx_r = 0;
59622   __Pyx_RefNannyDeclarations
59623   __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
59624   __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item));
59625 
59626   /* function exit code */
59627   __Pyx_RefNannyFinishContext();
59628   return __pyx_r;
59629 }
59630 
59631 static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) {
59632   PyObject *__pyx_r = NULL;
59633   __Pyx_RefNannyDeclarations
59634   PyObject *__pyx_t_1 = NULL;
59635   PyObject *__pyx_t_2 = NULL;
59636   __Pyx_RefNannySetupContext("__getitem__", 0);
59637 
59638   /* "View.MemoryView":237
59639  *
59640  *     def __getitem__(self, item):
59641  *         return self.memview[item]             # <<<<<<<<<<<<<<
59642  *
59643  *     def __setitem__(self, item, value):
59644  */
59645   __Pyx_XDECREF(__pyx_r);
59646   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 237, __pyx_L1_error)
59647   __Pyx_GOTREF(__pyx_t_1);
59648   __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 237, __pyx_L1_error)
59649   __Pyx_GOTREF(__pyx_t_2);
59650   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
59651   __pyx_r = __pyx_t_2;
59652   __pyx_t_2 = 0;
59653   goto __pyx_L0;
59654 
59655   /* "View.MemoryView":236
59656  *         return getattr(self.memview, attr)
59657  *
59658  *     def __getitem__(self, item):             # <<<<<<<<<<<<<<
59659  *         return self.memview[item]
59660  *
59661  */
59662 
59663   /* function exit code */
59664   __pyx_L1_error:;
59665   __Pyx_XDECREF(__pyx_t_1);
59666   __Pyx_XDECREF(__pyx_t_2);
59667   __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
59668   __pyx_r = NULL;
59669   __pyx_L0:;
59670   __Pyx_XGIVEREF(__pyx_r);
59671   __Pyx_RefNannyFinishContext();
59672   return __pyx_r;
59673 }
59674 
59675 /* "View.MemoryView":239
59676  *         return self.memview[item]
59677  *
59678  *     def __setitem__(self, item, value):             # <<<<<<<<<<<<<<
59679  *         self.memview[item] = value
59680  *
59681  */
59682 
59683 /* Python wrapper */
59684 static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/
59685 static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
59686   int __pyx_r;
59687   __Pyx_RefNannyDeclarations
59688   __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
59689   __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value));
59690 
59691   /* function exit code */
59692   __Pyx_RefNannyFinishContext();
59693   return __pyx_r;
59694 }
59695 
59696 static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
59697   int __pyx_r;
59698   __Pyx_RefNannyDeclarations
59699   PyObject *__pyx_t_1 = NULL;
59700   __Pyx_RefNannySetupContext("__setitem__", 0);
59701 
59702   /* "View.MemoryView":240
59703  *
59704  *     def __setitem__(self, item, value):
59705  *         self.memview[item] = value             # <<<<<<<<<<<<<<
59706  *
59707  *
59708  */
59709   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 240, __pyx_L1_error)
59710   __Pyx_GOTREF(__pyx_t_1);
59711   if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) __PYX_ERR(5, 240, __pyx_L1_error)
59712   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
59713 
59714   /* "View.MemoryView":239
59715  *         return self.memview[item]
59716  *
59717  *     def __setitem__(self, item, value):             # <<<<<<<<<<<<<<
59718  *         self.memview[item] = value
59719  *
59720  */
59721 
59722   /* function exit code */
59723   __pyx_r = 0;
59724   goto __pyx_L0;
59725   __pyx_L1_error:;
59726   __Pyx_XDECREF(__pyx_t_1);
59727   __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
59728   __pyx_r = -1;
59729   __pyx_L0:;
59730   __Pyx_RefNannyFinishContext();
59731   return __pyx_r;
59732 }
59733 
59734 /* "(tree fragment)":1
59735  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
59736  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
59737  * def __setstate_cython__(self, __pyx_state):
59738  */
59739 
59740 /* Python wrapper */
59741 static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
59742 static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
59743   PyObject *__pyx_r = 0;
59744   __Pyx_RefNannyDeclarations
59745   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
59746   __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self));
59747 
59748   /* function exit code */
59749   __Pyx_RefNannyFinishContext();
59750   return __pyx_r;
59751 }
59752 
59753 static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self) {
59754   PyObject *__pyx_r = NULL;
59755   __Pyx_RefNannyDeclarations
59756   PyObject *__pyx_t_1 = NULL;
59757   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
59758 
59759   /* "(tree fragment)":2
59760  * def __reduce_cython__(self):
59761  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
59762  * def __setstate_cython__(self, __pyx_state):
59763  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
59764  */
59765   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__93, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
59766   __Pyx_GOTREF(__pyx_t_1);
59767   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
59768   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
59769   __PYX_ERR(5, 2, __pyx_L1_error)
59770 
59771   /* "(tree fragment)":1
59772  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
59773  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
59774  * def __setstate_cython__(self, __pyx_state):
59775  */
59776 
59777   /* function exit code */
59778   __pyx_L1_error:;
59779   __Pyx_XDECREF(__pyx_t_1);
59780   __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
59781   __pyx_r = NULL;
59782   __Pyx_XGIVEREF(__pyx_r);
59783   __Pyx_RefNannyFinishContext();
59784   return __pyx_r;
59785 }
59786 
59787 /* "(tree fragment)":3
59788  * def __reduce_cython__(self):
59789  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
59790  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
59791  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
59792  */
59793 
59794 /* Python wrapper */
59795 static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
59796 static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
59797   PyObject *__pyx_r = 0;
59798   __Pyx_RefNannyDeclarations
59799   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
59800   __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
59801 
59802   /* function exit code */
59803   __Pyx_RefNannyFinishContext();
59804   return __pyx_r;
59805 }
59806 
59807 static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
59808   PyObject *__pyx_r = NULL;
59809   __Pyx_RefNannyDeclarations
59810   PyObject *__pyx_t_1 = NULL;
59811   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
59812 
59813   /* "(tree fragment)":4
59814  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
59815  * def __setstate_cython__(self, __pyx_state):
59816  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
59817  */
59818   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__94, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
59819   __Pyx_GOTREF(__pyx_t_1);
59820   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
59821   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
59822   __PYX_ERR(5, 4, __pyx_L1_error)
59823 
59824   /* "(tree fragment)":3
59825  * def __reduce_cython__(self):
59826  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
59827  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
59828  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
59829  */
59830 
59831   /* function exit code */
59832   __pyx_L1_error:;
59833   __Pyx_XDECREF(__pyx_t_1);
59834   __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
59835   __pyx_r = NULL;
59836   __Pyx_XGIVEREF(__pyx_r);
59837   __Pyx_RefNannyFinishContext();
59838   return __pyx_r;
59839 }
59840 
59841 /* "View.MemoryView":244
59842  *
59843  * @cname("__pyx_array_new")
59844  * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format,             # <<<<<<<<<<<<<<
59845  *                           char *mode, char *buf):
59846  *     cdef array result
59847  */
59848 
59849 static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) {
59850   struct __pyx_array_obj *__pyx_v_result = 0;
59851   struct __pyx_array_obj *__pyx_r = NULL;
59852   __Pyx_RefNannyDeclarations
59853   int __pyx_t_1;
59854   PyObject *__pyx_t_2 = NULL;
59855   PyObject *__pyx_t_3 = NULL;
59856   PyObject *__pyx_t_4 = NULL;
59857   PyObject *__pyx_t_5 = NULL;
59858   __Pyx_RefNannySetupContext("array_cwrapper", 0);
59859 
59860   /* "View.MemoryView":248
59861  *     cdef array result
59862  *
59863  *     if buf == NULL:             # <<<<<<<<<<<<<<
59864  *         result = array(shape, itemsize, format, mode.decode('ASCII'))
59865  *     else:
59866  */
59867   __pyx_t_1 = ((__pyx_v_buf == NULL) != 0);
59868   if (__pyx_t_1) {
59869 
59870     /* "View.MemoryView":249
59871  *
59872  *     if buf == NULL:
59873  *         result = array(shape, itemsize, format, mode.decode('ASCII'))             # <<<<<<<<<<<<<<
59874  *     else:
59875  *         result = array(shape, itemsize, format, mode.decode('ASCII'),
59876  */
59877     __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 249, __pyx_L1_error)
59878     __Pyx_GOTREF(__pyx_t_2);
59879     __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 249, __pyx_L1_error)
59880     __Pyx_GOTREF(__pyx_t_3);
59881     __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 249, __pyx_L1_error)
59882     __Pyx_GOTREF(__pyx_t_4);
59883     __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 249, __pyx_L1_error)
59884     __Pyx_GOTREF(__pyx_t_5);
59885     __Pyx_INCREF(__pyx_v_shape);
59886     __Pyx_GIVEREF(__pyx_v_shape);
59887     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape);
59888     __Pyx_GIVEREF(__pyx_t_2);
59889     PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
59890     __Pyx_GIVEREF(__pyx_t_3);
59891     PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
59892     __Pyx_GIVEREF(__pyx_t_4);
59893     PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4);
59894     __pyx_t_2 = 0;
59895     __pyx_t_3 = 0;
59896     __pyx_t_4 = 0;
59897     __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 249, __pyx_L1_error)
59898     __Pyx_GOTREF(__pyx_t_4);
59899     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
59900     __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4);
59901     __pyx_t_4 = 0;
59902 
59903     /* "View.MemoryView":248
59904  *     cdef array result
59905  *
59906  *     if buf == NULL:             # <<<<<<<<<<<<<<
59907  *         result = array(shape, itemsize, format, mode.decode('ASCII'))
59908  *     else:
59909  */
59910     goto __pyx_L3;
59911   }
59912 
59913   /* "View.MemoryView":251
59914  *         result = array(shape, itemsize, format, mode.decode('ASCII'))
59915  *     else:
59916  *         result = array(shape, itemsize, format, mode.decode('ASCII'),             # <<<<<<<<<<<<<<
59917  *                        allocate_buffer=False)
59918  *         result.data = buf
59919  */
59920   /*else*/ {
59921     __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 251, __pyx_L1_error)
59922     __Pyx_GOTREF(__pyx_t_4);
59923     __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 251, __pyx_L1_error)
59924     __Pyx_GOTREF(__pyx_t_5);
59925     __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 251, __pyx_L1_error)
59926     __Pyx_GOTREF(__pyx_t_3);
59927     __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 251, __pyx_L1_error)
59928     __Pyx_GOTREF(__pyx_t_2);
59929     __Pyx_INCREF(__pyx_v_shape);
59930     __Pyx_GIVEREF(__pyx_v_shape);
59931     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape);
59932     __Pyx_GIVEREF(__pyx_t_4);
59933     PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
59934     __Pyx_GIVEREF(__pyx_t_5);
59935     PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5);
59936     __Pyx_GIVEREF(__pyx_t_3);
59937     PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3);
59938     __pyx_t_4 = 0;
59939     __pyx_t_5 = 0;
59940     __pyx_t_3 = 0;
59941 
59942     /* "View.MemoryView":252
59943  *     else:
59944  *         result = array(shape, itemsize, format, mode.decode('ASCII'),
59945  *                        allocate_buffer=False)             # <<<<<<<<<<<<<<
59946  *         result.data = buf
59947  *
59948  */
59949     __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 252, __pyx_L1_error)
59950     __Pyx_GOTREF(__pyx_t_3);
59951     if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(5, 252, __pyx_L1_error)
59952 
59953     /* "View.MemoryView":251
59954  *         result = array(shape, itemsize, format, mode.decode('ASCII'))
59955  *     else:
59956  *         result = array(shape, itemsize, format, mode.decode('ASCII'),             # <<<<<<<<<<<<<<
59957  *                        allocate_buffer=False)
59958  *         result.data = buf
59959  */
59960     __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 251, __pyx_L1_error)
59961     __Pyx_GOTREF(__pyx_t_5);
59962     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
59963     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
59964     __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_5);
59965     __pyx_t_5 = 0;
59966 
59967     /* "View.MemoryView":253
59968  *         result = array(shape, itemsize, format, mode.decode('ASCII'),
59969  *                        allocate_buffer=False)
59970  *         result.data = buf             # <<<<<<<<<<<<<<
59971  *
59972  *     return result
59973  */
59974     __pyx_v_result->data = __pyx_v_buf;
59975   }
59976   __pyx_L3:;
59977 
59978   /* "View.MemoryView":255
59979  *         result.data = buf
59980  *
59981  *     return result             # <<<<<<<<<<<<<<
59982  *
59983  *
59984  */
59985   __Pyx_XDECREF(((PyObject *)__pyx_r));
59986   __Pyx_INCREF(((PyObject *)__pyx_v_result));
59987   __pyx_r = __pyx_v_result;
59988   goto __pyx_L0;
59989 
59990   /* "View.MemoryView":244
59991  *
59992  * @cname("__pyx_array_new")
59993  * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format,             # <<<<<<<<<<<<<<
59994  *                           char *mode, char *buf):
59995  *     cdef array result
59996  */
59997 
59998   /* function exit code */
59999   __pyx_L1_error:;
60000   __Pyx_XDECREF(__pyx_t_2);
60001   __Pyx_XDECREF(__pyx_t_3);
60002   __Pyx_XDECREF(__pyx_t_4);
60003   __Pyx_XDECREF(__pyx_t_5);
60004   __Pyx_AddTraceback("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename);
60005   __pyx_r = 0;
60006   __pyx_L0:;
60007   __Pyx_XDECREF((PyObject *)__pyx_v_result);
60008   __Pyx_XGIVEREF((PyObject *)__pyx_r);
60009   __Pyx_RefNannyFinishContext();
60010   return __pyx_r;
60011 }
60012 
60013 /* "View.MemoryView":281
60014  * cdef class Enum(object):
60015  *     cdef object name
60016  *     def __init__(self, name):             # <<<<<<<<<<<<<<
60017  *         self.name = name
60018  *     def __repr__(self):
60019  */
60020 
60021 /* Python wrapper */
60022 static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
60023 static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
60024   PyObject *__pyx_v_name = 0;
60025   int __pyx_r;
60026   __Pyx_RefNannyDeclarations
60027   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
60028   {
60029     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
60030     PyObject* values[1] = {0};
60031     if (unlikely(__pyx_kwds)) {
60032       Py_ssize_t kw_args;
60033       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
60034       switch (pos_args) {
60035         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
60036         CYTHON_FALLTHROUGH;
60037         case  0: break;
60038         default: goto __pyx_L5_argtuple_error;
60039       }
60040       kw_args = PyDict_Size(__pyx_kwds);
60041       switch (pos_args) {
60042         case  0:
60043         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
60044         else goto __pyx_L5_argtuple_error;
60045       }
60046       if (unlikely(kw_args > 0)) {
60047         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(5, 281, __pyx_L3_error)
60048       }
60049     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
60050       goto __pyx_L5_argtuple_error;
60051     } else {
60052       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
60053     }
60054     __pyx_v_name = values[0];
60055   }
60056   goto __pyx_L4_argument_unpacking_done;
60057   __pyx_L5_argtuple_error:;
60058   __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(5, 281, __pyx_L3_error)
60059   __pyx_L3_error:;
60060   __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
60061   __Pyx_RefNannyFinishContext();
60062   return -1;
60063   __pyx_L4_argument_unpacking_done:;
60064   __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name);
60065 
60066   /* function exit code */
60067   __Pyx_RefNannyFinishContext();
60068   return __pyx_r;
60069 }
60070 
60071 static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) {
60072   int __pyx_r;
60073   __Pyx_RefNannyDeclarations
60074   __Pyx_RefNannySetupContext("__init__", 0);
60075 
60076   /* "View.MemoryView":282
60077  *     cdef object name
60078  *     def __init__(self, name):
60079  *         self.name = name             # <<<<<<<<<<<<<<
60080  *     def __repr__(self):
60081  *         return self.name
60082  */
60083   __Pyx_INCREF(__pyx_v_name);
60084   __Pyx_GIVEREF(__pyx_v_name);
60085   __Pyx_GOTREF(__pyx_v_self->name);
60086   __Pyx_DECREF(__pyx_v_self->name);
60087   __pyx_v_self->name = __pyx_v_name;
60088 
60089   /* "View.MemoryView":281
60090  * cdef class Enum(object):
60091  *     cdef object name
60092  *     def __init__(self, name):             # <<<<<<<<<<<<<<
60093  *         self.name = name
60094  *     def __repr__(self):
60095  */
60096 
60097   /* function exit code */
60098   __pyx_r = 0;
60099   __Pyx_RefNannyFinishContext();
60100   return __pyx_r;
60101 }
60102 
60103 /* "View.MemoryView":283
60104  *     def __init__(self, name):
60105  *         self.name = name
60106  *     def __repr__(self):             # <<<<<<<<<<<<<<
60107  *         return self.name
60108  *
60109  */
60110 
60111 /* Python wrapper */
60112 static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/
60113 static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) {
60114   PyObject *__pyx_r = 0;
60115   __Pyx_RefNannyDeclarations
60116   __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
60117   __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self));
60118 
60119   /* function exit code */
60120   __Pyx_RefNannyFinishContext();
60121   return __pyx_r;
60122 }
60123 
60124 static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) {
60125   PyObject *__pyx_r = NULL;
60126   __Pyx_RefNannyDeclarations
60127   __Pyx_RefNannySetupContext("__repr__", 0);
60128 
60129   /* "View.MemoryView":284
60130  *         self.name = name
60131  *     def __repr__(self):
60132  *         return self.name             # <<<<<<<<<<<<<<
60133  *
60134  * cdef generic = Enum("<strided and direct or indirect>")
60135  */
60136   __Pyx_XDECREF(__pyx_r);
60137   __Pyx_INCREF(__pyx_v_self->name);
60138   __pyx_r = __pyx_v_self->name;
60139   goto __pyx_L0;
60140 
60141   /* "View.MemoryView":283
60142  *     def __init__(self, name):
60143  *         self.name = name
60144  *     def __repr__(self):             # <<<<<<<<<<<<<<
60145  *         return self.name
60146  *
60147  */
60148 
60149   /* function exit code */
60150   __pyx_L0:;
60151   __Pyx_XGIVEREF(__pyx_r);
60152   __Pyx_RefNannyFinishContext();
60153   return __pyx_r;
60154 }
60155 
60156 /* "(tree fragment)":1
60157  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
60158  *     cdef tuple state
60159  *     cdef object _dict
60160  */
60161 
60162 /* Python wrapper */
60163 static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
60164 static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
60165   PyObject *__pyx_r = 0;
60166   __Pyx_RefNannyDeclarations
60167   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
60168   __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self));
60169 
60170   /* function exit code */
60171   __Pyx_RefNannyFinishContext();
60172   return __pyx_r;
60173 }
60174 
60175 static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self) {
60176   PyObject *__pyx_v_state = 0;
60177   PyObject *__pyx_v__dict = 0;
60178   int __pyx_v_use_setstate;
60179   PyObject *__pyx_r = NULL;
60180   __Pyx_RefNannyDeclarations
60181   PyObject *__pyx_t_1 = NULL;
60182   int __pyx_t_2;
60183   int __pyx_t_3;
60184   PyObject *__pyx_t_4 = NULL;
60185   PyObject *__pyx_t_5 = NULL;
60186   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
60187 
60188   /* "(tree fragment)":5
60189  *     cdef object _dict
60190  *     cdef bint use_setstate
60191  *     state = (self.name,)             # <<<<<<<<<<<<<<
60192  *     _dict = getattr(self, '__dict__', None)
60193  *     if _dict is not None:
60194  */
60195   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 5, __pyx_L1_error)
60196   __Pyx_GOTREF(__pyx_t_1);
60197   __Pyx_INCREF(__pyx_v_self->name);
60198   __Pyx_GIVEREF(__pyx_v_self->name);
60199   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name);
60200   __pyx_v_state = ((PyObject*)__pyx_t_1);
60201   __pyx_t_1 = 0;
60202 
60203   /* "(tree fragment)":6
60204  *     cdef bint use_setstate
60205  *     state = (self.name,)
60206  *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
60207  *     if _dict is not None:
60208  *         state += (_dict,)
60209  */
60210   __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 6, __pyx_L1_error)
60211   __Pyx_GOTREF(__pyx_t_1);
60212   __pyx_v__dict = __pyx_t_1;
60213   __pyx_t_1 = 0;
60214 
60215   /* "(tree fragment)":7
60216  *     state = (self.name,)
60217  *     _dict = getattr(self, '__dict__', None)
60218  *     if _dict is not None:             # <<<<<<<<<<<<<<
60219  *         state += (_dict,)
60220  *         use_setstate = True
60221  */
60222   __pyx_t_2 = (__pyx_v__dict != Py_None);
60223   __pyx_t_3 = (__pyx_t_2 != 0);
60224   if (__pyx_t_3) {
60225 
60226     /* "(tree fragment)":8
60227  *     _dict = getattr(self, '__dict__', None)
60228  *     if _dict is not None:
60229  *         state += (_dict,)             # <<<<<<<<<<<<<<
60230  *         use_setstate = True
60231  *     else:
60232  */
60233     __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8, __pyx_L1_error)
60234     __Pyx_GOTREF(__pyx_t_1);
60235     __Pyx_INCREF(__pyx_v__dict);
60236     __Pyx_GIVEREF(__pyx_v__dict);
60237     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict);
60238     __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 8, __pyx_L1_error)
60239     __Pyx_GOTREF(__pyx_t_4);
60240     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
60241     __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4));
60242     __pyx_t_4 = 0;
60243 
60244     /* "(tree fragment)":9
60245  *     if _dict is not None:
60246  *         state += (_dict,)
60247  *         use_setstate = True             # <<<<<<<<<<<<<<
60248  *     else:
60249  *         use_setstate = self.name is not None
60250  */
60251     __pyx_v_use_setstate = 1;
60252 
60253     /* "(tree fragment)":7
60254  *     state = (self.name,)
60255  *     _dict = getattr(self, '__dict__', None)
60256  *     if _dict is not None:             # <<<<<<<<<<<<<<
60257  *         state += (_dict,)
60258  *         use_setstate = True
60259  */
60260     goto __pyx_L3;
60261   }
60262 
60263   /* "(tree fragment)":11
60264  *         use_setstate = True
60265  *     else:
60266  *         use_setstate = self.name is not None             # <<<<<<<<<<<<<<
60267  *     if use_setstate:
60268  *         return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state
60269  */
60270   /*else*/ {
60271     __pyx_t_3 = (__pyx_v_self->name != Py_None);
60272     __pyx_v_use_setstate = __pyx_t_3;
60273   }
60274   __pyx_L3:;
60275 
60276   /* "(tree fragment)":12
60277  *     else:
60278  *         use_setstate = self.name is not None
60279  *     if use_setstate:             # <<<<<<<<<<<<<<
60280  *         return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state
60281  *     else:
60282  */
60283   __pyx_t_3 = (__pyx_v_use_setstate != 0);
60284   if (__pyx_t_3) {
60285 
60286     /* "(tree fragment)":13
60287  *         use_setstate = self.name is not None
60288  *     if use_setstate:
60289  *         return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state             # <<<<<<<<<<<<<<
60290  *     else:
60291  *         return __pyx_unpickle_Enum, (type(self), 0xb068931, state)
60292  */
60293     __Pyx_XDECREF(__pyx_r);
60294     __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 13, __pyx_L1_error)
60295     __Pyx_GOTREF(__pyx_t_4);
60296     __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 13, __pyx_L1_error)
60297     __Pyx_GOTREF(__pyx_t_1);
60298     __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
60299     __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
60300     PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
60301     __Pyx_INCREF(__pyx_int_184977713);
60302     __Pyx_GIVEREF(__pyx_int_184977713);
60303     PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713);
60304     __Pyx_INCREF(Py_None);
60305     __Pyx_GIVEREF(Py_None);
60306     PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
60307     __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 13, __pyx_L1_error)
60308     __Pyx_GOTREF(__pyx_t_5);
60309     __Pyx_GIVEREF(__pyx_t_4);
60310     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
60311     __Pyx_GIVEREF(__pyx_t_1);
60312     PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
60313     __Pyx_INCREF(__pyx_v_state);
60314     __Pyx_GIVEREF(__pyx_v_state);
60315     PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state);
60316     __pyx_t_4 = 0;
60317     __pyx_t_1 = 0;
60318     __pyx_r = __pyx_t_5;
60319     __pyx_t_5 = 0;
60320     goto __pyx_L0;
60321 
60322     /* "(tree fragment)":12
60323  *     else:
60324  *         use_setstate = self.name is not None
60325  *     if use_setstate:             # <<<<<<<<<<<<<<
60326  *         return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state
60327  *     else:
60328  */
60329   }
60330 
60331   /* "(tree fragment)":15
60332  *         return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state
60333  *     else:
60334  *         return __pyx_unpickle_Enum, (type(self), 0xb068931, state)             # <<<<<<<<<<<<<<
60335  * def __setstate_cython__(self, __pyx_state):
60336  *     __pyx_unpickle_Enum__set_state(self, __pyx_state)
60337  */
60338   /*else*/ {
60339     __Pyx_XDECREF(__pyx_r);
60340     __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 15, __pyx_L1_error)
60341     __Pyx_GOTREF(__pyx_t_5);
60342     __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 15, __pyx_L1_error)
60343     __Pyx_GOTREF(__pyx_t_1);
60344     __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
60345     __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
60346     PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
60347     __Pyx_INCREF(__pyx_int_184977713);
60348     __Pyx_GIVEREF(__pyx_int_184977713);
60349     PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713);
60350     __Pyx_INCREF(__pyx_v_state);
60351     __Pyx_GIVEREF(__pyx_v_state);
60352     PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state);
60353     __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 15, __pyx_L1_error)
60354     __Pyx_GOTREF(__pyx_t_4);
60355     __Pyx_GIVEREF(__pyx_t_5);
60356     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
60357     __Pyx_GIVEREF(__pyx_t_1);
60358     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
60359     __pyx_t_5 = 0;
60360     __pyx_t_1 = 0;
60361     __pyx_r = __pyx_t_4;
60362     __pyx_t_4 = 0;
60363     goto __pyx_L0;
60364   }
60365 
60366   /* "(tree fragment)":1
60367  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
60368  *     cdef tuple state
60369  *     cdef object _dict
60370  */
60371 
60372   /* function exit code */
60373   __pyx_L1_error:;
60374   __Pyx_XDECREF(__pyx_t_1);
60375   __Pyx_XDECREF(__pyx_t_4);
60376   __Pyx_XDECREF(__pyx_t_5);
60377   __Pyx_AddTraceback("View.MemoryView.Enum.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
60378   __pyx_r = NULL;
60379   __pyx_L0:;
60380   __Pyx_XDECREF(__pyx_v_state);
60381   __Pyx_XDECREF(__pyx_v__dict);
60382   __Pyx_XGIVEREF(__pyx_r);
60383   __Pyx_RefNannyFinishContext();
60384   return __pyx_r;
60385 }
60386 
60387 /* "(tree fragment)":16
60388  *     else:
60389  *         return __pyx_unpickle_Enum, (type(self), 0xb068931, state)
60390  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
60391  *     __pyx_unpickle_Enum__set_state(self, __pyx_state)
60392  */
60393 
60394 /* Python wrapper */
60395 static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
60396 static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
60397   PyObject *__pyx_r = 0;
60398   __Pyx_RefNannyDeclarations
60399   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
60400   __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
60401 
60402   /* function exit code */
60403   __Pyx_RefNannyFinishContext();
60404   return __pyx_r;
60405 }
60406 
60407 static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
60408   PyObject *__pyx_r = NULL;
60409   __Pyx_RefNannyDeclarations
60410   PyObject *__pyx_t_1 = NULL;
60411   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
60412 
60413   /* "(tree fragment)":17
60414  *         return __pyx_unpickle_Enum, (type(self), 0xb068931, state)
60415  * def __setstate_cython__(self, __pyx_state):
60416  *     __pyx_unpickle_Enum__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
60417  */
60418   if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(5, 17, __pyx_L1_error)
60419   __pyx_t_1 = __pyx_unpickle_Enum__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 17, __pyx_L1_error)
60420   __Pyx_GOTREF(__pyx_t_1);
60421   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
60422 
60423   /* "(tree fragment)":16
60424  *     else:
60425  *         return __pyx_unpickle_Enum, (type(self), 0xb068931, state)
60426  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
60427  *     __pyx_unpickle_Enum__set_state(self, __pyx_state)
60428  */
60429 
60430   /* function exit code */
60431   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
60432   goto __pyx_L0;
60433   __pyx_L1_error:;
60434   __Pyx_XDECREF(__pyx_t_1);
60435   __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
60436   __pyx_r = NULL;
60437   __pyx_L0:;
60438   __Pyx_XGIVEREF(__pyx_r);
60439   __Pyx_RefNannyFinishContext();
60440   return __pyx_r;
60441 }
60442 
60443 /* "View.MemoryView":298
60444  *
60445  * @cname('__pyx_align_pointer')
60446  * cdef void *align_pointer(void *memory, size_t alignment) nogil:             # <<<<<<<<<<<<<<
60447  *     "Align pointer memory on a given boundary"
60448  *     cdef Py_intptr_t aligned_p = <Py_intptr_t> memory
60449  */
60450 
60451 static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) {
60452   Py_intptr_t __pyx_v_aligned_p;
60453   size_t __pyx_v_offset;
60454   void *__pyx_r;
60455   int __pyx_t_1;
60456 
60457   /* "View.MemoryView":300
60458  * cdef void *align_pointer(void *memory, size_t alignment) nogil:
60459  *     "Align pointer memory on a given boundary"
60460  *     cdef Py_intptr_t aligned_p = <Py_intptr_t> memory             # <<<<<<<<<<<<<<
60461  *     cdef size_t offset
60462  *
60463  */
60464   __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory);
60465 
60466   /* "View.MemoryView":304
60467  *
60468  *     with cython.cdivision(True):
60469  *         offset = aligned_p % alignment             # <<<<<<<<<<<<<<
60470  *
60471  *     if offset > 0:
60472  */
60473   __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment);
60474 
60475   /* "View.MemoryView":306
60476  *         offset = aligned_p % alignment
60477  *
60478  *     if offset > 0:             # <<<<<<<<<<<<<<
60479  *         aligned_p += alignment - offset
60480  *
60481  */
60482   __pyx_t_1 = ((__pyx_v_offset > 0) != 0);
60483   if (__pyx_t_1) {
60484 
60485     /* "View.MemoryView":307
60486  *
60487  *     if offset > 0:
60488  *         aligned_p += alignment - offset             # <<<<<<<<<<<<<<
60489  *
60490  *     return <void *> aligned_p
60491  */
60492     __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset));
60493 
60494     /* "View.MemoryView":306
60495  *         offset = aligned_p % alignment
60496  *
60497  *     if offset > 0:             # <<<<<<<<<<<<<<
60498  *         aligned_p += alignment - offset
60499  *
60500  */
60501   }
60502 
60503   /* "View.MemoryView":309
60504  *         aligned_p += alignment - offset
60505  *
60506  *     return <void *> aligned_p             # <<<<<<<<<<<<<<
60507  *
60508  *
60509  */
60510   __pyx_r = ((void *)__pyx_v_aligned_p);
60511   goto __pyx_L0;
60512 
60513   /* "View.MemoryView":298
60514  *
60515  * @cname('__pyx_align_pointer')
60516  * cdef void *align_pointer(void *memory, size_t alignment) nogil:             # <<<<<<<<<<<<<<
60517  *     "Align pointer memory on a given boundary"
60518  *     cdef Py_intptr_t aligned_p = <Py_intptr_t> memory
60519  */
60520 
60521   /* function exit code */
60522   __pyx_L0:;
60523   return __pyx_r;
60524 }
60525 
60526 /* "View.MemoryView":345
60527  *     cdef __Pyx_TypeInfo *typeinfo
60528  *
60529  *     def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False):             # <<<<<<<<<<<<<<
60530  *         self.obj = obj
60531  *         self.flags = flags
60532  */
60533 
60534 /* Python wrapper */
60535 static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
60536 static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
60537   PyObject *__pyx_v_obj = 0;
60538   int __pyx_v_flags;
60539   int __pyx_v_dtype_is_object;
60540   int __pyx_r;
60541   __Pyx_RefNannyDeclarations
60542   __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
60543   {
60544     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0};
60545     PyObject* values[3] = {0,0,0};
60546     if (unlikely(__pyx_kwds)) {
60547       Py_ssize_t kw_args;
60548       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
60549       switch (pos_args) {
60550         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
60551         CYTHON_FALLTHROUGH;
60552         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
60553         CYTHON_FALLTHROUGH;
60554         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
60555         CYTHON_FALLTHROUGH;
60556         case  0: break;
60557         default: goto __pyx_L5_argtuple_error;
60558       }
60559       kw_args = PyDict_Size(__pyx_kwds);
60560       switch (pos_args) {
60561         case  0:
60562         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
60563         else goto __pyx_L5_argtuple_error;
60564         CYTHON_FALLTHROUGH;
60565         case  1:
60566         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--;
60567         else {
60568           __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(5, 345, __pyx_L3_error)
60569         }
60570         CYTHON_FALLTHROUGH;
60571         case  2:
60572         if (kw_args > 0) {
60573           PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dtype_is_object);
60574           if (value) { values[2] = value; kw_args--; }
60575         }
60576       }
60577       if (unlikely(kw_args > 0)) {
60578         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(5, 345, __pyx_L3_error)
60579       }
60580     } else {
60581       switch (PyTuple_GET_SIZE(__pyx_args)) {
60582         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
60583         CYTHON_FALLTHROUGH;
60584         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
60585         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
60586         break;
60587         default: goto __pyx_L5_argtuple_error;
60588       }
60589     }
60590     __pyx_v_obj = values[0];
60591     __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 345, __pyx_L3_error)
60592     if (values[2]) {
60593       __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 345, __pyx_L3_error)
60594     } else {
60595       __pyx_v_dtype_is_object = ((int)0);
60596     }
60597   }
60598   goto __pyx_L4_argument_unpacking_done;
60599   __pyx_L5_argtuple_error:;
60600   __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(5, 345, __pyx_L3_error)
60601   __pyx_L3_error:;
60602   __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
60603   __Pyx_RefNannyFinishContext();
60604   return -1;
60605   __pyx_L4_argument_unpacking_done:;
60606   __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object);
60607 
60608   /* function exit code */
60609   __Pyx_RefNannyFinishContext();
60610   return __pyx_r;
60611 }
60612 
60613 static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) {
60614   int __pyx_r;
60615   __Pyx_RefNannyDeclarations
60616   int __pyx_t_1;
60617   int __pyx_t_2;
60618   int __pyx_t_3;
60619   int __pyx_t_4;
60620   __Pyx_RefNannySetupContext("__cinit__", 0);
60621 
60622   /* "View.MemoryView":346
60623  *
60624  *     def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False):
60625  *         self.obj = obj             # <<<<<<<<<<<<<<
60626  *         self.flags = flags
60627  *         if type(self) is memoryview or obj is not None:
60628  */
60629   __Pyx_INCREF(__pyx_v_obj);
60630   __Pyx_GIVEREF(__pyx_v_obj);
60631   __Pyx_GOTREF(__pyx_v_self->obj);
60632   __Pyx_DECREF(__pyx_v_self->obj);
60633   __pyx_v_self->obj = __pyx_v_obj;
60634 
60635   /* "View.MemoryView":347
60636  *     def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False):
60637  *         self.obj = obj
60638  *         self.flags = flags             # <<<<<<<<<<<<<<
60639  *         if type(self) is memoryview or obj is not None:
60640  *             __Pyx_GetBuffer(obj, &self.view, flags)
60641  */
60642   __pyx_v_self->flags = __pyx_v_flags;
60643 
60644   /* "View.MemoryView":348
60645  *         self.obj = obj
60646  *         self.flags = flags
60647  *         if type(self) is memoryview or obj is not None:             # <<<<<<<<<<<<<<
60648  *             __Pyx_GetBuffer(obj, &self.view, flags)
60649  *             if <PyObject *> self.view.obj == NULL:
60650  */
60651   __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type));
60652   __pyx_t_3 = (__pyx_t_2 != 0);
60653   if (!__pyx_t_3) {
60654   } else {
60655     __pyx_t_1 = __pyx_t_3;
60656     goto __pyx_L4_bool_binop_done;
60657   }
60658   __pyx_t_3 = (__pyx_v_obj != Py_None);
60659   __pyx_t_2 = (__pyx_t_3 != 0);
60660   __pyx_t_1 = __pyx_t_2;
60661   __pyx_L4_bool_binop_done:;
60662   if (__pyx_t_1) {
60663 
60664     /* "View.MemoryView":349
60665  *         self.flags = flags
60666  *         if type(self) is memoryview or obj is not None:
60667  *             __Pyx_GetBuffer(obj, &self.view, flags)             # <<<<<<<<<<<<<<
60668  *             if <PyObject *> self.view.obj == NULL:
60669  *                 (<__pyx_buffer *> &self.view).obj = Py_None
60670  */
60671     __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(5, 349, __pyx_L1_error)
60672 
60673     /* "View.MemoryView":350
60674  *         if type(self) is memoryview or obj is not None:
60675  *             __Pyx_GetBuffer(obj, &self.view, flags)
60676  *             if <PyObject *> self.view.obj == NULL:             # <<<<<<<<<<<<<<
60677  *                 (<__pyx_buffer *> &self.view).obj = Py_None
60678  *                 Py_INCREF(Py_None)
60679  */
60680     __pyx_t_1 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0);
60681     if (__pyx_t_1) {
60682 
60683       /* "View.MemoryView":351
60684  *             __Pyx_GetBuffer(obj, &self.view, flags)
60685  *             if <PyObject *> self.view.obj == NULL:
60686  *                 (<__pyx_buffer *> &self.view).obj = Py_None             # <<<<<<<<<<<<<<
60687  *                 Py_INCREF(Py_None)
60688  *
60689  */
60690       ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None;
60691 
60692       /* "View.MemoryView":352
60693  *             if <PyObject *> self.view.obj == NULL:
60694  *                 (<__pyx_buffer *> &self.view).obj = Py_None
60695  *                 Py_INCREF(Py_None)             # <<<<<<<<<<<<<<
60696  *
60697  *         global __pyx_memoryview_thread_locks_used
60698  */
60699       Py_INCREF(Py_None);
60700 
60701       /* "View.MemoryView":350
60702  *         if type(self) is memoryview or obj is not None:
60703  *             __Pyx_GetBuffer(obj, &self.view, flags)
60704  *             if <PyObject *> self.view.obj == NULL:             # <<<<<<<<<<<<<<
60705  *                 (<__pyx_buffer *> &self.view).obj = Py_None
60706  *                 Py_INCREF(Py_None)
60707  */
60708     }
60709 
60710     /* "View.MemoryView":348
60711  *         self.obj = obj
60712  *         self.flags = flags
60713  *         if type(self) is memoryview or obj is not None:             # <<<<<<<<<<<<<<
60714  *             __Pyx_GetBuffer(obj, &self.view, flags)
60715  *             if <PyObject *> self.view.obj == NULL:
60716  */
60717   }
60718 
60719   /* "View.MemoryView":355
60720  *
60721  *         global __pyx_memoryview_thread_locks_used
60722  *         if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED:             # <<<<<<<<<<<<<<
60723  *             self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
60724  *             __pyx_memoryview_thread_locks_used += 1
60725  */
60726   __pyx_t_1 = ((__pyx_memoryview_thread_locks_used < 8) != 0);
60727   if (__pyx_t_1) {
60728 
60729     /* "View.MemoryView":356
60730  *         global __pyx_memoryview_thread_locks_used
60731  *         if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED:
60732  *             self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]             # <<<<<<<<<<<<<<
60733  *             __pyx_memoryview_thread_locks_used += 1
60734  *         if self.lock is NULL:
60735  */
60736     __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]);
60737 
60738     /* "View.MemoryView":357
60739  *         if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED:
60740  *             self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
60741  *             __pyx_memoryview_thread_locks_used += 1             # <<<<<<<<<<<<<<
60742  *         if self.lock is NULL:
60743  *             self.lock = PyThread_allocate_lock()
60744  */
60745     __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1);
60746 
60747     /* "View.MemoryView":355
60748  *
60749  *         global __pyx_memoryview_thread_locks_used
60750  *         if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED:             # <<<<<<<<<<<<<<
60751  *             self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
60752  *             __pyx_memoryview_thread_locks_used += 1
60753  */
60754   }
60755 
60756   /* "View.MemoryView":358
60757  *             self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
60758  *             __pyx_memoryview_thread_locks_used += 1
60759  *         if self.lock is NULL:             # <<<<<<<<<<<<<<
60760  *             self.lock = PyThread_allocate_lock()
60761  *             if self.lock is NULL:
60762  */
60763   __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0);
60764   if (__pyx_t_1) {
60765 
60766     /* "View.MemoryView":359
60767  *             __pyx_memoryview_thread_locks_used += 1
60768  *         if self.lock is NULL:
60769  *             self.lock = PyThread_allocate_lock()             # <<<<<<<<<<<<<<
60770  *             if self.lock is NULL:
60771  *                 raise MemoryError
60772  */
60773     __pyx_v_self->lock = PyThread_allocate_lock();
60774 
60775     /* "View.MemoryView":360
60776  *         if self.lock is NULL:
60777  *             self.lock = PyThread_allocate_lock()
60778  *             if self.lock is NULL:             # <<<<<<<<<<<<<<
60779  *                 raise MemoryError
60780  *
60781  */
60782     __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0);
60783     if (unlikely(__pyx_t_1)) {
60784 
60785       /* "View.MemoryView":361
60786  *             self.lock = PyThread_allocate_lock()
60787  *             if self.lock is NULL:
60788  *                 raise MemoryError             # <<<<<<<<<<<<<<
60789  *
60790  *         if flags & PyBUF_FORMAT:
60791  */
60792       PyErr_NoMemory(); __PYX_ERR(5, 361, __pyx_L1_error)
60793 
60794       /* "View.MemoryView":360
60795  *         if self.lock is NULL:
60796  *             self.lock = PyThread_allocate_lock()
60797  *             if self.lock is NULL:             # <<<<<<<<<<<<<<
60798  *                 raise MemoryError
60799  *
60800  */
60801     }
60802 
60803     /* "View.MemoryView":358
60804  *             self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
60805  *             __pyx_memoryview_thread_locks_used += 1
60806  *         if self.lock is NULL:             # <<<<<<<<<<<<<<
60807  *             self.lock = PyThread_allocate_lock()
60808  *             if self.lock is NULL:
60809  */
60810   }
60811 
60812   /* "View.MemoryView":363
60813  *                 raise MemoryError
60814  *
60815  *         if flags & PyBUF_FORMAT:             # <<<<<<<<<<<<<<
60816  *             self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')
60817  *         else:
60818  */
60819   __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
60820   if (__pyx_t_1) {
60821 
60822     /* "View.MemoryView":364
60823  *
60824  *         if flags & PyBUF_FORMAT:
60825  *             self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')             # <<<<<<<<<<<<<<
60826  *         else:
60827  *             self.dtype_is_object = dtype_is_object
60828  */
60829     __pyx_t_2 = (((__pyx_v_self->view.format[0]) == 'O') != 0);
60830     if (__pyx_t_2) {
60831     } else {
60832       __pyx_t_1 = __pyx_t_2;
60833       goto __pyx_L11_bool_binop_done;
60834     }
60835     __pyx_t_2 = (((__pyx_v_self->view.format[1]) == '\x00') != 0);
60836     __pyx_t_1 = __pyx_t_2;
60837     __pyx_L11_bool_binop_done:;
60838     __pyx_v_self->dtype_is_object = __pyx_t_1;
60839 
60840     /* "View.MemoryView":363
60841  *                 raise MemoryError
60842  *
60843  *         if flags & PyBUF_FORMAT:             # <<<<<<<<<<<<<<
60844  *             self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')
60845  *         else:
60846  */
60847     goto __pyx_L10;
60848   }
60849 
60850   /* "View.MemoryView":366
60851  *             self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')
60852  *         else:
60853  *             self.dtype_is_object = dtype_is_object             # <<<<<<<<<<<<<<
60854  *
60855  *         self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer(
60856  */
60857   /*else*/ {
60858     __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object;
60859   }
60860   __pyx_L10:;
60861 
60862   /* "View.MemoryView":368
60863  *             self.dtype_is_object = dtype_is_object
60864  *
60865  *         self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer(             # <<<<<<<<<<<<<<
60866  *                   <void *> &self.acquisition_count[0], sizeof(__pyx_atomic_int))
60867  *         self.typeinfo = NULL
60868  */
60869   __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int))));
60870 
60871   /* "View.MemoryView":370
60872  *         self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer(
60873  *                   <void *> &self.acquisition_count[0], sizeof(__pyx_atomic_int))
60874  *         self.typeinfo = NULL             # <<<<<<<<<<<<<<
60875  *
60876  *     def __dealloc__(memoryview self):
60877  */
60878   __pyx_v_self->typeinfo = NULL;
60879 
60880   /* "View.MemoryView":345
60881  *     cdef __Pyx_TypeInfo *typeinfo
60882  *
60883  *     def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False):             # <<<<<<<<<<<<<<
60884  *         self.obj = obj
60885  *         self.flags = flags
60886  */
60887 
60888   /* function exit code */
60889   __pyx_r = 0;
60890   goto __pyx_L0;
60891   __pyx_L1_error:;
60892   __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
60893   __pyx_r = -1;
60894   __pyx_L0:;
60895   __Pyx_RefNannyFinishContext();
60896   return __pyx_r;
60897 }
60898 
60899 /* "View.MemoryView":372
60900  *         self.typeinfo = NULL
60901  *
60902  *     def __dealloc__(memoryview self):             # <<<<<<<<<<<<<<
60903  *         if self.obj is not None:
60904  *             __Pyx_ReleaseBuffer(&self.view)
60905  */
60906 
60907 /* Python wrapper */
60908 static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/
60909 static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) {
60910   __Pyx_RefNannyDeclarations
60911   __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
60912   __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self));
60913 
60914   /* function exit code */
60915   __Pyx_RefNannyFinishContext();
60916 }
60917 
60918 static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) {
60919   int __pyx_v_i;
60920   __Pyx_RefNannyDeclarations
60921   int __pyx_t_1;
60922   int __pyx_t_2;
60923   int __pyx_t_3;
60924   int __pyx_t_4;
60925   int __pyx_t_5;
60926   PyThread_type_lock __pyx_t_6;
60927   PyThread_type_lock __pyx_t_7;
60928   __Pyx_RefNannySetupContext("__dealloc__", 0);
60929 
60930   /* "View.MemoryView":373
60931  *
60932  *     def __dealloc__(memoryview self):
60933  *         if self.obj is not None:             # <<<<<<<<<<<<<<
60934  *             __Pyx_ReleaseBuffer(&self.view)
60935  *
60936  */
60937   __pyx_t_1 = (__pyx_v_self->obj != Py_None);
60938   __pyx_t_2 = (__pyx_t_1 != 0);
60939   if (__pyx_t_2) {
60940 
60941     /* "View.MemoryView":374
60942  *     def __dealloc__(memoryview self):
60943  *         if self.obj is not None:
60944  *             __Pyx_ReleaseBuffer(&self.view)             # <<<<<<<<<<<<<<
60945  *
60946  *         cdef int i
60947  */
60948     __Pyx_ReleaseBuffer((&__pyx_v_self->view));
60949 
60950     /* "View.MemoryView":373
60951  *
60952  *     def __dealloc__(memoryview self):
60953  *         if self.obj is not None:             # <<<<<<<<<<<<<<
60954  *             __Pyx_ReleaseBuffer(&self.view)
60955  *
60956  */
60957   }
60958 
60959   /* "View.MemoryView":378
60960  *         cdef int i
60961  *         global __pyx_memoryview_thread_locks_used
60962  *         if self.lock != NULL:             # <<<<<<<<<<<<<<
60963  *             for i in range(__pyx_memoryview_thread_locks_used):
60964  *                 if __pyx_memoryview_thread_locks[i] is self.lock:
60965  */
60966   __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0);
60967   if (__pyx_t_2) {
60968 
60969     /* "View.MemoryView":379
60970  *         global __pyx_memoryview_thread_locks_used
60971  *         if self.lock != NULL:
60972  *             for i in range(__pyx_memoryview_thread_locks_used):             # <<<<<<<<<<<<<<
60973  *                 if __pyx_memoryview_thread_locks[i] is self.lock:
60974  *                     __pyx_memoryview_thread_locks_used -= 1
60975  */
60976     __pyx_t_3 = __pyx_memoryview_thread_locks_used;
60977     __pyx_t_4 = __pyx_t_3;
60978     for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
60979       __pyx_v_i = __pyx_t_5;
60980 
60981       /* "View.MemoryView":380
60982  *         if self.lock != NULL:
60983  *             for i in range(__pyx_memoryview_thread_locks_used):
60984  *                 if __pyx_memoryview_thread_locks[i] is self.lock:             # <<<<<<<<<<<<<<
60985  *                     __pyx_memoryview_thread_locks_used -= 1
60986  *                     if i != __pyx_memoryview_thread_locks_used:
60987  */
60988       __pyx_t_2 = (((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock) != 0);
60989       if (__pyx_t_2) {
60990 
60991         /* "View.MemoryView":381
60992  *             for i in range(__pyx_memoryview_thread_locks_used):
60993  *                 if __pyx_memoryview_thread_locks[i] is self.lock:
60994  *                     __pyx_memoryview_thread_locks_used -= 1             # <<<<<<<<<<<<<<
60995  *                     if i != __pyx_memoryview_thread_locks_used:
60996  *                         __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
60997  */
60998         __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1);
60999 
61000         /* "View.MemoryView":382
61001  *                 if __pyx_memoryview_thread_locks[i] is self.lock:
61002  *                     __pyx_memoryview_thread_locks_used -= 1
61003  *                     if i != __pyx_memoryview_thread_locks_used:             # <<<<<<<<<<<<<<
61004  *                         __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
61005  *                             __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
61006  */
61007         __pyx_t_2 = ((__pyx_v_i != __pyx_memoryview_thread_locks_used) != 0);
61008         if (__pyx_t_2) {
61009 
61010           /* "View.MemoryView":384
61011  *                     if i != __pyx_memoryview_thread_locks_used:
61012  *                         __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
61013  *                             __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])             # <<<<<<<<<<<<<<
61014  *                     break
61015  *             else:
61016  */
61017           __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]);
61018           __pyx_t_7 = (__pyx_memoryview_thread_locks[__pyx_v_i]);
61019 
61020           /* "View.MemoryView":383
61021  *                     __pyx_memoryview_thread_locks_used -= 1
61022  *                     if i != __pyx_memoryview_thread_locks_used:
61023  *                         __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (             # <<<<<<<<<<<<<<
61024  *                             __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
61025  *                     break
61026  */
61027           (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_6;
61028           (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_7;
61029 
61030           /* "View.MemoryView":382
61031  *                 if __pyx_memoryview_thread_locks[i] is self.lock:
61032  *                     __pyx_memoryview_thread_locks_used -= 1
61033  *                     if i != __pyx_memoryview_thread_locks_used:             # <<<<<<<<<<<<<<
61034  *                         __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
61035  *                             __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
61036  */
61037         }
61038 
61039         /* "View.MemoryView":385
61040  *                         __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
61041  *                             __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
61042  *                     break             # <<<<<<<<<<<<<<
61043  *             else:
61044  *                 PyThread_free_lock(self.lock)
61045  */
61046         goto __pyx_L6_break;
61047 
61048         /* "View.MemoryView":380
61049  *         if self.lock != NULL:
61050  *             for i in range(__pyx_memoryview_thread_locks_used):
61051  *                 if __pyx_memoryview_thread_locks[i] is self.lock:             # <<<<<<<<<<<<<<
61052  *                     __pyx_memoryview_thread_locks_used -= 1
61053  *                     if i != __pyx_memoryview_thread_locks_used:
61054  */
61055       }
61056     }
61057     /*else*/ {
61058 
61059       /* "View.MemoryView":387
61060  *                     break
61061  *             else:
61062  *                 PyThread_free_lock(self.lock)             # <<<<<<<<<<<<<<
61063  *
61064  *     cdef char *get_item_pointer(memoryview self, object index) except NULL:
61065  */
61066       PyThread_free_lock(__pyx_v_self->lock);
61067     }
61068     __pyx_L6_break:;
61069 
61070     /* "View.MemoryView":378
61071  *         cdef int i
61072  *         global __pyx_memoryview_thread_locks_used
61073  *         if self.lock != NULL:             # <<<<<<<<<<<<<<
61074  *             for i in range(__pyx_memoryview_thread_locks_used):
61075  *                 if __pyx_memoryview_thread_locks[i] is self.lock:
61076  */
61077   }
61078 
61079   /* "View.MemoryView":372
61080  *         self.typeinfo = NULL
61081  *
61082  *     def __dealloc__(memoryview self):             # <<<<<<<<<<<<<<
61083  *         if self.obj is not None:
61084  *             __Pyx_ReleaseBuffer(&self.view)
61085  */
61086 
61087   /* function exit code */
61088   __Pyx_RefNannyFinishContext();
61089 }
61090 
61091 /* "View.MemoryView":389
61092  *                 PyThread_free_lock(self.lock)
61093  *
61094  *     cdef char *get_item_pointer(memoryview self, object index) except NULL:             # <<<<<<<<<<<<<<
61095  *         cdef Py_ssize_t dim
61096  *         cdef char *itemp = <char *> self.view.buf
61097  */
61098 
61099 static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) {
61100   Py_ssize_t __pyx_v_dim;
61101   char *__pyx_v_itemp;
61102   PyObject *__pyx_v_idx = NULL;
61103   char *__pyx_r;
61104   __Pyx_RefNannyDeclarations
61105   Py_ssize_t __pyx_t_1;
61106   PyObject *__pyx_t_2 = NULL;
61107   Py_ssize_t __pyx_t_3;
61108   PyObject *(*__pyx_t_4)(PyObject *);
61109   PyObject *__pyx_t_5 = NULL;
61110   Py_ssize_t __pyx_t_6;
61111   char *__pyx_t_7;
61112   __Pyx_RefNannySetupContext("get_item_pointer", 0);
61113 
61114   /* "View.MemoryView":391
61115  *     cdef char *get_item_pointer(memoryview self, object index) except NULL:
61116  *         cdef Py_ssize_t dim
61117  *         cdef char *itemp = <char *> self.view.buf             # <<<<<<<<<<<<<<
61118  *
61119  *         for dim, idx in enumerate(index):
61120  */
61121   __pyx_v_itemp = ((char *)__pyx_v_self->view.buf);
61122 
61123   /* "View.MemoryView":393
61124  *         cdef char *itemp = <char *> self.view.buf
61125  *
61126  *         for dim, idx in enumerate(index):             # <<<<<<<<<<<<<<
61127  *             itemp = pybuffer_index(&self.view, itemp, idx, dim)
61128  *
61129  */
61130   __pyx_t_1 = 0;
61131   if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) {
61132     __pyx_t_2 = __pyx_v_index; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
61133     __pyx_t_4 = NULL;
61134   } else {
61135     __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 393, __pyx_L1_error)
61136     __Pyx_GOTREF(__pyx_t_2);
61137     __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 393, __pyx_L1_error)
61138   }
61139   for (;;) {
61140     if (likely(!__pyx_t_4)) {
61141       if (likely(PyList_CheckExact(__pyx_t_2))) {
61142         if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
61143         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
61144         __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(5, 393, __pyx_L1_error)
61145         #else
61146         __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 393, __pyx_L1_error)
61147         __Pyx_GOTREF(__pyx_t_5);
61148         #endif
61149       } else {
61150         if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
61151         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
61152         __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(5, 393, __pyx_L1_error)
61153         #else
61154         __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 393, __pyx_L1_error)
61155         __Pyx_GOTREF(__pyx_t_5);
61156         #endif
61157       }
61158     } else {
61159       __pyx_t_5 = __pyx_t_4(__pyx_t_2);
61160       if (unlikely(!__pyx_t_5)) {
61161         PyObject* exc_type = PyErr_Occurred();
61162         if (exc_type) {
61163           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
61164           else __PYX_ERR(5, 393, __pyx_L1_error)
61165         }
61166         break;
61167       }
61168       __Pyx_GOTREF(__pyx_t_5);
61169     }
61170     __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5);
61171     __pyx_t_5 = 0;
61172     __pyx_v_dim = __pyx_t_1;
61173     __pyx_t_1 = (__pyx_t_1 + 1);
61174 
61175     /* "View.MemoryView":394
61176  *
61177  *         for dim, idx in enumerate(index):
61178  *             itemp = pybuffer_index(&self.view, itemp, idx, dim)             # <<<<<<<<<<<<<<
61179  *
61180  *         return itemp
61181  */
61182     __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(5, 394, __pyx_L1_error)
61183     __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(5, 394, __pyx_L1_error)
61184     __pyx_v_itemp = __pyx_t_7;
61185 
61186     /* "View.MemoryView":393
61187  *         cdef char *itemp = <char *> self.view.buf
61188  *
61189  *         for dim, idx in enumerate(index):             # <<<<<<<<<<<<<<
61190  *             itemp = pybuffer_index(&self.view, itemp, idx, dim)
61191  *
61192  */
61193   }
61194   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
61195 
61196   /* "View.MemoryView":396
61197  *             itemp = pybuffer_index(&self.view, itemp, idx, dim)
61198  *
61199  *         return itemp             # <<<<<<<<<<<<<<
61200  *
61201  *
61202  */
61203   __pyx_r = __pyx_v_itemp;
61204   goto __pyx_L0;
61205 
61206   /* "View.MemoryView":389
61207  *                 PyThread_free_lock(self.lock)
61208  *
61209  *     cdef char *get_item_pointer(memoryview self, object index) except NULL:             # <<<<<<<<<<<<<<
61210  *         cdef Py_ssize_t dim
61211  *         cdef char *itemp = <char *> self.view.buf
61212  */
61213 
61214   /* function exit code */
61215   __pyx_L1_error:;
61216   __Pyx_XDECREF(__pyx_t_2);
61217   __Pyx_XDECREF(__pyx_t_5);
61218   __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename);
61219   __pyx_r = NULL;
61220   __pyx_L0:;
61221   __Pyx_XDECREF(__pyx_v_idx);
61222   __Pyx_RefNannyFinishContext();
61223   return __pyx_r;
61224 }
61225 
61226 /* "View.MemoryView":399
61227  *
61228  *
61229  *     def __getitem__(memoryview self, object index):             # <<<<<<<<<<<<<<
61230  *         if index is Ellipsis:
61231  *             return self
61232  */
61233 
61234 /* Python wrapper */
61235 static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/
61236 static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) {
61237   PyObject *__pyx_r = 0;
61238   __Pyx_RefNannyDeclarations
61239   __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
61240   __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index));
61241 
61242   /* function exit code */
61243   __Pyx_RefNannyFinishContext();
61244   return __pyx_r;
61245 }
61246 
61247 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) {
61248   PyObject *__pyx_v_have_slices = NULL;
61249   PyObject *__pyx_v_indices = NULL;
61250   char *__pyx_v_itemp;
61251   PyObject *__pyx_r = NULL;
61252   __Pyx_RefNannyDeclarations
61253   int __pyx_t_1;
61254   int __pyx_t_2;
61255   PyObject *__pyx_t_3 = NULL;
61256   PyObject *__pyx_t_4 = NULL;
61257   PyObject *__pyx_t_5 = NULL;
61258   char *__pyx_t_6;
61259   __Pyx_RefNannySetupContext("__getitem__", 0);
61260 
61261   /* "View.MemoryView":400
61262  *
61263  *     def __getitem__(memoryview self, object index):
61264  *         if index is Ellipsis:             # <<<<<<<<<<<<<<
61265  *             return self
61266  *
61267  */
61268   __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis);
61269   __pyx_t_2 = (__pyx_t_1 != 0);
61270   if (__pyx_t_2) {
61271 
61272     /* "View.MemoryView":401
61273  *     def __getitem__(memoryview self, object index):
61274  *         if index is Ellipsis:
61275  *             return self             # <<<<<<<<<<<<<<
61276  *
61277  *         have_slices, indices = _unellipsify(index, self.view.ndim)
61278  */
61279     __Pyx_XDECREF(__pyx_r);
61280     __Pyx_INCREF(((PyObject *)__pyx_v_self));
61281     __pyx_r = ((PyObject *)__pyx_v_self);
61282     goto __pyx_L0;
61283 
61284     /* "View.MemoryView":400
61285  *
61286  *     def __getitem__(memoryview self, object index):
61287  *         if index is Ellipsis:             # <<<<<<<<<<<<<<
61288  *             return self
61289  *
61290  */
61291   }
61292 
61293   /* "View.MemoryView":403
61294  *             return self
61295  *
61296  *         have_slices, indices = _unellipsify(index, self.view.ndim)             # <<<<<<<<<<<<<<
61297  *
61298  *         cdef char *itemp
61299  */
61300   __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 403, __pyx_L1_error)
61301   __Pyx_GOTREF(__pyx_t_3);
61302   if (likely(__pyx_t_3 != Py_None)) {
61303     PyObject* sequence = __pyx_t_3;
61304     Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
61305     if (unlikely(size != 2)) {
61306       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
61307       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
61308       __PYX_ERR(5, 403, __pyx_L1_error)
61309     }
61310     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
61311     __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0);
61312     __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1);
61313     __Pyx_INCREF(__pyx_t_4);
61314     __Pyx_INCREF(__pyx_t_5);
61315     #else
61316     __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 403, __pyx_L1_error)
61317     __Pyx_GOTREF(__pyx_t_4);
61318     __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 403, __pyx_L1_error)
61319     __Pyx_GOTREF(__pyx_t_5);
61320     #endif
61321     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
61322   } else {
61323     __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(5, 403, __pyx_L1_error)
61324   }
61325   __pyx_v_have_slices = __pyx_t_4;
61326   __pyx_t_4 = 0;
61327   __pyx_v_indices = __pyx_t_5;
61328   __pyx_t_5 = 0;
61329 
61330   /* "View.MemoryView":406
61331  *
61332  *         cdef char *itemp
61333  *         if have_slices:             # <<<<<<<<<<<<<<
61334  *             return memview_slice(self, indices)
61335  *         else:
61336  */
61337   __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(5, 406, __pyx_L1_error)
61338   if (__pyx_t_2) {
61339 
61340     /* "View.MemoryView":407
61341  *         cdef char *itemp
61342  *         if have_slices:
61343  *             return memview_slice(self, indices)             # <<<<<<<<<<<<<<
61344  *         else:
61345  *             itemp = self.get_item_pointer(indices)
61346  */
61347     __Pyx_XDECREF(__pyx_r);
61348     __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 407, __pyx_L1_error)
61349     __Pyx_GOTREF(__pyx_t_3);
61350     __pyx_r = __pyx_t_3;
61351     __pyx_t_3 = 0;
61352     goto __pyx_L0;
61353 
61354     /* "View.MemoryView":406
61355  *
61356  *         cdef char *itemp
61357  *         if have_slices:             # <<<<<<<<<<<<<<
61358  *             return memview_slice(self, indices)
61359  *         else:
61360  */
61361   }
61362 
61363   /* "View.MemoryView":409
61364  *             return memview_slice(self, indices)
61365  *         else:
61366  *             itemp = self.get_item_pointer(indices)             # <<<<<<<<<<<<<<
61367  *             return self.convert_item_to_object(itemp)
61368  *
61369  */
61370   /*else*/ {
61371     __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == ((char *)NULL))) __PYX_ERR(5, 409, __pyx_L1_error)
61372     __pyx_v_itemp = __pyx_t_6;
61373 
61374     /* "View.MemoryView":410
61375  *         else:
61376  *             itemp = self.get_item_pointer(indices)
61377  *             return self.convert_item_to_object(itemp)             # <<<<<<<<<<<<<<
61378  *
61379  *     def __setitem__(memoryview self, object index, object value):
61380  */
61381     __Pyx_XDECREF(__pyx_r);
61382     __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 410, __pyx_L1_error)
61383     __Pyx_GOTREF(__pyx_t_3);
61384     __pyx_r = __pyx_t_3;
61385     __pyx_t_3 = 0;
61386     goto __pyx_L0;
61387   }
61388 
61389   /* "View.MemoryView":399
61390  *
61391  *
61392  *     def __getitem__(memoryview self, object index):             # <<<<<<<<<<<<<<
61393  *         if index is Ellipsis:
61394  *             return self
61395  */
61396 
61397   /* function exit code */
61398   __pyx_L1_error:;
61399   __Pyx_XDECREF(__pyx_t_3);
61400   __Pyx_XDECREF(__pyx_t_4);
61401   __Pyx_XDECREF(__pyx_t_5);
61402   __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
61403   __pyx_r = NULL;
61404   __pyx_L0:;
61405   __Pyx_XDECREF(__pyx_v_have_slices);
61406   __Pyx_XDECREF(__pyx_v_indices);
61407   __Pyx_XGIVEREF(__pyx_r);
61408   __Pyx_RefNannyFinishContext();
61409   return __pyx_r;
61410 }
61411 
61412 /* "View.MemoryView":412
61413  *             return self.convert_item_to_object(itemp)
61414  *
61415  *     def __setitem__(memoryview self, object index, object value):             # <<<<<<<<<<<<<<
61416  *         if self.view.readonly:
61417  *             raise TypeError("Cannot assign to read-only memoryview")
61418  */
61419 
61420 /* Python wrapper */
61421 static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/
61422 static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) {
61423   int __pyx_r;
61424   __Pyx_RefNannyDeclarations
61425   __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
61426   __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value));
61427 
61428   /* function exit code */
61429   __Pyx_RefNannyFinishContext();
61430   return __pyx_r;
61431 }
61432 
61433 static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) {
61434   PyObject *__pyx_v_have_slices = NULL;
61435   PyObject *__pyx_v_obj = NULL;
61436   int __pyx_r;
61437   __Pyx_RefNannyDeclarations
61438   int __pyx_t_1;
61439   PyObject *__pyx_t_2 = NULL;
61440   PyObject *__pyx_t_3 = NULL;
61441   PyObject *__pyx_t_4 = NULL;
61442   __Pyx_RefNannySetupContext("__setitem__", 0);
61443   __Pyx_INCREF(__pyx_v_index);
61444 
61445   /* "View.MemoryView":413
61446  *
61447  *     def __setitem__(memoryview self, object index, object value):
61448  *         if self.view.readonly:             # <<<<<<<<<<<<<<
61449  *             raise TypeError("Cannot assign to read-only memoryview")
61450  *
61451  */
61452   __pyx_t_1 = (__pyx_v_self->view.readonly != 0);
61453   if (unlikely(__pyx_t_1)) {
61454 
61455     /* "View.MemoryView":414
61456  *     def __setitem__(memoryview self, object index, object value):
61457  *         if self.view.readonly:
61458  *             raise TypeError("Cannot assign to read-only memoryview")             # <<<<<<<<<<<<<<
61459  *
61460  *         have_slices, index = _unellipsify(index, self.view.ndim)
61461  */
61462     __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__95, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 414, __pyx_L1_error)
61463     __Pyx_GOTREF(__pyx_t_2);
61464     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
61465     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
61466     __PYX_ERR(5, 414, __pyx_L1_error)
61467 
61468     /* "View.MemoryView":413
61469  *
61470  *     def __setitem__(memoryview self, object index, object value):
61471  *         if self.view.readonly:             # <<<<<<<<<<<<<<
61472  *             raise TypeError("Cannot assign to read-only memoryview")
61473  *
61474  */
61475   }
61476 
61477   /* "View.MemoryView":416
61478  *             raise TypeError("Cannot assign to read-only memoryview")
61479  *
61480  *         have_slices, index = _unellipsify(index, self.view.ndim)             # <<<<<<<<<<<<<<
61481  *
61482  *         if have_slices:
61483  */
61484   __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 416, __pyx_L1_error)
61485   __Pyx_GOTREF(__pyx_t_2);
61486   if (likely(__pyx_t_2 != Py_None)) {
61487     PyObject* sequence = __pyx_t_2;
61488     Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
61489     if (unlikely(size != 2)) {
61490       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
61491       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
61492       __PYX_ERR(5, 416, __pyx_L1_error)
61493     }
61494     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
61495     __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
61496     __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
61497     __Pyx_INCREF(__pyx_t_3);
61498     __Pyx_INCREF(__pyx_t_4);
61499     #else
61500     __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 416, __pyx_L1_error)
61501     __Pyx_GOTREF(__pyx_t_3);
61502     __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 416, __pyx_L1_error)
61503     __Pyx_GOTREF(__pyx_t_4);
61504     #endif
61505     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
61506   } else {
61507     __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(5, 416, __pyx_L1_error)
61508   }
61509   __pyx_v_have_slices = __pyx_t_3;
61510   __pyx_t_3 = 0;
61511   __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4);
61512   __pyx_t_4 = 0;
61513 
61514   /* "View.MemoryView":418
61515  *         have_slices, index = _unellipsify(index, self.view.ndim)
61516  *
61517  *         if have_slices:             # <<<<<<<<<<<<<<
61518  *             obj = self.is_slice(value)
61519  *             if obj:
61520  */
61521   __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(5, 418, __pyx_L1_error)
61522   if (__pyx_t_1) {
61523 
61524     /* "View.MemoryView":419
61525  *
61526  *         if have_slices:
61527  *             obj = self.is_slice(value)             # <<<<<<<<<<<<<<
61528  *             if obj:
61529  *                 self.setitem_slice_assignment(self[index], obj)
61530  */
61531     __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 419, __pyx_L1_error)
61532     __Pyx_GOTREF(__pyx_t_2);
61533     __pyx_v_obj = __pyx_t_2;
61534     __pyx_t_2 = 0;
61535 
61536     /* "View.MemoryView":420
61537  *         if have_slices:
61538  *             obj = self.is_slice(value)
61539  *             if obj:             # <<<<<<<<<<<<<<
61540  *                 self.setitem_slice_assignment(self[index], obj)
61541  *             else:
61542  */
61543     __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(5, 420, __pyx_L1_error)
61544     if (__pyx_t_1) {
61545 
61546       /* "View.MemoryView":421
61547  *             obj = self.is_slice(value)
61548  *             if obj:
61549  *                 self.setitem_slice_assignment(self[index], obj)             # <<<<<<<<<<<<<<
61550  *             else:
61551  *                 self.setitem_slice_assign_scalar(self[index], value)
61552  */
61553       __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 421, __pyx_L1_error)
61554       __Pyx_GOTREF(__pyx_t_2);
61555       __pyx_t_4 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_2, __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 421, __pyx_L1_error)
61556       __Pyx_GOTREF(__pyx_t_4);
61557       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
61558       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
61559 
61560       /* "View.MemoryView":420
61561  *         if have_slices:
61562  *             obj = self.is_slice(value)
61563  *             if obj:             # <<<<<<<<<<<<<<
61564  *                 self.setitem_slice_assignment(self[index], obj)
61565  *             else:
61566  */
61567       goto __pyx_L5;
61568     }
61569 
61570     /* "View.MemoryView":423
61571  *                 self.setitem_slice_assignment(self[index], obj)
61572  *             else:
61573  *                 self.setitem_slice_assign_scalar(self[index], value)             # <<<<<<<<<<<<<<
61574  *         else:
61575  *             self.setitem_indexed(index, value)
61576  */
61577     /*else*/ {
61578       __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 423, __pyx_L1_error)
61579       __Pyx_GOTREF(__pyx_t_4);
61580       if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_memoryview_type))))) __PYX_ERR(5, 423, __pyx_L1_error)
61581       __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_4), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 423, __pyx_L1_error)
61582       __Pyx_GOTREF(__pyx_t_2);
61583       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
61584       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
61585     }
61586     __pyx_L5:;
61587 
61588     /* "View.MemoryView":418
61589  *         have_slices, index = _unellipsify(index, self.view.ndim)
61590  *
61591  *         if have_slices:             # <<<<<<<<<<<<<<
61592  *             obj = self.is_slice(value)
61593  *             if obj:
61594  */
61595     goto __pyx_L4;
61596   }
61597 
61598   /* "View.MemoryView":425
61599  *                 self.setitem_slice_assign_scalar(self[index], value)
61600  *         else:
61601  *             self.setitem_indexed(index, value)             # <<<<<<<<<<<<<<
61602  *
61603  *     cdef is_slice(self, obj):
61604  */
61605   /*else*/ {
61606     __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 425, __pyx_L1_error)
61607     __Pyx_GOTREF(__pyx_t_2);
61608     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
61609   }
61610   __pyx_L4:;
61611 
61612   /* "View.MemoryView":412
61613  *             return self.convert_item_to_object(itemp)
61614  *
61615  *     def __setitem__(memoryview self, object index, object value):             # <<<<<<<<<<<<<<
61616  *         if self.view.readonly:
61617  *             raise TypeError("Cannot assign to read-only memoryview")
61618  */
61619 
61620   /* function exit code */
61621   __pyx_r = 0;
61622   goto __pyx_L0;
61623   __pyx_L1_error:;
61624   __Pyx_XDECREF(__pyx_t_2);
61625   __Pyx_XDECREF(__pyx_t_3);
61626   __Pyx_XDECREF(__pyx_t_4);
61627   __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
61628   __pyx_r = -1;
61629   __pyx_L0:;
61630   __Pyx_XDECREF(__pyx_v_have_slices);
61631   __Pyx_XDECREF(__pyx_v_obj);
61632   __Pyx_XDECREF(__pyx_v_index);
61633   __Pyx_RefNannyFinishContext();
61634   return __pyx_r;
61635 }
61636 
61637 /* "View.MemoryView":427
61638  *             self.setitem_indexed(index, value)
61639  *
61640  *     cdef is_slice(self, obj):             # <<<<<<<<<<<<<<
61641  *         if not isinstance(obj, memoryview):
61642  *             try:
61643  */
61644 
61645 static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) {
61646   PyObject *__pyx_r = NULL;
61647   __Pyx_RefNannyDeclarations
61648   int __pyx_t_1;
61649   int __pyx_t_2;
61650   PyObject *__pyx_t_3 = NULL;
61651   PyObject *__pyx_t_4 = NULL;
61652   PyObject *__pyx_t_5 = NULL;
61653   PyObject *__pyx_t_6 = NULL;
61654   PyObject *__pyx_t_7 = NULL;
61655   PyObject *__pyx_t_8 = NULL;
61656   int __pyx_t_9;
61657   __Pyx_RefNannySetupContext("is_slice", 0);
61658   __Pyx_INCREF(__pyx_v_obj);
61659 
61660   /* "View.MemoryView":428
61661  *
61662  *     cdef is_slice(self, obj):
61663  *         if not isinstance(obj, memoryview):             # <<<<<<<<<<<<<<
61664  *             try:
61665  *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
61666  */
61667   __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type);
61668   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
61669   if (__pyx_t_2) {
61670 
61671     /* "View.MemoryView":429
61672  *     cdef is_slice(self, obj):
61673  *         if not isinstance(obj, memoryview):
61674  *             try:             # <<<<<<<<<<<<<<
61675  *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
61676  *                                  self.dtype_is_object)
61677  */
61678     {
61679       __Pyx_PyThreadState_declare
61680       __Pyx_PyThreadState_assign
61681       __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
61682       __Pyx_XGOTREF(__pyx_t_3);
61683       __Pyx_XGOTREF(__pyx_t_4);
61684       __Pyx_XGOTREF(__pyx_t_5);
61685       /*try:*/ {
61686 
61687         /* "View.MemoryView":430
61688  *         if not isinstance(obj, memoryview):
61689  *             try:
61690  *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,             # <<<<<<<<<<<<<<
61691  *                                  self.dtype_is_object)
61692  *             except TypeError:
61693  */
61694         __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 430, __pyx_L4_error)
61695         __Pyx_GOTREF(__pyx_t_6);
61696 
61697         /* "View.MemoryView":431
61698  *             try:
61699  *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
61700  *                                  self.dtype_is_object)             # <<<<<<<<<<<<<<
61701  *             except TypeError:
61702  *                 return None
61703  */
61704         __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 431, __pyx_L4_error)
61705         __Pyx_GOTREF(__pyx_t_7);
61706 
61707         /* "View.MemoryView":430
61708  *         if not isinstance(obj, memoryview):
61709  *             try:
61710  *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,             # <<<<<<<<<<<<<<
61711  *                                  self.dtype_is_object)
61712  *             except TypeError:
61713  */
61714         __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 430, __pyx_L4_error)
61715         __Pyx_GOTREF(__pyx_t_8);
61716         __Pyx_INCREF(__pyx_v_obj);
61717         __Pyx_GIVEREF(__pyx_v_obj);
61718         PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj);
61719         __Pyx_GIVEREF(__pyx_t_6);
61720         PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
61721         __Pyx_GIVEREF(__pyx_t_7);
61722         PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7);
61723         __pyx_t_6 = 0;
61724         __pyx_t_7 = 0;
61725         __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 430, __pyx_L4_error)
61726         __Pyx_GOTREF(__pyx_t_7);
61727         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
61728         __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7);
61729         __pyx_t_7 = 0;
61730 
61731         /* "View.MemoryView":429
61732  *     cdef is_slice(self, obj):
61733  *         if not isinstance(obj, memoryview):
61734  *             try:             # <<<<<<<<<<<<<<
61735  *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
61736  *                                  self.dtype_is_object)
61737  */
61738       }
61739       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
61740       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
61741       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
61742       goto __pyx_L9_try_end;
61743       __pyx_L4_error:;
61744       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
61745       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
61746       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
61747 
61748       /* "View.MemoryView":432
61749  *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
61750  *                                  self.dtype_is_object)
61751  *             except TypeError:             # <<<<<<<<<<<<<<
61752  *                 return None
61753  *
61754  */
61755       __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
61756       if (__pyx_t_9) {
61757         __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
61758         if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(5, 432, __pyx_L6_except_error)
61759         __Pyx_GOTREF(__pyx_t_7);
61760         __Pyx_GOTREF(__pyx_t_8);
61761         __Pyx_GOTREF(__pyx_t_6);
61762 
61763         /* "View.MemoryView":433
61764  *                                  self.dtype_is_object)
61765  *             except TypeError:
61766  *                 return None             # <<<<<<<<<<<<<<
61767  *
61768  *         return obj
61769  */
61770         __Pyx_XDECREF(__pyx_r);
61771         __pyx_r = Py_None; __Pyx_INCREF(Py_None);
61772         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
61773         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
61774         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
61775         goto __pyx_L7_except_return;
61776       }
61777       goto __pyx_L6_except_error;
61778       __pyx_L6_except_error:;
61779 
61780       /* "View.MemoryView":429
61781  *     cdef is_slice(self, obj):
61782  *         if not isinstance(obj, memoryview):
61783  *             try:             # <<<<<<<<<<<<<<
61784  *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
61785  *                                  self.dtype_is_object)
61786  */
61787       __Pyx_XGIVEREF(__pyx_t_3);
61788       __Pyx_XGIVEREF(__pyx_t_4);
61789       __Pyx_XGIVEREF(__pyx_t_5);
61790       __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
61791       goto __pyx_L1_error;
61792       __pyx_L7_except_return:;
61793       __Pyx_XGIVEREF(__pyx_t_3);
61794       __Pyx_XGIVEREF(__pyx_t_4);
61795       __Pyx_XGIVEREF(__pyx_t_5);
61796       __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
61797       goto __pyx_L0;
61798       __pyx_L9_try_end:;
61799     }
61800 
61801     /* "View.MemoryView":428
61802  *
61803  *     cdef is_slice(self, obj):
61804  *         if not isinstance(obj, memoryview):             # <<<<<<<<<<<<<<
61805  *             try:
61806  *                 obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
61807  */
61808   }
61809 
61810   /* "View.MemoryView":435
61811  *                 return None
61812  *
61813  *         return obj             # <<<<<<<<<<<<<<
61814  *
61815  *     cdef setitem_slice_assignment(self, dst, src):
61816  */
61817   __Pyx_XDECREF(__pyx_r);
61818   __Pyx_INCREF(__pyx_v_obj);
61819   __pyx_r = __pyx_v_obj;
61820   goto __pyx_L0;
61821 
61822   /* "View.MemoryView":427
61823  *             self.setitem_indexed(index, value)
61824  *
61825  *     cdef is_slice(self, obj):             # <<<<<<<<<<<<<<
61826  *         if not isinstance(obj, memoryview):
61827  *             try:
61828  */
61829 
61830   /* function exit code */
61831   __pyx_L1_error:;
61832   __Pyx_XDECREF(__pyx_t_6);
61833   __Pyx_XDECREF(__pyx_t_7);
61834   __Pyx_XDECREF(__pyx_t_8);
61835   __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
61836   __pyx_r = 0;
61837   __pyx_L0:;
61838   __Pyx_XDECREF(__pyx_v_obj);
61839   __Pyx_XGIVEREF(__pyx_r);
61840   __Pyx_RefNannyFinishContext();
61841   return __pyx_r;
61842 }
61843 
61844 /* "View.MemoryView":437
61845  *         return obj
61846  *
61847  *     cdef setitem_slice_assignment(self, dst, src):             # <<<<<<<<<<<<<<
61848  *         cdef __Pyx_memviewslice dst_slice
61849  *         cdef __Pyx_memviewslice src_slice
61850  */
61851 
61852 static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) {
61853   __Pyx_memviewslice __pyx_v_dst_slice;
61854   __Pyx_memviewslice __pyx_v_src_slice;
61855   PyObject *__pyx_r = NULL;
61856   __Pyx_RefNannyDeclarations
61857   PyObject *__pyx_t_1 = NULL;
61858   int __pyx_t_2;
61859   int __pyx_t_3;
61860   int __pyx_t_4;
61861   __Pyx_RefNannySetupContext("setitem_slice_assignment", 0);
61862 
61863   /* "View.MemoryView":441
61864  *         cdef __Pyx_memviewslice src_slice
61865  *
61866  *         memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],             # <<<<<<<<<<<<<<
61867  *                                  get_slice_from_memview(dst, &dst_slice)[0],
61868  *                                  src.ndim, dst.ndim, self.dtype_is_object)
61869  */
61870   if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(5, 441, __pyx_L1_error)
61871 
61872   /* "View.MemoryView":442
61873  *
61874  *         memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],
61875  *                                  get_slice_from_memview(dst, &dst_slice)[0],             # <<<<<<<<<<<<<<
61876  *                                  src.ndim, dst.ndim, self.dtype_is_object)
61877  *
61878  */
61879   if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(5, 442, __pyx_L1_error)
61880 
61881   /* "View.MemoryView":443
61882  *         memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],
61883  *                                  get_slice_from_memview(dst, &dst_slice)[0],
61884  *                                  src.ndim, dst.ndim, self.dtype_is_object)             # <<<<<<<<<<<<<<
61885  *
61886  *     cdef setitem_slice_assign_scalar(self, memoryview dst, value):
61887  */
61888   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 443, __pyx_L1_error)
61889   __Pyx_GOTREF(__pyx_t_1);
61890   __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 443, __pyx_L1_error)
61891   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
61892   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 443, __pyx_L1_error)
61893   __Pyx_GOTREF(__pyx_t_1);
61894   __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 443, __pyx_L1_error)
61895   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
61896 
61897   /* "View.MemoryView":441
61898  *         cdef __Pyx_memviewslice src_slice
61899  *
61900  *         memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],             # <<<<<<<<<<<<<<
61901  *                                  get_slice_from_memview(dst, &dst_slice)[0],
61902  *                                  src.ndim, dst.ndim, self.dtype_is_object)
61903  */
61904   __pyx_t_4 = __pyx_memoryview_copy_contents((__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice))[0]), (__pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice))[0]), __pyx_t_2, __pyx_t_3, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(5, 441, __pyx_L1_error)
61905 
61906   /* "View.MemoryView":437
61907  *         return obj
61908  *
61909  *     cdef setitem_slice_assignment(self, dst, src):             # <<<<<<<<<<<<<<
61910  *         cdef __Pyx_memviewslice dst_slice
61911  *         cdef __Pyx_memviewslice src_slice
61912  */
61913 
61914   /* function exit code */
61915   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
61916   goto __pyx_L0;
61917   __pyx_L1_error:;
61918   __Pyx_XDECREF(__pyx_t_1);
61919   __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename);
61920   __pyx_r = 0;
61921   __pyx_L0:;
61922   __Pyx_XGIVEREF(__pyx_r);
61923   __Pyx_RefNannyFinishContext();
61924   return __pyx_r;
61925 }
61926 
61927 /* "View.MemoryView":445
61928  *                                  src.ndim, dst.ndim, self.dtype_is_object)
61929  *
61930  *     cdef setitem_slice_assign_scalar(self, memoryview dst, value):             # <<<<<<<<<<<<<<
61931  *         cdef int array[128]
61932  *         cdef void *tmp = NULL
61933  */
61934 
61935 static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) {
61936   int __pyx_v_array[0x80];
61937   void *__pyx_v_tmp;
61938   void *__pyx_v_item;
61939   __Pyx_memviewslice *__pyx_v_dst_slice;
61940   __Pyx_memviewslice __pyx_v_tmp_slice;
61941   PyObject *__pyx_r = NULL;
61942   __Pyx_RefNannyDeclarations
61943   int __pyx_t_1;
61944   PyObject *__pyx_t_2 = NULL;
61945   int __pyx_t_3;
61946   int __pyx_t_4;
61947   char const *__pyx_t_5;
61948   PyObject *__pyx_t_6 = NULL;
61949   PyObject *__pyx_t_7 = NULL;
61950   PyObject *__pyx_t_8 = NULL;
61951   PyObject *__pyx_t_9 = NULL;
61952   PyObject *__pyx_t_10 = NULL;
61953   PyObject *__pyx_t_11 = NULL;
61954   __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0);
61955 
61956   /* "View.MemoryView":447
61957  *     cdef setitem_slice_assign_scalar(self, memoryview dst, value):
61958  *         cdef int array[128]
61959  *         cdef void *tmp = NULL             # <<<<<<<<<<<<<<
61960  *         cdef void *item
61961  *
61962  */
61963   __pyx_v_tmp = NULL;
61964 
61965   /* "View.MemoryView":452
61966  *         cdef __Pyx_memviewslice *dst_slice
61967  *         cdef __Pyx_memviewslice tmp_slice
61968  *         dst_slice = get_slice_from_memview(dst, &tmp_slice)             # <<<<<<<<<<<<<<
61969  *
61970  *         if <size_t>self.view.itemsize > sizeof(array):
61971  */
61972   __pyx_v_dst_slice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice));
61973 
61974   /* "View.MemoryView":454
61975  *         dst_slice = get_slice_from_memview(dst, &tmp_slice)
61976  *
61977  *         if <size_t>self.view.itemsize > sizeof(array):             # <<<<<<<<<<<<<<
61978  *             tmp = PyMem_Malloc(self.view.itemsize)
61979  *             if tmp == NULL:
61980  */
61981   __pyx_t_1 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0);
61982   if (__pyx_t_1) {
61983 
61984     /* "View.MemoryView":455
61985  *
61986  *         if <size_t>self.view.itemsize > sizeof(array):
61987  *             tmp = PyMem_Malloc(self.view.itemsize)             # <<<<<<<<<<<<<<
61988  *             if tmp == NULL:
61989  *                 raise MemoryError
61990  */
61991     __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize);
61992 
61993     /* "View.MemoryView":456
61994  *         if <size_t>self.view.itemsize > sizeof(array):
61995  *             tmp = PyMem_Malloc(self.view.itemsize)
61996  *             if tmp == NULL:             # <<<<<<<<<<<<<<
61997  *                 raise MemoryError
61998  *             item = tmp
61999  */
62000     __pyx_t_1 = ((__pyx_v_tmp == NULL) != 0);
62001     if (unlikely(__pyx_t_1)) {
62002 
62003       /* "View.MemoryView":457
62004  *             tmp = PyMem_Malloc(self.view.itemsize)
62005  *             if tmp == NULL:
62006  *                 raise MemoryError             # <<<<<<<<<<<<<<
62007  *             item = tmp
62008  *         else:
62009  */
62010       PyErr_NoMemory(); __PYX_ERR(5, 457, __pyx_L1_error)
62011 
62012       /* "View.MemoryView":456
62013  *         if <size_t>self.view.itemsize > sizeof(array):
62014  *             tmp = PyMem_Malloc(self.view.itemsize)
62015  *             if tmp == NULL:             # <<<<<<<<<<<<<<
62016  *                 raise MemoryError
62017  *             item = tmp
62018  */
62019     }
62020 
62021     /* "View.MemoryView":458
62022  *             if tmp == NULL:
62023  *                 raise MemoryError
62024  *             item = tmp             # <<<<<<<<<<<<<<
62025  *         else:
62026  *             item = <void *> array
62027  */
62028     __pyx_v_item = __pyx_v_tmp;
62029 
62030     /* "View.MemoryView":454
62031  *         dst_slice = get_slice_from_memview(dst, &tmp_slice)
62032  *
62033  *         if <size_t>self.view.itemsize > sizeof(array):             # <<<<<<<<<<<<<<
62034  *             tmp = PyMem_Malloc(self.view.itemsize)
62035  *             if tmp == NULL:
62036  */
62037     goto __pyx_L3;
62038   }
62039 
62040   /* "View.MemoryView":460
62041  *             item = tmp
62042  *         else:
62043  *             item = <void *> array             # <<<<<<<<<<<<<<
62044  *
62045  *         try:
62046  */
62047   /*else*/ {
62048     __pyx_v_item = ((void *)__pyx_v_array);
62049   }
62050   __pyx_L3:;
62051 
62052   /* "View.MemoryView":462
62053  *             item = <void *> array
62054  *
62055  *         try:             # <<<<<<<<<<<<<<
62056  *             if self.dtype_is_object:
62057  *                 (<PyObject **> item)[0] = <PyObject *> value
62058  */
62059   /*try:*/ {
62060 
62061     /* "View.MemoryView":463
62062  *
62063  *         try:
62064  *             if self.dtype_is_object:             # <<<<<<<<<<<<<<
62065  *                 (<PyObject **> item)[0] = <PyObject *> value
62066  *             else:
62067  */
62068     __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0);
62069     if (__pyx_t_1) {
62070 
62071       /* "View.MemoryView":464
62072  *         try:
62073  *             if self.dtype_is_object:
62074  *                 (<PyObject **> item)[0] = <PyObject *> value             # <<<<<<<<<<<<<<
62075  *             else:
62076  *                 self.assign_item_from_object(<char *> item, value)
62077  */
62078       (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value);
62079 
62080       /* "View.MemoryView":463
62081  *
62082  *         try:
62083  *             if self.dtype_is_object:             # <<<<<<<<<<<<<<
62084  *                 (<PyObject **> item)[0] = <PyObject *> value
62085  *             else:
62086  */
62087       goto __pyx_L8;
62088     }
62089 
62090     /* "View.MemoryView":466
62091  *                 (<PyObject **> item)[0] = <PyObject *> value
62092  *             else:
62093  *                 self.assign_item_from_object(<char *> item, value)             # <<<<<<<<<<<<<<
62094  *
62095  *
62096  */
62097     /*else*/ {
62098       __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 466, __pyx_L6_error)
62099       __Pyx_GOTREF(__pyx_t_2);
62100       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
62101     }
62102     __pyx_L8:;
62103 
62104     /* "View.MemoryView":470
62105  *
62106  *
62107  *             if self.view.suboffsets != NULL:             # <<<<<<<<<<<<<<
62108  *                 assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
62109  *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
62110  */
62111     __pyx_t_1 = ((__pyx_v_self->view.suboffsets != NULL) != 0);
62112     if (__pyx_t_1) {
62113 
62114       /* "View.MemoryView":471
62115  *
62116  *             if self.view.suboffsets != NULL:
62117  *                 assert_direct_dimensions(self.view.suboffsets, self.view.ndim)             # <<<<<<<<<<<<<<
62118  *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
62119  *                                 item, self.dtype_is_object)
62120  */
62121       __pyx_t_2 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 471, __pyx_L6_error)
62122       __Pyx_GOTREF(__pyx_t_2);
62123       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
62124 
62125       /* "View.MemoryView":470
62126  *
62127  *
62128  *             if self.view.suboffsets != NULL:             # <<<<<<<<<<<<<<
62129  *                 assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
62130  *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
62131  */
62132     }
62133 
62134     /* "View.MemoryView":472
62135  *             if self.view.suboffsets != NULL:
62136  *                 assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
62137  *             slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,             # <<<<<<<<<<<<<<
62138  *                                 item, self.dtype_is_object)
62139  *         finally:
62140  */
62141     __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object);
62142   }
62143 
62144   /* "View.MemoryView":475
62145  *                                 item, self.dtype_is_object)
62146  *         finally:
62147  *             PyMem_Free(tmp)             # <<<<<<<<<<<<<<
62148  *
62149  *     cdef setitem_indexed(self, index, value):
62150  */
62151   /*finally:*/ {
62152     /*normal exit:*/{
62153       PyMem_Free(__pyx_v_tmp);
62154       goto __pyx_L7;
62155     }
62156     __pyx_L6_error:;
62157     /*exception exit:*/{
62158       __Pyx_PyThreadState_declare
62159       __Pyx_PyThreadState_assign
62160       __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
62161       __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
62162       if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
62163       if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0)) __Pyx_ErrFetch(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8);
62164       __Pyx_XGOTREF(__pyx_t_6);
62165       __Pyx_XGOTREF(__pyx_t_7);
62166       __Pyx_XGOTREF(__pyx_t_8);
62167       __Pyx_XGOTREF(__pyx_t_9);
62168       __Pyx_XGOTREF(__pyx_t_10);
62169       __Pyx_XGOTREF(__pyx_t_11);
62170       __pyx_t_3 = __pyx_lineno; __pyx_t_4 = __pyx_clineno; __pyx_t_5 = __pyx_filename;
62171       {
62172         PyMem_Free(__pyx_v_tmp);
62173       }
62174       if (PY_MAJOR_VERSION >= 3) {
62175         __Pyx_XGIVEREF(__pyx_t_9);
62176         __Pyx_XGIVEREF(__pyx_t_10);
62177         __Pyx_XGIVEREF(__pyx_t_11);
62178         __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
62179       }
62180       __Pyx_XGIVEREF(__pyx_t_6);
62181       __Pyx_XGIVEREF(__pyx_t_7);
62182       __Pyx_XGIVEREF(__pyx_t_8);
62183       __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
62184       __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
62185       __pyx_lineno = __pyx_t_3; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
62186       goto __pyx_L1_error;
62187     }
62188     __pyx_L7:;
62189   }
62190 
62191   /* "View.MemoryView":445
62192  *                                  src.ndim, dst.ndim, self.dtype_is_object)
62193  *
62194  *     cdef setitem_slice_assign_scalar(self, memoryview dst, value):             # <<<<<<<<<<<<<<
62195  *         cdef int array[128]
62196  *         cdef void *tmp = NULL
62197  */
62198 
62199   /* function exit code */
62200   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
62201   goto __pyx_L0;
62202   __pyx_L1_error:;
62203   __Pyx_XDECREF(__pyx_t_2);
62204   __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
62205   __pyx_r = 0;
62206   __pyx_L0:;
62207   __Pyx_XGIVEREF(__pyx_r);
62208   __Pyx_RefNannyFinishContext();
62209   return __pyx_r;
62210 }
62211 
62212 /* "View.MemoryView":477
62213  *             PyMem_Free(tmp)
62214  *
62215  *     cdef setitem_indexed(self, index, value):             # <<<<<<<<<<<<<<
62216  *         cdef char *itemp = self.get_item_pointer(index)
62217  *         self.assign_item_from_object(itemp, value)
62218  */
62219 
62220 static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) {
62221   char *__pyx_v_itemp;
62222   PyObject *__pyx_r = NULL;
62223   __Pyx_RefNannyDeclarations
62224   char *__pyx_t_1;
62225   PyObject *__pyx_t_2 = NULL;
62226   __Pyx_RefNannySetupContext("setitem_indexed", 0);
62227 
62228   /* "View.MemoryView":478
62229  *
62230  *     cdef setitem_indexed(self, index, value):
62231  *         cdef char *itemp = self.get_item_pointer(index)             # <<<<<<<<<<<<<<
62232  *         self.assign_item_from_object(itemp, value)
62233  *
62234  */
62235   __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(5, 478, __pyx_L1_error)
62236   __pyx_v_itemp = __pyx_t_1;
62237 
62238   /* "View.MemoryView":479
62239  *     cdef setitem_indexed(self, index, value):
62240  *         cdef char *itemp = self.get_item_pointer(index)
62241  *         self.assign_item_from_object(itemp, value)             # <<<<<<<<<<<<<<
62242  *
62243  *     cdef convert_item_to_object(self, char *itemp):
62244  */
62245   __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 479, __pyx_L1_error)
62246   __Pyx_GOTREF(__pyx_t_2);
62247   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
62248 
62249   /* "View.MemoryView":477
62250  *             PyMem_Free(tmp)
62251  *
62252  *     cdef setitem_indexed(self, index, value):             # <<<<<<<<<<<<<<
62253  *         cdef char *itemp = self.get_item_pointer(index)
62254  *         self.assign_item_from_object(itemp, value)
62255  */
62256 
62257   /* function exit code */
62258   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
62259   goto __pyx_L0;
62260   __pyx_L1_error:;
62261   __Pyx_XDECREF(__pyx_t_2);
62262   __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename);
62263   __pyx_r = 0;
62264   __pyx_L0:;
62265   __Pyx_XGIVEREF(__pyx_r);
62266   __Pyx_RefNannyFinishContext();
62267   return __pyx_r;
62268 }
62269 
62270 /* "View.MemoryView":481
62271  *         self.assign_item_from_object(itemp, value)
62272  *
62273  *     cdef convert_item_to_object(self, char *itemp):             # <<<<<<<<<<<<<<
62274  *         """Only used if instantiated manually by the user, or if Cython doesn't
62275  *         know how to convert the type"""
62276  */
62277 
62278 static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) {
62279   PyObject *__pyx_v_struct = NULL;
62280   PyObject *__pyx_v_bytesitem = 0;
62281   PyObject *__pyx_v_result = NULL;
62282   PyObject *__pyx_r = NULL;
62283   __Pyx_RefNannyDeclarations
62284   PyObject *__pyx_t_1 = NULL;
62285   PyObject *__pyx_t_2 = NULL;
62286   PyObject *__pyx_t_3 = NULL;
62287   PyObject *__pyx_t_4 = NULL;
62288   PyObject *__pyx_t_5 = NULL;
62289   PyObject *__pyx_t_6 = NULL;
62290   PyObject *__pyx_t_7 = NULL;
62291   int __pyx_t_8;
62292   PyObject *__pyx_t_9 = NULL;
62293   size_t __pyx_t_10;
62294   int __pyx_t_11;
62295   __Pyx_RefNannySetupContext("convert_item_to_object", 0);
62296 
62297   /* "View.MemoryView":484
62298  *         """Only used if instantiated manually by the user, or if Cython doesn't
62299  *         know how to convert the type"""
62300  *         import struct             # <<<<<<<<<<<<<<
62301  *         cdef bytes bytesitem
62302  *
62303  */
62304   __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 484, __pyx_L1_error)
62305   __Pyx_GOTREF(__pyx_t_1);
62306   __pyx_v_struct = __pyx_t_1;
62307   __pyx_t_1 = 0;
62308 
62309   /* "View.MemoryView":487
62310  *         cdef bytes bytesitem
62311  *
62312  *         bytesitem = itemp[:self.view.itemsize]             # <<<<<<<<<<<<<<
62313  *         try:
62314  *             result = struct.unpack(self.view.format, bytesitem)
62315  */
62316   __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 487, __pyx_L1_error)
62317   __Pyx_GOTREF(__pyx_t_1);
62318   __pyx_v_bytesitem = ((PyObject*)__pyx_t_1);
62319   __pyx_t_1 = 0;
62320 
62321   /* "View.MemoryView":488
62322  *
62323  *         bytesitem = itemp[:self.view.itemsize]
62324  *         try:             # <<<<<<<<<<<<<<
62325  *             result = struct.unpack(self.view.format, bytesitem)
62326  *         except struct.error:
62327  */
62328   {
62329     __Pyx_PyThreadState_declare
62330     __Pyx_PyThreadState_assign
62331     __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
62332     __Pyx_XGOTREF(__pyx_t_2);
62333     __Pyx_XGOTREF(__pyx_t_3);
62334     __Pyx_XGOTREF(__pyx_t_4);
62335     /*try:*/ {
62336 
62337       /* "View.MemoryView":489
62338  *         bytesitem = itemp[:self.view.itemsize]
62339  *         try:
62340  *             result = struct.unpack(self.view.format, bytesitem)             # <<<<<<<<<<<<<<
62341  *         except struct.error:
62342  *             raise ValueError("Unable to convert item to object")
62343  */
62344       __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 489, __pyx_L3_error)
62345       __Pyx_GOTREF(__pyx_t_5);
62346       __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 489, __pyx_L3_error)
62347       __Pyx_GOTREF(__pyx_t_6);
62348       __pyx_t_7 = NULL;
62349       __pyx_t_8 = 0;
62350       if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
62351         __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
62352         if (likely(__pyx_t_7)) {
62353           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
62354           __Pyx_INCREF(__pyx_t_7);
62355           __Pyx_INCREF(function);
62356           __Pyx_DECREF_SET(__pyx_t_5, function);
62357           __pyx_t_8 = 1;
62358         }
62359       }
62360       #if CYTHON_FAST_PYCALL
62361       if (PyFunction_Check(__pyx_t_5)) {
62362         PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem};
62363         __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 489, __pyx_L3_error)
62364         __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
62365         __Pyx_GOTREF(__pyx_t_1);
62366         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
62367       } else
62368       #endif
62369       #if CYTHON_FAST_PYCCALL
62370       if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
62371         PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem};
62372         __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 489, __pyx_L3_error)
62373         __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
62374         __Pyx_GOTREF(__pyx_t_1);
62375         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
62376       } else
62377       #endif
62378       {
62379         __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 489, __pyx_L3_error)
62380         __Pyx_GOTREF(__pyx_t_9);
62381         if (__pyx_t_7) {
62382           __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
62383         }
62384         __Pyx_GIVEREF(__pyx_t_6);
62385         PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6);
62386         __Pyx_INCREF(__pyx_v_bytesitem);
62387         __Pyx_GIVEREF(__pyx_v_bytesitem);
62388         PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_bytesitem);
62389         __pyx_t_6 = 0;
62390         __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 489, __pyx_L3_error)
62391         __Pyx_GOTREF(__pyx_t_1);
62392         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
62393       }
62394       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
62395       __pyx_v_result = __pyx_t_1;
62396       __pyx_t_1 = 0;
62397 
62398       /* "View.MemoryView":488
62399  *
62400  *         bytesitem = itemp[:self.view.itemsize]
62401  *         try:             # <<<<<<<<<<<<<<
62402  *             result = struct.unpack(self.view.format, bytesitem)
62403  *         except struct.error:
62404  */
62405     }
62406 
62407     /* "View.MemoryView":493
62408  *             raise ValueError("Unable to convert item to object")
62409  *         else:
62410  *             if len(self.view.format) == 1:             # <<<<<<<<<<<<<<
62411  *                 return result[0]
62412  *             return result
62413  */
62414     /*else:*/ {
62415       __pyx_t_10 = strlen(__pyx_v_self->view.format);
62416       __pyx_t_11 = ((__pyx_t_10 == 1) != 0);
62417       if (__pyx_t_11) {
62418 
62419         /* "View.MemoryView":494
62420  *         else:
62421  *             if len(self.view.format) == 1:
62422  *                 return result[0]             # <<<<<<<<<<<<<<
62423  *             return result
62424  *
62425  */
62426         __Pyx_XDECREF(__pyx_r);
62427         __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 494, __pyx_L5_except_error)
62428         __Pyx_GOTREF(__pyx_t_1);
62429         __pyx_r = __pyx_t_1;
62430         __pyx_t_1 = 0;
62431         goto __pyx_L6_except_return;
62432 
62433         /* "View.MemoryView":493
62434  *             raise ValueError("Unable to convert item to object")
62435  *         else:
62436  *             if len(self.view.format) == 1:             # <<<<<<<<<<<<<<
62437  *                 return result[0]
62438  *             return result
62439  */
62440       }
62441 
62442       /* "View.MemoryView":495
62443  *             if len(self.view.format) == 1:
62444  *                 return result[0]
62445  *             return result             # <<<<<<<<<<<<<<
62446  *
62447  *     cdef assign_item_from_object(self, char *itemp, object value):
62448  */
62449       __Pyx_XDECREF(__pyx_r);
62450       __Pyx_INCREF(__pyx_v_result);
62451       __pyx_r = __pyx_v_result;
62452       goto __pyx_L6_except_return;
62453     }
62454     __pyx_L3_error:;
62455     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
62456     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
62457     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
62458     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
62459     __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
62460 
62461     /* "View.MemoryView":490
62462  *         try:
62463  *             result = struct.unpack(self.view.format, bytesitem)
62464  *         except struct.error:             # <<<<<<<<<<<<<<
62465  *             raise ValueError("Unable to convert item to object")
62466  *         else:
62467  */
62468     __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9);
62469     __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 490, __pyx_L5_except_error)
62470     __Pyx_GOTREF(__pyx_t_6);
62471     __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_6);
62472     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
62473     __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_9);
62474     __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0;
62475     if (__pyx_t_8) {
62476       __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
62477       if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(5, 490, __pyx_L5_except_error)
62478       __Pyx_GOTREF(__pyx_t_9);
62479       __Pyx_GOTREF(__pyx_t_5);
62480       __Pyx_GOTREF(__pyx_t_1);
62481 
62482       /* "View.MemoryView":491
62483  *             result = struct.unpack(self.view.format, bytesitem)
62484  *         except struct.error:
62485  *             raise ValueError("Unable to convert item to object")             # <<<<<<<<<<<<<<
62486  *         else:
62487  *             if len(self.view.format) == 1:
62488  */
62489       __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__96, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 491, __pyx_L5_except_error)
62490       __Pyx_GOTREF(__pyx_t_6);
62491       __Pyx_Raise(__pyx_t_6, 0, 0, 0);
62492       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
62493       __PYX_ERR(5, 491, __pyx_L5_except_error)
62494     }
62495     goto __pyx_L5_except_error;
62496     __pyx_L5_except_error:;
62497 
62498     /* "View.MemoryView":488
62499  *
62500  *         bytesitem = itemp[:self.view.itemsize]
62501  *         try:             # <<<<<<<<<<<<<<
62502  *             result = struct.unpack(self.view.format, bytesitem)
62503  *         except struct.error:
62504  */
62505     __Pyx_XGIVEREF(__pyx_t_2);
62506     __Pyx_XGIVEREF(__pyx_t_3);
62507     __Pyx_XGIVEREF(__pyx_t_4);
62508     __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
62509     goto __pyx_L1_error;
62510     __pyx_L6_except_return:;
62511     __Pyx_XGIVEREF(__pyx_t_2);
62512     __Pyx_XGIVEREF(__pyx_t_3);
62513     __Pyx_XGIVEREF(__pyx_t_4);
62514     __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
62515     goto __pyx_L0;
62516   }
62517 
62518   /* "View.MemoryView":481
62519  *         self.assign_item_from_object(itemp, value)
62520  *
62521  *     cdef convert_item_to_object(self, char *itemp):             # <<<<<<<<<<<<<<
62522  *         """Only used if instantiated manually by the user, or if Cython doesn't
62523  *         know how to convert the type"""
62524  */
62525 
62526   /* function exit code */
62527   __pyx_L1_error:;
62528   __Pyx_XDECREF(__pyx_t_1);
62529   __Pyx_XDECREF(__pyx_t_5);
62530   __Pyx_XDECREF(__pyx_t_6);
62531   __Pyx_XDECREF(__pyx_t_7);
62532   __Pyx_XDECREF(__pyx_t_9);
62533   __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
62534   __pyx_r = 0;
62535   __pyx_L0:;
62536   __Pyx_XDECREF(__pyx_v_struct);
62537   __Pyx_XDECREF(__pyx_v_bytesitem);
62538   __Pyx_XDECREF(__pyx_v_result);
62539   __Pyx_XGIVEREF(__pyx_r);
62540   __Pyx_RefNannyFinishContext();
62541   return __pyx_r;
62542 }
62543 
62544 /* "View.MemoryView":497
62545  *             return result
62546  *
62547  *     cdef assign_item_from_object(self, char *itemp, object value):             # <<<<<<<<<<<<<<
62548  *         """Only used if instantiated manually by the user, or if Cython doesn't
62549  *         know how to convert the type"""
62550  */
62551 
62552 static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) {
62553   PyObject *__pyx_v_struct = NULL;
62554   char __pyx_v_c;
62555   PyObject *__pyx_v_bytesvalue = 0;
62556   Py_ssize_t __pyx_v_i;
62557   PyObject *__pyx_r = NULL;
62558   __Pyx_RefNannyDeclarations
62559   PyObject *__pyx_t_1 = NULL;
62560   int __pyx_t_2;
62561   int __pyx_t_3;
62562   PyObject *__pyx_t_4 = NULL;
62563   PyObject *__pyx_t_5 = NULL;
62564   PyObject *__pyx_t_6 = NULL;
62565   int __pyx_t_7;
62566   PyObject *__pyx_t_8 = NULL;
62567   Py_ssize_t __pyx_t_9;
62568   PyObject *__pyx_t_10 = NULL;
62569   char *__pyx_t_11;
62570   char *__pyx_t_12;
62571   char *__pyx_t_13;
62572   char *__pyx_t_14;
62573   __Pyx_RefNannySetupContext("assign_item_from_object", 0);
62574 
62575   /* "View.MemoryView":500
62576  *         """Only used if instantiated manually by the user, or if Cython doesn't
62577  *         know how to convert the type"""
62578  *         import struct             # <<<<<<<<<<<<<<
62579  *         cdef char c
62580  *         cdef bytes bytesvalue
62581  */
62582   __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 500, __pyx_L1_error)
62583   __Pyx_GOTREF(__pyx_t_1);
62584   __pyx_v_struct = __pyx_t_1;
62585   __pyx_t_1 = 0;
62586 
62587   /* "View.MemoryView":505
62588  *         cdef Py_ssize_t i
62589  *
62590  *         if isinstance(value, tuple):             # <<<<<<<<<<<<<<
62591  *             bytesvalue = struct.pack(self.view.format, *value)
62592  *         else:
62593  */
62594   __pyx_t_2 = PyTuple_Check(__pyx_v_value);
62595   __pyx_t_3 = (__pyx_t_2 != 0);
62596   if (__pyx_t_3) {
62597 
62598     /* "View.MemoryView":506
62599  *
62600  *         if isinstance(value, tuple):
62601  *             bytesvalue = struct.pack(self.view.format, *value)             # <<<<<<<<<<<<<<
62602  *         else:
62603  *             bytesvalue = struct.pack(self.view.format, value)
62604  */
62605     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 506, __pyx_L1_error)
62606     __Pyx_GOTREF(__pyx_t_1);
62607     __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 506, __pyx_L1_error)
62608     __Pyx_GOTREF(__pyx_t_4);
62609     __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 506, __pyx_L1_error)
62610     __Pyx_GOTREF(__pyx_t_5);
62611     __Pyx_GIVEREF(__pyx_t_4);
62612     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
62613     __pyx_t_4 = 0;
62614     __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 506, __pyx_L1_error)
62615     __Pyx_GOTREF(__pyx_t_4);
62616     __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 506, __pyx_L1_error)
62617     __Pyx_GOTREF(__pyx_t_6);
62618     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
62619     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
62620     __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 506, __pyx_L1_error)
62621     __Pyx_GOTREF(__pyx_t_4);
62622     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
62623     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
62624     if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(5, 506, __pyx_L1_error)
62625     __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4);
62626     __pyx_t_4 = 0;
62627 
62628     /* "View.MemoryView":505
62629  *         cdef Py_ssize_t i
62630  *
62631  *         if isinstance(value, tuple):             # <<<<<<<<<<<<<<
62632  *             bytesvalue = struct.pack(self.view.format, *value)
62633  *         else:
62634  */
62635     goto __pyx_L3;
62636   }
62637 
62638   /* "View.MemoryView":508
62639  *             bytesvalue = struct.pack(self.view.format, *value)
62640  *         else:
62641  *             bytesvalue = struct.pack(self.view.format, value)             # <<<<<<<<<<<<<<
62642  *
62643  *         for i, c in enumerate(bytesvalue):
62644  */
62645   /*else*/ {
62646     __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 508, __pyx_L1_error)
62647     __Pyx_GOTREF(__pyx_t_6);
62648     __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 508, __pyx_L1_error)
62649     __Pyx_GOTREF(__pyx_t_1);
62650     __pyx_t_5 = NULL;
62651     __pyx_t_7 = 0;
62652     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
62653       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
62654       if (likely(__pyx_t_5)) {
62655         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
62656         __Pyx_INCREF(__pyx_t_5);
62657         __Pyx_INCREF(function);
62658         __Pyx_DECREF_SET(__pyx_t_6, function);
62659         __pyx_t_7 = 1;
62660       }
62661     }
62662     #if CYTHON_FAST_PYCALL
62663     if (PyFunction_Check(__pyx_t_6)) {
62664       PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value};
62665       __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 508, __pyx_L1_error)
62666       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
62667       __Pyx_GOTREF(__pyx_t_4);
62668       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
62669     } else
62670     #endif
62671     #if CYTHON_FAST_PYCCALL
62672     if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
62673       PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value};
62674       __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 508, __pyx_L1_error)
62675       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
62676       __Pyx_GOTREF(__pyx_t_4);
62677       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
62678     } else
62679     #endif
62680     {
62681       __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 508, __pyx_L1_error)
62682       __Pyx_GOTREF(__pyx_t_8);
62683       if (__pyx_t_5) {
62684         __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL;
62685       }
62686       __Pyx_GIVEREF(__pyx_t_1);
62687       PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1);
62688       __Pyx_INCREF(__pyx_v_value);
62689       __Pyx_GIVEREF(__pyx_v_value);
62690       PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_value);
62691       __pyx_t_1 = 0;
62692       __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 508, __pyx_L1_error)
62693       __Pyx_GOTREF(__pyx_t_4);
62694       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
62695     }
62696     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
62697     if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(5, 508, __pyx_L1_error)
62698     __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4);
62699     __pyx_t_4 = 0;
62700   }
62701   __pyx_L3:;
62702 
62703   /* "View.MemoryView":510
62704  *             bytesvalue = struct.pack(self.view.format, value)
62705  *
62706  *         for i, c in enumerate(bytesvalue):             # <<<<<<<<<<<<<<
62707  *             itemp[i] = c
62708  *
62709  */
62710   __pyx_t_9 = 0;
62711   if (unlikely(__pyx_v_bytesvalue == Py_None)) {
62712     PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
62713     __PYX_ERR(5, 510, __pyx_L1_error)
62714   }
62715   __Pyx_INCREF(__pyx_v_bytesvalue);
62716   __pyx_t_10 = __pyx_v_bytesvalue;
62717   __pyx_t_12 = PyBytes_AS_STRING(__pyx_t_10);
62718   __pyx_t_13 = (__pyx_t_12 + PyBytes_GET_SIZE(__pyx_t_10));
62719   for (__pyx_t_14 = __pyx_t_12; __pyx_t_14 < __pyx_t_13; __pyx_t_14++) {
62720     __pyx_t_11 = __pyx_t_14;
62721     __pyx_v_c = (__pyx_t_11[0]);
62722 
62723     /* "View.MemoryView":511
62724  *
62725  *         for i, c in enumerate(bytesvalue):
62726  *             itemp[i] = c             # <<<<<<<<<<<<<<
62727  *
62728  *     @cname('getbuffer')
62729  */
62730     __pyx_v_i = __pyx_t_9;
62731 
62732     /* "View.MemoryView":510
62733  *             bytesvalue = struct.pack(self.view.format, value)
62734  *
62735  *         for i, c in enumerate(bytesvalue):             # <<<<<<<<<<<<<<
62736  *             itemp[i] = c
62737  *
62738  */
62739     __pyx_t_9 = (__pyx_t_9 + 1);
62740 
62741     /* "View.MemoryView":511
62742  *
62743  *         for i, c in enumerate(bytesvalue):
62744  *             itemp[i] = c             # <<<<<<<<<<<<<<
62745  *
62746  *     @cname('getbuffer')
62747  */
62748     (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c;
62749   }
62750   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
62751 
62752   /* "View.MemoryView":497
62753  *             return result
62754  *
62755  *     cdef assign_item_from_object(self, char *itemp, object value):             # <<<<<<<<<<<<<<
62756  *         """Only used if instantiated manually by the user, or if Cython doesn't
62757  *         know how to convert the type"""
62758  */
62759 
62760   /* function exit code */
62761   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
62762   goto __pyx_L0;
62763   __pyx_L1_error:;
62764   __Pyx_XDECREF(__pyx_t_1);
62765   __Pyx_XDECREF(__pyx_t_4);
62766   __Pyx_XDECREF(__pyx_t_5);
62767   __Pyx_XDECREF(__pyx_t_6);
62768   __Pyx_XDECREF(__pyx_t_8);
62769   __Pyx_XDECREF(__pyx_t_10);
62770   __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
62771   __pyx_r = 0;
62772   __pyx_L0:;
62773   __Pyx_XDECREF(__pyx_v_struct);
62774   __Pyx_XDECREF(__pyx_v_bytesvalue);
62775   __Pyx_XGIVEREF(__pyx_r);
62776   __Pyx_RefNannyFinishContext();
62777   return __pyx_r;
62778 }
62779 
62780 /* "View.MemoryView":514
62781  *
62782  *     @cname('getbuffer')
62783  *     def __getbuffer__(self, Py_buffer *info, int flags):             # <<<<<<<<<<<<<<
62784  *         if flags & PyBUF_WRITABLE and self.view.readonly:
62785  *             raise ValueError("Cannot create writable memory view from read-only memoryview")
62786  */
62787 
62788 /* Python wrapper */
62789 static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
62790 static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
62791   int __pyx_r;
62792   __Pyx_RefNannyDeclarations
62793   __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
62794   __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
62795 
62796   /* function exit code */
62797   __Pyx_RefNannyFinishContext();
62798   return __pyx_r;
62799 }
62800 
62801 static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
62802   int __pyx_r;
62803   __Pyx_RefNannyDeclarations
62804   int __pyx_t_1;
62805   int __pyx_t_2;
62806   PyObject *__pyx_t_3 = NULL;
62807   Py_ssize_t *__pyx_t_4;
62808   char *__pyx_t_5;
62809   void *__pyx_t_6;
62810   int __pyx_t_7;
62811   Py_ssize_t __pyx_t_8;
62812   if (__pyx_v_info == NULL) {
62813     PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");
62814     return -1;
62815   }
62816   __Pyx_RefNannySetupContext("__getbuffer__", 0);
62817   __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
62818   __Pyx_GIVEREF(__pyx_v_info->obj);
62819 
62820   /* "View.MemoryView":515
62821  *     @cname('getbuffer')
62822  *     def __getbuffer__(self, Py_buffer *info, int flags):
62823  *         if flags & PyBUF_WRITABLE and self.view.readonly:             # <<<<<<<<<<<<<<
62824  *             raise ValueError("Cannot create writable memory view from read-only memoryview")
62825  *
62826  */
62827   __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0);
62828   if (__pyx_t_2) {
62829   } else {
62830     __pyx_t_1 = __pyx_t_2;
62831     goto __pyx_L4_bool_binop_done;
62832   }
62833   __pyx_t_2 = (__pyx_v_self->view.readonly != 0);
62834   __pyx_t_1 = __pyx_t_2;
62835   __pyx_L4_bool_binop_done:;
62836   if (unlikely(__pyx_t_1)) {
62837 
62838     /* "View.MemoryView":516
62839  *     def __getbuffer__(self, Py_buffer *info, int flags):
62840  *         if flags & PyBUF_WRITABLE and self.view.readonly:
62841  *             raise ValueError("Cannot create writable memory view from read-only memoryview")             # <<<<<<<<<<<<<<
62842  *
62843  *         if flags & PyBUF_ND:
62844  */
62845     __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__97, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 516, __pyx_L1_error)
62846     __Pyx_GOTREF(__pyx_t_3);
62847     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
62848     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
62849     __PYX_ERR(5, 516, __pyx_L1_error)
62850 
62851     /* "View.MemoryView":515
62852  *     @cname('getbuffer')
62853  *     def __getbuffer__(self, Py_buffer *info, int flags):
62854  *         if flags & PyBUF_WRITABLE and self.view.readonly:             # <<<<<<<<<<<<<<
62855  *             raise ValueError("Cannot create writable memory view from read-only memoryview")
62856  *
62857  */
62858   }
62859 
62860   /* "View.MemoryView":518
62861  *             raise ValueError("Cannot create writable memory view from read-only memoryview")
62862  *
62863  *         if flags & PyBUF_ND:             # <<<<<<<<<<<<<<
62864  *             info.shape = self.view.shape
62865  *         else:
62866  */
62867   __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0);
62868   if (__pyx_t_1) {
62869 
62870     /* "View.MemoryView":519
62871  *
62872  *         if flags & PyBUF_ND:
62873  *             info.shape = self.view.shape             # <<<<<<<<<<<<<<
62874  *         else:
62875  *             info.shape = NULL
62876  */
62877     __pyx_t_4 = __pyx_v_self->view.shape;
62878     __pyx_v_info->shape = __pyx_t_4;
62879 
62880     /* "View.MemoryView":518
62881  *             raise ValueError("Cannot create writable memory view from read-only memoryview")
62882  *
62883  *         if flags & PyBUF_ND:             # <<<<<<<<<<<<<<
62884  *             info.shape = self.view.shape
62885  *         else:
62886  */
62887     goto __pyx_L6;
62888   }
62889 
62890   /* "View.MemoryView":521
62891  *             info.shape = self.view.shape
62892  *         else:
62893  *             info.shape = NULL             # <<<<<<<<<<<<<<
62894  *
62895  *         if flags & PyBUF_STRIDES:
62896  */
62897   /*else*/ {
62898     __pyx_v_info->shape = NULL;
62899   }
62900   __pyx_L6:;
62901 
62902   /* "View.MemoryView":523
62903  *             info.shape = NULL
62904  *
62905  *         if flags & PyBUF_STRIDES:             # <<<<<<<<<<<<<<
62906  *             info.strides = self.view.strides
62907  *         else:
62908  */
62909   __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0);
62910   if (__pyx_t_1) {
62911 
62912     /* "View.MemoryView":524
62913  *
62914  *         if flags & PyBUF_STRIDES:
62915  *             info.strides = self.view.strides             # <<<<<<<<<<<<<<
62916  *         else:
62917  *             info.strides = NULL
62918  */
62919     __pyx_t_4 = __pyx_v_self->view.strides;
62920     __pyx_v_info->strides = __pyx_t_4;
62921 
62922     /* "View.MemoryView":523
62923  *             info.shape = NULL
62924  *
62925  *         if flags & PyBUF_STRIDES:             # <<<<<<<<<<<<<<
62926  *             info.strides = self.view.strides
62927  *         else:
62928  */
62929     goto __pyx_L7;
62930   }
62931 
62932   /* "View.MemoryView":526
62933  *             info.strides = self.view.strides
62934  *         else:
62935  *             info.strides = NULL             # <<<<<<<<<<<<<<
62936  *
62937  *         if flags & PyBUF_INDIRECT:
62938  */
62939   /*else*/ {
62940     __pyx_v_info->strides = NULL;
62941   }
62942   __pyx_L7:;
62943 
62944   /* "View.MemoryView":528
62945  *             info.strides = NULL
62946  *
62947  *         if flags & PyBUF_INDIRECT:             # <<<<<<<<<<<<<<
62948  *             info.suboffsets = self.view.suboffsets
62949  *         else:
62950  */
62951   __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0);
62952   if (__pyx_t_1) {
62953 
62954     /* "View.MemoryView":529
62955  *
62956  *         if flags & PyBUF_INDIRECT:
62957  *             info.suboffsets = self.view.suboffsets             # <<<<<<<<<<<<<<
62958  *         else:
62959  *             info.suboffsets = NULL
62960  */
62961     __pyx_t_4 = __pyx_v_self->view.suboffsets;
62962     __pyx_v_info->suboffsets = __pyx_t_4;
62963 
62964     /* "View.MemoryView":528
62965  *             info.strides = NULL
62966  *
62967  *         if flags & PyBUF_INDIRECT:             # <<<<<<<<<<<<<<
62968  *             info.suboffsets = self.view.suboffsets
62969  *         else:
62970  */
62971     goto __pyx_L8;
62972   }
62973 
62974   /* "View.MemoryView":531
62975  *             info.suboffsets = self.view.suboffsets
62976  *         else:
62977  *             info.suboffsets = NULL             # <<<<<<<<<<<<<<
62978  *
62979  *         if flags & PyBUF_FORMAT:
62980  */
62981   /*else*/ {
62982     __pyx_v_info->suboffsets = NULL;
62983   }
62984   __pyx_L8:;
62985 
62986   /* "View.MemoryView":533
62987  *             info.suboffsets = NULL
62988  *
62989  *         if flags & PyBUF_FORMAT:             # <<<<<<<<<<<<<<
62990  *             info.format = self.view.format
62991  *         else:
62992  */
62993   __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
62994   if (__pyx_t_1) {
62995 
62996     /* "View.MemoryView":534
62997  *
62998  *         if flags & PyBUF_FORMAT:
62999  *             info.format = self.view.format             # <<<<<<<<<<<<<<
63000  *         else:
63001  *             info.format = NULL
63002  */
63003     __pyx_t_5 = __pyx_v_self->view.format;
63004     __pyx_v_info->format = __pyx_t_5;
63005 
63006     /* "View.MemoryView":533
63007  *             info.suboffsets = NULL
63008  *
63009  *         if flags & PyBUF_FORMAT:             # <<<<<<<<<<<<<<
63010  *             info.format = self.view.format
63011  *         else:
63012  */
63013     goto __pyx_L9;
63014   }
63015 
63016   /* "View.MemoryView":536
63017  *             info.format = self.view.format
63018  *         else:
63019  *             info.format = NULL             # <<<<<<<<<<<<<<
63020  *
63021  *         info.buf = self.view.buf
63022  */
63023   /*else*/ {
63024     __pyx_v_info->format = NULL;
63025   }
63026   __pyx_L9:;
63027 
63028   /* "View.MemoryView":538
63029  *             info.format = NULL
63030  *
63031  *         info.buf = self.view.buf             # <<<<<<<<<<<<<<
63032  *         info.ndim = self.view.ndim
63033  *         info.itemsize = self.view.itemsize
63034  */
63035   __pyx_t_6 = __pyx_v_self->view.buf;
63036   __pyx_v_info->buf = __pyx_t_6;
63037 
63038   /* "View.MemoryView":539
63039  *
63040  *         info.buf = self.view.buf
63041  *         info.ndim = self.view.ndim             # <<<<<<<<<<<<<<
63042  *         info.itemsize = self.view.itemsize
63043  *         info.len = self.view.len
63044  */
63045   __pyx_t_7 = __pyx_v_self->view.ndim;
63046   __pyx_v_info->ndim = __pyx_t_7;
63047 
63048   /* "View.MemoryView":540
63049  *         info.buf = self.view.buf
63050  *         info.ndim = self.view.ndim
63051  *         info.itemsize = self.view.itemsize             # <<<<<<<<<<<<<<
63052  *         info.len = self.view.len
63053  *         info.readonly = self.view.readonly
63054  */
63055   __pyx_t_8 = __pyx_v_self->view.itemsize;
63056   __pyx_v_info->itemsize = __pyx_t_8;
63057 
63058   /* "View.MemoryView":541
63059  *         info.ndim = self.view.ndim
63060  *         info.itemsize = self.view.itemsize
63061  *         info.len = self.view.len             # <<<<<<<<<<<<<<
63062  *         info.readonly = self.view.readonly
63063  *         info.obj = self
63064  */
63065   __pyx_t_8 = __pyx_v_self->view.len;
63066   __pyx_v_info->len = __pyx_t_8;
63067 
63068   /* "View.MemoryView":542
63069  *         info.itemsize = self.view.itemsize
63070  *         info.len = self.view.len
63071  *         info.readonly = self.view.readonly             # <<<<<<<<<<<<<<
63072  *         info.obj = self
63073  *
63074  */
63075   __pyx_t_1 = __pyx_v_self->view.readonly;
63076   __pyx_v_info->readonly = __pyx_t_1;
63077 
63078   /* "View.MemoryView":543
63079  *         info.len = self.view.len
63080  *         info.readonly = self.view.readonly
63081  *         info.obj = self             # <<<<<<<<<<<<<<
63082  *
63083  *     __pyx_getbuffer = capsule(<void *> &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)")
63084  */
63085   __Pyx_INCREF(((PyObject *)__pyx_v_self));
63086   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
63087   __Pyx_GOTREF(__pyx_v_info->obj);
63088   __Pyx_DECREF(__pyx_v_info->obj);
63089   __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
63090 
63091   /* "View.MemoryView":514
63092  *
63093  *     @cname('getbuffer')
63094  *     def __getbuffer__(self, Py_buffer *info, int flags):             # <<<<<<<<<<<<<<
63095  *         if flags & PyBUF_WRITABLE and self.view.readonly:
63096  *             raise ValueError("Cannot create writable memory view from read-only memoryview")
63097  */
63098 
63099   /* function exit code */
63100   __pyx_r = 0;
63101   goto __pyx_L0;
63102   __pyx_L1_error:;
63103   __Pyx_XDECREF(__pyx_t_3);
63104   __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
63105   __pyx_r = -1;
63106   if (__pyx_v_info->obj != NULL) {
63107     __Pyx_GOTREF(__pyx_v_info->obj);
63108     __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
63109   }
63110   goto __pyx_L2;
63111   __pyx_L0:;
63112   if (__pyx_v_info->obj == Py_None) {
63113     __Pyx_GOTREF(__pyx_v_info->obj);
63114     __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
63115   }
63116   __pyx_L2:;
63117   __Pyx_RefNannyFinishContext();
63118   return __pyx_r;
63119 }
63120 
63121 /* "View.MemoryView":549
63122  *
63123  *     @property
63124  *     def T(self):             # <<<<<<<<<<<<<<
63125  *         cdef _memoryviewslice result = memoryview_copy(self)
63126  *         transpose_memslice(&result.from_slice)
63127  */
63128 
63129 /* Python wrapper */
63130 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/
63131 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) {
63132   PyObject *__pyx_r = 0;
63133   __Pyx_RefNannyDeclarations
63134   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
63135   __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
63136 
63137   /* function exit code */
63138   __Pyx_RefNannyFinishContext();
63139   return __pyx_r;
63140 }
63141 
63142 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
63143   struct __pyx_memoryviewslice_obj *__pyx_v_result = 0;
63144   PyObject *__pyx_r = NULL;
63145   __Pyx_RefNannyDeclarations
63146   PyObject *__pyx_t_1 = NULL;
63147   int __pyx_t_2;
63148   __Pyx_RefNannySetupContext("__get__", 0);
63149 
63150   /* "View.MemoryView":550
63151  *     @property
63152  *     def T(self):
63153  *         cdef _memoryviewslice result = memoryview_copy(self)             # <<<<<<<<<<<<<<
63154  *         transpose_memslice(&result.from_slice)
63155  *         return result
63156  */
63157   __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 550, __pyx_L1_error)
63158   __Pyx_GOTREF(__pyx_t_1);
63159   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(5, 550, __pyx_L1_error)
63160   __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1);
63161   __pyx_t_1 = 0;
63162 
63163   /* "View.MemoryView":551
63164  *     def T(self):
63165  *         cdef _memoryviewslice result = memoryview_copy(self)
63166  *         transpose_memslice(&result.from_slice)             # <<<<<<<<<<<<<<
63167  *         return result
63168  *
63169  */
63170   __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(5, 551, __pyx_L1_error)
63171 
63172   /* "View.MemoryView":552
63173  *         cdef _memoryviewslice result = memoryview_copy(self)
63174  *         transpose_memslice(&result.from_slice)
63175  *         return result             # <<<<<<<<<<<<<<
63176  *
63177  *     @property
63178  */
63179   __Pyx_XDECREF(__pyx_r);
63180   __Pyx_INCREF(((PyObject *)__pyx_v_result));
63181   __pyx_r = ((PyObject *)__pyx_v_result);
63182   goto __pyx_L0;
63183 
63184   /* "View.MemoryView":549
63185  *
63186  *     @property
63187  *     def T(self):             # <<<<<<<<<<<<<<
63188  *         cdef _memoryviewslice result = memoryview_copy(self)
63189  *         transpose_memslice(&result.from_slice)
63190  */
63191 
63192   /* function exit code */
63193   __pyx_L1_error:;
63194   __Pyx_XDECREF(__pyx_t_1);
63195   __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
63196   __pyx_r = NULL;
63197   __pyx_L0:;
63198   __Pyx_XDECREF((PyObject *)__pyx_v_result);
63199   __Pyx_XGIVEREF(__pyx_r);
63200   __Pyx_RefNannyFinishContext();
63201   return __pyx_r;
63202 }
63203 
63204 /* "View.MemoryView":555
63205  *
63206  *     @property
63207  *     def base(self):             # <<<<<<<<<<<<<<
63208  *         return self.obj
63209  *
63210  */
63211 
63212 /* Python wrapper */
63213 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/
63214 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) {
63215   PyObject *__pyx_r = 0;
63216   __Pyx_RefNannyDeclarations
63217   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
63218   __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
63219 
63220   /* function exit code */
63221   __Pyx_RefNannyFinishContext();
63222   return __pyx_r;
63223 }
63224 
63225 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
63226   PyObject *__pyx_r = NULL;
63227   __Pyx_RefNannyDeclarations
63228   __Pyx_RefNannySetupContext("__get__", 0);
63229 
63230   /* "View.MemoryView":556
63231  *     @property
63232  *     def base(self):
63233  *         return self.obj             # <<<<<<<<<<<<<<
63234  *
63235  *     @property
63236  */
63237   __Pyx_XDECREF(__pyx_r);
63238   __Pyx_INCREF(__pyx_v_self->obj);
63239   __pyx_r = __pyx_v_self->obj;
63240   goto __pyx_L0;
63241 
63242   /* "View.MemoryView":555
63243  *
63244  *     @property
63245  *     def base(self):             # <<<<<<<<<<<<<<
63246  *         return self.obj
63247  *
63248  */
63249 
63250   /* function exit code */
63251   __pyx_L0:;
63252   __Pyx_XGIVEREF(__pyx_r);
63253   __Pyx_RefNannyFinishContext();
63254   return __pyx_r;
63255 }
63256 
63257 /* "View.MemoryView":559
63258  *
63259  *     @property
63260  *     def shape(self):             # <<<<<<<<<<<<<<
63261  *         return tuple([length for length in self.view.shape[:self.view.ndim]])
63262  *
63263  */
63264 
63265 /* Python wrapper */
63266 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/
63267 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) {
63268   PyObject *__pyx_r = 0;
63269   __Pyx_RefNannyDeclarations
63270   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
63271   __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
63272 
63273   /* function exit code */
63274   __Pyx_RefNannyFinishContext();
63275   return __pyx_r;
63276 }
63277 
63278 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
63279   Py_ssize_t __pyx_v_length;
63280   PyObject *__pyx_r = NULL;
63281   __Pyx_RefNannyDeclarations
63282   PyObject *__pyx_t_1 = NULL;
63283   Py_ssize_t *__pyx_t_2;
63284   Py_ssize_t *__pyx_t_3;
63285   Py_ssize_t *__pyx_t_4;
63286   PyObject *__pyx_t_5 = NULL;
63287   __Pyx_RefNannySetupContext("__get__", 0);
63288 
63289   /* "View.MemoryView":560
63290  *     @property
63291  *     def shape(self):
63292  *         return tuple([length for length in self.view.shape[:self.view.ndim]])             # <<<<<<<<<<<<<<
63293  *
63294  *     @property
63295  */
63296   __Pyx_XDECREF(__pyx_r);
63297   __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 560, __pyx_L1_error)
63298   __Pyx_GOTREF(__pyx_t_1);
63299   __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim);
63300   for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
63301     __pyx_t_2 = __pyx_t_4;
63302     __pyx_v_length = (__pyx_t_2[0]);
63303     __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 560, __pyx_L1_error)
63304     __Pyx_GOTREF(__pyx_t_5);
63305     if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(5, 560, __pyx_L1_error)
63306     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
63307   }
63308   __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 560, __pyx_L1_error)
63309   __Pyx_GOTREF(__pyx_t_5);
63310   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
63311   __pyx_r = __pyx_t_5;
63312   __pyx_t_5 = 0;
63313   goto __pyx_L0;
63314 
63315   /* "View.MemoryView":559
63316  *
63317  *     @property
63318  *     def shape(self):             # <<<<<<<<<<<<<<
63319  *         return tuple([length for length in self.view.shape[:self.view.ndim]])
63320  *
63321  */
63322 
63323   /* function exit code */
63324   __pyx_L1_error:;
63325   __Pyx_XDECREF(__pyx_t_1);
63326   __Pyx_XDECREF(__pyx_t_5);
63327   __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
63328   __pyx_r = NULL;
63329   __pyx_L0:;
63330   __Pyx_XGIVEREF(__pyx_r);
63331   __Pyx_RefNannyFinishContext();
63332   return __pyx_r;
63333 }
63334 
63335 /* "View.MemoryView":563
63336  *
63337  *     @property
63338  *     def strides(self):             # <<<<<<<<<<<<<<
63339  *         if self.view.strides == NULL:
63340  *
63341  */
63342 
63343 /* Python wrapper */
63344 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/
63345 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) {
63346   PyObject *__pyx_r = 0;
63347   __Pyx_RefNannyDeclarations
63348   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
63349   __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
63350 
63351   /* function exit code */
63352   __Pyx_RefNannyFinishContext();
63353   return __pyx_r;
63354 }
63355 
63356 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
63357   Py_ssize_t __pyx_v_stride;
63358   PyObject *__pyx_r = NULL;
63359   __Pyx_RefNannyDeclarations
63360   int __pyx_t_1;
63361   PyObject *__pyx_t_2 = NULL;
63362   Py_ssize_t *__pyx_t_3;
63363   Py_ssize_t *__pyx_t_4;
63364   Py_ssize_t *__pyx_t_5;
63365   PyObject *__pyx_t_6 = NULL;
63366   __Pyx_RefNannySetupContext("__get__", 0);
63367 
63368   /* "View.MemoryView":564
63369  *     @property
63370  *     def strides(self):
63371  *         if self.view.strides == NULL:             # <<<<<<<<<<<<<<
63372  *
63373  *             raise ValueError("Buffer view does not expose strides")
63374  */
63375   __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0);
63376   if (unlikely(__pyx_t_1)) {
63377 
63378     /* "View.MemoryView":566
63379  *         if self.view.strides == NULL:
63380  *
63381  *             raise ValueError("Buffer view does not expose strides")             # <<<<<<<<<<<<<<
63382  *
63383  *         return tuple([stride for stride in self.view.strides[:self.view.ndim]])
63384  */
63385     __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__98, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 566, __pyx_L1_error)
63386     __Pyx_GOTREF(__pyx_t_2);
63387     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
63388     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
63389     __PYX_ERR(5, 566, __pyx_L1_error)
63390 
63391     /* "View.MemoryView":564
63392  *     @property
63393  *     def strides(self):
63394  *         if self.view.strides == NULL:             # <<<<<<<<<<<<<<
63395  *
63396  *             raise ValueError("Buffer view does not expose strides")
63397  */
63398   }
63399 
63400   /* "View.MemoryView":568
63401  *             raise ValueError("Buffer view does not expose strides")
63402  *
63403  *         return tuple([stride for stride in self.view.strides[:self.view.ndim]])             # <<<<<<<<<<<<<<
63404  *
63405  *     @property
63406  */
63407   __Pyx_XDECREF(__pyx_r);
63408   __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 568, __pyx_L1_error)
63409   __Pyx_GOTREF(__pyx_t_2);
63410   __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim);
63411   for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) {
63412     __pyx_t_3 = __pyx_t_5;
63413     __pyx_v_stride = (__pyx_t_3[0]);
63414     __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 568, __pyx_L1_error)
63415     __Pyx_GOTREF(__pyx_t_6);
63416     if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(5, 568, __pyx_L1_error)
63417     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
63418   }
63419   __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 568, __pyx_L1_error)
63420   __Pyx_GOTREF(__pyx_t_6);
63421   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
63422   __pyx_r = __pyx_t_6;
63423   __pyx_t_6 = 0;
63424   goto __pyx_L0;
63425 
63426   /* "View.MemoryView":563
63427  *
63428  *     @property
63429  *     def strides(self):             # <<<<<<<<<<<<<<
63430  *         if self.view.strides == NULL:
63431  *
63432  */
63433 
63434   /* function exit code */
63435   __pyx_L1_error:;
63436   __Pyx_XDECREF(__pyx_t_2);
63437   __Pyx_XDECREF(__pyx_t_6);
63438   __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
63439   __pyx_r = NULL;
63440   __pyx_L0:;
63441   __Pyx_XGIVEREF(__pyx_r);
63442   __Pyx_RefNannyFinishContext();
63443   return __pyx_r;
63444 }
63445 
63446 /* "View.MemoryView":571
63447  *
63448  *     @property
63449  *     def suboffsets(self):             # <<<<<<<<<<<<<<
63450  *         if self.view.suboffsets == NULL:
63451  *             return (-1,) * self.view.ndim
63452  */
63453 
63454 /* Python wrapper */
63455 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/
63456 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) {
63457   PyObject *__pyx_r = 0;
63458   __Pyx_RefNannyDeclarations
63459   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
63460   __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
63461 
63462   /* function exit code */
63463   __Pyx_RefNannyFinishContext();
63464   return __pyx_r;
63465 }
63466 
63467 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
63468   Py_ssize_t __pyx_v_suboffset;
63469   PyObject *__pyx_r = NULL;
63470   __Pyx_RefNannyDeclarations
63471   int __pyx_t_1;
63472   PyObject *__pyx_t_2 = NULL;
63473   PyObject *__pyx_t_3 = NULL;
63474   Py_ssize_t *__pyx_t_4;
63475   Py_ssize_t *__pyx_t_5;
63476   Py_ssize_t *__pyx_t_6;
63477   __Pyx_RefNannySetupContext("__get__", 0);
63478 
63479   /* "View.MemoryView":572
63480  *     @property
63481  *     def suboffsets(self):
63482  *         if self.view.suboffsets == NULL:             # <<<<<<<<<<<<<<
63483  *             return (-1,) * self.view.ndim
63484  *
63485  */
63486   __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0);
63487   if (__pyx_t_1) {
63488 
63489     /* "View.MemoryView":573
63490  *     def suboffsets(self):
63491  *         if self.view.suboffsets == NULL:
63492  *             return (-1,) * self.view.ndim             # <<<<<<<<<<<<<<
63493  *
63494  *         return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]])
63495  */
63496     __Pyx_XDECREF(__pyx_r);
63497     __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 573, __pyx_L1_error)
63498     __Pyx_GOTREF(__pyx_t_2);
63499     __pyx_t_3 = PyNumber_Multiply(__pyx_tuple__99, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 573, __pyx_L1_error)
63500     __Pyx_GOTREF(__pyx_t_3);
63501     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
63502     __pyx_r = __pyx_t_3;
63503     __pyx_t_3 = 0;
63504     goto __pyx_L0;
63505 
63506     /* "View.MemoryView":572
63507  *     @property
63508  *     def suboffsets(self):
63509  *         if self.view.suboffsets == NULL:             # <<<<<<<<<<<<<<
63510  *             return (-1,) * self.view.ndim
63511  *
63512  */
63513   }
63514 
63515   /* "View.MemoryView":575
63516  *             return (-1,) * self.view.ndim
63517  *
63518  *         return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]])             # <<<<<<<<<<<<<<
63519  *
63520  *     @property
63521  */
63522   __Pyx_XDECREF(__pyx_r);
63523   __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 575, __pyx_L1_error)
63524   __Pyx_GOTREF(__pyx_t_3);
63525   __pyx_t_5 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim);
63526   for (__pyx_t_6 = __pyx_v_self->view.suboffsets; __pyx_t_6 < __pyx_t_5; __pyx_t_6++) {
63527     __pyx_t_4 = __pyx_t_6;
63528     __pyx_v_suboffset = (__pyx_t_4[0]);
63529     __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_suboffset); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 575, __pyx_L1_error)
63530     __Pyx_GOTREF(__pyx_t_2);
63531     if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(5, 575, __pyx_L1_error)
63532     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
63533   }
63534   __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 575, __pyx_L1_error)
63535   __Pyx_GOTREF(__pyx_t_2);
63536   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
63537   __pyx_r = __pyx_t_2;
63538   __pyx_t_2 = 0;
63539   goto __pyx_L0;
63540 
63541   /* "View.MemoryView":571
63542  *
63543  *     @property
63544  *     def suboffsets(self):             # <<<<<<<<<<<<<<
63545  *         if self.view.suboffsets == NULL:
63546  *             return (-1,) * self.view.ndim
63547  */
63548 
63549   /* function exit code */
63550   __pyx_L1_error:;
63551   __Pyx_XDECREF(__pyx_t_2);
63552   __Pyx_XDECREF(__pyx_t_3);
63553   __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
63554   __pyx_r = NULL;
63555   __pyx_L0:;
63556   __Pyx_XGIVEREF(__pyx_r);
63557   __Pyx_RefNannyFinishContext();
63558   return __pyx_r;
63559 }
63560 
63561 /* "View.MemoryView":578
63562  *
63563  *     @property
63564  *     def ndim(self):             # <<<<<<<<<<<<<<
63565  *         return self.view.ndim
63566  *
63567  */
63568 
63569 /* Python wrapper */
63570 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/
63571 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) {
63572   PyObject *__pyx_r = 0;
63573   __Pyx_RefNannyDeclarations
63574   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
63575   __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
63576 
63577   /* function exit code */
63578   __Pyx_RefNannyFinishContext();
63579   return __pyx_r;
63580 }
63581 
63582 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
63583   PyObject *__pyx_r = NULL;
63584   __Pyx_RefNannyDeclarations
63585   PyObject *__pyx_t_1 = NULL;
63586   __Pyx_RefNannySetupContext("__get__", 0);
63587 
63588   /* "View.MemoryView":579
63589  *     @property
63590  *     def ndim(self):
63591  *         return self.view.ndim             # <<<<<<<<<<<<<<
63592  *
63593  *     @property
63594  */
63595   __Pyx_XDECREF(__pyx_r);
63596   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 579, __pyx_L1_error)
63597   __Pyx_GOTREF(__pyx_t_1);
63598   __pyx_r = __pyx_t_1;
63599   __pyx_t_1 = 0;
63600   goto __pyx_L0;
63601 
63602   /* "View.MemoryView":578
63603  *
63604  *     @property
63605  *     def ndim(self):             # <<<<<<<<<<<<<<
63606  *         return self.view.ndim
63607  *
63608  */
63609 
63610   /* function exit code */
63611   __pyx_L1_error:;
63612   __Pyx_XDECREF(__pyx_t_1);
63613   __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
63614   __pyx_r = NULL;
63615   __pyx_L0:;
63616   __Pyx_XGIVEREF(__pyx_r);
63617   __Pyx_RefNannyFinishContext();
63618   return __pyx_r;
63619 }
63620 
63621 /* "View.MemoryView":582
63622  *
63623  *     @property
63624  *     def itemsize(self):             # <<<<<<<<<<<<<<
63625  *         return self.view.itemsize
63626  *
63627  */
63628 
63629 /* Python wrapper */
63630 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/
63631 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) {
63632   PyObject *__pyx_r = 0;
63633   __Pyx_RefNannyDeclarations
63634   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
63635   __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
63636 
63637   /* function exit code */
63638   __Pyx_RefNannyFinishContext();
63639   return __pyx_r;
63640 }
63641 
63642 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
63643   PyObject *__pyx_r = NULL;
63644   __Pyx_RefNannyDeclarations
63645   PyObject *__pyx_t_1 = NULL;
63646   __Pyx_RefNannySetupContext("__get__", 0);
63647 
63648   /* "View.MemoryView":583
63649  *     @property
63650  *     def itemsize(self):
63651  *         return self.view.itemsize             # <<<<<<<<<<<<<<
63652  *
63653  *     @property
63654  */
63655   __Pyx_XDECREF(__pyx_r);
63656   __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 583, __pyx_L1_error)
63657   __Pyx_GOTREF(__pyx_t_1);
63658   __pyx_r = __pyx_t_1;
63659   __pyx_t_1 = 0;
63660   goto __pyx_L0;
63661 
63662   /* "View.MemoryView":582
63663  *
63664  *     @property
63665  *     def itemsize(self):             # <<<<<<<<<<<<<<
63666  *         return self.view.itemsize
63667  *
63668  */
63669 
63670   /* function exit code */
63671   __pyx_L1_error:;
63672   __Pyx_XDECREF(__pyx_t_1);
63673   __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
63674   __pyx_r = NULL;
63675   __pyx_L0:;
63676   __Pyx_XGIVEREF(__pyx_r);
63677   __Pyx_RefNannyFinishContext();
63678   return __pyx_r;
63679 }
63680 
63681 /* "View.MemoryView":586
63682  *
63683  *     @property
63684  *     def nbytes(self):             # <<<<<<<<<<<<<<
63685  *         return self.size * self.view.itemsize
63686  *
63687  */
63688 
63689 /* Python wrapper */
63690 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/
63691 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) {
63692   PyObject *__pyx_r = 0;
63693   __Pyx_RefNannyDeclarations
63694   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
63695   __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
63696 
63697   /* function exit code */
63698   __Pyx_RefNannyFinishContext();
63699   return __pyx_r;
63700 }
63701 
63702 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
63703   PyObject *__pyx_r = NULL;
63704   __Pyx_RefNannyDeclarations
63705   PyObject *__pyx_t_1 = NULL;
63706   PyObject *__pyx_t_2 = NULL;
63707   PyObject *__pyx_t_3 = NULL;
63708   __Pyx_RefNannySetupContext("__get__", 0);
63709 
63710   /* "View.MemoryView":587
63711  *     @property
63712  *     def nbytes(self):
63713  *         return self.size * self.view.itemsize             # <<<<<<<<<<<<<<
63714  *
63715  *     @property
63716  */
63717   __Pyx_XDECREF(__pyx_r);
63718   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 587, __pyx_L1_error)
63719   __Pyx_GOTREF(__pyx_t_1);
63720   __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 587, __pyx_L1_error)
63721   __Pyx_GOTREF(__pyx_t_2);
63722   __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 587, __pyx_L1_error)
63723   __Pyx_GOTREF(__pyx_t_3);
63724   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
63725   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
63726   __pyx_r = __pyx_t_3;
63727   __pyx_t_3 = 0;
63728   goto __pyx_L0;
63729 
63730   /* "View.MemoryView":586
63731  *
63732  *     @property
63733  *     def nbytes(self):             # <<<<<<<<<<<<<<
63734  *         return self.size * self.view.itemsize
63735  *
63736  */
63737 
63738   /* function exit code */
63739   __pyx_L1_error:;
63740   __Pyx_XDECREF(__pyx_t_1);
63741   __Pyx_XDECREF(__pyx_t_2);
63742   __Pyx_XDECREF(__pyx_t_3);
63743   __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
63744   __pyx_r = NULL;
63745   __pyx_L0:;
63746   __Pyx_XGIVEREF(__pyx_r);
63747   __Pyx_RefNannyFinishContext();
63748   return __pyx_r;
63749 }
63750 
63751 /* "View.MemoryView":590
63752  *
63753  *     @property
63754  *     def size(self):             # <<<<<<<<<<<<<<
63755  *         if self._size is None:
63756  *             result = 1
63757  */
63758 
63759 /* Python wrapper */
63760 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/
63761 static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) {
63762   PyObject *__pyx_r = 0;
63763   __Pyx_RefNannyDeclarations
63764   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
63765   __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
63766 
63767   /* function exit code */
63768   __Pyx_RefNannyFinishContext();
63769   return __pyx_r;
63770 }
63771 
63772 static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
63773   PyObject *__pyx_v_result = NULL;
63774   PyObject *__pyx_v_length = NULL;
63775   PyObject *__pyx_r = NULL;
63776   __Pyx_RefNannyDeclarations
63777   int __pyx_t_1;
63778   int __pyx_t_2;
63779   Py_ssize_t *__pyx_t_3;
63780   Py_ssize_t *__pyx_t_4;
63781   Py_ssize_t *__pyx_t_5;
63782   PyObject *__pyx_t_6 = NULL;
63783   __Pyx_RefNannySetupContext("__get__", 0);
63784 
63785   /* "View.MemoryView":591
63786  *     @property
63787  *     def size(self):
63788  *         if self._size is None:             # <<<<<<<<<<<<<<
63789  *             result = 1
63790  *
63791  */
63792   __pyx_t_1 = (__pyx_v_self->_size == Py_None);
63793   __pyx_t_2 = (__pyx_t_1 != 0);
63794   if (__pyx_t_2) {
63795 
63796     /* "View.MemoryView":592
63797  *     def size(self):
63798  *         if self._size is None:
63799  *             result = 1             # <<<<<<<<<<<<<<
63800  *
63801  *             for length in self.view.shape[:self.view.ndim]:
63802  */
63803     __Pyx_INCREF(__pyx_int_1);
63804     __pyx_v_result = __pyx_int_1;
63805 
63806     /* "View.MemoryView":594
63807  *             result = 1
63808  *
63809  *             for length in self.view.shape[:self.view.ndim]:             # <<<<<<<<<<<<<<
63810  *                 result *= length
63811  *
63812  */
63813     __pyx_t_4 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim);
63814     for (__pyx_t_5 = __pyx_v_self->view.shape; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) {
63815       __pyx_t_3 = __pyx_t_5;
63816       __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 594, __pyx_L1_error)
63817       __Pyx_GOTREF(__pyx_t_6);
63818       __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_6);
63819       __pyx_t_6 = 0;
63820 
63821       /* "View.MemoryView":595
63822  *
63823  *             for length in self.view.shape[:self.view.ndim]:
63824  *                 result *= length             # <<<<<<<<<<<<<<
63825  *
63826  *             self._size = result
63827  */
63828       __pyx_t_6 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 595, __pyx_L1_error)
63829       __Pyx_GOTREF(__pyx_t_6);
63830       __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_6);
63831       __pyx_t_6 = 0;
63832     }
63833 
63834     /* "View.MemoryView":597
63835  *                 result *= length
63836  *
63837  *             self._size = result             # <<<<<<<<<<<<<<
63838  *
63839  *         return self._size
63840  */
63841     __Pyx_INCREF(__pyx_v_result);
63842     __Pyx_GIVEREF(__pyx_v_result);
63843     __Pyx_GOTREF(__pyx_v_self->_size);
63844     __Pyx_DECREF(__pyx_v_self->_size);
63845     __pyx_v_self->_size = __pyx_v_result;
63846 
63847     /* "View.MemoryView":591
63848  *     @property
63849  *     def size(self):
63850  *         if self._size is None:             # <<<<<<<<<<<<<<
63851  *             result = 1
63852  *
63853  */
63854   }
63855 
63856   /* "View.MemoryView":599
63857  *             self._size = result
63858  *
63859  *         return self._size             # <<<<<<<<<<<<<<
63860  *
63861  *     def __len__(self):
63862  */
63863   __Pyx_XDECREF(__pyx_r);
63864   __Pyx_INCREF(__pyx_v_self->_size);
63865   __pyx_r = __pyx_v_self->_size;
63866   goto __pyx_L0;
63867 
63868   /* "View.MemoryView":590
63869  *
63870  *     @property
63871  *     def size(self):             # <<<<<<<<<<<<<<
63872  *         if self._size is None:
63873  *             result = 1
63874  */
63875 
63876   /* function exit code */
63877   __pyx_L1_error:;
63878   __Pyx_XDECREF(__pyx_t_6);
63879   __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
63880   __pyx_r = NULL;
63881   __pyx_L0:;
63882   __Pyx_XDECREF(__pyx_v_result);
63883   __Pyx_XDECREF(__pyx_v_length);
63884   __Pyx_XGIVEREF(__pyx_r);
63885   __Pyx_RefNannyFinishContext();
63886   return __pyx_r;
63887 }
63888 
63889 /* "View.MemoryView":601
63890  *         return self._size
63891  *
63892  *     def __len__(self):             # <<<<<<<<<<<<<<
63893  *         if self.view.ndim >= 1:
63894  *             return self.view.shape[0]
63895  */
63896 
63897 /* Python wrapper */
63898 static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/
63899 static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) {
63900   Py_ssize_t __pyx_r;
63901   __Pyx_RefNannyDeclarations
63902   __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
63903   __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self));
63904 
63905   /* function exit code */
63906   __Pyx_RefNannyFinishContext();
63907   return __pyx_r;
63908 }
63909 
63910 static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) {
63911   Py_ssize_t __pyx_r;
63912   __Pyx_RefNannyDeclarations
63913   int __pyx_t_1;
63914   __Pyx_RefNannySetupContext("__len__", 0);
63915 
63916   /* "View.MemoryView":602
63917  *
63918  *     def __len__(self):
63919  *         if self.view.ndim >= 1:             # <<<<<<<<<<<<<<
63920  *             return self.view.shape[0]
63921  *
63922  */
63923   __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0);
63924   if (__pyx_t_1) {
63925 
63926     /* "View.MemoryView":603
63927  *     def __len__(self):
63928  *         if self.view.ndim >= 1:
63929  *             return self.view.shape[0]             # <<<<<<<<<<<<<<
63930  *
63931  *         return 0
63932  */
63933     __pyx_r = (__pyx_v_self->view.shape[0]);
63934     goto __pyx_L0;
63935 
63936     /* "View.MemoryView":602
63937  *
63938  *     def __len__(self):
63939  *         if self.view.ndim >= 1:             # <<<<<<<<<<<<<<
63940  *             return self.view.shape[0]
63941  *
63942  */
63943   }
63944 
63945   /* "View.MemoryView":605
63946  *             return self.view.shape[0]
63947  *
63948  *         return 0             # <<<<<<<<<<<<<<
63949  *
63950  *     def __repr__(self):
63951  */
63952   __pyx_r = 0;
63953   goto __pyx_L0;
63954 
63955   /* "View.MemoryView":601
63956  *         return self._size
63957  *
63958  *     def __len__(self):             # <<<<<<<<<<<<<<
63959  *         if self.view.ndim >= 1:
63960  *             return self.view.shape[0]
63961  */
63962 
63963   /* function exit code */
63964   __pyx_L0:;
63965   __Pyx_RefNannyFinishContext();
63966   return __pyx_r;
63967 }
63968 
63969 /* "View.MemoryView":607
63970  *         return 0
63971  *
63972  *     def __repr__(self):             # <<<<<<<<<<<<<<
63973  *         return "<MemoryView of %r at 0x%x>" % (self.base.__class__.__name__,
63974  *                                                id(self))
63975  */
63976 
63977 /* Python wrapper */
63978 static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/
63979 static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) {
63980   PyObject *__pyx_r = 0;
63981   __Pyx_RefNannyDeclarations
63982   __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
63983   __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self));
63984 
63985   /* function exit code */
63986   __Pyx_RefNannyFinishContext();
63987   return __pyx_r;
63988 }
63989 
63990 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) {
63991   PyObject *__pyx_r = NULL;
63992   __Pyx_RefNannyDeclarations
63993   PyObject *__pyx_t_1 = NULL;
63994   PyObject *__pyx_t_2 = NULL;
63995   PyObject *__pyx_t_3 = NULL;
63996   __Pyx_RefNannySetupContext("__repr__", 0);
63997 
63998   /* "View.MemoryView":608
63999  *
64000  *     def __repr__(self):
64001  *         return "<MemoryView of %r at 0x%x>" % (self.base.__class__.__name__,             # <<<<<<<<<<<<<<
64002  *                                                id(self))
64003  *
64004  */
64005   __Pyx_XDECREF(__pyx_r);
64006   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 608, __pyx_L1_error)
64007   __Pyx_GOTREF(__pyx_t_1);
64008   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 608, __pyx_L1_error)
64009   __Pyx_GOTREF(__pyx_t_2);
64010   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
64011   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 608, __pyx_L1_error)
64012   __Pyx_GOTREF(__pyx_t_1);
64013   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
64014 
64015   /* "View.MemoryView":609
64016  *     def __repr__(self):
64017  *         return "<MemoryView of %r at 0x%x>" % (self.base.__class__.__name__,
64018  *                                                id(self))             # <<<<<<<<<<<<<<
64019  *
64020  *     def __str__(self):
64021  */
64022   __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 609, __pyx_L1_error)
64023   __Pyx_GOTREF(__pyx_t_2);
64024 
64025   /* "View.MemoryView":608
64026  *
64027  *     def __repr__(self):
64028  *         return "<MemoryView of %r at 0x%x>" % (self.base.__class__.__name__,             # <<<<<<<<<<<<<<
64029  *                                                id(self))
64030  *
64031  */
64032   __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 608, __pyx_L1_error)
64033   __Pyx_GOTREF(__pyx_t_3);
64034   __Pyx_GIVEREF(__pyx_t_1);
64035   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
64036   __Pyx_GIVEREF(__pyx_t_2);
64037   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
64038   __pyx_t_1 = 0;
64039   __pyx_t_2 = 0;
64040   __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 608, __pyx_L1_error)
64041   __Pyx_GOTREF(__pyx_t_2);
64042   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
64043   __pyx_r = __pyx_t_2;
64044   __pyx_t_2 = 0;
64045   goto __pyx_L0;
64046 
64047   /* "View.MemoryView":607
64048  *         return 0
64049  *
64050  *     def __repr__(self):             # <<<<<<<<<<<<<<
64051  *         return "<MemoryView of %r at 0x%x>" % (self.base.__class__.__name__,
64052  *                                                id(self))
64053  */
64054 
64055   /* function exit code */
64056   __pyx_L1_error:;
64057   __Pyx_XDECREF(__pyx_t_1);
64058   __Pyx_XDECREF(__pyx_t_2);
64059   __Pyx_XDECREF(__pyx_t_3);
64060   __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
64061   __pyx_r = NULL;
64062   __pyx_L0:;
64063   __Pyx_XGIVEREF(__pyx_r);
64064   __Pyx_RefNannyFinishContext();
64065   return __pyx_r;
64066 }
64067 
64068 /* "View.MemoryView":611
64069  *                                                id(self))
64070  *
64071  *     def __str__(self):             # <<<<<<<<<<<<<<
64072  *         return "<MemoryView of %r object>" % (self.base.__class__.__name__,)
64073  *
64074  */
64075 
64076 /* Python wrapper */
64077 static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/
64078 static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) {
64079   PyObject *__pyx_r = 0;
64080   __Pyx_RefNannyDeclarations
64081   __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
64082   __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self));
64083 
64084   /* function exit code */
64085   __Pyx_RefNannyFinishContext();
64086   return __pyx_r;
64087 }
64088 
64089 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) {
64090   PyObject *__pyx_r = NULL;
64091   __Pyx_RefNannyDeclarations
64092   PyObject *__pyx_t_1 = NULL;
64093   PyObject *__pyx_t_2 = NULL;
64094   __Pyx_RefNannySetupContext("__str__", 0);
64095 
64096   /* "View.MemoryView":612
64097  *
64098  *     def __str__(self):
64099  *         return "<MemoryView of %r object>" % (self.base.__class__.__name__,)             # <<<<<<<<<<<<<<
64100  *
64101  *
64102  */
64103   __Pyx_XDECREF(__pyx_r);
64104   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 612, __pyx_L1_error)
64105   __Pyx_GOTREF(__pyx_t_1);
64106   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 612, __pyx_L1_error)
64107   __Pyx_GOTREF(__pyx_t_2);
64108   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
64109   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 612, __pyx_L1_error)
64110   __Pyx_GOTREF(__pyx_t_1);
64111   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
64112   __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 612, __pyx_L1_error)
64113   __Pyx_GOTREF(__pyx_t_2);
64114   __Pyx_GIVEREF(__pyx_t_1);
64115   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
64116   __pyx_t_1 = 0;
64117   __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 612, __pyx_L1_error)
64118   __Pyx_GOTREF(__pyx_t_1);
64119   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
64120   __pyx_r = __pyx_t_1;
64121   __pyx_t_1 = 0;
64122   goto __pyx_L0;
64123 
64124   /* "View.MemoryView":611
64125  *                                                id(self))
64126  *
64127  *     def __str__(self):             # <<<<<<<<<<<<<<
64128  *         return "<MemoryView of %r object>" % (self.base.__class__.__name__,)
64129  *
64130  */
64131 
64132   /* function exit code */
64133   __pyx_L1_error:;
64134   __Pyx_XDECREF(__pyx_t_1);
64135   __Pyx_XDECREF(__pyx_t_2);
64136   __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
64137   __pyx_r = NULL;
64138   __pyx_L0:;
64139   __Pyx_XGIVEREF(__pyx_r);
64140   __Pyx_RefNannyFinishContext();
64141   return __pyx_r;
64142 }
64143 
64144 /* "View.MemoryView":615
64145  *
64146  *
64147  *     def is_c_contig(self):             # <<<<<<<<<<<<<<
64148  *         cdef __Pyx_memviewslice *mslice
64149  *         cdef __Pyx_memviewslice tmp
64150  */
64151 
64152 /* Python wrapper */
64153 static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
64154 static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
64155   PyObject *__pyx_r = 0;
64156   __Pyx_RefNannyDeclarations
64157   __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0);
64158   __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self));
64159 
64160   /* function exit code */
64161   __Pyx_RefNannyFinishContext();
64162   return __pyx_r;
64163 }
64164 
64165 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) {
64166   __Pyx_memviewslice *__pyx_v_mslice;
64167   __Pyx_memviewslice __pyx_v_tmp;
64168   PyObject *__pyx_r = NULL;
64169   __Pyx_RefNannyDeclarations
64170   PyObject *__pyx_t_1 = NULL;
64171   __Pyx_RefNannySetupContext("is_c_contig", 0);
64172 
64173   /* "View.MemoryView":618
64174  *         cdef __Pyx_memviewslice *mslice
64175  *         cdef __Pyx_memviewslice tmp
64176  *         mslice = get_slice_from_memview(self, &tmp)             # <<<<<<<<<<<<<<
64177  *         return slice_is_contig(mslice[0], 'C', self.view.ndim)
64178  *
64179  */
64180   __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp));
64181 
64182   /* "View.MemoryView":619
64183  *         cdef __Pyx_memviewslice tmp
64184  *         mslice = get_slice_from_memview(self, &tmp)
64185  *         return slice_is_contig(mslice[0], 'C', self.view.ndim)             # <<<<<<<<<<<<<<
64186  *
64187  *     def is_f_contig(self):
64188  */
64189   __Pyx_XDECREF(__pyx_r);
64190   __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 619, __pyx_L1_error)
64191   __Pyx_GOTREF(__pyx_t_1);
64192   __pyx_r = __pyx_t_1;
64193   __pyx_t_1 = 0;
64194   goto __pyx_L0;
64195 
64196   /* "View.MemoryView":615
64197  *
64198  *
64199  *     def is_c_contig(self):             # <<<<<<<<<<<<<<
64200  *         cdef __Pyx_memviewslice *mslice
64201  *         cdef __Pyx_memviewslice tmp
64202  */
64203 
64204   /* function exit code */
64205   __pyx_L1_error:;
64206   __Pyx_XDECREF(__pyx_t_1);
64207   __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
64208   __pyx_r = NULL;
64209   __pyx_L0:;
64210   __Pyx_XGIVEREF(__pyx_r);
64211   __Pyx_RefNannyFinishContext();
64212   return __pyx_r;
64213 }
64214 
64215 /* "View.MemoryView":621
64216  *         return slice_is_contig(mslice[0], 'C', self.view.ndim)
64217  *
64218  *     def is_f_contig(self):             # <<<<<<<<<<<<<<
64219  *         cdef __Pyx_memviewslice *mslice
64220  *         cdef __Pyx_memviewslice tmp
64221  */
64222 
64223 /* Python wrapper */
64224 static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
64225 static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
64226   PyObject *__pyx_r = 0;
64227   __Pyx_RefNannyDeclarations
64228   __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0);
64229   __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self));
64230 
64231   /* function exit code */
64232   __Pyx_RefNannyFinishContext();
64233   return __pyx_r;
64234 }
64235 
64236 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) {
64237   __Pyx_memviewslice *__pyx_v_mslice;
64238   __Pyx_memviewslice __pyx_v_tmp;
64239   PyObject *__pyx_r = NULL;
64240   __Pyx_RefNannyDeclarations
64241   PyObject *__pyx_t_1 = NULL;
64242   __Pyx_RefNannySetupContext("is_f_contig", 0);
64243 
64244   /* "View.MemoryView":624
64245  *         cdef __Pyx_memviewslice *mslice
64246  *         cdef __Pyx_memviewslice tmp
64247  *         mslice = get_slice_from_memview(self, &tmp)             # <<<<<<<<<<<<<<
64248  *         return slice_is_contig(mslice[0], 'F', self.view.ndim)
64249  *
64250  */
64251   __pyx_v_mslice = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp));
64252 
64253   /* "View.MemoryView":625
64254  *         cdef __Pyx_memviewslice tmp
64255  *         mslice = get_slice_from_memview(self, &tmp)
64256  *         return slice_is_contig(mslice[0], 'F', self.view.ndim)             # <<<<<<<<<<<<<<
64257  *
64258  *     def copy(self):
64259  */
64260   __Pyx_XDECREF(__pyx_r);
64261   __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 625, __pyx_L1_error)
64262   __Pyx_GOTREF(__pyx_t_1);
64263   __pyx_r = __pyx_t_1;
64264   __pyx_t_1 = 0;
64265   goto __pyx_L0;
64266 
64267   /* "View.MemoryView":621
64268  *         return slice_is_contig(mslice[0], 'C', self.view.ndim)
64269  *
64270  *     def is_f_contig(self):             # <<<<<<<<<<<<<<
64271  *         cdef __Pyx_memviewslice *mslice
64272  *         cdef __Pyx_memviewslice tmp
64273  */
64274 
64275   /* function exit code */
64276   __pyx_L1_error:;
64277   __Pyx_XDECREF(__pyx_t_1);
64278   __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
64279   __pyx_r = NULL;
64280   __pyx_L0:;
64281   __Pyx_XGIVEREF(__pyx_r);
64282   __Pyx_RefNannyFinishContext();
64283   return __pyx_r;
64284 }
64285 
64286 /* "View.MemoryView":627
64287  *         return slice_is_contig(mslice[0], 'F', self.view.ndim)
64288  *
64289  *     def copy(self):             # <<<<<<<<<<<<<<
64290  *         cdef __Pyx_memviewslice mslice
64291  *         cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS
64292  */
64293 
64294 /* Python wrapper */
64295 static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
64296 static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
64297   PyObject *__pyx_r = 0;
64298   __Pyx_RefNannyDeclarations
64299   __Pyx_RefNannySetupContext("copy (wrapper)", 0);
64300   __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self));
64301 
64302   /* function exit code */
64303   __Pyx_RefNannyFinishContext();
64304   return __pyx_r;
64305 }
64306 
64307 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) {
64308   __Pyx_memviewslice __pyx_v_mslice;
64309   int __pyx_v_flags;
64310   PyObject *__pyx_r = NULL;
64311   __Pyx_RefNannyDeclarations
64312   __Pyx_memviewslice __pyx_t_1;
64313   PyObject *__pyx_t_2 = NULL;
64314   __Pyx_RefNannySetupContext("copy", 0);
64315 
64316   /* "View.MemoryView":629
64317  *     def copy(self):
64318  *         cdef __Pyx_memviewslice mslice
64319  *         cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS             # <<<<<<<<<<<<<<
64320  *
64321  *         slice_copy(self, &mslice)
64322  */
64323   __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS));
64324 
64325   /* "View.MemoryView":631
64326  *         cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS
64327  *
64328  *         slice_copy(self, &mslice)             # <<<<<<<<<<<<<<
64329  *         mslice = slice_copy_contig(&mslice, "c", self.view.ndim,
64330  *                                    self.view.itemsize,
64331  */
64332   __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice));
64333 
64334   /* "View.MemoryView":632
64335  *
64336  *         slice_copy(self, &mslice)
64337  *         mslice = slice_copy_contig(&mslice, "c", self.view.ndim,             # <<<<<<<<<<<<<<
64338  *                                    self.view.itemsize,
64339  *                                    flags|PyBUF_C_CONTIGUOUS,
64340  */
64341   __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 632, __pyx_L1_error)
64342   __pyx_v_mslice = __pyx_t_1;
64343 
64344   /* "View.MemoryView":637
64345  *                                    self.dtype_is_object)
64346  *
64347  *         return memoryview_copy_from_slice(self, &mslice)             # <<<<<<<<<<<<<<
64348  *
64349  *     def copy_fortran(self):
64350  */
64351   __Pyx_XDECREF(__pyx_r);
64352   __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 637, __pyx_L1_error)
64353   __Pyx_GOTREF(__pyx_t_2);
64354   __pyx_r = __pyx_t_2;
64355   __pyx_t_2 = 0;
64356   goto __pyx_L0;
64357 
64358   /* "View.MemoryView":627
64359  *         return slice_is_contig(mslice[0], 'F', self.view.ndim)
64360  *
64361  *     def copy(self):             # <<<<<<<<<<<<<<
64362  *         cdef __Pyx_memviewslice mslice
64363  *         cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS
64364  */
64365 
64366   /* function exit code */
64367   __pyx_L1_error:;
64368   __Pyx_XDECREF(__pyx_t_2);
64369   __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
64370   __pyx_r = NULL;
64371   __pyx_L0:;
64372   __Pyx_XGIVEREF(__pyx_r);
64373   __Pyx_RefNannyFinishContext();
64374   return __pyx_r;
64375 }
64376 
64377 /* "View.MemoryView":639
64378  *         return memoryview_copy_from_slice(self, &mslice)
64379  *
64380  *     def copy_fortran(self):             # <<<<<<<<<<<<<<
64381  *         cdef __Pyx_memviewslice src, dst
64382  *         cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS
64383  */
64384 
64385 /* Python wrapper */
64386 static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
64387 static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
64388   PyObject *__pyx_r = 0;
64389   __Pyx_RefNannyDeclarations
64390   __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0);
64391   __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self));
64392 
64393   /* function exit code */
64394   __Pyx_RefNannyFinishContext();
64395   return __pyx_r;
64396 }
64397 
64398 static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) {
64399   __Pyx_memviewslice __pyx_v_src;
64400   __Pyx_memviewslice __pyx_v_dst;
64401   int __pyx_v_flags;
64402   PyObject *__pyx_r = NULL;
64403   __Pyx_RefNannyDeclarations
64404   __Pyx_memviewslice __pyx_t_1;
64405   PyObject *__pyx_t_2 = NULL;
64406   __Pyx_RefNannySetupContext("copy_fortran", 0);
64407 
64408   /* "View.MemoryView":641
64409  *     def copy_fortran(self):
64410  *         cdef __Pyx_memviewslice src, dst
64411  *         cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS             # <<<<<<<<<<<<<<
64412  *
64413  *         slice_copy(self, &src)
64414  */
64415   __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS));
64416 
64417   /* "View.MemoryView":643
64418  *         cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS
64419  *
64420  *         slice_copy(self, &src)             # <<<<<<<<<<<<<<
64421  *         dst = slice_copy_contig(&src, "fortran", self.view.ndim,
64422  *                                 self.view.itemsize,
64423  */
64424   __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src));
64425 
64426   /* "View.MemoryView":644
64427  *
64428  *         slice_copy(self, &src)
64429  *         dst = slice_copy_contig(&src, "fortran", self.view.ndim,             # <<<<<<<<<<<<<<
64430  *                                 self.view.itemsize,
64431  *                                 flags|PyBUF_F_CONTIGUOUS,
64432  */
64433   __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 644, __pyx_L1_error)
64434   __pyx_v_dst = __pyx_t_1;
64435 
64436   /* "View.MemoryView":649
64437  *                                 self.dtype_is_object)
64438  *
64439  *         return memoryview_copy_from_slice(self, &dst)             # <<<<<<<<<<<<<<
64440  *
64441  *
64442  */
64443   __Pyx_XDECREF(__pyx_r);
64444   __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 649, __pyx_L1_error)
64445   __Pyx_GOTREF(__pyx_t_2);
64446   __pyx_r = __pyx_t_2;
64447   __pyx_t_2 = 0;
64448   goto __pyx_L0;
64449 
64450   /* "View.MemoryView":639
64451  *         return memoryview_copy_from_slice(self, &mslice)
64452  *
64453  *     def copy_fortran(self):             # <<<<<<<<<<<<<<
64454  *         cdef __Pyx_memviewslice src, dst
64455  *         cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS
64456  */
64457 
64458   /* function exit code */
64459   __pyx_L1_error:;
64460   __Pyx_XDECREF(__pyx_t_2);
64461   __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __pyx_clineno, __pyx_lineno, __pyx_filename);
64462   __pyx_r = NULL;
64463   __pyx_L0:;
64464   __Pyx_XGIVEREF(__pyx_r);
64465   __Pyx_RefNannyFinishContext();
64466   return __pyx_r;
64467 }
64468 
64469 /* "(tree fragment)":1
64470  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
64471  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
64472  * def __setstate_cython__(self, __pyx_state):
64473  */
64474 
64475 /* Python wrapper */
64476 static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
64477 static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
64478   PyObject *__pyx_r = 0;
64479   __Pyx_RefNannyDeclarations
64480   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
64481   __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self));
64482 
64483   /* function exit code */
64484   __Pyx_RefNannyFinishContext();
64485   return __pyx_r;
64486 }
64487 
64488 static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self) {
64489   PyObject *__pyx_r = NULL;
64490   __Pyx_RefNannyDeclarations
64491   PyObject *__pyx_t_1 = NULL;
64492   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
64493 
64494   /* "(tree fragment)":2
64495  * def __reduce_cython__(self):
64496  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
64497  * def __setstate_cython__(self, __pyx_state):
64498  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
64499  */
64500   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__100, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
64501   __Pyx_GOTREF(__pyx_t_1);
64502   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
64503   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
64504   __PYX_ERR(5, 2, __pyx_L1_error)
64505 
64506   /* "(tree fragment)":1
64507  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
64508  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
64509  * def __setstate_cython__(self, __pyx_state):
64510  */
64511 
64512   /* function exit code */
64513   __pyx_L1_error:;
64514   __Pyx_XDECREF(__pyx_t_1);
64515   __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
64516   __pyx_r = NULL;
64517   __Pyx_XGIVEREF(__pyx_r);
64518   __Pyx_RefNannyFinishContext();
64519   return __pyx_r;
64520 }
64521 
64522 /* "(tree fragment)":3
64523  * def __reduce_cython__(self):
64524  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
64525  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
64526  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
64527  */
64528 
64529 /* Python wrapper */
64530 static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
64531 static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
64532   PyObject *__pyx_r = 0;
64533   __Pyx_RefNannyDeclarations
64534   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
64535   __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
64536 
64537   /* function exit code */
64538   __Pyx_RefNannyFinishContext();
64539   return __pyx_r;
64540 }
64541 
64542 static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
64543   PyObject *__pyx_r = NULL;
64544   __Pyx_RefNannyDeclarations
64545   PyObject *__pyx_t_1 = NULL;
64546   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
64547 
64548   /* "(tree fragment)":4
64549  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
64550  * def __setstate_cython__(self, __pyx_state):
64551  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
64552  */
64553   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__101, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
64554   __Pyx_GOTREF(__pyx_t_1);
64555   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
64556   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
64557   __PYX_ERR(5, 4, __pyx_L1_error)
64558 
64559   /* "(tree fragment)":3
64560  * def __reduce_cython__(self):
64561  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
64562  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
64563  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
64564  */
64565 
64566   /* function exit code */
64567   __pyx_L1_error:;
64568   __Pyx_XDECREF(__pyx_t_1);
64569   __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
64570   __pyx_r = NULL;
64571   __Pyx_XGIVEREF(__pyx_r);
64572   __Pyx_RefNannyFinishContext();
64573   return __pyx_r;
64574 }
64575 
64576 /* "View.MemoryView":653
64577  *
64578  * @cname('__pyx_memoryview_new')
64579  * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo):             # <<<<<<<<<<<<<<
64580  *     cdef memoryview result = memoryview(o, flags, dtype_is_object)
64581  *     result.typeinfo = typeinfo
64582  */
64583 
64584 static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) {
64585   struct __pyx_memoryview_obj *__pyx_v_result = 0;
64586   PyObject *__pyx_r = NULL;
64587   __Pyx_RefNannyDeclarations
64588   PyObject *__pyx_t_1 = NULL;
64589   PyObject *__pyx_t_2 = NULL;
64590   PyObject *__pyx_t_3 = NULL;
64591   __Pyx_RefNannySetupContext("memoryview_cwrapper", 0);
64592 
64593   /* "View.MemoryView":654
64594  * @cname('__pyx_memoryview_new')
64595  * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo):
64596  *     cdef memoryview result = memoryview(o, flags, dtype_is_object)             # <<<<<<<<<<<<<<
64597  *     result.typeinfo = typeinfo
64598  *     return result
64599  */
64600   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 654, __pyx_L1_error)
64601   __Pyx_GOTREF(__pyx_t_1);
64602   __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 654, __pyx_L1_error)
64603   __Pyx_GOTREF(__pyx_t_2);
64604   __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 654, __pyx_L1_error)
64605   __Pyx_GOTREF(__pyx_t_3);
64606   __Pyx_INCREF(__pyx_v_o);
64607   __Pyx_GIVEREF(__pyx_v_o);
64608   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o);
64609   __Pyx_GIVEREF(__pyx_t_1);
64610   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
64611   __Pyx_GIVEREF(__pyx_t_2);
64612   PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
64613   __pyx_t_1 = 0;
64614   __pyx_t_2 = 0;
64615   __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 654, __pyx_L1_error)
64616   __Pyx_GOTREF(__pyx_t_2);
64617   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
64618   __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2);
64619   __pyx_t_2 = 0;
64620 
64621   /* "View.MemoryView":655
64622  * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo):
64623  *     cdef memoryview result = memoryview(o, flags, dtype_is_object)
64624  *     result.typeinfo = typeinfo             # <<<<<<<<<<<<<<
64625  *     return result
64626  *
64627  */
64628   __pyx_v_result->typeinfo = __pyx_v_typeinfo;
64629 
64630   /* "View.MemoryView":656
64631  *     cdef memoryview result = memoryview(o, flags, dtype_is_object)
64632  *     result.typeinfo = typeinfo
64633  *     return result             # <<<<<<<<<<<<<<
64634  *
64635  * @cname('__pyx_memoryview_check')
64636  */
64637   __Pyx_XDECREF(__pyx_r);
64638   __Pyx_INCREF(((PyObject *)__pyx_v_result));
64639   __pyx_r = ((PyObject *)__pyx_v_result);
64640   goto __pyx_L0;
64641 
64642   /* "View.MemoryView":653
64643  *
64644  * @cname('__pyx_memoryview_new')
64645  * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo):             # <<<<<<<<<<<<<<
64646  *     cdef memoryview result = memoryview(o, flags, dtype_is_object)
64647  *     result.typeinfo = typeinfo
64648  */
64649 
64650   /* function exit code */
64651   __pyx_L1_error:;
64652   __Pyx_XDECREF(__pyx_t_1);
64653   __Pyx_XDECREF(__pyx_t_2);
64654   __Pyx_XDECREF(__pyx_t_3);
64655   __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename);
64656   __pyx_r = 0;
64657   __pyx_L0:;
64658   __Pyx_XDECREF((PyObject *)__pyx_v_result);
64659   __Pyx_XGIVEREF(__pyx_r);
64660   __Pyx_RefNannyFinishContext();
64661   return __pyx_r;
64662 }
64663 
64664 /* "View.MemoryView":659
64665  *
64666  * @cname('__pyx_memoryview_check')
64667  * cdef inline bint memoryview_check(object o):             # <<<<<<<<<<<<<<
64668  *     return isinstance(o, memoryview)
64669  *
64670  */
64671 
64672 static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) {
64673   int __pyx_r;
64674   __Pyx_RefNannyDeclarations
64675   int __pyx_t_1;
64676   __Pyx_RefNannySetupContext("memoryview_check", 0);
64677 
64678   /* "View.MemoryView":660
64679  * @cname('__pyx_memoryview_check')
64680  * cdef inline bint memoryview_check(object o):
64681  *     return isinstance(o, memoryview)             # <<<<<<<<<<<<<<
64682  *
64683  * cdef tuple _unellipsify(object index, int ndim):
64684  */
64685   __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type);
64686   __pyx_r = __pyx_t_1;
64687   goto __pyx_L0;
64688 
64689   /* "View.MemoryView":659
64690  *
64691  * @cname('__pyx_memoryview_check')
64692  * cdef inline bint memoryview_check(object o):             # <<<<<<<<<<<<<<
64693  *     return isinstance(o, memoryview)
64694  *
64695  */
64696 
64697   /* function exit code */
64698   __pyx_L0:;
64699   __Pyx_RefNannyFinishContext();
64700   return __pyx_r;
64701 }
64702 
64703 /* "View.MemoryView":662
64704  *     return isinstance(o, memoryview)
64705  *
64706  * cdef tuple _unellipsify(object index, int ndim):             # <<<<<<<<<<<<<<
64707  *     """
64708  *     Replace all ellipses with full slices and fill incomplete indices with
64709  */
64710 
64711 static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) {
64712   PyObject *__pyx_v_tup = NULL;
64713   PyObject *__pyx_v_result = NULL;
64714   int __pyx_v_have_slices;
64715   int __pyx_v_seen_ellipsis;
64716   CYTHON_UNUSED PyObject *__pyx_v_idx = NULL;
64717   PyObject *__pyx_v_item = NULL;
64718   Py_ssize_t __pyx_v_nslices;
64719   PyObject *__pyx_r = NULL;
64720   __Pyx_RefNannyDeclarations
64721   int __pyx_t_1;
64722   int __pyx_t_2;
64723   PyObject *__pyx_t_3 = NULL;
64724   PyObject *__pyx_t_4 = NULL;
64725   Py_ssize_t __pyx_t_5;
64726   PyObject *(*__pyx_t_6)(PyObject *);
64727   PyObject *__pyx_t_7 = NULL;
64728   Py_ssize_t __pyx_t_8;
64729   int __pyx_t_9;
64730   int __pyx_t_10;
64731   PyObject *__pyx_t_11 = NULL;
64732   __Pyx_RefNannySetupContext("_unellipsify", 0);
64733 
64734   /* "View.MemoryView":667
64735  *     full slices.
64736  *     """
64737  *     if not isinstance(index, tuple):             # <<<<<<<<<<<<<<
64738  *         tup = (index,)
64739  *     else:
64740  */
64741   __pyx_t_1 = PyTuple_Check(__pyx_v_index);
64742   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
64743   if (__pyx_t_2) {
64744 
64745     /* "View.MemoryView":668
64746  *     """
64747  *     if not isinstance(index, tuple):
64748  *         tup = (index,)             # <<<<<<<<<<<<<<
64749  *     else:
64750  *         tup = index
64751  */
64752     __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 668, __pyx_L1_error)
64753     __Pyx_GOTREF(__pyx_t_3);
64754     __Pyx_INCREF(__pyx_v_index);
64755     __Pyx_GIVEREF(__pyx_v_index);
64756     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index);
64757     __pyx_v_tup = __pyx_t_3;
64758     __pyx_t_3 = 0;
64759 
64760     /* "View.MemoryView":667
64761  *     full slices.
64762  *     """
64763  *     if not isinstance(index, tuple):             # <<<<<<<<<<<<<<
64764  *         tup = (index,)
64765  *     else:
64766  */
64767     goto __pyx_L3;
64768   }
64769 
64770   /* "View.MemoryView":670
64771  *         tup = (index,)
64772  *     else:
64773  *         tup = index             # <<<<<<<<<<<<<<
64774  *
64775  *     result = []
64776  */
64777   /*else*/ {
64778     __Pyx_INCREF(__pyx_v_index);
64779     __pyx_v_tup = __pyx_v_index;
64780   }
64781   __pyx_L3:;
64782 
64783   /* "View.MemoryView":672
64784  *         tup = index
64785  *
64786  *     result = []             # <<<<<<<<<<<<<<
64787  *     have_slices = False
64788  *     seen_ellipsis = False
64789  */
64790   __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 672, __pyx_L1_error)
64791   __Pyx_GOTREF(__pyx_t_3);
64792   __pyx_v_result = ((PyObject*)__pyx_t_3);
64793   __pyx_t_3 = 0;
64794 
64795   /* "View.MemoryView":673
64796  *
64797  *     result = []
64798  *     have_slices = False             # <<<<<<<<<<<<<<
64799  *     seen_ellipsis = False
64800  *     for idx, item in enumerate(tup):
64801  */
64802   __pyx_v_have_slices = 0;
64803 
64804   /* "View.MemoryView":674
64805  *     result = []
64806  *     have_slices = False
64807  *     seen_ellipsis = False             # <<<<<<<<<<<<<<
64808  *     for idx, item in enumerate(tup):
64809  *         if item is Ellipsis:
64810  */
64811   __pyx_v_seen_ellipsis = 0;
64812 
64813   /* "View.MemoryView":675
64814  *     have_slices = False
64815  *     seen_ellipsis = False
64816  *     for idx, item in enumerate(tup):             # <<<<<<<<<<<<<<
64817  *         if item is Ellipsis:
64818  *             if not seen_ellipsis:
64819  */
64820   __Pyx_INCREF(__pyx_int_0);
64821   __pyx_t_3 = __pyx_int_0;
64822   if (likely(PyList_CheckExact(__pyx_v_tup)) || PyTuple_CheckExact(__pyx_v_tup)) {
64823     __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
64824     __pyx_t_6 = NULL;
64825   } else {
64826     __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 675, __pyx_L1_error)
64827     __Pyx_GOTREF(__pyx_t_4);
64828     __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 675, __pyx_L1_error)
64829   }
64830   for (;;) {
64831     if (likely(!__pyx_t_6)) {
64832       if (likely(PyList_CheckExact(__pyx_t_4))) {
64833         if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
64834         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
64835         __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 675, __pyx_L1_error)
64836         #else
64837         __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 675, __pyx_L1_error)
64838         __Pyx_GOTREF(__pyx_t_7);
64839         #endif
64840       } else {
64841         if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
64842         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
64843         __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(5, 675, __pyx_L1_error)
64844         #else
64845         __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 675, __pyx_L1_error)
64846         __Pyx_GOTREF(__pyx_t_7);
64847         #endif
64848       }
64849     } else {
64850       __pyx_t_7 = __pyx_t_6(__pyx_t_4);
64851       if (unlikely(!__pyx_t_7)) {
64852         PyObject* exc_type = PyErr_Occurred();
64853         if (exc_type) {
64854           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
64855           else __PYX_ERR(5, 675, __pyx_L1_error)
64856         }
64857         break;
64858       }
64859       __Pyx_GOTREF(__pyx_t_7);
64860     }
64861     __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7);
64862     __pyx_t_7 = 0;
64863     __Pyx_INCREF(__pyx_t_3);
64864     __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3);
64865     __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 675, __pyx_L1_error)
64866     __Pyx_GOTREF(__pyx_t_7);
64867     __Pyx_DECREF(__pyx_t_3);
64868     __pyx_t_3 = __pyx_t_7;
64869     __pyx_t_7 = 0;
64870 
64871     /* "View.MemoryView":676
64872  *     seen_ellipsis = False
64873  *     for idx, item in enumerate(tup):
64874  *         if item is Ellipsis:             # <<<<<<<<<<<<<<
64875  *             if not seen_ellipsis:
64876  *                 result.extend([slice(None)] * (ndim - len(tup) + 1))
64877  */
64878     __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis);
64879     __pyx_t_1 = (__pyx_t_2 != 0);
64880     if (__pyx_t_1) {
64881 
64882       /* "View.MemoryView":677
64883  *     for idx, item in enumerate(tup):
64884  *         if item is Ellipsis:
64885  *             if not seen_ellipsis:             # <<<<<<<<<<<<<<
64886  *                 result.extend([slice(None)] * (ndim - len(tup) + 1))
64887  *                 seen_ellipsis = True
64888  */
64889       __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0);
64890       if (__pyx_t_1) {
64891 
64892         /* "View.MemoryView":678
64893  *         if item is Ellipsis:
64894  *             if not seen_ellipsis:
64895  *                 result.extend([slice(None)] * (ndim - len(tup) + 1))             # <<<<<<<<<<<<<<
64896  *                 seen_ellipsis = True
64897  *             else:
64898  */
64899         __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(5, 678, __pyx_L1_error)
64900         __pyx_t_7 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 678, __pyx_L1_error)
64901         __Pyx_GOTREF(__pyx_t_7);
64902         { Py_ssize_t __pyx_temp;
64903           for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) {
64904             __Pyx_INCREF(__pyx_slice__102);
64905             __Pyx_GIVEREF(__pyx_slice__102);
64906             PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_slice__102);
64907           }
64908         }
64909         __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 678, __pyx_L1_error)
64910         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
64911 
64912         /* "View.MemoryView":679
64913  *             if not seen_ellipsis:
64914  *                 result.extend([slice(None)] * (ndim - len(tup) + 1))
64915  *                 seen_ellipsis = True             # <<<<<<<<<<<<<<
64916  *             else:
64917  *                 result.append(slice(None))
64918  */
64919         __pyx_v_seen_ellipsis = 1;
64920 
64921         /* "View.MemoryView":677
64922  *     for idx, item in enumerate(tup):
64923  *         if item is Ellipsis:
64924  *             if not seen_ellipsis:             # <<<<<<<<<<<<<<
64925  *                 result.extend([slice(None)] * (ndim - len(tup) + 1))
64926  *                 seen_ellipsis = True
64927  */
64928         goto __pyx_L7;
64929       }
64930 
64931       /* "View.MemoryView":681
64932  *                 seen_ellipsis = True
64933  *             else:
64934  *                 result.append(slice(None))             # <<<<<<<<<<<<<<
64935  *             have_slices = True
64936  *         else:
64937  */
64938       /*else*/ {
64939         __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_slice__102); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 681, __pyx_L1_error)
64940       }
64941       __pyx_L7:;
64942 
64943       /* "View.MemoryView":682
64944  *             else:
64945  *                 result.append(slice(None))
64946  *             have_slices = True             # <<<<<<<<<<<<<<
64947  *         else:
64948  *             if not isinstance(item, slice) and not PyIndex_Check(item):
64949  */
64950       __pyx_v_have_slices = 1;
64951 
64952       /* "View.MemoryView":676
64953  *     seen_ellipsis = False
64954  *     for idx, item in enumerate(tup):
64955  *         if item is Ellipsis:             # <<<<<<<<<<<<<<
64956  *             if not seen_ellipsis:
64957  *                 result.extend([slice(None)] * (ndim - len(tup) + 1))
64958  */
64959       goto __pyx_L6;
64960     }
64961 
64962     /* "View.MemoryView":684
64963  *             have_slices = True
64964  *         else:
64965  *             if not isinstance(item, slice) and not PyIndex_Check(item):             # <<<<<<<<<<<<<<
64966  *                 raise TypeError("Cannot index with type '%s'" % type(item))
64967  *
64968  */
64969     /*else*/ {
64970       __pyx_t_2 = PySlice_Check(__pyx_v_item);
64971       __pyx_t_10 = ((!(__pyx_t_2 != 0)) != 0);
64972       if (__pyx_t_10) {
64973       } else {
64974         __pyx_t_1 = __pyx_t_10;
64975         goto __pyx_L9_bool_binop_done;
64976       }
64977       __pyx_t_10 = ((!(PyIndex_Check(__pyx_v_item) != 0)) != 0);
64978       __pyx_t_1 = __pyx_t_10;
64979       __pyx_L9_bool_binop_done:;
64980       if (unlikely(__pyx_t_1)) {
64981 
64982         /* "View.MemoryView":685
64983  *         else:
64984  *             if not isinstance(item, slice) and not PyIndex_Check(item):
64985  *                 raise TypeError("Cannot index with type '%s'" % type(item))             # <<<<<<<<<<<<<<
64986  *
64987  *             have_slices = have_slices or isinstance(item, slice)
64988  */
64989         __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 685, __pyx_L1_error)
64990         __Pyx_GOTREF(__pyx_t_7);
64991         __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 685, __pyx_L1_error)
64992         __Pyx_GOTREF(__pyx_t_11);
64993         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
64994         __Pyx_Raise(__pyx_t_11, 0, 0, 0);
64995         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
64996         __PYX_ERR(5, 685, __pyx_L1_error)
64997 
64998         /* "View.MemoryView":684
64999  *             have_slices = True
65000  *         else:
65001  *             if not isinstance(item, slice) and not PyIndex_Check(item):             # <<<<<<<<<<<<<<
65002  *                 raise TypeError("Cannot index with type '%s'" % type(item))
65003  *
65004  */
65005       }
65006 
65007       /* "View.MemoryView":687
65008  *                 raise TypeError("Cannot index with type '%s'" % type(item))
65009  *
65010  *             have_slices = have_slices or isinstance(item, slice)             # <<<<<<<<<<<<<<
65011  *             result.append(item)
65012  *
65013  */
65014       __pyx_t_10 = (__pyx_v_have_slices != 0);
65015       if (!__pyx_t_10) {
65016       } else {
65017         __pyx_t_1 = __pyx_t_10;
65018         goto __pyx_L11_bool_binop_done;
65019       }
65020       __pyx_t_10 = PySlice_Check(__pyx_v_item);
65021       __pyx_t_2 = (__pyx_t_10 != 0);
65022       __pyx_t_1 = __pyx_t_2;
65023       __pyx_L11_bool_binop_done:;
65024       __pyx_v_have_slices = __pyx_t_1;
65025 
65026       /* "View.MemoryView":688
65027  *
65028  *             have_slices = have_slices or isinstance(item, slice)
65029  *             result.append(item)             # <<<<<<<<<<<<<<
65030  *
65031  *     nslices = ndim - len(result)
65032  */
65033       __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 688, __pyx_L1_error)
65034     }
65035     __pyx_L6:;
65036 
65037     /* "View.MemoryView":675
65038  *     have_slices = False
65039  *     seen_ellipsis = False
65040  *     for idx, item in enumerate(tup):             # <<<<<<<<<<<<<<
65041  *         if item is Ellipsis:
65042  *             if not seen_ellipsis:
65043  */
65044   }
65045   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
65046   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
65047 
65048   /* "View.MemoryView":690
65049  *             result.append(item)
65050  *
65051  *     nslices = ndim - len(result)             # <<<<<<<<<<<<<<
65052  *     if nslices:
65053  *         result.extend([slice(None)] * nslices)
65054  */
65055   __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(5, 690, __pyx_L1_error)
65056   __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5);
65057 
65058   /* "View.MemoryView":691
65059  *
65060  *     nslices = ndim - len(result)
65061  *     if nslices:             # <<<<<<<<<<<<<<
65062  *         result.extend([slice(None)] * nslices)
65063  *
65064  */
65065   __pyx_t_1 = (__pyx_v_nslices != 0);
65066   if (__pyx_t_1) {
65067 
65068     /* "View.MemoryView":692
65069  *     nslices = ndim - len(result)
65070  *     if nslices:
65071  *         result.extend([slice(None)] * nslices)             # <<<<<<<<<<<<<<
65072  *
65073  *     return have_slices or nslices, tuple(result)
65074  */
65075     __pyx_t_3 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 692, __pyx_L1_error)
65076     __Pyx_GOTREF(__pyx_t_3);
65077     { Py_ssize_t __pyx_temp;
65078       for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) {
65079         __Pyx_INCREF(__pyx_slice__102);
65080         __Pyx_GIVEREF(__pyx_slice__102);
65081         PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_slice__102);
65082       }
65083     }
65084     __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 692, __pyx_L1_error)
65085     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
65086 
65087     /* "View.MemoryView":691
65088  *
65089  *     nslices = ndim - len(result)
65090  *     if nslices:             # <<<<<<<<<<<<<<
65091  *         result.extend([slice(None)] * nslices)
65092  *
65093  */
65094   }
65095 
65096   /* "View.MemoryView":694
65097  *         result.extend([slice(None)] * nslices)
65098  *
65099  *     return have_slices or nslices, tuple(result)             # <<<<<<<<<<<<<<
65100  *
65101  * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):
65102  */
65103   __Pyx_XDECREF(__pyx_r);
65104   if (!__pyx_v_have_slices) {
65105   } else {
65106     __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 694, __pyx_L1_error)
65107     __Pyx_GOTREF(__pyx_t_4);
65108     __pyx_t_3 = __pyx_t_4;
65109     __pyx_t_4 = 0;
65110     goto __pyx_L14_bool_binop_done;
65111   }
65112   __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 694, __pyx_L1_error)
65113   __Pyx_GOTREF(__pyx_t_4);
65114   __pyx_t_3 = __pyx_t_4;
65115   __pyx_t_4 = 0;
65116   __pyx_L14_bool_binop_done:;
65117   __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 694, __pyx_L1_error)
65118   __Pyx_GOTREF(__pyx_t_4);
65119   __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 694, __pyx_L1_error)
65120   __Pyx_GOTREF(__pyx_t_11);
65121   __Pyx_GIVEREF(__pyx_t_3);
65122   PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3);
65123   __Pyx_GIVEREF(__pyx_t_4);
65124   PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4);
65125   __pyx_t_3 = 0;
65126   __pyx_t_4 = 0;
65127   __pyx_r = ((PyObject*)__pyx_t_11);
65128   __pyx_t_11 = 0;
65129   goto __pyx_L0;
65130 
65131   /* "View.MemoryView":662
65132  *     return isinstance(o, memoryview)
65133  *
65134  * cdef tuple _unellipsify(object index, int ndim):             # <<<<<<<<<<<<<<
65135  *     """
65136  *     Replace all ellipses with full slices and fill incomplete indices with
65137  */
65138 
65139   /* function exit code */
65140   __pyx_L1_error:;
65141   __Pyx_XDECREF(__pyx_t_3);
65142   __Pyx_XDECREF(__pyx_t_4);
65143   __Pyx_XDECREF(__pyx_t_7);
65144   __Pyx_XDECREF(__pyx_t_11);
65145   __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename);
65146   __pyx_r = 0;
65147   __pyx_L0:;
65148   __Pyx_XDECREF(__pyx_v_tup);
65149   __Pyx_XDECREF(__pyx_v_result);
65150   __Pyx_XDECREF(__pyx_v_idx);
65151   __Pyx_XDECREF(__pyx_v_item);
65152   __Pyx_XGIVEREF(__pyx_r);
65153   __Pyx_RefNannyFinishContext();
65154   return __pyx_r;
65155 }
65156 
65157 /* "View.MemoryView":696
65158  *     return have_slices or nslices, tuple(result)
65159  *
65160  * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):             # <<<<<<<<<<<<<<
65161  *     for suboffset in suboffsets[:ndim]:
65162  *         if suboffset >= 0:
65163  */
65164 
65165 static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) {
65166   Py_ssize_t __pyx_v_suboffset;
65167   PyObject *__pyx_r = NULL;
65168   __Pyx_RefNannyDeclarations
65169   Py_ssize_t *__pyx_t_1;
65170   Py_ssize_t *__pyx_t_2;
65171   Py_ssize_t *__pyx_t_3;
65172   int __pyx_t_4;
65173   PyObject *__pyx_t_5 = NULL;
65174   __Pyx_RefNannySetupContext("assert_direct_dimensions", 0);
65175 
65176   /* "View.MemoryView":697
65177  *
65178  * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):
65179  *     for suboffset in suboffsets[:ndim]:             # <<<<<<<<<<<<<<
65180  *         if suboffset >= 0:
65181  *             raise ValueError("Indirect dimensions not supported")
65182  */
65183   __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim);
65184   for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) {
65185     __pyx_t_1 = __pyx_t_3;
65186     __pyx_v_suboffset = (__pyx_t_1[0]);
65187 
65188     /* "View.MemoryView":698
65189  * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):
65190  *     for suboffset in suboffsets[:ndim]:
65191  *         if suboffset >= 0:             # <<<<<<<<<<<<<<
65192  *             raise ValueError("Indirect dimensions not supported")
65193  *
65194  */
65195     __pyx_t_4 = ((__pyx_v_suboffset >= 0) != 0);
65196     if (unlikely(__pyx_t_4)) {
65197 
65198       /* "View.MemoryView":699
65199  *     for suboffset in suboffsets[:ndim]:
65200  *         if suboffset >= 0:
65201  *             raise ValueError("Indirect dimensions not supported")             # <<<<<<<<<<<<<<
65202  *
65203  *
65204  */
65205       __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__103, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 699, __pyx_L1_error)
65206       __Pyx_GOTREF(__pyx_t_5);
65207       __Pyx_Raise(__pyx_t_5, 0, 0, 0);
65208       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
65209       __PYX_ERR(5, 699, __pyx_L1_error)
65210 
65211       /* "View.MemoryView":698
65212  * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):
65213  *     for suboffset in suboffsets[:ndim]:
65214  *         if suboffset >= 0:             # <<<<<<<<<<<<<<
65215  *             raise ValueError("Indirect dimensions not supported")
65216  *
65217  */
65218     }
65219   }
65220 
65221   /* "View.MemoryView":696
65222  *     return have_slices or nslices, tuple(result)
65223  *
65224  * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):             # <<<<<<<<<<<<<<
65225  *     for suboffset in suboffsets[:ndim]:
65226  *         if suboffset >= 0:
65227  */
65228 
65229   /* function exit code */
65230   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
65231   goto __pyx_L0;
65232   __pyx_L1_error:;
65233   __Pyx_XDECREF(__pyx_t_5);
65234   __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
65235   __pyx_r = 0;
65236   __pyx_L0:;
65237   __Pyx_XGIVEREF(__pyx_r);
65238   __Pyx_RefNannyFinishContext();
65239   return __pyx_r;
65240 }
65241 
65242 /* "View.MemoryView":706
65243  *
65244  * @cname('__pyx_memview_slice')
65245  * cdef memoryview memview_slice(memoryview memview, object indices):             # <<<<<<<<<<<<<<
65246  *     cdef int new_ndim = 0, suboffset_dim = -1, dim
65247  *     cdef bint negative_step
65248  */
65249 
65250 static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) {
65251   int __pyx_v_new_ndim;
65252   int __pyx_v_suboffset_dim;
65253   int __pyx_v_dim;
65254   __Pyx_memviewslice __pyx_v_src;
65255   __Pyx_memviewslice __pyx_v_dst;
65256   __Pyx_memviewslice *__pyx_v_p_src;
65257   struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0;
65258   __Pyx_memviewslice *__pyx_v_p_dst;
65259   int *__pyx_v_p_suboffset_dim;
65260   Py_ssize_t __pyx_v_start;
65261   Py_ssize_t __pyx_v_stop;
65262   Py_ssize_t __pyx_v_step;
65263   int __pyx_v_have_start;
65264   int __pyx_v_have_stop;
65265   int __pyx_v_have_step;
65266   PyObject *__pyx_v_index = NULL;
65267   struct __pyx_memoryview_obj *__pyx_r = NULL;
65268   __Pyx_RefNannyDeclarations
65269   int __pyx_t_1;
65270   int __pyx_t_2;
65271   PyObject *__pyx_t_3 = NULL;
65272   struct __pyx_memoryview_obj *__pyx_t_4;
65273   char *__pyx_t_5;
65274   int __pyx_t_6;
65275   Py_ssize_t __pyx_t_7;
65276   PyObject *(*__pyx_t_8)(PyObject *);
65277   PyObject *__pyx_t_9 = NULL;
65278   Py_ssize_t __pyx_t_10;
65279   int __pyx_t_11;
65280   Py_ssize_t __pyx_t_12;
65281   __Pyx_RefNannySetupContext("memview_slice", 0);
65282 
65283   /* "View.MemoryView":707
65284  * @cname('__pyx_memview_slice')
65285  * cdef memoryview memview_slice(memoryview memview, object indices):
65286  *     cdef int new_ndim = 0, suboffset_dim = -1, dim             # <<<<<<<<<<<<<<
65287  *     cdef bint negative_step
65288  *     cdef __Pyx_memviewslice src, dst
65289  */
65290   __pyx_v_new_ndim = 0;
65291   __pyx_v_suboffset_dim = -1;
65292 
65293   /* "View.MemoryView":714
65294  *
65295  *
65296  *     memset(&dst, 0, sizeof(dst))             # <<<<<<<<<<<<<<
65297  *
65298  *     cdef _memoryviewslice memviewsliceobj
65299  */
65300   (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst))));
65301 
65302   /* "View.MemoryView":718
65303  *     cdef _memoryviewslice memviewsliceobj
65304  *
65305  *     assert memview.view.ndim > 0             # <<<<<<<<<<<<<<
65306  *
65307  *     if isinstance(memview, _memoryviewslice):
65308  */
65309   #ifndef CYTHON_WITHOUT_ASSERTIONS
65310   if (unlikely(!Py_OptimizeFlag)) {
65311     if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) {
65312       PyErr_SetNone(PyExc_AssertionError);
65313       __PYX_ERR(5, 718, __pyx_L1_error)
65314     }
65315   }
65316   #endif
65317 
65318   /* "View.MemoryView":720
65319  *     assert memview.view.ndim > 0
65320  *
65321  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
65322  *         memviewsliceobj = memview
65323  *         p_src = &memviewsliceobj.from_slice
65324  */
65325   __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type);
65326   __pyx_t_2 = (__pyx_t_1 != 0);
65327   if (__pyx_t_2) {
65328 
65329     /* "View.MemoryView":721
65330  *
65331  *     if isinstance(memview, _memoryviewslice):
65332  *         memviewsliceobj = memview             # <<<<<<<<<<<<<<
65333  *         p_src = &memviewsliceobj.from_slice
65334  *     else:
65335  */
65336     if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(5, 721, __pyx_L1_error)
65337     __pyx_t_3 = ((PyObject *)__pyx_v_memview);
65338     __Pyx_INCREF(__pyx_t_3);
65339     __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3);
65340     __pyx_t_3 = 0;
65341 
65342     /* "View.MemoryView":722
65343  *     if isinstance(memview, _memoryviewslice):
65344  *         memviewsliceobj = memview
65345  *         p_src = &memviewsliceobj.from_slice             # <<<<<<<<<<<<<<
65346  *     else:
65347  *         slice_copy(memview, &src)
65348  */
65349     __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice);
65350 
65351     /* "View.MemoryView":720
65352  *     assert memview.view.ndim > 0
65353  *
65354  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
65355  *         memviewsliceobj = memview
65356  *         p_src = &memviewsliceobj.from_slice
65357  */
65358     goto __pyx_L3;
65359   }
65360 
65361   /* "View.MemoryView":724
65362  *         p_src = &memviewsliceobj.from_slice
65363  *     else:
65364  *         slice_copy(memview, &src)             # <<<<<<<<<<<<<<
65365  *         p_src = &src
65366  *
65367  */
65368   /*else*/ {
65369     __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src));
65370 
65371     /* "View.MemoryView":725
65372  *     else:
65373  *         slice_copy(memview, &src)
65374  *         p_src = &src             # <<<<<<<<<<<<<<
65375  *
65376  *
65377  */
65378     __pyx_v_p_src = (&__pyx_v_src);
65379   }
65380   __pyx_L3:;
65381 
65382   /* "View.MemoryView":731
65383  *
65384  *
65385  *     dst.memview = p_src.memview             # <<<<<<<<<<<<<<
65386  *     dst.data = p_src.data
65387  *
65388  */
65389   __pyx_t_4 = __pyx_v_p_src->memview;
65390   __pyx_v_dst.memview = __pyx_t_4;
65391 
65392   /* "View.MemoryView":732
65393  *
65394  *     dst.memview = p_src.memview
65395  *     dst.data = p_src.data             # <<<<<<<<<<<<<<
65396  *
65397  *
65398  */
65399   __pyx_t_5 = __pyx_v_p_src->data;
65400   __pyx_v_dst.data = __pyx_t_5;
65401 
65402   /* "View.MemoryView":737
65403  *
65404  *
65405  *     cdef __Pyx_memviewslice *p_dst = &dst             # <<<<<<<<<<<<<<
65406  *     cdef int *p_suboffset_dim = &suboffset_dim
65407  *     cdef Py_ssize_t start, stop, step
65408  */
65409   __pyx_v_p_dst = (&__pyx_v_dst);
65410 
65411   /* "View.MemoryView":738
65412  *
65413  *     cdef __Pyx_memviewslice *p_dst = &dst
65414  *     cdef int *p_suboffset_dim = &suboffset_dim             # <<<<<<<<<<<<<<
65415  *     cdef Py_ssize_t start, stop, step
65416  *     cdef bint have_start, have_stop, have_step
65417  */
65418   __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim);
65419 
65420   /* "View.MemoryView":742
65421  *     cdef bint have_start, have_stop, have_step
65422  *
65423  *     for dim, index in enumerate(indices):             # <<<<<<<<<<<<<<
65424  *         if PyIndex_Check(index):
65425  *             slice_memviewslice(
65426  */
65427   __pyx_t_6 = 0;
65428   if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) {
65429     __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0;
65430     __pyx_t_8 = NULL;
65431   } else {
65432     __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 742, __pyx_L1_error)
65433     __Pyx_GOTREF(__pyx_t_3);
65434     __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 742, __pyx_L1_error)
65435   }
65436   for (;;) {
65437     if (likely(!__pyx_t_8)) {
65438       if (likely(PyList_CheckExact(__pyx_t_3))) {
65439         if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break;
65440         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
65441         __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(5, 742, __pyx_L1_error)
65442         #else
65443         __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 742, __pyx_L1_error)
65444         __Pyx_GOTREF(__pyx_t_9);
65445         #endif
65446       } else {
65447         if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
65448         #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
65449         __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(5, 742, __pyx_L1_error)
65450         #else
65451         __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 742, __pyx_L1_error)
65452         __Pyx_GOTREF(__pyx_t_9);
65453         #endif
65454       }
65455     } else {
65456       __pyx_t_9 = __pyx_t_8(__pyx_t_3);
65457       if (unlikely(!__pyx_t_9)) {
65458         PyObject* exc_type = PyErr_Occurred();
65459         if (exc_type) {
65460           if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
65461           else __PYX_ERR(5, 742, __pyx_L1_error)
65462         }
65463         break;
65464       }
65465       __Pyx_GOTREF(__pyx_t_9);
65466     }
65467     __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9);
65468     __pyx_t_9 = 0;
65469     __pyx_v_dim = __pyx_t_6;
65470     __pyx_t_6 = (__pyx_t_6 + 1);
65471 
65472     /* "View.MemoryView":743
65473  *
65474  *     for dim, index in enumerate(indices):
65475  *         if PyIndex_Check(index):             # <<<<<<<<<<<<<<
65476  *             slice_memviewslice(
65477  *                 p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
65478  */
65479     __pyx_t_2 = (PyIndex_Check(__pyx_v_index) != 0);
65480     if (__pyx_t_2) {
65481 
65482       /* "View.MemoryView":747
65483  *                 p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
65484  *                 dim, new_ndim, p_suboffset_dim,
65485  *                 index, 0, 0, # start, stop, step             # <<<<<<<<<<<<<<
65486  *                 0, 0, 0, # have_{start,stop,step}
65487  *                 False)
65488  */
65489       __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(5, 747, __pyx_L1_error)
65490 
65491       /* "View.MemoryView":744
65492  *     for dim, index in enumerate(indices):
65493  *         if PyIndex_Check(index):
65494  *             slice_memviewslice(             # <<<<<<<<<<<<<<
65495  *                 p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
65496  *                 dim, new_ndim, p_suboffset_dim,
65497  */
65498       __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(5, 744, __pyx_L1_error)
65499 
65500       /* "View.MemoryView":743
65501  *
65502  *     for dim, index in enumerate(indices):
65503  *         if PyIndex_Check(index):             # <<<<<<<<<<<<<<
65504  *             slice_memviewslice(
65505  *                 p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
65506  */
65507       goto __pyx_L6;
65508     }
65509 
65510     /* "View.MemoryView":750
65511  *                 0, 0, 0, # have_{start,stop,step}
65512  *                 False)
65513  *         elif index is None:             # <<<<<<<<<<<<<<
65514  *             p_dst.shape[new_ndim] = 1
65515  *             p_dst.strides[new_ndim] = 0
65516  */
65517     __pyx_t_2 = (__pyx_v_index == Py_None);
65518     __pyx_t_1 = (__pyx_t_2 != 0);
65519     if (__pyx_t_1) {
65520 
65521       /* "View.MemoryView":751
65522  *                 False)
65523  *         elif index is None:
65524  *             p_dst.shape[new_ndim] = 1             # <<<<<<<<<<<<<<
65525  *             p_dst.strides[new_ndim] = 0
65526  *             p_dst.suboffsets[new_ndim] = -1
65527  */
65528       (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1;
65529 
65530       /* "View.MemoryView":752
65531  *         elif index is None:
65532  *             p_dst.shape[new_ndim] = 1
65533  *             p_dst.strides[new_ndim] = 0             # <<<<<<<<<<<<<<
65534  *             p_dst.suboffsets[new_ndim] = -1
65535  *             new_ndim += 1
65536  */
65537       (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0;
65538 
65539       /* "View.MemoryView":753
65540  *             p_dst.shape[new_ndim] = 1
65541  *             p_dst.strides[new_ndim] = 0
65542  *             p_dst.suboffsets[new_ndim] = -1             # <<<<<<<<<<<<<<
65543  *             new_ndim += 1
65544  *         else:
65545  */
65546       (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L;
65547 
65548       /* "View.MemoryView":754
65549  *             p_dst.strides[new_ndim] = 0
65550  *             p_dst.suboffsets[new_ndim] = -1
65551  *             new_ndim += 1             # <<<<<<<<<<<<<<
65552  *         else:
65553  *             start = index.start or 0
65554  */
65555       __pyx_v_new_ndim = (__pyx_v_new_ndim + 1);
65556 
65557       /* "View.MemoryView":750
65558  *                 0, 0, 0, # have_{start,stop,step}
65559  *                 False)
65560  *         elif index is None:             # <<<<<<<<<<<<<<
65561  *             p_dst.shape[new_ndim] = 1
65562  *             p_dst.strides[new_ndim] = 0
65563  */
65564       goto __pyx_L6;
65565     }
65566 
65567     /* "View.MemoryView":756
65568  *             new_ndim += 1
65569  *         else:
65570  *             start = index.start or 0             # <<<<<<<<<<<<<<
65571  *             stop = index.stop or 0
65572  *             step = index.step or 0
65573  */
65574     /*else*/ {
65575       __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 756, __pyx_L1_error)
65576       __Pyx_GOTREF(__pyx_t_9);
65577       __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(5, 756, __pyx_L1_error)
65578       if (!__pyx_t_1) {
65579         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
65580       } else {
65581         __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(5, 756, __pyx_L1_error)
65582         __pyx_t_10 = __pyx_t_12;
65583         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
65584         goto __pyx_L7_bool_binop_done;
65585       }
65586       __pyx_t_10 = 0;
65587       __pyx_L7_bool_binop_done:;
65588       __pyx_v_start = __pyx_t_10;
65589 
65590       /* "View.MemoryView":757
65591  *         else:
65592  *             start = index.start or 0
65593  *             stop = index.stop or 0             # <<<<<<<<<<<<<<
65594  *             step = index.step or 0
65595  *
65596  */
65597       __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 757, __pyx_L1_error)
65598       __Pyx_GOTREF(__pyx_t_9);
65599       __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(5, 757, __pyx_L1_error)
65600       if (!__pyx_t_1) {
65601         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
65602       } else {
65603         __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(5, 757, __pyx_L1_error)
65604         __pyx_t_10 = __pyx_t_12;
65605         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
65606         goto __pyx_L9_bool_binop_done;
65607       }
65608       __pyx_t_10 = 0;
65609       __pyx_L9_bool_binop_done:;
65610       __pyx_v_stop = __pyx_t_10;
65611 
65612       /* "View.MemoryView":758
65613  *             start = index.start or 0
65614  *             stop = index.stop or 0
65615  *             step = index.step or 0             # <<<<<<<<<<<<<<
65616  *
65617  *             have_start = index.start is not None
65618  */
65619       __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 758, __pyx_L1_error)
65620       __Pyx_GOTREF(__pyx_t_9);
65621       __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(5, 758, __pyx_L1_error)
65622       if (!__pyx_t_1) {
65623         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
65624       } else {
65625         __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(5, 758, __pyx_L1_error)
65626         __pyx_t_10 = __pyx_t_12;
65627         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
65628         goto __pyx_L11_bool_binop_done;
65629       }
65630       __pyx_t_10 = 0;
65631       __pyx_L11_bool_binop_done:;
65632       __pyx_v_step = __pyx_t_10;
65633 
65634       /* "View.MemoryView":760
65635  *             step = index.step or 0
65636  *
65637  *             have_start = index.start is not None             # <<<<<<<<<<<<<<
65638  *             have_stop = index.stop is not None
65639  *             have_step = index.step is not None
65640  */
65641       __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 760, __pyx_L1_error)
65642       __Pyx_GOTREF(__pyx_t_9);
65643       __pyx_t_1 = (__pyx_t_9 != Py_None);
65644       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
65645       __pyx_v_have_start = __pyx_t_1;
65646 
65647       /* "View.MemoryView":761
65648  *
65649  *             have_start = index.start is not None
65650  *             have_stop = index.stop is not None             # <<<<<<<<<<<<<<
65651  *             have_step = index.step is not None
65652  *
65653  */
65654       __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 761, __pyx_L1_error)
65655       __Pyx_GOTREF(__pyx_t_9);
65656       __pyx_t_1 = (__pyx_t_9 != Py_None);
65657       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
65658       __pyx_v_have_stop = __pyx_t_1;
65659 
65660       /* "View.MemoryView":762
65661  *             have_start = index.start is not None
65662  *             have_stop = index.stop is not None
65663  *             have_step = index.step is not None             # <<<<<<<<<<<<<<
65664  *
65665  *             slice_memviewslice(
65666  */
65667       __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 762, __pyx_L1_error)
65668       __Pyx_GOTREF(__pyx_t_9);
65669       __pyx_t_1 = (__pyx_t_9 != Py_None);
65670       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
65671       __pyx_v_have_step = __pyx_t_1;
65672 
65673       /* "View.MemoryView":764
65674  *             have_step = index.step is not None
65675  *
65676  *             slice_memviewslice(             # <<<<<<<<<<<<<<
65677  *                 p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
65678  *                 dim, new_ndim, p_suboffset_dim,
65679  */
65680       __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(5, 764, __pyx_L1_error)
65681 
65682       /* "View.MemoryView":770
65683  *                 have_start, have_stop, have_step,
65684  *                 True)
65685  *             new_ndim += 1             # <<<<<<<<<<<<<<
65686  *
65687  *     if isinstance(memview, _memoryviewslice):
65688  */
65689       __pyx_v_new_ndim = (__pyx_v_new_ndim + 1);
65690     }
65691     __pyx_L6:;
65692 
65693     /* "View.MemoryView":742
65694  *     cdef bint have_start, have_stop, have_step
65695  *
65696  *     for dim, index in enumerate(indices):             # <<<<<<<<<<<<<<
65697  *         if PyIndex_Check(index):
65698  *             slice_memviewslice(
65699  */
65700   }
65701   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
65702 
65703   /* "View.MemoryView":772
65704  *             new_ndim += 1
65705  *
65706  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
65707  *         return memoryview_fromslice(dst, new_ndim,
65708  *                                     memviewsliceobj.to_object_func,
65709  */
65710   __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type);
65711   __pyx_t_2 = (__pyx_t_1 != 0);
65712   if (__pyx_t_2) {
65713 
65714     /* "View.MemoryView":773
65715  *
65716  *     if isinstance(memview, _memoryviewslice):
65717  *         return memoryview_fromslice(dst, new_ndim,             # <<<<<<<<<<<<<<
65718  *                                     memviewsliceobj.to_object_func,
65719  *                                     memviewsliceobj.to_dtype_func,
65720  */
65721     __Pyx_XDECREF(((PyObject *)__pyx_r));
65722 
65723     /* "View.MemoryView":774
65724  *     if isinstance(memview, _memoryviewslice):
65725  *         return memoryview_fromslice(dst, new_ndim,
65726  *                                     memviewsliceobj.to_object_func,             # <<<<<<<<<<<<<<
65727  *                                     memviewsliceobj.to_dtype_func,
65728  *                                     memview.dtype_is_object)
65729  */
65730     if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(5, 774, __pyx_L1_error) }
65731 
65732     /* "View.MemoryView":775
65733  *         return memoryview_fromslice(dst, new_ndim,
65734  *                                     memviewsliceobj.to_object_func,
65735  *                                     memviewsliceobj.to_dtype_func,             # <<<<<<<<<<<<<<
65736  *                                     memview.dtype_is_object)
65737  *     else:
65738  */
65739     if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(5, 775, __pyx_L1_error) }
65740 
65741     /* "View.MemoryView":773
65742  *
65743  *     if isinstance(memview, _memoryviewslice):
65744  *         return memoryview_fromslice(dst, new_ndim,             # <<<<<<<<<<<<<<
65745  *                                     memviewsliceobj.to_object_func,
65746  *                                     memviewsliceobj.to_dtype_func,
65747  */
65748     __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 773, __pyx_L1_error)
65749     __Pyx_GOTREF(__pyx_t_3);
65750     if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(5, 773, __pyx_L1_error)
65751     __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3);
65752     __pyx_t_3 = 0;
65753     goto __pyx_L0;
65754 
65755     /* "View.MemoryView":772
65756  *             new_ndim += 1
65757  *
65758  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
65759  *         return memoryview_fromslice(dst, new_ndim,
65760  *                                     memviewsliceobj.to_object_func,
65761  */
65762   }
65763 
65764   /* "View.MemoryView":778
65765  *                                     memview.dtype_is_object)
65766  *     else:
65767  *         return memoryview_fromslice(dst, new_ndim, NULL, NULL,             # <<<<<<<<<<<<<<
65768  *                                     memview.dtype_is_object)
65769  *
65770  */
65771   /*else*/ {
65772     __Pyx_XDECREF(((PyObject *)__pyx_r));
65773 
65774     /* "View.MemoryView":779
65775  *     else:
65776  *         return memoryview_fromslice(dst, new_ndim, NULL, NULL,
65777  *                                     memview.dtype_is_object)             # <<<<<<<<<<<<<<
65778  *
65779  *
65780  */
65781     __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 778, __pyx_L1_error)
65782     __Pyx_GOTREF(__pyx_t_3);
65783 
65784     /* "View.MemoryView":778
65785  *                                     memview.dtype_is_object)
65786  *     else:
65787  *         return memoryview_fromslice(dst, new_ndim, NULL, NULL,             # <<<<<<<<<<<<<<
65788  *                                     memview.dtype_is_object)
65789  *
65790  */
65791     if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(5, 778, __pyx_L1_error)
65792     __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3);
65793     __pyx_t_3 = 0;
65794     goto __pyx_L0;
65795   }
65796 
65797   /* "View.MemoryView":706
65798  *
65799  * @cname('__pyx_memview_slice')
65800  * cdef memoryview memview_slice(memoryview memview, object indices):             # <<<<<<<<<<<<<<
65801  *     cdef int new_ndim = 0, suboffset_dim = -1, dim
65802  *     cdef bint negative_step
65803  */
65804 
65805   /* function exit code */
65806   __pyx_L1_error:;
65807   __Pyx_XDECREF(__pyx_t_3);
65808   __Pyx_XDECREF(__pyx_t_9);
65809   __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
65810   __pyx_r = 0;
65811   __pyx_L0:;
65812   __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj);
65813   __Pyx_XDECREF(__pyx_v_index);
65814   __Pyx_XGIVEREF((PyObject *)__pyx_r);
65815   __Pyx_RefNannyFinishContext();
65816   return __pyx_r;
65817 }
65818 
65819 /* "View.MemoryView":803
65820  *
65821  * @cname('__pyx_memoryview_slice_memviewslice')
65822  * cdef int slice_memviewslice(             # <<<<<<<<<<<<<<
65823  *         __Pyx_memviewslice *dst,
65824  *         Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset,
65825  */
65826 
65827 static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) {
65828   Py_ssize_t __pyx_v_new_shape;
65829   int __pyx_v_negative_step;
65830   int __pyx_r;
65831   int __pyx_t_1;
65832   int __pyx_t_2;
65833   int __pyx_t_3;
65834 
65835   /* "View.MemoryView":823
65836  *     cdef bint negative_step
65837  *
65838  *     if not is_slice:             # <<<<<<<<<<<<<<
65839  *
65840  *         if start < 0:
65841  */
65842   __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0);
65843   if (__pyx_t_1) {
65844 
65845     /* "View.MemoryView":825
65846  *     if not is_slice:
65847  *
65848  *         if start < 0:             # <<<<<<<<<<<<<<
65849  *             start += shape
65850  *         if not 0 <= start < shape:
65851  */
65852     __pyx_t_1 = ((__pyx_v_start < 0) != 0);
65853     if (__pyx_t_1) {
65854 
65855       /* "View.MemoryView":826
65856  *
65857  *         if start < 0:
65858  *             start += shape             # <<<<<<<<<<<<<<
65859  *         if not 0 <= start < shape:
65860  *             _err_dim(IndexError, "Index out of bounds (axis %d)", dim)
65861  */
65862       __pyx_v_start = (__pyx_v_start + __pyx_v_shape);
65863 
65864       /* "View.MemoryView":825
65865  *     if not is_slice:
65866  *
65867  *         if start < 0:             # <<<<<<<<<<<<<<
65868  *             start += shape
65869  *         if not 0 <= start < shape:
65870  */
65871     }
65872 
65873     /* "View.MemoryView":827
65874  *         if start < 0:
65875  *             start += shape
65876  *         if not 0 <= start < shape:             # <<<<<<<<<<<<<<
65877  *             _err_dim(IndexError, "Index out of bounds (axis %d)", dim)
65878  *     else:
65879  */
65880     __pyx_t_1 = (0 <= __pyx_v_start);
65881     if (__pyx_t_1) {
65882       __pyx_t_1 = (__pyx_v_start < __pyx_v_shape);
65883     }
65884     __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
65885     if (__pyx_t_2) {
65886 
65887       /* "View.MemoryView":828
65888  *             start += shape
65889  *         if not 0 <= start < shape:
65890  *             _err_dim(IndexError, "Index out of bounds (axis %d)", dim)             # <<<<<<<<<<<<<<
65891  *     else:
65892  *
65893  */
65894       __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"Index out of bounds (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 828, __pyx_L1_error)
65895 
65896       /* "View.MemoryView":827
65897  *         if start < 0:
65898  *             start += shape
65899  *         if not 0 <= start < shape:             # <<<<<<<<<<<<<<
65900  *             _err_dim(IndexError, "Index out of bounds (axis %d)", dim)
65901  *     else:
65902  */
65903     }
65904 
65905     /* "View.MemoryView":823
65906  *     cdef bint negative_step
65907  *
65908  *     if not is_slice:             # <<<<<<<<<<<<<<
65909  *
65910  *         if start < 0:
65911  */
65912     goto __pyx_L3;
65913   }
65914 
65915   /* "View.MemoryView":831
65916  *     else:
65917  *
65918  *         negative_step = have_step != 0 and step < 0             # <<<<<<<<<<<<<<
65919  *
65920  *         if have_step and step == 0:
65921  */
65922   /*else*/ {
65923     __pyx_t_1 = ((__pyx_v_have_step != 0) != 0);
65924     if (__pyx_t_1) {
65925     } else {
65926       __pyx_t_2 = __pyx_t_1;
65927       goto __pyx_L6_bool_binop_done;
65928     }
65929     __pyx_t_1 = ((__pyx_v_step < 0) != 0);
65930     __pyx_t_2 = __pyx_t_1;
65931     __pyx_L6_bool_binop_done:;
65932     __pyx_v_negative_step = __pyx_t_2;
65933 
65934     /* "View.MemoryView":833
65935  *         negative_step = have_step != 0 and step < 0
65936  *
65937  *         if have_step and step == 0:             # <<<<<<<<<<<<<<
65938  *             _err_dim(ValueError, "Step may not be zero (axis %d)", dim)
65939  *
65940  */
65941     __pyx_t_1 = (__pyx_v_have_step != 0);
65942     if (__pyx_t_1) {
65943     } else {
65944       __pyx_t_2 = __pyx_t_1;
65945       goto __pyx_L9_bool_binop_done;
65946     }
65947     __pyx_t_1 = ((__pyx_v_step == 0) != 0);
65948     __pyx_t_2 = __pyx_t_1;
65949     __pyx_L9_bool_binop_done:;
65950     if (__pyx_t_2) {
65951 
65952       /* "View.MemoryView":834
65953  *
65954  *         if have_step and step == 0:
65955  *             _err_dim(ValueError, "Step may not be zero (axis %d)", dim)             # <<<<<<<<<<<<<<
65956  *
65957  *
65958  */
65959       __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Step may not be zero (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 834, __pyx_L1_error)
65960 
65961       /* "View.MemoryView":833
65962  *         negative_step = have_step != 0 and step < 0
65963  *
65964  *         if have_step and step == 0:             # <<<<<<<<<<<<<<
65965  *             _err_dim(ValueError, "Step may not be zero (axis %d)", dim)
65966  *
65967  */
65968     }
65969 
65970     /* "View.MemoryView":837
65971  *
65972  *
65973  *         if have_start:             # <<<<<<<<<<<<<<
65974  *             if start < 0:
65975  *                 start += shape
65976  */
65977     __pyx_t_2 = (__pyx_v_have_start != 0);
65978     if (__pyx_t_2) {
65979 
65980       /* "View.MemoryView":838
65981  *
65982  *         if have_start:
65983  *             if start < 0:             # <<<<<<<<<<<<<<
65984  *                 start += shape
65985  *                 if start < 0:
65986  */
65987       __pyx_t_2 = ((__pyx_v_start < 0) != 0);
65988       if (__pyx_t_2) {
65989 
65990         /* "View.MemoryView":839
65991  *         if have_start:
65992  *             if start < 0:
65993  *                 start += shape             # <<<<<<<<<<<<<<
65994  *                 if start < 0:
65995  *                     start = 0
65996  */
65997         __pyx_v_start = (__pyx_v_start + __pyx_v_shape);
65998 
65999         /* "View.MemoryView":840
66000  *             if start < 0:
66001  *                 start += shape
66002  *                 if start < 0:             # <<<<<<<<<<<<<<
66003  *                     start = 0
66004  *             elif start >= shape:
66005  */
66006         __pyx_t_2 = ((__pyx_v_start < 0) != 0);
66007         if (__pyx_t_2) {
66008 
66009           /* "View.MemoryView":841
66010  *                 start += shape
66011  *                 if start < 0:
66012  *                     start = 0             # <<<<<<<<<<<<<<
66013  *             elif start >= shape:
66014  *                 if negative_step:
66015  */
66016           __pyx_v_start = 0;
66017 
66018           /* "View.MemoryView":840
66019  *             if start < 0:
66020  *                 start += shape
66021  *                 if start < 0:             # <<<<<<<<<<<<<<
66022  *                     start = 0
66023  *             elif start >= shape:
66024  */
66025         }
66026 
66027         /* "View.MemoryView":838
66028  *
66029  *         if have_start:
66030  *             if start < 0:             # <<<<<<<<<<<<<<
66031  *                 start += shape
66032  *                 if start < 0:
66033  */
66034         goto __pyx_L12;
66035       }
66036 
66037       /* "View.MemoryView":842
66038  *                 if start < 0:
66039  *                     start = 0
66040  *             elif start >= shape:             # <<<<<<<<<<<<<<
66041  *                 if negative_step:
66042  *                     start = shape - 1
66043  */
66044       __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0);
66045       if (__pyx_t_2) {
66046 
66047         /* "View.MemoryView":843
66048  *                     start = 0
66049  *             elif start >= shape:
66050  *                 if negative_step:             # <<<<<<<<<<<<<<
66051  *                     start = shape - 1
66052  *                 else:
66053  */
66054         __pyx_t_2 = (__pyx_v_negative_step != 0);
66055         if (__pyx_t_2) {
66056 
66057           /* "View.MemoryView":844
66058  *             elif start >= shape:
66059  *                 if negative_step:
66060  *                     start = shape - 1             # <<<<<<<<<<<<<<
66061  *                 else:
66062  *                     start = shape
66063  */
66064           __pyx_v_start = (__pyx_v_shape - 1);
66065 
66066           /* "View.MemoryView":843
66067  *                     start = 0
66068  *             elif start >= shape:
66069  *                 if negative_step:             # <<<<<<<<<<<<<<
66070  *                     start = shape - 1
66071  *                 else:
66072  */
66073           goto __pyx_L14;
66074         }
66075 
66076         /* "View.MemoryView":846
66077  *                     start = shape - 1
66078  *                 else:
66079  *                     start = shape             # <<<<<<<<<<<<<<
66080  *         else:
66081  *             if negative_step:
66082  */
66083         /*else*/ {
66084           __pyx_v_start = __pyx_v_shape;
66085         }
66086         __pyx_L14:;
66087 
66088         /* "View.MemoryView":842
66089  *                 if start < 0:
66090  *                     start = 0
66091  *             elif start >= shape:             # <<<<<<<<<<<<<<
66092  *                 if negative_step:
66093  *                     start = shape - 1
66094  */
66095       }
66096       __pyx_L12:;
66097 
66098       /* "View.MemoryView":837
66099  *
66100  *
66101  *         if have_start:             # <<<<<<<<<<<<<<
66102  *             if start < 0:
66103  *                 start += shape
66104  */
66105       goto __pyx_L11;
66106     }
66107 
66108     /* "View.MemoryView":848
66109  *                     start = shape
66110  *         else:
66111  *             if negative_step:             # <<<<<<<<<<<<<<
66112  *                 start = shape - 1
66113  *             else:
66114  */
66115     /*else*/ {
66116       __pyx_t_2 = (__pyx_v_negative_step != 0);
66117       if (__pyx_t_2) {
66118 
66119         /* "View.MemoryView":849
66120  *         else:
66121  *             if negative_step:
66122  *                 start = shape - 1             # <<<<<<<<<<<<<<
66123  *             else:
66124  *                 start = 0
66125  */
66126         __pyx_v_start = (__pyx_v_shape - 1);
66127 
66128         /* "View.MemoryView":848
66129  *                     start = shape
66130  *         else:
66131  *             if negative_step:             # <<<<<<<<<<<<<<
66132  *                 start = shape - 1
66133  *             else:
66134  */
66135         goto __pyx_L15;
66136       }
66137 
66138       /* "View.MemoryView":851
66139  *                 start = shape - 1
66140  *             else:
66141  *                 start = 0             # <<<<<<<<<<<<<<
66142  *
66143  *         if have_stop:
66144  */
66145       /*else*/ {
66146         __pyx_v_start = 0;
66147       }
66148       __pyx_L15:;
66149     }
66150     __pyx_L11:;
66151 
66152     /* "View.MemoryView":853
66153  *                 start = 0
66154  *
66155  *         if have_stop:             # <<<<<<<<<<<<<<
66156  *             if stop < 0:
66157  *                 stop += shape
66158  */
66159     __pyx_t_2 = (__pyx_v_have_stop != 0);
66160     if (__pyx_t_2) {
66161 
66162       /* "View.MemoryView":854
66163  *
66164  *         if have_stop:
66165  *             if stop < 0:             # <<<<<<<<<<<<<<
66166  *                 stop += shape
66167  *                 if stop < 0:
66168  */
66169       __pyx_t_2 = ((__pyx_v_stop < 0) != 0);
66170       if (__pyx_t_2) {
66171 
66172         /* "View.MemoryView":855
66173  *         if have_stop:
66174  *             if stop < 0:
66175  *                 stop += shape             # <<<<<<<<<<<<<<
66176  *                 if stop < 0:
66177  *                     stop = 0
66178  */
66179         __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape);
66180 
66181         /* "View.MemoryView":856
66182  *             if stop < 0:
66183  *                 stop += shape
66184  *                 if stop < 0:             # <<<<<<<<<<<<<<
66185  *                     stop = 0
66186  *             elif stop > shape:
66187  */
66188         __pyx_t_2 = ((__pyx_v_stop < 0) != 0);
66189         if (__pyx_t_2) {
66190 
66191           /* "View.MemoryView":857
66192  *                 stop += shape
66193  *                 if stop < 0:
66194  *                     stop = 0             # <<<<<<<<<<<<<<
66195  *             elif stop > shape:
66196  *                 stop = shape
66197  */
66198           __pyx_v_stop = 0;
66199 
66200           /* "View.MemoryView":856
66201  *             if stop < 0:
66202  *                 stop += shape
66203  *                 if stop < 0:             # <<<<<<<<<<<<<<
66204  *                     stop = 0
66205  *             elif stop > shape:
66206  */
66207         }
66208 
66209         /* "View.MemoryView":854
66210  *
66211  *         if have_stop:
66212  *             if stop < 0:             # <<<<<<<<<<<<<<
66213  *                 stop += shape
66214  *                 if stop < 0:
66215  */
66216         goto __pyx_L17;
66217       }
66218 
66219       /* "View.MemoryView":858
66220  *                 if stop < 0:
66221  *                     stop = 0
66222  *             elif stop > shape:             # <<<<<<<<<<<<<<
66223  *                 stop = shape
66224  *         else:
66225  */
66226       __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0);
66227       if (__pyx_t_2) {
66228 
66229         /* "View.MemoryView":859
66230  *                     stop = 0
66231  *             elif stop > shape:
66232  *                 stop = shape             # <<<<<<<<<<<<<<
66233  *         else:
66234  *             if negative_step:
66235  */
66236         __pyx_v_stop = __pyx_v_shape;
66237 
66238         /* "View.MemoryView":858
66239  *                 if stop < 0:
66240  *                     stop = 0
66241  *             elif stop > shape:             # <<<<<<<<<<<<<<
66242  *                 stop = shape
66243  *         else:
66244  */
66245       }
66246       __pyx_L17:;
66247 
66248       /* "View.MemoryView":853
66249  *                 start = 0
66250  *
66251  *         if have_stop:             # <<<<<<<<<<<<<<
66252  *             if stop < 0:
66253  *                 stop += shape
66254  */
66255       goto __pyx_L16;
66256     }
66257 
66258     /* "View.MemoryView":861
66259  *                 stop = shape
66260  *         else:
66261  *             if negative_step:             # <<<<<<<<<<<<<<
66262  *                 stop = -1
66263  *             else:
66264  */
66265     /*else*/ {
66266       __pyx_t_2 = (__pyx_v_negative_step != 0);
66267       if (__pyx_t_2) {
66268 
66269         /* "View.MemoryView":862
66270  *         else:
66271  *             if negative_step:
66272  *                 stop = -1             # <<<<<<<<<<<<<<
66273  *             else:
66274  *                 stop = shape
66275  */
66276         __pyx_v_stop = -1L;
66277 
66278         /* "View.MemoryView":861
66279  *                 stop = shape
66280  *         else:
66281  *             if negative_step:             # <<<<<<<<<<<<<<
66282  *                 stop = -1
66283  *             else:
66284  */
66285         goto __pyx_L19;
66286       }
66287 
66288       /* "View.MemoryView":864
66289  *                 stop = -1
66290  *             else:
66291  *                 stop = shape             # <<<<<<<<<<<<<<
66292  *
66293  *         if not have_step:
66294  */
66295       /*else*/ {
66296         __pyx_v_stop = __pyx_v_shape;
66297       }
66298       __pyx_L19:;
66299     }
66300     __pyx_L16:;
66301 
66302     /* "View.MemoryView":866
66303  *                 stop = shape
66304  *
66305  *         if not have_step:             # <<<<<<<<<<<<<<
66306  *             step = 1
66307  *
66308  */
66309     __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0);
66310     if (__pyx_t_2) {
66311 
66312       /* "View.MemoryView":867
66313  *
66314  *         if not have_step:
66315  *             step = 1             # <<<<<<<<<<<<<<
66316  *
66317  *
66318  */
66319       __pyx_v_step = 1;
66320 
66321       /* "View.MemoryView":866
66322  *                 stop = shape
66323  *
66324  *         if not have_step:             # <<<<<<<<<<<<<<
66325  *             step = 1
66326  *
66327  */
66328     }
66329 
66330     /* "View.MemoryView":871
66331  *
66332  *         with cython.cdivision(True):
66333  *             new_shape = (stop - start) // step             # <<<<<<<<<<<<<<
66334  *
66335  *             if (stop - start) - step * new_shape:
66336  */
66337     __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step);
66338 
66339     /* "View.MemoryView":873
66340  *             new_shape = (stop - start) // step
66341  *
66342  *             if (stop - start) - step * new_shape:             # <<<<<<<<<<<<<<
66343  *                 new_shape += 1
66344  *
66345  */
66346     __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0);
66347     if (__pyx_t_2) {
66348 
66349       /* "View.MemoryView":874
66350  *
66351  *             if (stop - start) - step * new_shape:
66352  *                 new_shape += 1             # <<<<<<<<<<<<<<
66353  *
66354  *         if new_shape < 0:
66355  */
66356       __pyx_v_new_shape = (__pyx_v_new_shape + 1);
66357 
66358       /* "View.MemoryView":873
66359  *             new_shape = (stop - start) // step
66360  *
66361  *             if (stop - start) - step * new_shape:             # <<<<<<<<<<<<<<
66362  *                 new_shape += 1
66363  *
66364  */
66365     }
66366 
66367     /* "View.MemoryView":876
66368  *                 new_shape += 1
66369  *
66370  *         if new_shape < 0:             # <<<<<<<<<<<<<<
66371  *             new_shape = 0
66372  *
66373  */
66374     __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0);
66375     if (__pyx_t_2) {
66376 
66377       /* "View.MemoryView":877
66378  *
66379  *         if new_shape < 0:
66380  *             new_shape = 0             # <<<<<<<<<<<<<<
66381  *
66382  *
66383  */
66384       __pyx_v_new_shape = 0;
66385 
66386       /* "View.MemoryView":876
66387  *                 new_shape += 1
66388  *
66389  *         if new_shape < 0:             # <<<<<<<<<<<<<<
66390  *             new_shape = 0
66391  *
66392  */
66393     }
66394 
66395     /* "View.MemoryView":880
66396  *
66397  *
66398  *         dst.strides[new_ndim] = stride * step             # <<<<<<<<<<<<<<
66399  *         dst.shape[new_ndim] = new_shape
66400  *         dst.suboffsets[new_ndim] = suboffset
66401  */
66402     (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step);
66403 
66404     /* "View.MemoryView":881
66405  *
66406  *         dst.strides[new_ndim] = stride * step
66407  *         dst.shape[new_ndim] = new_shape             # <<<<<<<<<<<<<<
66408  *         dst.suboffsets[new_ndim] = suboffset
66409  *
66410  */
66411     (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape;
66412 
66413     /* "View.MemoryView":882
66414  *         dst.strides[new_ndim] = stride * step
66415  *         dst.shape[new_ndim] = new_shape
66416  *         dst.suboffsets[new_ndim] = suboffset             # <<<<<<<<<<<<<<
66417  *
66418  *
66419  */
66420     (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset;
66421   }
66422   __pyx_L3:;
66423 
66424   /* "View.MemoryView":885
66425  *
66426  *
66427  *     if suboffset_dim[0] < 0:             # <<<<<<<<<<<<<<
66428  *         dst.data += start * stride
66429  *     else:
66430  */
66431   __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0);
66432   if (__pyx_t_2) {
66433 
66434     /* "View.MemoryView":886
66435  *
66436  *     if suboffset_dim[0] < 0:
66437  *         dst.data += start * stride             # <<<<<<<<<<<<<<
66438  *     else:
66439  *         dst.suboffsets[suboffset_dim[0]] += start * stride
66440  */
66441     __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride));
66442 
66443     /* "View.MemoryView":885
66444  *
66445  *
66446  *     if suboffset_dim[0] < 0:             # <<<<<<<<<<<<<<
66447  *         dst.data += start * stride
66448  *     else:
66449  */
66450     goto __pyx_L23;
66451   }
66452 
66453   /* "View.MemoryView":888
66454  *         dst.data += start * stride
66455  *     else:
66456  *         dst.suboffsets[suboffset_dim[0]] += start * stride             # <<<<<<<<<<<<<<
66457  *
66458  *     if suboffset >= 0:
66459  */
66460   /*else*/ {
66461     __pyx_t_3 = (__pyx_v_suboffset_dim[0]);
66462     (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride));
66463   }
66464   __pyx_L23:;
66465 
66466   /* "View.MemoryView":890
66467  *         dst.suboffsets[suboffset_dim[0]] += start * stride
66468  *
66469  *     if suboffset >= 0:             # <<<<<<<<<<<<<<
66470  *         if not is_slice:
66471  *             if new_ndim == 0:
66472  */
66473   __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0);
66474   if (__pyx_t_2) {
66475 
66476     /* "View.MemoryView":891
66477  *
66478  *     if suboffset >= 0:
66479  *         if not is_slice:             # <<<<<<<<<<<<<<
66480  *             if new_ndim == 0:
66481  *                 dst.data = (<char **> dst.data)[0] + suboffset
66482  */
66483     __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0);
66484     if (__pyx_t_2) {
66485 
66486       /* "View.MemoryView":892
66487  *     if suboffset >= 0:
66488  *         if not is_slice:
66489  *             if new_ndim == 0:             # <<<<<<<<<<<<<<
66490  *                 dst.data = (<char **> dst.data)[0] + suboffset
66491  *             else:
66492  */
66493       __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0);
66494       if (__pyx_t_2) {
66495 
66496         /* "View.MemoryView":893
66497  *         if not is_slice:
66498  *             if new_ndim == 0:
66499  *                 dst.data = (<char **> dst.data)[0] + suboffset             # <<<<<<<<<<<<<<
66500  *             else:
66501  *                 _err_dim(IndexError, "All dimensions preceding dimension %d "
66502  */
66503         __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset);
66504 
66505         /* "View.MemoryView":892
66506  *     if suboffset >= 0:
66507  *         if not is_slice:
66508  *             if new_ndim == 0:             # <<<<<<<<<<<<<<
66509  *                 dst.data = (<char **> dst.data)[0] + suboffset
66510  *             else:
66511  */
66512         goto __pyx_L26;
66513       }
66514 
66515       /* "View.MemoryView":895
66516  *                 dst.data = (<char **> dst.data)[0] + suboffset
66517  *             else:
66518  *                 _err_dim(IndexError, "All dimensions preceding dimension %d "             # <<<<<<<<<<<<<<
66519  *                                      "must be indexed and not sliced", dim)
66520  *         else:
66521  */
66522       /*else*/ {
66523 
66524         /* "View.MemoryView":896
66525  *             else:
66526  *                 _err_dim(IndexError, "All dimensions preceding dimension %d "
66527  *                                      "must be indexed and not sliced", dim)             # <<<<<<<<<<<<<<
66528  *         else:
66529  *             suboffset_dim[0] = new_ndim
66530  */
66531         __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"All dimensions preceding dimension %d must be indexed and not sliced"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 895, __pyx_L1_error)
66532       }
66533       __pyx_L26:;
66534 
66535       /* "View.MemoryView":891
66536  *
66537  *     if suboffset >= 0:
66538  *         if not is_slice:             # <<<<<<<<<<<<<<
66539  *             if new_ndim == 0:
66540  *                 dst.data = (<char **> dst.data)[0] + suboffset
66541  */
66542       goto __pyx_L25;
66543     }
66544 
66545     /* "View.MemoryView":898
66546  *                                      "must be indexed and not sliced", dim)
66547  *         else:
66548  *             suboffset_dim[0] = new_ndim             # <<<<<<<<<<<<<<
66549  *
66550  *     return 0
66551  */
66552     /*else*/ {
66553       (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim;
66554     }
66555     __pyx_L25:;
66556 
66557     /* "View.MemoryView":890
66558  *         dst.suboffsets[suboffset_dim[0]] += start * stride
66559  *
66560  *     if suboffset >= 0:             # <<<<<<<<<<<<<<
66561  *         if not is_slice:
66562  *             if new_ndim == 0:
66563  */
66564   }
66565 
66566   /* "View.MemoryView":900
66567  *             suboffset_dim[0] = new_ndim
66568  *
66569  *     return 0             # <<<<<<<<<<<<<<
66570  *
66571  *
66572  */
66573   __pyx_r = 0;
66574   goto __pyx_L0;
66575 
66576   /* "View.MemoryView":803
66577  *
66578  * @cname('__pyx_memoryview_slice_memviewslice')
66579  * cdef int slice_memviewslice(             # <<<<<<<<<<<<<<
66580  *         __Pyx_memviewslice *dst,
66581  *         Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset,
66582  */
66583 
66584   /* function exit code */
66585   __pyx_L1_error:;
66586   {
66587     #ifdef WITH_THREAD
66588     PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
66589     #endif
66590     __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename);
66591     #ifdef WITH_THREAD
66592     __Pyx_PyGILState_Release(__pyx_gilstate_save);
66593     #endif
66594   }
66595   __pyx_r = -1;
66596   __pyx_L0:;
66597   return __pyx_r;
66598 }
66599 
66600 /* "View.MemoryView":906
66601  *
66602  * @cname('__pyx_pybuffer_index')
66603  * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index,             # <<<<<<<<<<<<<<
66604  *                           Py_ssize_t dim) except NULL:
66605  *     cdef Py_ssize_t shape, stride, suboffset = -1
66606  */
66607 
66608 static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) {
66609   Py_ssize_t __pyx_v_shape;
66610   Py_ssize_t __pyx_v_stride;
66611   Py_ssize_t __pyx_v_suboffset;
66612   Py_ssize_t __pyx_v_itemsize;
66613   char *__pyx_v_resultp;
66614   char *__pyx_r;
66615   __Pyx_RefNannyDeclarations
66616   Py_ssize_t __pyx_t_1;
66617   int __pyx_t_2;
66618   PyObject *__pyx_t_3 = NULL;
66619   PyObject *__pyx_t_4 = NULL;
66620   __Pyx_RefNannySetupContext("pybuffer_index", 0);
66621 
66622   /* "View.MemoryView":908
66623  * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index,
66624  *                           Py_ssize_t dim) except NULL:
66625  *     cdef Py_ssize_t shape, stride, suboffset = -1             # <<<<<<<<<<<<<<
66626  *     cdef Py_ssize_t itemsize = view.itemsize
66627  *     cdef char *resultp
66628  */
66629   __pyx_v_suboffset = -1L;
66630 
66631   /* "View.MemoryView":909
66632  *                           Py_ssize_t dim) except NULL:
66633  *     cdef Py_ssize_t shape, stride, suboffset = -1
66634  *     cdef Py_ssize_t itemsize = view.itemsize             # <<<<<<<<<<<<<<
66635  *     cdef char *resultp
66636  *
66637  */
66638   __pyx_t_1 = __pyx_v_view->itemsize;
66639   __pyx_v_itemsize = __pyx_t_1;
66640 
66641   /* "View.MemoryView":912
66642  *     cdef char *resultp
66643  *
66644  *     if view.ndim == 0:             # <<<<<<<<<<<<<<
66645  *         shape = view.len / itemsize
66646  *         stride = itemsize
66647  */
66648   __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0);
66649   if (__pyx_t_2) {
66650 
66651     /* "View.MemoryView":913
66652  *
66653  *     if view.ndim == 0:
66654  *         shape = view.len / itemsize             # <<<<<<<<<<<<<<
66655  *         stride = itemsize
66656  *     else:
66657  */
66658     if (unlikely(__pyx_v_itemsize == 0)) {
66659       PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
66660       __PYX_ERR(5, 913, __pyx_L1_error)
66661     }
66662     else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1)  && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) {
66663       PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
66664       __PYX_ERR(5, 913, __pyx_L1_error)
66665     }
66666     __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize);
66667 
66668     /* "View.MemoryView":914
66669  *     if view.ndim == 0:
66670  *         shape = view.len / itemsize
66671  *         stride = itemsize             # <<<<<<<<<<<<<<
66672  *     else:
66673  *         shape = view.shape[dim]
66674  */
66675     __pyx_v_stride = __pyx_v_itemsize;
66676 
66677     /* "View.MemoryView":912
66678  *     cdef char *resultp
66679  *
66680  *     if view.ndim == 0:             # <<<<<<<<<<<<<<
66681  *         shape = view.len / itemsize
66682  *         stride = itemsize
66683  */
66684     goto __pyx_L3;
66685   }
66686 
66687   /* "View.MemoryView":916
66688  *         stride = itemsize
66689  *     else:
66690  *         shape = view.shape[dim]             # <<<<<<<<<<<<<<
66691  *         stride = view.strides[dim]
66692  *         if view.suboffsets != NULL:
66693  */
66694   /*else*/ {
66695     __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]);
66696 
66697     /* "View.MemoryView":917
66698  *     else:
66699  *         shape = view.shape[dim]
66700  *         stride = view.strides[dim]             # <<<<<<<<<<<<<<
66701  *         if view.suboffsets != NULL:
66702  *             suboffset = view.suboffsets[dim]
66703  */
66704     __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]);
66705 
66706     /* "View.MemoryView":918
66707  *         shape = view.shape[dim]
66708  *         stride = view.strides[dim]
66709  *         if view.suboffsets != NULL:             # <<<<<<<<<<<<<<
66710  *             suboffset = view.suboffsets[dim]
66711  *
66712  */
66713     __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0);
66714     if (__pyx_t_2) {
66715 
66716       /* "View.MemoryView":919
66717  *         stride = view.strides[dim]
66718  *         if view.suboffsets != NULL:
66719  *             suboffset = view.suboffsets[dim]             # <<<<<<<<<<<<<<
66720  *
66721  *     if index < 0:
66722  */
66723       __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]);
66724 
66725       /* "View.MemoryView":918
66726  *         shape = view.shape[dim]
66727  *         stride = view.strides[dim]
66728  *         if view.suboffsets != NULL:             # <<<<<<<<<<<<<<
66729  *             suboffset = view.suboffsets[dim]
66730  *
66731  */
66732     }
66733   }
66734   __pyx_L3:;
66735 
66736   /* "View.MemoryView":921
66737  *             suboffset = view.suboffsets[dim]
66738  *
66739  *     if index < 0:             # <<<<<<<<<<<<<<
66740  *         index += view.shape[dim]
66741  *         if index < 0:
66742  */
66743   __pyx_t_2 = ((__pyx_v_index < 0) != 0);
66744   if (__pyx_t_2) {
66745 
66746     /* "View.MemoryView":922
66747  *
66748  *     if index < 0:
66749  *         index += view.shape[dim]             # <<<<<<<<<<<<<<
66750  *         if index < 0:
66751  *             raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
66752  */
66753     __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim]));
66754 
66755     /* "View.MemoryView":923
66756  *     if index < 0:
66757  *         index += view.shape[dim]
66758  *         if index < 0:             # <<<<<<<<<<<<<<
66759  *             raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
66760  *
66761  */
66762     __pyx_t_2 = ((__pyx_v_index < 0) != 0);
66763     if (unlikely(__pyx_t_2)) {
66764 
66765       /* "View.MemoryView":924
66766  *         index += view.shape[dim]
66767  *         if index < 0:
66768  *             raise IndexError("Out of bounds on buffer access (axis %d)" % dim)             # <<<<<<<<<<<<<<
66769  *
66770  *     if index >= shape:
66771  */
66772       __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 924, __pyx_L1_error)
66773       __Pyx_GOTREF(__pyx_t_3);
66774       __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 924, __pyx_L1_error)
66775       __Pyx_GOTREF(__pyx_t_4);
66776       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
66777       __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 924, __pyx_L1_error)
66778       __Pyx_GOTREF(__pyx_t_3);
66779       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
66780       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
66781       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
66782       __PYX_ERR(5, 924, __pyx_L1_error)
66783 
66784       /* "View.MemoryView":923
66785  *     if index < 0:
66786  *         index += view.shape[dim]
66787  *         if index < 0:             # <<<<<<<<<<<<<<
66788  *             raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
66789  *
66790  */
66791     }
66792 
66793     /* "View.MemoryView":921
66794  *             suboffset = view.suboffsets[dim]
66795  *
66796  *     if index < 0:             # <<<<<<<<<<<<<<
66797  *         index += view.shape[dim]
66798  *         if index < 0:
66799  */
66800   }
66801 
66802   /* "View.MemoryView":926
66803  *             raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
66804  *
66805  *     if index >= shape:             # <<<<<<<<<<<<<<
66806  *         raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
66807  *
66808  */
66809   __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0);
66810   if (unlikely(__pyx_t_2)) {
66811 
66812     /* "View.MemoryView":927
66813  *
66814  *     if index >= shape:
66815  *         raise IndexError("Out of bounds on buffer access (axis %d)" % dim)             # <<<<<<<<<<<<<<
66816  *
66817  *     resultp = bufp + index * stride
66818  */
66819     __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 927, __pyx_L1_error)
66820     __Pyx_GOTREF(__pyx_t_3);
66821     __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 927, __pyx_L1_error)
66822     __Pyx_GOTREF(__pyx_t_4);
66823     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
66824     __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 927, __pyx_L1_error)
66825     __Pyx_GOTREF(__pyx_t_3);
66826     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
66827     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
66828     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
66829     __PYX_ERR(5, 927, __pyx_L1_error)
66830 
66831     /* "View.MemoryView":926
66832  *             raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
66833  *
66834  *     if index >= shape:             # <<<<<<<<<<<<<<
66835  *         raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
66836  *
66837  */
66838   }
66839 
66840   /* "View.MemoryView":929
66841  *         raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
66842  *
66843  *     resultp = bufp + index * stride             # <<<<<<<<<<<<<<
66844  *     if suboffset >= 0:
66845  *         resultp = (<char **> resultp)[0] + suboffset
66846  */
66847   __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride));
66848 
66849   /* "View.MemoryView":930
66850  *
66851  *     resultp = bufp + index * stride
66852  *     if suboffset >= 0:             # <<<<<<<<<<<<<<
66853  *         resultp = (<char **> resultp)[0] + suboffset
66854  *
66855  */
66856   __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0);
66857   if (__pyx_t_2) {
66858 
66859     /* "View.MemoryView":931
66860  *     resultp = bufp + index * stride
66861  *     if suboffset >= 0:
66862  *         resultp = (<char **> resultp)[0] + suboffset             # <<<<<<<<<<<<<<
66863  *
66864  *     return resultp
66865  */
66866     __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset);
66867 
66868     /* "View.MemoryView":930
66869  *
66870  *     resultp = bufp + index * stride
66871  *     if suboffset >= 0:             # <<<<<<<<<<<<<<
66872  *         resultp = (<char **> resultp)[0] + suboffset
66873  *
66874  */
66875   }
66876 
66877   /* "View.MemoryView":933
66878  *         resultp = (<char **> resultp)[0] + suboffset
66879  *
66880  *     return resultp             # <<<<<<<<<<<<<<
66881  *
66882  *
66883  */
66884   __pyx_r = __pyx_v_resultp;
66885   goto __pyx_L0;
66886 
66887   /* "View.MemoryView":906
66888  *
66889  * @cname('__pyx_pybuffer_index')
66890  * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index,             # <<<<<<<<<<<<<<
66891  *                           Py_ssize_t dim) except NULL:
66892  *     cdef Py_ssize_t shape, stride, suboffset = -1
66893  */
66894 
66895   /* function exit code */
66896   __pyx_L1_error:;
66897   __Pyx_XDECREF(__pyx_t_3);
66898   __Pyx_XDECREF(__pyx_t_4);
66899   __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename);
66900   __pyx_r = NULL;
66901   __pyx_L0:;
66902   __Pyx_RefNannyFinishContext();
66903   return __pyx_r;
66904 }
66905 
66906 /* "View.MemoryView":939
66907  *
66908  * @cname('__pyx_memslice_transpose')
66909  * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0:             # <<<<<<<<<<<<<<
66910  *     cdef int ndim = memslice.memview.view.ndim
66911  *
66912  */
66913 
66914 static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) {
66915   int __pyx_v_ndim;
66916   Py_ssize_t *__pyx_v_shape;
66917   Py_ssize_t *__pyx_v_strides;
66918   int __pyx_v_i;
66919   int __pyx_v_j;
66920   int __pyx_r;
66921   int __pyx_t_1;
66922   Py_ssize_t *__pyx_t_2;
66923   long __pyx_t_3;
66924   long __pyx_t_4;
66925   Py_ssize_t __pyx_t_5;
66926   Py_ssize_t __pyx_t_6;
66927   int __pyx_t_7;
66928   int __pyx_t_8;
66929   int __pyx_t_9;
66930 
66931   /* "View.MemoryView":940
66932  * @cname('__pyx_memslice_transpose')
66933  * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0:
66934  *     cdef int ndim = memslice.memview.view.ndim             # <<<<<<<<<<<<<<
66935  *
66936  *     cdef Py_ssize_t *shape = memslice.shape
66937  */
66938   __pyx_t_1 = __pyx_v_memslice->memview->view.ndim;
66939   __pyx_v_ndim = __pyx_t_1;
66940 
66941   /* "View.MemoryView":942
66942  *     cdef int ndim = memslice.memview.view.ndim
66943  *
66944  *     cdef Py_ssize_t *shape = memslice.shape             # <<<<<<<<<<<<<<
66945  *     cdef Py_ssize_t *strides = memslice.strides
66946  *
66947  */
66948   __pyx_t_2 = __pyx_v_memslice->shape;
66949   __pyx_v_shape = __pyx_t_2;
66950 
66951   /* "View.MemoryView":943
66952  *
66953  *     cdef Py_ssize_t *shape = memslice.shape
66954  *     cdef Py_ssize_t *strides = memslice.strides             # <<<<<<<<<<<<<<
66955  *
66956  *
66957  */
66958   __pyx_t_2 = __pyx_v_memslice->strides;
66959   __pyx_v_strides = __pyx_t_2;
66960 
66961   /* "View.MemoryView":947
66962  *
66963  *     cdef int i, j
66964  *     for i in range(ndim / 2):             # <<<<<<<<<<<<<<
66965  *         j = ndim - 1 - i
66966  *         strides[i], strides[j] = strides[j], strides[i]
66967  */
66968   __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2);
66969   __pyx_t_4 = __pyx_t_3;
66970   for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) {
66971     __pyx_v_i = __pyx_t_1;
66972 
66973     /* "View.MemoryView":948
66974  *     cdef int i, j
66975  *     for i in range(ndim / 2):
66976  *         j = ndim - 1 - i             # <<<<<<<<<<<<<<
66977  *         strides[i], strides[j] = strides[j], strides[i]
66978  *         shape[i], shape[j] = shape[j], shape[i]
66979  */
66980     __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i);
66981 
66982     /* "View.MemoryView":949
66983  *     for i in range(ndim / 2):
66984  *         j = ndim - 1 - i
66985  *         strides[i], strides[j] = strides[j], strides[i]             # <<<<<<<<<<<<<<
66986  *         shape[i], shape[j] = shape[j], shape[i]
66987  *
66988  */
66989     __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]);
66990     __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]);
66991     (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5;
66992     (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6;
66993 
66994     /* "View.MemoryView":950
66995  *         j = ndim - 1 - i
66996  *         strides[i], strides[j] = strides[j], strides[i]
66997  *         shape[i], shape[j] = shape[j], shape[i]             # <<<<<<<<<<<<<<
66998  *
66999  *         if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0:
67000  */
67001     __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]);
67002     __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]);
67003     (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6;
67004     (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5;
67005 
67006     /* "View.MemoryView":952
67007  *         shape[i], shape[j] = shape[j], shape[i]
67008  *
67009  *         if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0:             # <<<<<<<<<<<<<<
67010  *             _err(ValueError, "Cannot transpose memoryview with indirect dimensions")
67011  *
67012  */
67013     __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0);
67014     if (!__pyx_t_8) {
67015     } else {
67016       __pyx_t_7 = __pyx_t_8;
67017       goto __pyx_L6_bool_binop_done;
67018     }
67019     __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0);
67020     __pyx_t_7 = __pyx_t_8;
67021     __pyx_L6_bool_binop_done:;
67022     if (__pyx_t_7) {
67023 
67024       /* "View.MemoryView":953
67025  *
67026  *         if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0:
67027  *             _err(ValueError, "Cannot transpose memoryview with indirect dimensions")             # <<<<<<<<<<<<<<
67028  *
67029  *     return 1
67030  */
67031       __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, ((char *)"Cannot transpose memoryview with indirect dimensions")); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 953, __pyx_L1_error)
67032 
67033       /* "View.MemoryView":952
67034  *         shape[i], shape[j] = shape[j], shape[i]
67035  *
67036  *         if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0:             # <<<<<<<<<<<<<<
67037  *             _err(ValueError, "Cannot transpose memoryview with indirect dimensions")
67038  *
67039  */
67040     }
67041   }
67042 
67043   /* "View.MemoryView":955
67044  *             _err(ValueError, "Cannot transpose memoryview with indirect dimensions")
67045  *
67046  *     return 1             # <<<<<<<<<<<<<<
67047  *
67048  *
67049  */
67050   __pyx_r = 1;
67051   goto __pyx_L0;
67052 
67053   /* "View.MemoryView":939
67054  *
67055  * @cname('__pyx_memslice_transpose')
67056  * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0:             # <<<<<<<<<<<<<<
67057  *     cdef int ndim = memslice.memview.view.ndim
67058  *
67059  */
67060 
67061   /* function exit code */
67062   __pyx_L1_error:;
67063   {
67064     #ifdef WITH_THREAD
67065     PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
67066     #endif
67067     __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename);
67068     #ifdef WITH_THREAD
67069     __Pyx_PyGILState_Release(__pyx_gilstate_save);
67070     #endif
67071   }
67072   __pyx_r = 0;
67073   __pyx_L0:;
67074   return __pyx_r;
67075 }
67076 
67077 /* "View.MemoryView":972
67078  *     cdef int (*to_dtype_func)(char *, object) except 0
67079  *
67080  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
67081  *         __PYX_XDEC_MEMVIEW(&self.from_slice, 1)
67082  *
67083  */
67084 
67085 /* Python wrapper */
67086 static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/
67087 static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) {
67088   __Pyx_RefNannyDeclarations
67089   __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
67090   __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self));
67091 
67092   /* function exit code */
67093   __Pyx_RefNannyFinishContext();
67094 }
67095 
67096 static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) {
67097   __Pyx_RefNannyDeclarations
67098   __Pyx_RefNannySetupContext("__dealloc__", 0);
67099 
67100   /* "View.MemoryView":973
67101  *
67102  *     def __dealloc__(self):
67103  *         __PYX_XDEC_MEMVIEW(&self.from_slice, 1)             # <<<<<<<<<<<<<<
67104  *
67105  *     cdef convert_item_to_object(self, char *itemp):
67106  */
67107   __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1);
67108 
67109   /* "View.MemoryView":972
67110  *     cdef int (*to_dtype_func)(char *, object) except 0
67111  *
67112  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
67113  *         __PYX_XDEC_MEMVIEW(&self.from_slice, 1)
67114  *
67115  */
67116 
67117   /* function exit code */
67118   __Pyx_RefNannyFinishContext();
67119 }
67120 
67121 /* "View.MemoryView":975
67122  *         __PYX_XDEC_MEMVIEW(&self.from_slice, 1)
67123  *
67124  *     cdef convert_item_to_object(self, char *itemp):             # <<<<<<<<<<<<<<
67125  *         if self.to_object_func != NULL:
67126  *             return self.to_object_func(itemp)
67127  */
67128 
67129 static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) {
67130   PyObject *__pyx_r = NULL;
67131   __Pyx_RefNannyDeclarations
67132   int __pyx_t_1;
67133   PyObject *__pyx_t_2 = NULL;
67134   __Pyx_RefNannySetupContext("convert_item_to_object", 0);
67135 
67136   /* "View.MemoryView":976
67137  *
67138  *     cdef convert_item_to_object(self, char *itemp):
67139  *         if self.to_object_func != NULL:             # <<<<<<<<<<<<<<
67140  *             return self.to_object_func(itemp)
67141  *         else:
67142  */
67143   __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0);
67144   if (__pyx_t_1) {
67145 
67146     /* "View.MemoryView":977
67147  *     cdef convert_item_to_object(self, char *itemp):
67148  *         if self.to_object_func != NULL:
67149  *             return self.to_object_func(itemp)             # <<<<<<<<<<<<<<
67150  *         else:
67151  *             return memoryview.convert_item_to_object(self, itemp)
67152  */
67153     __Pyx_XDECREF(__pyx_r);
67154     __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 977, __pyx_L1_error)
67155     __Pyx_GOTREF(__pyx_t_2);
67156     __pyx_r = __pyx_t_2;
67157     __pyx_t_2 = 0;
67158     goto __pyx_L0;
67159 
67160     /* "View.MemoryView":976
67161  *
67162  *     cdef convert_item_to_object(self, char *itemp):
67163  *         if self.to_object_func != NULL:             # <<<<<<<<<<<<<<
67164  *             return self.to_object_func(itemp)
67165  *         else:
67166  */
67167   }
67168 
67169   /* "View.MemoryView":979
67170  *             return self.to_object_func(itemp)
67171  *         else:
67172  *             return memoryview.convert_item_to_object(self, itemp)             # <<<<<<<<<<<<<<
67173  *
67174  *     cdef assign_item_from_object(self, char *itemp, object value):
67175  */
67176   /*else*/ {
67177     __Pyx_XDECREF(__pyx_r);
67178     __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 979, __pyx_L1_error)
67179     __Pyx_GOTREF(__pyx_t_2);
67180     __pyx_r = __pyx_t_2;
67181     __pyx_t_2 = 0;
67182     goto __pyx_L0;
67183   }
67184 
67185   /* "View.MemoryView":975
67186  *         __PYX_XDEC_MEMVIEW(&self.from_slice, 1)
67187  *
67188  *     cdef convert_item_to_object(self, char *itemp):             # <<<<<<<<<<<<<<
67189  *         if self.to_object_func != NULL:
67190  *             return self.to_object_func(itemp)
67191  */
67192 
67193   /* function exit code */
67194   __pyx_L1_error:;
67195   __Pyx_XDECREF(__pyx_t_2);
67196   __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
67197   __pyx_r = 0;
67198   __pyx_L0:;
67199   __Pyx_XGIVEREF(__pyx_r);
67200   __Pyx_RefNannyFinishContext();
67201   return __pyx_r;
67202 }
67203 
67204 /* "View.MemoryView":981
67205  *             return memoryview.convert_item_to_object(self, itemp)
67206  *
67207  *     cdef assign_item_from_object(self, char *itemp, object value):             # <<<<<<<<<<<<<<
67208  *         if self.to_dtype_func != NULL:
67209  *             self.to_dtype_func(itemp, value)
67210  */
67211 
67212 static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) {
67213   PyObject *__pyx_r = NULL;
67214   __Pyx_RefNannyDeclarations
67215   int __pyx_t_1;
67216   int __pyx_t_2;
67217   PyObject *__pyx_t_3 = NULL;
67218   __Pyx_RefNannySetupContext("assign_item_from_object", 0);
67219 
67220   /* "View.MemoryView":982
67221  *
67222  *     cdef assign_item_from_object(self, char *itemp, object value):
67223  *         if self.to_dtype_func != NULL:             # <<<<<<<<<<<<<<
67224  *             self.to_dtype_func(itemp, value)
67225  *         else:
67226  */
67227   __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0);
67228   if (__pyx_t_1) {
67229 
67230     /* "View.MemoryView":983
67231  *     cdef assign_item_from_object(self, char *itemp, object value):
67232  *         if self.to_dtype_func != NULL:
67233  *             self.to_dtype_func(itemp, value)             # <<<<<<<<<<<<<<
67234  *         else:
67235  *             memoryview.assign_item_from_object(self, itemp, value)
67236  */
67237     __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(5, 983, __pyx_L1_error)
67238 
67239     /* "View.MemoryView":982
67240  *
67241  *     cdef assign_item_from_object(self, char *itemp, object value):
67242  *         if self.to_dtype_func != NULL:             # <<<<<<<<<<<<<<
67243  *             self.to_dtype_func(itemp, value)
67244  *         else:
67245  */
67246     goto __pyx_L3;
67247   }
67248 
67249   /* "View.MemoryView":985
67250  *             self.to_dtype_func(itemp, value)
67251  *         else:
67252  *             memoryview.assign_item_from_object(self, itemp, value)             # <<<<<<<<<<<<<<
67253  *
67254  *     @property
67255  */
67256   /*else*/ {
67257     __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 985, __pyx_L1_error)
67258     __Pyx_GOTREF(__pyx_t_3);
67259     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
67260   }
67261   __pyx_L3:;
67262 
67263   /* "View.MemoryView":981
67264  *             return memoryview.convert_item_to_object(self, itemp)
67265  *
67266  *     cdef assign_item_from_object(self, char *itemp, object value):             # <<<<<<<<<<<<<<
67267  *         if self.to_dtype_func != NULL:
67268  *             self.to_dtype_func(itemp, value)
67269  */
67270 
67271   /* function exit code */
67272   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
67273   goto __pyx_L0;
67274   __pyx_L1_error:;
67275   __Pyx_XDECREF(__pyx_t_3);
67276   __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
67277   __pyx_r = 0;
67278   __pyx_L0:;
67279   __Pyx_XGIVEREF(__pyx_r);
67280   __Pyx_RefNannyFinishContext();
67281   return __pyx_r;
67282 }
67283 
67284 /* "View.MemoryView":988
67285  *
67286  *     @property
67287  *     def base(self):             # <<<<<<<<<<<<<<
67288  *         return self.from_object
67289  *
67290  */
67291 
67292 /* Python wrapper */
67293 static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self); /*proto*/
67294 static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self) {
67295   PyObject *__pyx_r = 0;
67296   __Pyx_RefNannyDeclarations
67297   __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
67298   __pyx_r = __pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self));
67299 
67300   /* function exit code */
67301   __Pyx_RefNannyFinishContext();
67302   return __pyx_r;
67303 }
67304 
67305 static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) {
67306   PyObject *__pyx_r = NULL;
67307   __Pyx_RefNannyDeclarations
67308   __Pyx_RefNannySetupContext("__get__", 0);
67309 
67310   /* "View.MemoryView":989
67311  *     @property
67312  *     def base(self):
67313  *         return self.from_object             # <<<<<<<<<<<<<<
67314  *
67315  *     __pyx_getbuffer = capsule(<void *> &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)")
67316  */
67317   __Pyx_XDECREF(__pyx_r);
67318   __Pyx_INCREF(__pyx_v_self->from_object);
67319   __pyx_r = __pyx_v_self->from_object;
67320   goto __pyx_L0;
67321 
67322   /* "View.MemoryView":988
67323  *
67324  *     @property
67325  *     def base(self):             # <<<<<<<<<<<<<<
67326  *         return self.from_object
67327  *
67328  */
67329 
67330   /* function exit code */
67331   __pyx_L0:;
67332   __Pyx_XGIVEREF(__pyx_r);
67333   __Pyx_RefNannyFinishContext();
67334   return __pyx_r;
67335 }
67336 
67337 /* "(tree fragment)":1
67338  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
67339  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
67340  * def __setstate_cython__(self, __pyx_state):
67341  */
67342 
67343 /* Python wrapper */
67344 static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
67345 static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
67346   PyObject *__pyx_r = 0;
67347   __Pyx_RefNannyDeclarations
67348   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
67349   __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self));
67350 
67351   /* function exit code */
67352   __Pyx_RefNannyFinishContext();
67353   return __pyx_r;
67354 }
67355 
67356 static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self) {
67357   PyObject *__pyx_r = NULL;
67358   __Pyx_RefNannyDeclarations
67359   PyObject *__pyx_t_1 = NULL;
67360   __Pyx_RefNannySetupContext("__reduce_cython__", 0);
67361 
67362   /* "(tree fragment)":2
67363  * def __reduce_cython__(self):
67364  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
67365  * def __setstate_cython__(self, __pyx_state):
67366  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
67367  */
67368   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__104, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2, __pyx_L1_error)
67369   __Pyx_GOTREF(__pyx_t_1);
67370   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
67371   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
67372   __PYX_ERR(5, 2, __pyx_L1_error)
67373 
67374   /* "(tree fragment)":1
67375  * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
67376  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
67377  * def __setstate_cython__(self, __pyx_state):
67378  */
67379 
67380   /* function exit code */
67381   __pyx_L1_error:;
67382   __Pyx_XDECREF(__pyx_t_1);
67383   __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
67384   __pyx_r = NULL;
67385   __Pyx_XGIVEREF(__pyx_r);
67386   __Pyx_RefNannyFinishContext();
67387   return __pyx_r;
67388 }
67389 
67390 /* "(tree fragment)":3
67391  * def __reduce_cython__(self):
67392  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
67393  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
67394  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
67395  */
67396 
67397 /* Python wrapper */
67398 static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
67399 static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
67400   PyObject *__pyx_r = 0;
67401   __Pyx_RefNannyDeclarations
67402   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
67403   __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
67404 
67405   /* function exit code */
67406   __Pyx_RefNannyFinishContext();
67407   return __pyx_r;
67408 }
67409 
67410 static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
67411   PyObject *__pyx_r = NULL;
67412   __Pyx_RefNannyDeclarations
67413   PyObject *__pyx_t_1 = NULL;
67414   __Pyx_RefNannySetupContext("__setstate_cython__", 0);
67415 
67416   /* "(tree fragment)":4
67417  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
67418  * def __setstate_cython__(self, __pyx_state):
67419  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
67420  */
67421   __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__105, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error)
67422   __Pyx_GOTREF(__pyx_t_1);
67423   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
67424   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
67425   __PYX_ERR(5, 4, __pyx_L1_error)
67426 
67427   /* "(tree fragment)":3
67428  * def __reduce_cython__(self):
67429  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
67430  * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
67431  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
67432  */
67433 
67434   /* function exit code */
67435   __pyx_L1_error:;
67436   __Pyx_XDECREF(__pyx_t_1);
67437   __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
67438   __pyx_r = NULL;
67439   __Pyx_XGIVEREF(__pyx_r);
67440   __Pyx_RefNannyFinishContext();
67441   return __pyx_r;
67442 }
67443 
67444 /* "View.MemoryView":995
67445  *
67446  * @cname('__pyx_memoryview_fromslice')
67447  * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice,             # <<<<<<<<<<<<<<
67448  *                           int ndim,
67449  *                           object (*to_object_func)(char *),
67450  */
67451 
67452 static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) {
67453   struct __pyx_memoryviewslice_obj *__pyx_v_result = 0;
67454   Py_ssize_t __pyx_v_suboffset;
67455   PyObject *__pyx_v_length = NULL;
67456   PyObject *__pyx_r = NULL;
67457   __Pyx_RefNannyDeclarations
67458   int __pyx_t_1;
67459   PyObject *__pyx_t_2 = NULL;
67460   PyObject *__pyx_t_3 = NULL;
67461   __Pyx_TypeInfo *__pyx_t_4;
67462   Py_buffer __pyx_t_5;
67463   Py_ssize_t *__pyx_t_6;
67464   Py_ssize_t *__pyx_t_7;
67465   Py_ssize_t *__pyx_t_8;
67466   Py_ssize_t __pyx_t_9;
67467   __Pyx_RefNannySetupContext("memoryview_fromslice", 0);
67468 
67469   /* "View.MemoryView":1003
67470  *     cdef _memoryviewslice result
67471  *
67472  *     if <PyObject *> memviewslice.memview == Py_None:             # <<<<<<<<<<<<<<
67473  *         return None
67474  *
67475  */
67476   __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0);
67477   if (__pyx_t_1) {
67478 
67479     /* "View.MemoryView":1004
67480  *
67481  *     if <PyObject *> memviewslice.memview == Py_None:
67482  *         return None             # <<<<<<<<<<<<<<
67483  *
67484  *
67485  */
67486     __Pyx_XDECREF(__pyx_r);
67487     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
67488     goto __pyx_L0;
67489 
67490     /* "View.MemoryView":1003
67491  *     cdef _memoryviewslice result
67492  *
67493  *     if <PyObject *> memviewslice.memview == Py_None:             # <<<<<<<<<<<<<<
67494  *         return None
67495  *
67496  */
67497   }
67498 
67499   /* "View.MemoryView":1009
67500  *
67501  *
67502  *     result = _memoryviewslice(None, 0, dtype_is_object)             # <<<<<<<<<<<<<<
67503  *
67504  *     result.from_slice = memviewslice
67505  */
67506   __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1009, __pyx_L1_error)
67507   __Pyx_GOTREF(__pyx_t_2);
67508   __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1009, __pyx_L1_error)
67509   __Pyx_GOTREF(__pyx_t_3);
67510   __Pyx_INCREF(Py_None);
67511   __Pyx_GIVEREF(Py_None);
67512   PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None);
67513   __Pyx_INCREF(__pyx_int_0);
67514   __Pyx_GIVEREF(__pyx_int_0);
67515   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0);
67516   __Pyx_GIVEREF(__pyx_t_2);
67517   PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
67518   __pyx_t_2 = 0;
67519   __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1009, __pyx_L1_error)
67520   __Pyx_GOTREF(__pyx_t_2);
67521   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
67522   __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2);
67523   __pyx_t_2 = 0;
67524 
67525   /* "View.MemoryView":1011
67526  *     result = _memoryviewslice(None, 0, dtype_is_object)
67527  *
67528  *     result.from_slice = memviewslice             # <<<<<<<<<<<<<<
67529  *     __PYX_INC_MEMVIEW(&memviewslice, 1)
67530  *
67531  */
67532   __pyx_v_result->from_slice = __pyx_v_memviewslice;
67533 
67534   /* "View.MemoryView":1012
67535  *
67536  *     result.from_slice = memviewslice
67537  *     __PYX_INC_MEMVIEW(&memviewslice, 1)             # <<<<<<<<<<<<<<
67538  *
67539  *     result.from_object = (<memoryview> memviewslice.memview).base
67540  */
67541   __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1);
67542 
67543   /* "View.MemoryView":1014
67544  *     __PYX_INC_MEMVIEW(&memviewslice, 1)
67545  *
67546  *     result.from_object = (<memoryview> memviewslice.memview).base             # <<<<<<<<<<<<<<
67547  *     result.typeinfo = memviewslice.memview.typeinfo
67548  *
67549  */
67550   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1014, __pyx_L1_error)
67551   __Pyx_GOTREF(__pyx_t_2);
67552   __Pyx_GIVEREF(__pyx_t_2);
67553   __Pyx_GOTREF(__pyx_v_result->from_object);
67554   __Pyx_DECREF(__pyx_v_result->from_object);
67555   __pyx_v_result->from_object = __pyx_t_2;
67556   __pyx_t_2 = 0;
67557 
67558   /* "View.MemoryView":1015
67559  *
67560  *     result.from_object = (<memoryview> memviewslice.memview).base
67561  *     result.typeinfo = memviewslice.memview.typeinfo             # <<<<<<<<<<<<<<
67562  *
67563  *     result.view = memviewslice.memview.view
67564  */
67565   __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo;
67566   __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4;
67567 
67568   /* "View.MemoryView":1017
67569  *     result.typeinfo = memviewslice.memview.typeinfo
67570  *
67571  *     result.view = memviewslice.memview.view             # <<<<<<<<<<<<<<
67572  *     result.view.buf = <void *> memviewslice.data
67573  *     result.view.ndim = ndim
67574  */
67575   __pyx_t_5 = __pyx_v_memviewslice.memview->view;
67576   __pyx_v_result->__pyx_base.view = __pyx_t_5;
67577 
67578   /* "View.MemoryView":1018
67579  *
67580  *     result.view = memviewslice.memview.view
67581  *     result.view.buf = <void *> memviewslice.data             # <<<<<<<<<<<<<<
67582  *     result.view.ndim = ndim
67583  *     (<__pyx_buffer *> &result.view).obj = Py_None
67584  */
67585   __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data);
67586 
67587   /* "View.MemoryView":1019
67588  *     result.view = memviewslice.memview.view
67589  *     result.view.buf = <void *> memviewslice.data
67590  *     result.view.ndim = ndim             # <<<<<<<<<<<<<<
67591  *     (<__pyx_buffer *> &result.view).obj = Py_None
67592  *     Py_INCREF(Py_None)
67593  */
67594   __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim;
67595 
67596   /* "View.MemoryView":1020
67597  *     result.view.buf = <void *> memviewslice.data
67598  *     result.view.ndim = ndim
67599  *     (<__pyx_buffer *> &result.view).obj = Py_None             # <<<<<<<<<<<<<<
67600  *     Py_INCREF(Py_None)
67601  *
67602  */
67603   ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None;
67604 
67605   /* "View.MemoryView":1021
67606  *     result.view.ndim = ndim
67607  *     (<__pyx_buffer *> &result.view).obj = Py_None
67608  *     Py_INCREF(Py_None)             # <<<<<<<<<<<<<<
67609  *
67610  *     if (<memoryview>memviewslice.memview).flags & PyBUF_WRITABLE:
67611  */
67612   Py_INCREF(Py_None);
67613 
67614   /* "View.MemoryView":1023
67615  *     Py_INCREF(Py_None)
67616  *
67617  *     if (<memoryview>memviewslice.memview).flags & PyBUF_WRITABLE:             # <<<<<<<<<<<<<<
67618  *         result.flags = PyBUF_RECORDS
67619  *     else:
67620  */
67621   __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0);
67622   if (__pyx_t_1) {
67623 
67624     /* "View.MemoryView":1024
67625  *
67626  *     if (<memoryview>memviewslice.memview).flags & PyBUF_WRITABLE:
67627  *         result.flags = PyBUF_RECORDS             # <<<<<<<<<<<<<<
67628  *     else:
67629  *         result.flags = PyBUF_RECORDS_RO
67630  */
67631     __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS;
67632 
67633     /* "View.MemoryView":1023
67634  *     Py_INCREF(Py_None)
67635  *
67636  *     if (<memoryview>memviewslice.memview).flags & PyBUF_WRITABLE:             # <<<<<<<<<<<<<<
67637  *         result.flags = PyBUF_RECORDS
67638  *     else:
67639  */
67640     goto __pyx_L4;
67641   }
67642 
67643   /* "View.MemoryView":1026
67644  *         result.flags = PyBUF_RECORDS
67645  *     else:
67646  *         result.flags = PyBUF_RECORDS_RO             # <<<<<<<<<<<<<<
67647  *
67648  *     result.view.shape = <Py_ssize_t *> result.from_slice.shape
67649  */
67650   /*else*/ {
67651     __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO;
67652   }
67653   __pyx_L4:;
67654 
67655   /* "View.MemoryView":1028
67656  *         result.flags = PyBUF_RECORDS_RO
67657  *
67658  *     result.view.shape = <Py_ssize_t *> result.from_slice.shape             # <<<<<<<<<<<<<<
67659  *     result.view.strides = <Py_ssize_t *> result.from_slice.strides
67660  *
67661  */
67662   __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape);
67663 
67664   /* "View.MemoryView":1029
67665  *
67666  *     result.view.shape = <Py_ssize_t *> result.from_slice.shape
67667  *     result.view.strides = <Py_ssize_t *> result.from_slice.strides             # <<<<<<<<<<<<<<
67668  *
67669  *
67670  */
67671   __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides);
67672 
67673   /* "View.MemoryView":1032
67674  *
67675  *
67676  *     result.view.suboffsets = NULL             # <<<<<<<<<<<<<<
67677  *     for suboffset in result.from_slice.suboffsets[:ndim]:
67678  *         if suboffset >= 0:
67679  */
67680   __pyx_v_result->__pyx_base.view.suboffsets = NULL;
67681 
67682   /* "View.MemoryView":1033
67683  *
67684  *     result.view.suboffsets = NULL
67685  *     for suboffset in result.from_slice.suboffsets[:ndim]:             # <<<<<<<<<<<<<<
67686  *         if suboffset >= 0:
67687  *             result.view.suboffsets = <Py_ssize_t *> result.from_slice.suboffsets
67688  */
67689   __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim);
67690   for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) {
67691     __pyx_t_6 = __pyx_t_8;
67692     __pyx_v_suboffset = (__pyx_t_6[0]);
67693 
67694     /* "View.MemoryView":1034
67695  *     result.view.suboffsets = NULL
67696  *     for suboffset in result.from_slice.suboffsets[:ndim]:
67697  *         if suboffset >= 0:             # <<<<<<<<<<<<<<
67698  *             result.view.suboffsets = <Py_ssize_t *> result.from_slice.suboffsets
67699  *             break
67700  */
67701     __pyx_t_1 = ((__pyx_v_suboffset >= 0) != 0);
67702     if (__pyx_t_1) {
67703 
67704       /* "View.MemoryView":1035
67705  *     for suboffset in result.from_slice.suboffsets[:ndim]:
67706  *         if suboffset >= 0:
67707  *             result.view.suboffsets = <Py_ssize_t *> result.from_slice.suboffsets             # <<<<<<<<<<<<<<
67708  *             break
67709  *
67710  */
67711       __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets);
67712 
67713       /* "View.MemoryView":1036
67714  *         if suboffset >= 0:
67715  *             result.view.suboffsets = <Py_ssize_t *> result.from_slice.suboffsets
67716  *             break             # <<<<<<<<<<<<<<
67717  *
67718  *     result.view.len = result.view.itemsize
67719  */
67720       goto __pyx_L6_break;
67721 
67722       /* "View.MemoryView":1034
67723  *     result.view.suboffsets = NULL
67724  *     for suboffset in result.from_slice.suboffsets[:ndim]:
67725  *         if suboffset >= 0:             # <<<<<<<<<<<<<<
67726  *             result.view.suboffsets = <Py_ssize_t *> result.from_slice.suboffsets
67727  *             break
67728  */
67729     }
67730   }
67731   __pyx_L6_break:;
67732 
67733   /* "View.MemoryView":1038
67734  *             break
67735  *
67736  *     result.view.len = result.view.itemsize             # <<<<<<<<<<<<<<
67737  *     for length in result.view.shape[:ndim]:
67738  *         result.view.len *= length
67739  */
67740   __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize;
67741   __pyx_v_result->__pyx_base.view.len = __pyx_t_9;
67742 
67743   /* "View.MemoryView":1039
67744  *
67745  *     result.view.len = result.view.itemsize
67746  *     for length in result.view.shape[:ndim]:             # <<<<<<<<<<<<<<
67747  *         result.view.len *= length
67748  *
67749  */
67750   __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim);
67751   for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) {
67752     __pyx_t_6 = __pyx_t_8;
67753     __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1039, __pyx_L1_error)
67754     __Pyx_GOTREF(__pyx_t_2);
67755     __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2);
67756     __pyx_t_2 = 0;
67757 
67758     /* "View.MemoryView":1040
67759  *     result.view.len = result.view.itemsize
67760  *     for length in result.view.shape[:ndim]:
67761  *         result.view.len *= length             # <<<<<<<<<<<<<<
67762  *
67763  *     result.to_object_func = to_object_func
67764  */
67765     __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1040, __pyx_L1_error)
67766     __Pyx_GOTREF(__pyx_t_2);
67767     __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1040, __pyx_L1_error)
67768     __Pyx_GOTREF(__pyx_t_3);
67769     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
67770     __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(5, 1040, __pyx_L1_error)
67771     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
67772     __pyx_v_result->__pyx_base.view.len = __pyx_t_9;
67773   }
67774 
67775   /* "View.MemoryView":1042
67776  *         result.view.len *= length
67777  *
67778  *     result.to_object_func = to_object_func             # <<<<<<<<<<<<<<
67779  *     result.to_dtype_func = to_dtype_func
67780  *
67781  */
67782   __pyx_v_result->to_object_func = __pyx_v_to_object_func;
67783 
67784   /* "View.MemoryView":1043
67785  *
67786  *     result.to_object_func = to_object_func
67787  *     result.to_dtype_func = to_dtype_func             # <<<<<<<<<<<<<<
67788  *
67789  *     return result
67790  */
67791   __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func;
67792 
67793   /* "View.MemoryView":1045
67794  *     result.to_dtype_func = to_dtype_func
67795  *
67796  *     return result             # <<<<<<<<<<<<<<
67797  *
67798  * @cname('__pyx_memoryview_get_slice_from_memoryview')
67799  */
67800   __Pyx_XDECREF(__pyx_r);
67801   __Pyx_INCREF(((PyObject *)__pyx_v_result));
67802   __pyx_r = ((PyObject *)__pyx_v_result);
67803   goto __pyx_L0;
67804 
67805   /* "View.MemoryView":995
67806  *
67807  * @cname('__pyx_memoryview_fromslice')
67808  * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice,             # <<<<<<<<<<<<<<
67809  *                           int ndim,
67810  *                           object (*to_object_func)(char *),
67811  */
67812 
67813   /* function exit code */
67814   __pyx_L1_error:;
67815   __Pyx_XDECREF(__pyx_t_2);
67816   __Pyx_XDECREF(__pyx_t_3);
67817   __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename);
67818   __pyx_r = 0;
67819   __pyx_L0:;
67820   __Pyx_XDECREF((PyObject *)__pyx_v_result);
67821   __Pyx_XDECREF(__pyx_v_length);
67822   __Pyx_XGIVEREF(__pyx_r);
67823   __Pyx_RefNannyFinishContext();
67824   return __pyx_r;
67825 }
67826 
67827 /* "View.MemoryView":1048
67828  *
67829  * @cname('__pyx_memoryview_get_slice_from_memoryview')
67830  * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview,             # <<<<<<<<<<<<<<
67831  *                                                    __Pyx_memviewslice *mslice):
67832  *     cdef _memoryviewslice obj
67833  */
67834 
67835 static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) {
67836   struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0;
67837   __Pyx_memviewslice *__pyx_r;
67838   __Pyx_RefNannyDeclarations
67839   int __pyx_t_1;
67840   int __pyx_t_2;
67841   PyObject *__pyx_t_3 = NULL;
67842   __Pyx_RefNannySetupContext("get_slice_from_memview", 0);
67843 
67844   /* "View.MemoryView":1051
67845  *                                                    __Pyx_memviewslice *mslice):
67846  *     cdef _memoryviewslice obj
67847  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
67848  *         obj = memview
67849  *         return &obj.from_slice
67850  */
67851   __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type);
67852   __pyx_t_2 = (__pyx_t_1 != 0);
67853   if (__pyx_t_2) {
67854 
67855     /* "View.MemoryView":1052
67856  *     cdef _memoryviewslice obj
67857  *     if isinstance(memview, _memoryviewslice):
67858  *         obj = memview             # <<<<<<<<<<<<<<
67859  *         return &obj.from_slice
67860  *     else:
67861  */
67862     if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(5, 1052, __pyx_L1_error)
67863     __pyx_t_3 = ((PyObject *)__pyx_v_memview);
67864     __Pyx_INCREF(__pyx_t_3);
67865     __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3);
67866     __pyx_t_3 = 0;
67867 
67868     /* "View.MemoryView":1053
67869  *     if isinstance(memview, _memoryviewslice):
67870  *         obj = memview
67871  *         return &obj.from_slice             # <<<<<<<<<<<<<<
67872  *     else:
67873  *         slice_copy(memview, mslice)
67874  */
67875     __pyx_r = (&__pyx_v_obj->from_slice);
67876     goto __pyx_L0;
67877 
67878     /* "View.MemoryView":1051
67879  *                                                    __Pyx_memviewslice *mslice):
67880  *     cdef _memoryviewslice obj
67881  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
67882  *         obj = memview
67883  *         return &obj.from_slice
67884  */
67885   }
67886 
67887   /* "View.MemoryView":1055
67888  *         return &obj.from_slice
67889  *     else:
67890  *         slice_copy(memview, mslice)             # <<<<<<<<<<<<<<
67891  *         return mslice
67892  *
67893  */
67894   /*else*/ {
67895     __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice);
67896 
67897     /* "View.MemoryView":1056
67898  *     else:
67899  *         slice_copy(memview, mslice)
67900  *         return mslice             # <<<<<<<<<<<<<<
67901  *
67902  * @cname('__pyx_memoryview_slice_copy')
67903  */
67904     __pyx_r = __pyx_v_mslice;
67905     goto __pyx_L0;
67906   }
67907 
67908   /* "View.MemoryView":1048
67909  *
67910  * @cname('__pyx_memoryview_get_slice_from_memoryview')
67911  * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview,             # <<<<<<<<<<<<<<
67912  *                                                    __Pyx_memviewslice *mslice):
67913  *     cdef _memoryviewslice obj
67914  */
67915 
67916   /* function exit code */
67917   __pyx_L1_error:;
67918   __Pyx_XDECREF(__pyx_t_3);
67919   __Pyx_WriteUnraisable("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
67920   __pyx_r = 0;
67921   __pyx_L0:;
67922   __Pyx_XDECREF((PyObject *)__pyx_v_obj);
67923   __Pyx_RefNannyFinishContext();
67924   return __pyx_r;
67925 }
67926 
67927 /* "View.MemoryView":1059
67928  *
67929  * @cname('__pyx_memoryview_slice_copy')
67930  * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst):             # <<<<<<<<<<<<<<
67931  *     cdef int dim
67932  *     cdef (Py_ssize_t*) shape, strides, suboffsets
67933  */
67934 
67935 static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) {
67936   int __pyx_v_dim;
67937   Py_ssize_t *__pyx_v_shape;
67938   Py_ssize_t *__pyx_v_strides;
67939   Py_ssize_t *__pyx_v_suboffsets;
67940   __Pyx_RefNannyDeclarations
67941   Py_ssize_t *__pyx_t_1;
67942   int __pyx_t_2;
67943   int __pyx_t_3;
67944   int __pyx_t_4;
67945   Py_ssize_t __pyx_t_5;
67946   __Pyx_RefNannySetupContext("slice_copy", 0);
67947 
67948   /* "View.MemoryView":1063
67949  *     cdef (Py_ssize_t*) shape, strides, suboffsets
67950  *
67951  *     shape = memview.view.shape             # <<<<<<<<<<<<<<
67952  *     strides = memview.view.strides
67953  *     suboffsets = memview.view.suboffsets
67954  */
67955   __pyx_t_1 = __pyx_v_memview->view.shape;
67956   __pyx_v_shape = __pyx_t_1;
67957 
67958   /* "View.MemoryView":1064
67959  *
67960  *     shape = memview.view.shape
67961  *     strides = memview.view.strides             # <<<<<<<<<<<<<<
67962  *     suboffsets = memview.view.suboffsets
67963  *
67964  */
67965   __pyx_t_1 = __pyx_v_memview->view.strides;
67966   __pyx_v_strides = __pyx_t_1;
67967 
67968   /* "View.MemoryView":1065
67969  *     shape = memview.view.shape
67970  *     strides = memview.view.strides
67971  *     suboffsets = memview.view.suboffsets             # <<<<<<<<<<<<<<
67972  *
67973  *     dst.memview = <__pyx_memoryview *> memview
67974  */
67975   __pyx_t_1 = __pyx_v_memview->view.suboffsets;
67976   __pyx_v_suboffsets = __pyx_t_1;
67977 
67978   /* "View.MemoryView":1067
67979  *     suboffsets = memview.view.suboffsets
67980  *
67981  *     dst.memview = <__pyx_memoryview *> memview             # <<<<<<<<<<<<<<
67982  *     dst.data = <char *> memview.view.buf
67983  *
67984  */
67985   __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview);
67986 
67987   /* "View.MemoryView":1068
67988  *
67989  *     dst.memview = <__pyx_memoryview *> memview
67990  *     dst.data = <char *> memview.view.buf             # <<<<<<<<<<<<<<
67991  *
67992  *     for dim in range(memview.view.ndim):
67993  */
67994   __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf);
67995 
67996   /* "View.MemoryView":1070
67997  *     dst.data = <char *> memview.view.buf
67998  *
67999  *     for dim in range(memview.view.ndim):             # <<<<<<<<<<<<<<
68000  *         dst.shape[dim] = shape[dim]
68001  *         dst.strides[dim] = strides[dim]
68002  */
68003   __pyx_t_2 = __pyx_v_memview->view.ndim;
68004   __pyx_t_3 = __pyx_t_2;
68005   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
68006     __pyx_v_dim = __pyx_t_4;
68007 
68008     /* "View.MemoryView":1071
68009  *
68010  *     for dim in range(memview.view.ndim):
68011  *         dst.shape[dim] = shape[dim]             # <<<<<<<<<<<<<<
68012  *         dst.strides[dim] = strides[dim]
68013  *         dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1
68014  */
68015     (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]);
68016 
68017     /* "View.MemoryView":1072
68018  *     for dim in range(memview.view.ndim):
68019  *         dst.shape[dim] = shape[dim]
68020  *         dst.strides[dim] = strides[dim]             # <<<<<<<<<<<<<<
68021  *         dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1
68022  *
68023  */
68024     (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]);
68025 
68026     /* "View.MemoryView":1073
68027  *         dst.shape[dim] = shape[dim]
68028  *         dst.strides[dim] = strides[dim]
68029  *         dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1             # <<<<<<<<<<<<<<
68030  *
68031  * @cname('__pyx_memoryview_copy_object')
68032  */
68033     if ((__pyx_v_suboffsets != 0)) {
68034       __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]);
68035     } else {
68036       __pyx_t_5 = -1L;
68037     }
68038     (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5;
68039   }
68040 
68041   /* "View.MemoryView":1059
68042  *
68043  * @cname('__pyx_memoryview_slice_copy')
68044  * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst):             # <<<<<<<<<<<<<<
68045  *     cdef int dim
68046  *     cdef (Py_ssize_t*) shape, strides, suboffsets
68047  */
68048 
68049   /* function exit code */
68050   __Pyx_RefNannyFinishContext();
68051 }
68052 
68053 /* "View.MemoryView":1076
68054  *
68055  * @cname('__pyx_memoryview_copy_object')
68056  * cdef memoryview_copy(memoryview memview):             # <<<<<<<<<<<<<<
68057  *     "Create a new memoryview object"
68058  *     cdef __Pyx_memviewslice memviewslice
68059  */
68060 
68061 static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) {
68062   __Pyx_memviewslice __pyx_v_memviewslice;
68063   PyObject *__pyx_r = NULL;
68064   __Pyx_RefNannyDeclarations
68065   PyObject *__pyx_t_1 = NULL;
68066   __Pyx_RefNannySetupContext("memoryview_copy", 0);
68067 
68068   /* "View.MemoryView":1079
68069  *     "Create a new memoryview object"
68070  *     cdef __Pyx_memviewslice memviewslice
68071  *     slice_copy(memview, &memviewslice)             # <<<<<<<<<<<<<<
68072  *     return memoryview_copy_from_slice(memview, &memviewslice)
68073  *
68074  */
68075   __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice));
68076 
68077   /* "View.MemoryView":1080
68078  *     cdef __Pyx_memviewslice memviewslice
68079  *     slice_copy(memview, &memviewslice)
68080  *     return memoryview_copy_from_slice(memview, &memviewslice)             # <<<<<<<<<<<<<<
68081  *
68082  * @cname('__pyx_memoryview_copy_object_from_slice')
68083  */
68084   __Pyx_XDECREF(__pyx_r);
68085   __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1080, __pyx_L1_error)
68086   __Pyx_GOTREF(__pyx_t_1);
68087   __pyx_r = __pyx_t_1;
68088   __pyx_t_1 = 0;
68089   goto __pyx_L0;
68090 
68091   /* "View.MemoryView":1076
68092  *
68093  * @cname('__pyx_memoryview_copy_object')
68094  * cdef memoryview_copy(memoryview memview):             # <<<<<<<<<<<<<<
68095  *     "Create a new memoryview object"
68096  *     cdef __Pyx_memviewslice memviewslice
68097  */
68098 
68099   /* function exit code */
68100   __pyx_L1_error:;
68101   __Pyx_XDECREF(__pyx_t_1);
68102   __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
68103   __pyx_r = 0;
68104   __pyx_L0:;
68105   __Pyx_XGIVEREF(__pyx_r);
68106   __Pyx_RefNannyFinishContext();
68107   return __pyx_r;
68108 }
68109 
68110 /* "View.MemoryView":1083
68111  *
68112  * @cname('__pyx_memoryview_copy_object_from_slice')
68113  * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice):             # <<<<<<<<<<<<<<
68114  *     """
68115  *     Create a new memoryview object from a given memoryview object and slice.
68116  */
68117 
68118 static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) {
68119   PyObject *(*__pyx_v_to_object_func)(char *);
68120   int (*__pyx_v_to_dtype_func)(char *, PyObject *);
68121   PyObject *__pyx_r = NULL;
68122   __Pyx_RefNannyDeclarations
68123   int __pyx_t_1;
68124   int __pyx_t_2;
68125   PyObject *(*__pyx_t_3)(char *);
68126   int (*__pyx_t_4)(char *, PyObject *);
68127   PyObject *__pyx_t_5 = NULL;
68128   __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0);
68129 
68130   /* "View.MemoryView":1090
68131  *     cdef int (*to_dtype_func)(char *, object) except 0
68132  *
68133  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
68134  *         to_object_func = (<_memoryviewslice> memview).to_object_func
68135  *         to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
68136  */
68137   __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type);
68138   __pyx_t_2 = (__pyx_t_1 != 0);
68139   if (__pyx_t_2) {
68140 
68141     /* "View.MemoryView":1091
68142  *
68143  *     if isinstance(memview, _memoryviewslice):
68144  *         to_object_func = (<_memoryviewslice> memview).to_object_func             # <<<<<<<<<<<<<<
68145  *         to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
68146  *     else:
68147  */
68148     __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func;
68149     __pyx_v_to_object_func = __pyx_t_3;
68150 
68151     /* "View.MemoryView":1092
68152  *     if isinstance(memview, _memoryviewslice):
68153  *         to_object_func = (<_memoryviewslice> memview).to_object_func
68154  *         to_dtype_func = (<_memoryviewslice> memview).to_dtype_func             # <<<<<<<<<<<<<<
68155  *     else:
68156  *         to_object_func = NULL
68157  */
68158     __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func;
68159     __pyx_v_to_dtype_func = __pyx_t_4;
68160 
68161     /* "View.MemoryView":1090
68162  *     cdef int (*to_dtype_func)(char *, object) except 0
68163  *
68164  *     if isinstance(memview, _memoryviewslice):             # <<<<<<<<<<<<<<
68165  *         to_object_func = (<_memoryviewslice> memview).to_object_func
68166  *         to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
68167  */
68168     goto __pyx_L3;
68169   }
68170 
68171   /* "View.MemoryView":1094
68172  *         to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
68173  *     else:
68174  *         to_object_func = NULL             # <<<<<<<<<<<<<<
68175  *         to_dtype_func = NULL
68176  *
68177  */
68178   /*else*/ {
68179     __pyx_v_to_object_func = NULL;
68180 
68181     /* "View.MemoryView":1095
68182  *     else:
68183  *         to_object_func = NULL
68184  *         to_dtype_func = NULL             # <<<<<<<<<<<<<<
68185  *
68186  *     return memoryview_fromslice(memviewslice[0], memview.view.ndim,
68187  */
68188     __pyx_v_to_dtype_func = NULL;
68189   }
68190   __pyx_L3:;
68191 
68192   /* "View.MemoryView":1097
68193  *         to_dtype_func = NULL
68194  *
68195  *     return memoryview_fromslice(memviewslice[0], memview.view.ndim,             # <<<<<<<<<<<<<<
68196  *                                 to_object_func, to_dtype_func,
68197  *                                 memview.dtype_is_object)
68198  */
68199   __Pyx_XDECREF(__pyx_r);
68200 
68201   /* "View.MemoryView":1099
68202  *     return memoryview_fromslice(memviewslice[0], memview.view.ndim,
68203  *                                 to_object_func, to_dtype_func,
68204  *                                 memview.dtype_is_object)             # <<<<<<<<<<<<<<
68205  *
68206  *
68207  */
68208   __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1097, __pyx_L1_error)
68209   __Pyx_GOTREF(__pyx_t_5);
68210   __pyx_r = __pyx_t_5;
68211   __pyx_t_5 = 0;
68212   goto __pyx_L0;
68213 
68214   /* "View.MemoryView":1083
68215  *
68216  * @cname('__pyx_memoryview_copy_object_from_slice')
68217  * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice):             # <<<<<<<<<<<<<<
68218  *     """
68219  *     Create a new memoryview object from a given memoryview object and slice.
68220  */
68221 
68222   /* function exit code */
68223   __pyx_L1_error:;
68224   __Pyx_XDECREF(__pyx_t_5);
68225   __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
68226   __pyx_r = 0;
68227   __pyx_L0:;
68228   __Pyx_XGIVEREF(__pyx_r);
68229   __Pyx_RefNannyFinishContext();
68230   return __pyx_r;
68231 }
68232 
68233 /* "View.MemoryView":1105
68234  *
68235  *
68236  * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:             # <<<<<<<<<<<<<<
68237  *     if arg < 0:
68238  *         return -arg
68239  */
68240 
68241 static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) {
68242   Py_ssize_t __pyx_r;
68243   int __pyx_t_1;
68244 
68245   /* "View.MemoryView":1106
68246  *
68247  * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:
68248  *     if arg < 0:             # <<<<<<<<<<<<<<
68249  *         return -arg
68250  *     else:
68251  */
68252   __pyx_t_1 = ((__pyx_v_arg < 0) != 0);
68253   if (__pyx_t_1) {
68254 
68255     /* "View.MemoryView":1107
68256  * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:
68257  *     if arg < 0:
68258  *         return -arg             # <<<<<<<<<<<<<<
68259  *     else:
68260  *         return arg
68261  */
68262     __pyx_r = (-__pyx_v_arg);
68263     goto __pyx_L0;
68264 
68265     /* "View.MemoryView":1106
68266  *
68267  * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:
68268  *     if arg < 0:             # <<<<<<<<<<<<<<
68269  *         return -arg
68270  *     else:
68271  */
68272   }
68273 
68274   /* "View.MemoryView":1109
68275  *         return -arg
68276  *     else:
68277  *         return arg             # <<<<<<<<<<<<<<
68278  *
68279  * @cname('__pyx_get_best_slice_order')
68280  */
68281   /*else*/ {
68282     __pyx_r = __pyx_v_arg;
68283     goto __pyx_L0;
68284   }
68285 
68286   /* "View.MemoryView":1105
68287  *
68288  *
68289  * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:             # <<<<<<<<<<<<<<
68290  *     if arg < 0:
68291  *         return -arg
68292  */
68293 
68294   /* function exit code */
68295   __pyx_L0:;
68296   return __pyx_r;
68297 }
68298 
68299 /* "View.MemoryView":1112
68300  *
68301  * @cname('__pyx_get_best_slice_order')
68302  * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil:             # <<<<<<<<<<<<<<
68303  *     """
68304  *     Figure out the best memory access order for a given slice.
68305  */
68306 
68307 static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) {
68308   int __pyx_v_i;
68309   Py_ssize_t __pyx_v_c_stride;
68310   Py_ssize_t __pyx_v_f_stride;
68311   char __pyx_r;
68312   int __pyx_t_1;
68313   int __pyx_t_2;
68314   int __pyx_t_3;
68315   int __pyx_t_4;
68316 
68317   /* "View.MemoryView":1117
68318  *     """
68319  *     cdef int i
68320  *     cdef Py_ssize_t c_stride = 0             # <<<<<<<<<<<<<<
68321  *     cdef Py_ssize_t f_stride = 0
68322  *
68323  */
68324   __pyx_v_c_stride = 0;
68325 
68326   /* "View.MemoryView":1118
68327  *     cdef int i
68328  *     cdef Py_ssize_t c_stride = 0
68329  *     cdef Py_ssize_t f_stride = 0             # <<<<<<<<<<<<<<
68330  *
68331  *     for i in range(ndim - 1, -1, -1):
68332  */
68333   __pyx_v_f_stride = 0;
68334 
68335   /* "View.MemoryView":1120
68336  *     cdef Py_ssize_t f_stride = 0
68337  *
68338  *     for i in range(ndim - 1, -1, -1):             # <<<<<<<<<<<<<<
68339  *         if mslice.shape[i] > 1:
68340  *             c_stride = mslice.strides[i]
68341  */
68342   for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
68343     __pyx_v_i = __pyx_t_1;
68344 
68345     /* "View.MemoryView":1121
68346  *
68347  *     for i in range(ndim - 1, -1, -1):
68348  *         if mslice.shape[i] > 1:             # <<<<<<<<<<<<<<
68349  *             c_stride = mslice.strides[i]
68350  *             break
68351  */
68352     __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0);
68353     if (__pyx_t_2) {
68354 
68355       /* "View.MemoryView":1122
68356  *     for i in range(ndim - 1, -1, -1):
68357  *         if mslice.shape[i] > 1:
68358  *             c_stride = mslice.strides[i]             # <<<<<<<<<<<<<<
68359  *             break
68360  *
68361  */
68362       __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]);
68363 
68364       /* "View.MemoryView":1123
68365  *         if mslice.shape[i] > 1:
68366  *             c_stride = mslice.strides[i]
68367  *             break             # <<<<<<<<<<<<<<
68368  *
68369  *     for i in range(ndim):
68370  */
68371       goto __pyx_L4_break;
68372 
68373       /* "View.MemoryView":1121
68374  *
68375  *     for i in range(ndim - 1, -1, -1):
68376  *         if mslice.shape[i] > 1:             # <<<<<<<<<<<<<<
68377  *             c_stride = mslice.strides[i]
68378  *             break
68379  */
68380     }
68381   }
68382   __pyx_L4_break:;
68383 
68384   /* "View.MemoryView":1125
68385  *             break
68386  *
68387  *     for i in range(ndim):             # <<<<<<<<<<<<<<
68388  *         if mslice.shape[i] > 1:
68389  *             f_stride = mslice.strides[i]
68390  */
68391   __pyx_t_1 = __pyx_v_ndim;
68392   __pyx_t_3 = __pyx_t_1;
68393   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
68394     __pyx_v_i = __pyx_t_4;
68395 
68396     /* "View.MemoryView":1126
68397  *
68398  *     for i in range(ndim):
68399  *         if mslice.shape[i] > 1:             # <<<<<<<<<<<<<<
68400  *             f_stride = mslice.strides[i]
68401  *             break
68402  */
68403     __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0);
68404     if (__pyx_t_2) {
68405 
68406       /* "View.MemoryView":1127
68407  *     for i in range(ndim):
68408  *         if mslice.shape[i] > 1:
68409  *             f_stride = mslice.strides[i]             # <<<<<<<<<<<<<<
68410  *             break
68411  *
68412  */
68413       __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]);
68414 
68415       /* "View.MemoryView":1128
68416  *         if mslice.shape[i] > 1:
68417  *             f_stride = mslice.strides[i]
68418  *             break             # <<<<<<<<<<<<<<
68419  *
68420  *     if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride):
68421  */
68422       goto __pyx_L7_break;
68423 
68424       /* "View.MemoryView":1126
68425  *
68426  *     for i in range(ndim):
68427  *         if mslice.shape[i] > 1:             # <<<<<<<<<<<<<<
68428  *             f_stride = mslice.strides[i]
68429  *             break
68430  */
68431     }
68432   }
68433   __pyx_L7_break:;
68434 
68435   /* "View.MemoryView":1130
68436  *             break
68437  *
68438  *     if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride):             # <<<<<<<<<<<<<<
68439  *         return 'C'
68440  *     else:
68441  */
68442   __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0);
68443   if (__pyx_t_2) {
68444 
68445     /* "View.MemoryView":1131
68446  *
68447  *     if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride):
68448  *         return 'C'             # <<<<<<<<<<<<<<
68449  *     else:
68450  *         return 'F'
68451  */
68452     __pyx_r = 'C';
68453     goto __pyx_L0;
68454 
68455     /* "View.MemoryView":1130
68456  *             break
68457  *
68458  *     if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride):             # <<<<<<<<<<<<<<
68459  *         return 'C'
68460  *     else:
68461  */
68462   }
68463 
68464   /* "View.MemoryView":1133
68465  *         return 'C'
68466  *     else:
68467  *         return 'F'             # <<<<<<<<<<<<<<
68468  *
68469  * @cython.cdivision(True)
68470  */
68471   /*else*/ {
68472     __pyx_r = 'F';
68473     goto __pyx_L0;
68474   }
68475 
68476   /* "View.MemoryView":1112
68477  *
68478  * @cname('__pyx_get_best_slice_order')
68479  * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil:             # <<<<<<<<<<<<<<
68480  *     """
68481  *     Figure out the best memory access order for a given slice.
68482  */
68483 
68484   /* function exit code */
68485   __pyx_L0:;
68486   return __pyx_r;
68487 }
68488 
68489 /* "View.MemoryView":1136
68490  *
68491  * @cython.cdivision(True)
68492  * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides,             # <<<<<<<<<<<<<<
68493  *                                    char *dst_data, Py_ssize_t *dst_strides,
68494  *                                    Py_ssize_t *src_shape, Py_ssize_t *dst_shape,
68495  */
68496 
68497 static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) {
68498   CYTHON_UNUSED Py_ssize_t __pyx_v_i;
68499   CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent;
68500   Py_ssize_t __pyx_v_dst_extent;
68501   Py_ssize_t __pyx_v_src_stride;
68502   Py_ssize_t __pyx_v_dst_stride;
68503   int __pyx_t_1;
68504   int __pyx_t_2;
68505   int __pyx_t_3;
68506   Py_ssize_t __pyx_t_4;
68507   Py_ssize_t __pyx_t_5;
68508   Py_ssize_t __pyx_t_6;
68509 
68510   /* "View.MemoryView":1143
68511  *
68512  *     cdef Py_ssize_t i
68513  *     cdef Py_ssize_t src_extent = src_shape[0]             # <<<<<<<<<<<<<<
68514  *     cdef Py_ssize_t dst_extent = dst_shape[0]
68515  *     cdef Py_ssize_t src_stride = src_strides[0]
68516  */
68517   __pyx_v_src_extent = (__pyx_v_src_shape[0]);
68518 
68519   /* "View.MemoryView":1144
68520  *     cdef Py_ssize_t i
68521  *     cdef Py_ssize_t src_extent = src_shape[0]
68522  *     cdef Py_ssize_t dst_extent = dst_shape[0]             # <<<<<<<<<<<<<<
68523  *     cdef Py_ssize_t src_stride = src_strides[0]
68524  *     cdef Py_ssize_t dst_stride = dst_strides[0]
68525  */
68526   __pyx_v_dst_extent = (__pyx_v_dst_shape[0]);
68527 
68528   /* "View.MemoryView":1145
68529  *     cdef Py_ssize_t src_extent = src_shape[0]
68530  *     cdef Py_ssize_t dst_extent = dst_shape[0]
68531  *     cdef Py_ssize_t src_stride = src_strides[0]             # <<<<<<<<<<<<<<
68532  *     cdef Py_ssize_t dst_stride = dst_strides[0]
68533  *
68534  */
68535   __pyx_v_src_stride = (__pyx_v_src_strides[0]);
68536 
68537   /* "View.MemoryView":1146
68538  *     cdef Py_ssize_t dst_extent = dst_shape[0]
68539  *     cdef Py_ssize_t src_stride = src_strides[0]
68540  *     cdef Py_ssize_t dst_stride = dst_strides[0]             # <<<<<<<<<<<<<<
68541  *
68542  *     if ndim == 1:
68543  */
68544   __pyx_v_dst_stride = (__pyx_v_dst_strides[0]);
68545 
68546   /* "View.MemoryView":1148
68547  *     cdef Py_ssize_t dst_stride = dst_strides[0]
68548  *
68549  *     if ndim == 1:             # <<<<<<<<<<<<<<
68550  *        if (src_stride > 0 and dst_stride > 0 and
68551  *            <size_t> src_stride == itemsize == <size_t> dst_stride):
68552  */
68553   __pyx_t_1 = ((__pyx_v_ndim == 1) != 0);
68554   if (__pyx_t_1) {
68555 
68556     /* "View.MemoryView":1149
68557  *
68558  *     if ndim == 1:
68559  *        if (src_stride > 0 and dst_stride > 0 and             # <<<<<<<<<<<<<<
68560  *            <size_t> src_stride == itemsize == <size_t> dst_stride):
68561  *            memcpy(dst_data, src_data, itemsize * dst_extent)
68562  */
68563     __pyx_t_2 = ((__pyx_v_src_stride > 0) != 0);
68564     if (__pyx_t_2) {
68565     } else {
68566       __pyx_t_1 = __pyx_t_2;
68567       goto __pyx_L5_bool_binop_done;
68568     }
68569     __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0);
68570     if (__pyx_t_2) {
68571     } else {
68572       __pyx_t_1 = __pyx_t_2;
68573       goto __pyx_L5_bool_binop_done;
68574     }
68575 
68576     /* "View.MemoryView":1150
68577  *     if ndim == 1:
68578  *        if (src_stride > 0 and dst_stride > 0 and
68579  *            <size_t> src_stride == itemsize == <size_t> dst_stride):             # <<<<<<<<<<<<<<
68580  *            memcpy(dst_data, src_data, itemsize * dst_extent)
68581  *        else:
68582  */
68583     __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize);
68584     if (__pyx_t_2) {
68585       __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride));
68586     }
68587     __pyx_t_3 = (__pyx_t_2 != 0);
68588     __pyx_t_1 = __pyx_t_3;
68589     __pyx_L5_bool_binop_done:;
68590 
68591     /* "View.MemoryView":1149
68592  *
68593  *     if ndim == 1:
68594  *        if (src_stride > 0 and dst_stride > 0 and             # <<<<<<<<<<<<<<
68595  *            <size_t> src_stride == itemsize == <size_t> dst_stride):
68596  *            memcpy(dst_data, src_data, itemsize * dst_extent)
68597  */
68598     if (__pyx_t_1) {
68599 
68600       /* "View.MemoryView":1151
68601  *        if (src_stride > 0 and dst_stride > 0 and
68602  *            <size_t> src_stride == itemsize == <size_t> dst_stride):
68603  *            memcpy(dst_data, src_data, itemsize * dst_extent)             # <<<<<<<<<<<<<<
68604  *        else:
68605  *            for i in range(dst_extent):
68606  */
68607       (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent)));
68608 
68609       /* "View.MemoryView":1149
68610  *
68611  *     if ndim == 1:
68612  *        if (src_stride > 0 and dst_stride > 0 and             # <<<<<<<<<<<<<<
68613  *            <size_t> src_stride == itemsize == <size_t> dst_stride):
68614  *            memcpy(dst_data, src_data, itemsize * dst_extent)
68615  */
68616       goto __pyx_L4;
68617     }
68618 
68619     /* "View.MemoryView":1153
68620  *            memcpy(dst_data, src_data, itemsize * dst_extent)
68621  *        else:
68622  *            for i in range(dst_extent):             # <<<<<<<<<<<<<<
68623  *                memcpy(dst_data, src_data, itemsize)
68624  *                src_data += src_stride
68625  */
68626     /*else*/ {
68627       __pyx_t_4 = __pyx_v_dst_extent;
68628       __pyx_t_5 = __pyx_t_4;
68629       for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
68630         __pyx_v_i = __pyx_t_6;
68631 
68632         /* "View.MemoryView":1154
68633  *        else:
68634  *            for i in range(dst_extent):
68635  *                memcpy(dst_data, src_data, itemsize)             # <<<<<<<<<<<<<<
68636  *                src_data += src_stride
68637  *                dst_data += dst_stride
68638  */
68639         (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize));
68640 
68641         /* "View.MemoryView":1155
68642  *            for i in range(dst_extent):
68643  *                memcpy(dst_data, src_data, itemsize)
68644  *                src_data += src_stride             # <<<<<<<<<<<<<<
68645  *                dst_data += dst_stride
68646  *     else:
68647  */
68648         __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride);
68649 
68650         /* "View.MemoryView":1156
68651  *                memcpy(dst_data, src_data, itemsize)
68652  *                src_data += src_stride
68653  *                dst_data += dst_stride             # <<<<<<<<<<<<<<
68654  *     else:
68655  *         for i in range(dst_extent):
68656  */
68657         __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride);
68658       }
68659     }
68660     __pyx_L4:;
68661 
68662     /* "View.MemoryView":1148
68663  *     cdef Py_ssize_t dst_stride = dst_strides[0]
68664  *
68665  *     if ndim == 1:             # <<<<<<<<<<<<<<
68666  *        if (src_stride > 0 and dst_stride > 0 and
68667  *            <size_t> src_stride == itemsize == <size_t> dst_stride):
68668  */
68669     goto __pyx_L3;
68670   }
68671 
68672   /* "View.MemoryView":1158
68673  *                dst_data += dst_stride
68674  *     else:
68675  *         for i in range(dst_extent):             # <<<<<<<<<<<<<<
68676  *             _copy_strided_to_strided(src_data, src_strides + 1,
68677  *                                      dst_data, dst_strides + 1,
68678  */
68679   /*else*/ {
68680     __pyx_t_4 = __pyx_v_dst_extent;
68681     __pyx_t_5 = __pyx_t_4;
68682     for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
68683       __pyx_v_i = __pyx_t_6;
68684 
68685       /* "View.MemoryView":1159
68686  *     else:
68687  *         for i in range(dst_extent):
68688  *             _copy_strided_to_strided(src_data, src_strides + 1,             # <<<<<<<<<<<<<<
68689  *                                      dst_data, dst_strides + 1,
68690  *                                      src_shape + 1, dst_shape + 1,
68691  */
68692       _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize);
68693 
68694       /* "View.MemoryView":1163
68695  *                                      src_shape + 1, dst_shape + 1,
68696  *                                      ndim - 1, itemsize)
68697  *             src_data += src_stride             # <<<<<<<<<<<<<<
68698  *             dst_data += dst_stride
68699  *
68700  */
68701       __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride);
68702 
68703       /* "View.MemoryView":1164
68704  *                                      ndim - 1, itemsize)
68705  *             src_data += src_stride
68706  *             dst_data += dst_stride             # <<<<<<<<<<<<<<
68707  *
68708  * cdef void copy_strided_to_strided(__Pyx_memviewslice *src,
68709  */
68710       __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride);
68711     }
68712   }
68713   __pyx_L3:;
68714 
68715   /* "View.MemoryView":1136
68716  *
68717  * @cython.cdivision(True)
68718  * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides,             # <<<<<<<<<<<<<<
68719  *                                    char *dst_data, Py_ssize_t *dst_strides,
68720  *                                    Py_ssize_t *src_shape, Py_ssize_t *dst_shape,
68721  */
68722 
68723   /* function exit code */
68724 }
68725 
68726 /* "View.MemoryView":1166
68727  *             dst_data += dst_stride
68728  *
68729  * cdef void copy_strided_to_strided(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
68730  *                                   __Pyx_memviewslice *dst,
68731  *                                   int ndim, size_t itemsize) nogil:
68732  */
68733 
68734 static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) {
68735 
68736   /* "View.MemoryView":1169
68737  *                                   __Pyx_memviewslice *dst,
68738  *                                   int ndim, size_t itemsize) nogil:
68739  *     _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides,             # <<<<<<<<<<<<<<
68740  *                              src.shape, dst.shape, ndim, itemsize)
68741  *
68742  */
68743   _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize);
68744 
68745   /* "View.MemoryView":1166
68746  *             dst_data += dst_stride
68747  *
68748  * cdef void copy_strided_to_strided(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
68749  *                                   __Pyx_memviewslice *dst,
68750  *                                   int ndim, size_t itemsize) nogil:
68751  */
68752 
68753   /* function exit code */
68754 }
68755 
68756 /* "View.MemoryView":1173
68757  *
68758  * @cname('__pyx_memoryview_slice_get_size')
68759  * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:             # <<<<<<<<<<<<<<
68760  *     "Return the size of the memory occupied by the slice in number of bytes"
68761  *     cdef int i
68762  */
68763 
68764 static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) {
68765   int __pyx_v_i;
68766   Py_ssize_t __pyx_v_size;
68767   Py_ssize_t __pyx_r;
68768   Py_ssize_t __pyx_t_1;
68769   int __pyx_t_2;
68770   int __pyx_t_3;
68771   int __pyx_t_4;
68772 
68773   /* "View.MemoryView":1176
68774  *     "Return the size of the memory occupied by the slice in number of bytes"
68775  *     cdef int i
68776  *     cdef Py_ssize_t size = src.memview.view.itemsize             # <<<<<<<<<<<<<<
68777  *
68778  *     for i in range(ndim):
68779  */
68780   __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
68781   __pyx_v_size = __pyx_t_1;
68782 
68783   /* "View.MemoryView":1178
68784  *     cdef Py_ssize_t size = src.memview.view.itemsize
68785  *
68786  *     for i in range(ndim):             # <<<<<<<<<<<<<<
68787  *         size *= src.shape[i]
68788  *
68789  */
68790   __pyx_t_2 = __pyx_v_ndim;
68791   __pyx_t_3 = __pyx_t_2;
68792   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
68793     __pyx_v_i = __pyx_t_4;
68794 
68795     /* "View.MemoryView":1179
68796  *
68797  *     for i in range(ndim):
68798  *         size *= src.shape[i]             # <<<<<<<<<<<<<<
68799  *
68800  *     return size
68801  */
68802     __pyx_v_size = (__pyx_v_size * (__pyx_v_src->shape[__pyx_v_i]));
68803   }
68804 
68805   /* "View.MemoryView":1181
68806  *         size *= src.shape[i]
68807  *
68808  *     return size             # <<<<<<<<<<<<<<
68809  *
68810  * @cname('__pyx_fill_contig_strides_array')
68811  */
68812   __pyx_r = __pyx_v_size;
68813   goto __pyx_L0;
68814 
68815   /* "View.MemoryView":1173
68816  *
68817  * @cname('__pyx_memoryview_slice_get_size')
68818  * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:             # <<<<<<<<<<<<<<
68819  *     "Return the size of the memory occupied by the slice in number of bytes"
68820  *     cdef int i
68821  */
68822 
68823   /* function exit code */
68824   __pyx_L0:;
68825   return __pyx_r;
68826 }
68827 
68828 /* "View.MemoryView":1184
68829  *
68830  * @cname('__pyx_fill_contig_strides_array')
68831  * cdef Py_ssize_t fill_contig_strides_array(             # <<<<<<<<<<<<<<
68832  *                 Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride,
68833  *                 int ndim, char order) nogil:
68834  */
68835 
68836 static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) {
68837   int __pyx_v_idx;
68838   Py_ssize_t __pyx_r;
68839   int __pyx_t_1;
68840   int __pyx_t_2;
68841   int __pyx_t_3;
68842   int __pyx_t_4;
68843 
68844   /* "View.MemoryView":1193
68845  *     cdef int idx
68846  *
68847  *     if order == 'F':             # <<<<<<<<<<<<<<
68848  *         for idx in range(ndim):
68849  *             strides[idx] = stride
68850  */
68851   __pyx_t_1 = ((__pyx_v_order == 'F') != 0);
68852   if (__pyx_t_1) {
68853 
68854     /* "View.MemoryView":1194
68855  *
68856  *     if order == 'F':
68857  *         for idx in range(ndim):             # <<<<<<<<<<<<<<
68858  *             strides[idx] = stride
68859  *             stride = stride * shape[idx]
68860  */
68861     __pyx_t_2 = __pyx_v_ndim;
68862     __pyx_t_3 = __pyx_t_2;
68863     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
68864       __pyx_v_idx = __pyx_t_4;
68865 
68866       /* "View.MemoryView":1195
68867  *     if order == 'F':
68868  *         for idx in range(ndim):
68869  *             strides[idx] = stride             # <<<<<<<<<<<<<<
68870  *             stride = stride * shape[idx]
68871  *     else:
68872  */
68873       (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
68874 
68875       /* "View.MemoryView":1196
68876  *         for idx in range(ndim):
68877  *             strides[idx] = stride
68878  *             stride = stride * shape[idx]             # <<<<<<<<<<<<<<
68879  *     else:
68880  *         for idx in range(ndim - 1, -1, -1):
68881  */
68882       __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx]));
68883     }
68884 
68885     /* "View.MemoryView":1193
68886  *     cdef int idx
68887  *
68888  *     if order == 'F':             # <<<<<<<<<<<<<<
68889  *         for idx in range(ndim):
68890  *             strides[idx] = stride
68891  */
68892     goto __pyx_L3;
68893   }
68894 
68895   /* "View.MemoryView":1198
68896  *             stride = stride * shape[idx]
68897  *     else:
68898  *         for idx in range(ndim - 1, -1, -1):             # <<<<<<<<<<<<<<
68899  *             strides[idx] = stride
68900  *             stride = stride * shape[idx]
68901  */
68902   /*else*/ {
68903     for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) {
68904       __pyx_v_idx = __pyx_t_2;
68905 
68906       /* "View.MemoryView":1199
68907  *     else:
68908  *         for idx in range(ndim - 1, -1, -1):
68909  *             strides[idx] = stride             # <<<<<<<<<<<<<<
68910  *             stride = stride * shape[idx]
68911  *
68912  */
68913       (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
68914 
68915       /* "View.MemoryView":1200
68916  *         for idx in range(ndim - 1, -1, -1):
68917  *             strides[idx] = stride
68918  *             stride = stride * shape[idx]             # <<<<<<<<<<<<<<
68919  *
68920  *     return stride
68921  */
68922       __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx]));
68923     }
68924   }
68925   __pyx_L3:;
68926 
68927   /* "View.MemoryView":1202
68928  *             stride = stride * shape[idx]
68929  *
68930  *     return stride             # <<<<<<<<<<<<<<
68931  *
68932  * @cname('__pyx_memoryview_copy_data_to_temp')
68933  */
68934   __pyx_r = __pyx_v_stride;
68935   goto __pyx_L0;
68936 
68937   /* "View.MemoryView":1184
68938  *
68939  * @cname('__pyx_fill_contig_strides_array')
68940  * cdef Py_ssize_t fill_contig_strides_array(             # <<<<<<<<<<<<<<
68941  *                 Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride,
68942  *                 int ndim, char order) nogil:
68943  */
68944 
68945   /* function exit code */
68946   __pyx_L0:;
68947   return __pyx_r;
68948 }
68949 
68950 /* "View.MemoryView":1205
68951  *
68952  * @cname('__pyx_memoryview_copy_data_to_temp')
68953  * cdef void *copy_data_to_temp(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
68954  *                              __Pyx_memviewslice *tmpslice,
68955  *                              char order,
68956  */
68957 
68958 static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) {
68959   int __pyx_v_i;
68960   void *__pyx_v_result;
68961   size_t __pyx_v_itemsize;
68962   size_t __pyx_v_size;
68963   void *__pyx_r;
68964   Py_ssize_t __pyx_t_1;
68965   int __pyx_t_2;
68966   int __pyx_t_3;
68967   struct __pyx_memoryview_obj *__pyx_t_4;
68968   int __pyx_t_5;
68969   int __pyx_t_6;
68970 
68971   /* "View.MemoryView":1216
68972  *     cdef void *result
68973  *
68974  *     cdef size_t itemsize = src.memview.view.itemsize             # <<<<<<<<<<<<<<
68975  *     cdef size_t size = slice_get_size(src, ndim)
68976  *
68977  */
68978   __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
68979   __pyx_v_itemsize = __pyx_t_1;
68980 
68981   /* "View.MemoryView":1217
68982  *
68983  *     cdef size_t itemsize = src.memview.view.itemsize
68984  *     cdef size_t size = slice_get_size(src, ndim)             # <<<<<<<<<<<<<<
68985  *
68986  *     result = malloc(size)
68987  */
68988   __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim);
68989 
68990   /* "View.MemoryView":1219
68991  *     cdef size_t size = slice_get_size(src, ndim)
68992  *
68993  *     result = malloc(size)             # <<<<<<<<<<<<<<
68994  *     if not result:
68995  *         _err(MemoryError, NULL)
68996  */
68997   __pyx_v_result = malloc(__pyx_v_size);
68998 
68999   /* "View.MemoryView":1220
69000  *
69001  *     result = malloc(size)
69002  *     if not result:             # <<<<<<<<<<<<<<
69003  *         _err(MemoryError, NULL)
69004  *
69005  */
69006   __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0);
69007   if (__pyx_t_2) {
69008 
69009     /* "View.MemoryView":1221
69010  *     result = malloc(size)
69011  *     if not result:
69012  *         _err(MemoryError, NULL)             # <<<<<<<<<<<<<<
69013  *
69014  *
69015  */
69016     __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 1221, __pyx_L1_error)
69017 
69018     /* "View.MemoryView":1220
69019  *
69020  *     result = malloc(size)
69021  *     if not result:             # <<<<<<<<<<<<<<
69022  *         _err(MemoryError, NULL)
69023  *
69024  */
69025   }
69026 
69027   /* "View.MemoryView":1224
69028  *
69029  *
69030  *     tmpslice.data = <char *> result             # <<<<<<<<<<<<<<
69031  *     tmpslice.memview = src.memview
69032  *     for i in range(ndim):
69033  */
69034   __pyx_v_tmpslice->data = ((char *)__pyx_v_result);
69035 
69036   /* "View.MemoryView":1225
69037  *
69038  *     tmpslice.data = <char *> result
69039  *     tmpslice.memview = src.memview             # <<<<<<<<<<<<<<
69040  *     for i in range(ndim):
69041  *         tmpslice.shape[i] = src.shape[i]
69042  */
69043   __pyx_t_4 = __pyx_v_src->memview;
69044   __pyx_v_tmpslice->memview = __pyx_t_4;
69045 
69046   /* "View.MemoryView":1226
69047  *     tmpslice.data = <char *> result
69048  *     tmpslice.memview = src.memview
69049  *     for i in range(ndim):             # <<<<<<<<<<<<<<
69050  *         tmpslice.shape[i] = src.shape[i]
69051  *         tmpslice.suboffsets[i] = -1
69052  */
69053   __pyx_t_3 = __pyx_v_ndim;
69054   __pyx_t_5 = __pyx_t_3;
69055   for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
69056     __pyx_v_i = __pyx_t_6;
69057 
69058     /* "View.MemoryView":1227
69059  *     tmpslice.memview = src.memview
69060  *     for i in range(ndim):
69061  *         tmpslice.shape[i] = src.shape[i]             # <<<<<<<<<<<<<<
69062  *         tmpslice.suboffsets[i] = -1
69063  *
69064  */
69065     (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]);
69066 
69067     /* "View.MemoryView":1228
69068  *     for i in range(ndim):
69069  *         tmpslice.shape[i] = src.shape[i]
69070  *         tmpslice.suboffsets[i] = -1             # <<<<<<<<<<<<<<
69071  *
69072  *     fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize,
69073  */
69074     (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L;
69075   }
69076 
69077   /* "View.MemoryView":1230
69078  *         tmpslice.suboffsets[i] = -1
69079  *
69080  *     fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize,             # <<<<<<<<<<<<<<
69081  *                               ndim, order)
69082  *
69083  */
69084   (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order));
69085 
69086   /* "View.MemoryView":1234
69087  *
69088  *
69089  *     for i in range(ndim):             # <<<<<<<<<<<<<<
69090  *         if tmpslice.shape[i] == 1:
69091  *             tmpslice.strides[i] = 0
69092  */
69093   __pyx_t_3 = __pyx_v_ndim;
69094   __pyx_t_5 = __pyx_t_3;
69095   for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
69096     __pyx_v_i = __pyx_t_6;
69097 
69098     /* "View.MemoryView":1235
69099  *
69100  *     for i in range(ndim):
69101  *         if tmpslice.shape[i] == 1:             # <<<<<<<<<<<<<<
69102  *             tmpslice.strides[i] = 0
69103  *
69104  */
69105     __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0);
69106     if (__pyx_t_2) {
69107 
69108       /* "View.MemoryView":1236
69109  *     for i in range(ndim):
69110  *         if tmpslice.shape[i] == 1:
69111  *             tmpslice.strides[i] = 0             # <<<<<<<<<<<<<<
69112  *
69113  *     if slice_is_contig(src[0], order, ndim):
69114  */
69115       (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0;
69116 
69117       /* "View.MemoryView":1235
69118  *
69119  *     for i in range(ndim):
69120  *         if tmpslice.shape[i] == 1:             # <<<<<<<<<<<<<<
69121  *             tmpslice.strides[i] = 0
69122  *
69123  */
69124     }
69125   }
69126 
69127   /* "View.MemoryView":1238
69128  *             tmpslice.strides[i] = 0
69129  *
69130  *     if slice_is_contig(src[0], order, ndim):             # <<<<<<<<<<<<<<
69131  *         memcpy(result, src.data, size)
69132  *     else:
69133  */
69134   __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0);
69135   if (__pyx_t_2) {
69136 
69137     /* "View.MemoryView":1239
69138  *
69139  *     if slice_is_contig(src[0], order, ndim):
69140  *         memcpy(result, src.data, size)             # <<<<<<<<<<<<<<
69141  *     else:
69142  *         copy_strided_to_strided(src, tmpslice, ndim, itemsize)
69143  */
69144     (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size));
69145 
69146     /* "View.MemoryView":1238
69147  *             tmpslice.strides[i] = 0
69148  *
69149  *     if slice_is_contig(src[0], order, ndim):             # <<<<<<<<<<<<<<
69150  *         memcpy(result, src.data, size)
69151  *     else:
69152  */
69153     goto __pyx_L9;
69154   }
69155 
69156   /* "View.MemoryView":1241
69157  *         memcpy(result, src.data, size)
69158  *     else:
69159  *         copy_strided_to_strided(src, tmpslice, ndim, itemsize)             # <<<<<<<<<<<<<<
69160  *
69161  *     return result
69162  */
69163   /*else*/ {
69164     copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize);
69165   }
69166   __pyx_L9:;
69167 
69168   /* "View.MemoryView":1243
69169  *         copy_strided_to_strided(src, tmpslice, ndim, itemsize)
69170  *
69171  *     return result             # <<<<<<<<<<<<<<
69172  *
69173  *
69174  */
69175   __pyx_r = __pyx_v_result;
69176   goto __pyx_L0;
69177 
69178   /* "View.MemoryView":1205
69179  *
69180  * @cname('__pyx_memoryview_copy_data_to_temp')
69181  * cdef void *copy_data_to_temp(__Pyx_memviewslice *src,             # <<<<<<<<<<<<<<
69182  *                              __Pyx_memviewslice *tmpslice,
69183  *                              char order,
69184  */
69185 
69186   /* function exit code */
69187   __pyx_L1_error:;
69188   {
69189     #ifdef WITH_THREAD
69190     PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
69191     #endif
69192     __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename);
69193     #ifdef WITH_THREAD
69194     __Pyx_PyGILState_Release(__pyx_gilstate_save);
69195     #endif
69196   }
69197   __pyx_r = NULL;
69198   __pyx_L0:;
69199   return __pyx_r;
69200 }
69201 
69202 /* "View.MemoryView":1248
69203  *
69204  * @cname('__pyx_memoryview_err_extents')
69205  * cdef int _err_extents(int i, Py_ssize_t extent1,             # <<<<<<<<<<<<<<
69206  *                              Py_ssize_t extent2) except -1 with gil:
69207  *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %
69208  */
69209 
69210 static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) {
69211   int __pyx_r;
69212   __Pyx_RefNannyDeclarations
69213   PyObject *__pyx_t_1 = NULL;
69214   PyObject *__pyx_t_2 = NULL;
69215   PyObject *__pyx_t_3 = NULL;
69216   PyObject *__pyx_t_4 = NULL;
69217   #ifdef WITH_THREAD
69218   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
69219   #endif
69220   __Pyx_RefNannySetupContext("_err_extents", 0);
69221 
69222   /* "View.MemoryView":1251
69223  *                              Py_ssize_t extent2) except -1 with gil:
69224  *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %
69225  *                                                         (i, extent1, extent2))             # <<<<<<<<<<<<<<
69226  *
69227  * @cname('__pyx_memoryview_err_dim')
69228  */
69229   __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1251, __pyx_L1_error)
69230   __Pyx_GOTREF(__pyx_t_1);
69231   __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1251, __pyx_L1_error)
69232   __Pyx_GOTREF(__pyx_t_2);
69233   __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1251, __pyx_L1_error)
69234   __Pyx_GOTREF(__pyx_t_3);
69235   __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1251, __pyx_L1_error)
69236   __Pyx_GOTREF(__pyx_t_4);
69237   __Pyx_GIVEREF(__pyx_t_1);
69238   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
69239   __Pyx_GIVEREF(__pyx_t_2);
69240   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
69241   __Pyx_GIVEREF(__pyx_t_3);
69242   PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
69243   __pyx_t_1 = 0;
69244   __pyx_t_2 = 0;
69245   __pyx_t_3 = 0;
69246 
69247   /* "View.MemoryView":1250
69248  * cdef int _err_extents(int i, Py_ssize_t extent1,
69249  *                              Py_ssize_t extent2) except -1 with gil:
69250  *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %             # <<<<<<<<<<<<<<
69251  *                                                         (i, extent1, extent2))
69252  *
69253  */
69254   __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1250, __pyx_L1_error)
69255   __Pyx_GOTREF(__pyx_t_3);
69256   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
69257   __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1250, __pyx_L1_error)
69258   __Pyx_GOTREF(__pyx_t_4);
69259   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
69260   __Pyx_Raise(__pyx_t_4, 0, 0, 0);
69261   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
69262   __PYX_ERR(5, 1250, __pyx_L1_error)
69263 
69264   /* "View.MemoryView":1248
69265  *
69266  * @cname('__pyx_memoryview_err_extents')
69267  * cdef int _err_extents(int i, Py_ssize_t extent1,             # <<<<<<<<<<<<<<
69268  *                              Py_ssize_t extent2) except -1 with gil:
69269  *     raise ValueError("got differing extents in dimension %d (got %d and %d)" %
69270  */
69271 
69272   /* function exit code */
69273   __pyx_L1_error:;
69274   __Pyx_XDECREF(__pyx_t_1);
69275   __Pyx_XDECREF(__pyx_t_2);
69276   __Pyx_XDECREF(__pyx_t_3);
69277   __Pyx_XDECREF(__pyx_t_4);
69278   __Pyx_AddTraceback("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename);
69279   __pyx_r = -1;
69280   __Pyx_RefNannyFinishContext();
69281   #ifdef WITH_THREAD
69282   __Pyx_PyGILState_Release(__pyx_gilstate_save);
69283   #endif
69284   return __pyx_r;
69285 }
69286 
69287 /* "View.MemoryView":1254
69288  *
69289  * @cname('__pyx_memoryview_err_dim')
69290  * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:             # <<<<<<<<<<<<<<
69291  *     raise error(msg.decode('ascii') % dim)
69292  *
69293  */
69294 
69295 static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) {
69296   int __pyx_r;
69297   __Pyx_RefNannyDeclarations
69298   PyObject *__pyx_t_1 = NULL;
69299   PyObject *__pyx_t_2 = NULL;
69300   PyObject *__pyx_t_3 = NULL;
69301   PyObject *__pyx_t_4 = NULL;
69302   #ifdef WITH_THREAD
69303   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
69304   #endif
69305   __Pyx_RefNannySetupContext("_err_dim", 0);
69306   __Pyx_INCREF(__pyx_v_error);
69307 
69308   /* "View.MemoryView":1255
69309  * @cname('__pyx_memoryview_err_dim')
69310  * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:
69311  *     raise error(msg.decode('ascii') % dim)             # <<<<<<<<<<<<<<
69312  *
69313  * @cname('__pyx_memoryview_err')
69314  */
69315   __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1255, __pyx_L1_error)
69316   __Pyx_GOTREF(__pyx_t_2);
69317   __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1255, __pyx_L1_error)
69318   __Pyx_GOTREF(__pyx_t_3);
69319   __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1255, __pyx_L1_error)
69320   __Pyx_GOTREF(__pyx_t_4);
69321   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
69322   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
69323   __Pyx_INCREF(__pyx_v_error);
69324   __pyx_t_3 = __pyx_v_error; __pyx_t_2 = NULL;
69325   if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
69326     __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
69327     if (likely(__pyx_t_2)) {
69328       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
69329       __Pyx_INCREF(__pyx_t_2);
69330       __Pyx_INCREF(function);
69331       __Pyx_DECREF_SET(__pyx_t_3, function);
69332     }
69333   }
69334   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
69335   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
69336   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
69337   if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 1255, __pyx_L1_error)
69338   __Pyx_GOTREF(__pyx_t_1);
69339   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
69340   __Pyx_Raise(__pyx_t_1, 0, 0, 0);
69341   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
69342   __PYX_ERR(5, 1255, __pyx_L1_error)
69343 
69344   /* "View.MemoryView":1254
69345  *
69346  * @cname('__pyx_memoryview_err_dim')
69347  * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:             # <<<<<<<<<<<<<<
69348  *     raise error(msg.decode('ascii') % dim)
69349  *
69350  */
69351 
69352   /* function exit code */
69353   __pyx_L1_error:;
69354   __Pyx_XDECREF(__pyx_t_1);
69355   __Pyx_XDECREF(__pyx_t_2);
69356   __Pyx_XDECREF(__pyx_t_3);
69357   __Pyx_XDECREF(__pyx_t_4);
69358   __Pyx_AddTraceback("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename);
69359   __pyx_r = -1;
69360   __Pyx_XDECREF(__pyx_v_error);
69361   __Pyx_RefNannyFinishContext();
69362   #ifdef WITH_THREAD
69363   __Pyx_PyGILState_Release(__pyx_gilstate_save);
69364   #endif
69365   return __pyx_r;
69366 }
69367 
69368 /* "View.MemoryView":1258
69369  *
69370  * @cname('__pyx_memoryview_err')
69371  * cdef int _err(object error, char *msg) except -1 with gil:             # <<<<<<<<<<<<<<
69372  *     if msg != NULL:
69373  *         raise error(msg.decode('ascii'))
69374  */
69375 
69376 static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
69377   int __pyx_r;
69378   __Pyx_RefNannyDeclarations
69379   int __pyx_t_1;
69380   PyObject *__pyx_t_2 = NULL;
69381   PyObject *__pyx_t_3 = NULL;
69382   PyObject *__pyx_t_4 = NULL;
69383   PyObject *__pyx_t_5 = NULL;
69384   #ifdef WITH_THREAD
69385   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
69386   #endif
69387   __Pyx_RefNannySetupContext("_err", 0);
69388   __Pyx_INCREF(__pyx_v_error);
69389 
69390   /* "View.MemoryView":1259
69391  * @cname('__pyx_memoryview_err')
69392  * cdef int _err(object error, char *msg) except -1 with gil:
69393  *     if msg != NULL:             # <<<<<<<<<<<<<<
69394  *         raise error(msg.decode('ascii'))
69395  *     else:
69396  */
69397   __pyx_t_1 = ((__pyx_v_msg != NULL) != 0);
69398   if (unlikely(__pyx_t_1)) {
69399 
69400     /* "View.MemoryView":1260
69401  * cdef int _err(object error, char *msg) except -1 with gil:
69402  *     if msg != NULL:
69403  *         raise error(msg.decode('ascii'))             # <<<<<<<<<<<<<<
69404  *     else:
69405  *         raise error
69406  */
69407     __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1260, __pyx_L1_error)
69408     __Pyx_GOTREF(__pyx_t_3);
69409     __Pyx_INCREF(__pyx_v_error);
69410     __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL;
69411     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
69412       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
69413       if (likely(__pyx_t_5)) {
69414         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
69415         __Pyx_INCREF(__pyx_t_5);
69416         __Pyx_INCREF(function);
69417         __Pyx_DECREF_SET(__pyx_t_4, function);
69418       }
69419     }
69420     __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
69421     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
69422     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
69423     if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1260, __pyx_L1_error)
69424     __Pyx_GOTREF(__pyx_t_2);
69425     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
69426     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
69427     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
69428     __PYX_ERR(5, 1260, __pyx_L1_error)
69429 
69430     /* "View.MemoryView":1259
69431  * @cname('__pyx_memoryview_err')
69432  * cdef int _err(object error, char *msg) except -1 with gil:
69433  *     if msg != NULL:             # <<<<<<<<<<<<<<
69434  *         raise error(msg.decode('ascii'))
69435  *     else:
69436  */
69437   }
69438 
69439   /* "View.MemoryView":1262
69440  *         raise error(msg.decode('ascii'))
69441  *     else:
69442  *         raise error             # <<<<<<<<<<<<<<
69443  *
69444  * @cname('__pyx_memoryview_copy_contents')
69445  */
69446   /*else*/ {
69447     __Pyx_Raise(__pyx_v_error, 0, 0, 0);
69448     __PYX_ERR(5, 1262, __pyx_L1_error)
69449   }
69450 
69451   /* "View.MemoryView":1258
69452  *
69453  * @cname('__pyx_memoryview_err')
69454  * cdef int _err(object error, char *msg) except -1 with gil:             # <<<<<<<<<<<<<<
69455  *     if msg != NULL:
69456  *         raise error(msg.decode('ascii'))
69457  */
69458 
69459   /* function exit code */
69460   __pyx_L1_error:;
69461   __Pyx_XDECREF(__pyx_t_2);
69462   __Pyx_XDECREF(__pyx_t_3);
69463   __Pyx_XDECREF(__pyx_t_4);
69464   __Pyx_XDECREF(__pyx_t_5);
69465   __Pyx_AddTraceback("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename);
69466   __pyx_r = -1;
69467   __Pyx_XDECREF(__pyx_v_error);
69468   __Pyx_RefNannyFinishContext();
69469   #ifdef WITH_THREAD
69470   __Pyx_PyGILState_Release(__pyx_gilstate_save);
69471   #endif
69472   return __pyx_r;
69473 }
69474 
69475 /* "View.MemoryView":1265
69476  *
69477  * @cname('__pyx_memoryview_copy_contents')
69478  * cdef int memoryview_copy_contents(__Pyx_memviewslice src,             # <<<<<<<<<<<<<<
69479  *                                   __Pyx_memviewslice dst,
69480  *                                   int src_ndim, int dst_ndim,
69481  */
69482 
69483 static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) {
69484   void *__pyx_v_tmpdata;
69485   size_t __pyx_v_itemsize;
69486   int __pyx_v_i;
69487   char __pyx_v_order;
69488   int __pyx_v_broadcasting;
69489   int __pyx_v_direct_copy;
69490   __Pyx_memviewslice __pyx_v_tmp;
69491   int __pyx_v_ndim;
69492   int __pyx_r;
69493   Py_ssize_t __pyx_t_1;
69494   int __pyx_t_2;
69495   int __pyx_t_3;
69496   int __pyx_t_4;
69497   int __pyx_t_5;
69498   int __pyx_t_6;
69499   void *__pyx_t_7;
69500   int __pyx_t_8;
69501 
69502   /* "View.MemoryView":1273
69503  *     Check for overlapping memory and verify the shapes.
69504  *     """
69505  *     cdef void *tmpdata = NULL             # <<<<<<<<<<<<<<
69506  *     cdef size_t itemsize = src.memview.view.itemsize
69507  *     cdef int i
69508  */
69509   __pyx_v_tmpdata = NULL;
69510 
69511   /* "View.MemoryView":1274
69512  *     """
69513  *     cdef void *tmpdata = NULL
69514  *     cdef size_t itemsize = src.memview.view.itemsize             # <<<<<<<<<<<<<<
69515  *     cdef int i
69516  *     cdef char order = get_best_order(&src, src_ndim)
69517  */
69518   __pyx_t_1 = __pyx_v_src.memview->view.itemsize;
69519   __pyx_v_itemsize = __pyx_t_1;
69520 
69521   /* "View.MemoryView":1276
69522  *     cdef size_t itemsize = src.memview.view.itemsize
69523  *     cdef int i
69524  *     cdef char order = get_best_order(&src, src_ndim)             # <<<<<<<<<<<<<<
69525  *     cdef bint broadcasting = False
69526  *     cdef bint direct_copy = False
69527  */
69528   __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim);
69529 
69530   /* "View.MemoryView":1277
69531  *     cdef int i
69532  *     cdef char order = get_best_order(&src, src_ndim)
69533  *     cdef bint broadcasting = False             # <<<<<<<<<<<<<<
69534  *     cdef bint direct_copy = False
69535  *     cdef __Pyx_memviewslice tmp
69536  */
69537   __pyx_v_broadcasting = 0;
69538 
69539   /* "View.MemoryView":1278
69540  *     cdef char order = get_best_order(&src, src_ndim)
69541  *     cdef bint broadcasting = False
69542  *     cdef bint direct_copy = False             # <<<<<<<<<<<<<<
69543  *     cdef __Pyx_memviewslice tmp
69544  *
69545  */
69546   __pyx_v_direct_copy = 0;
69547 
69548   /* "View.MemoryView":1281
69549  *     cdef __Pyx_memviewslice tmp
69550  *
69551  *     if src_ndim < dst_ndim:             # <<<<<<<<<<<<<<
69552  *         broadcast_leading(&src, src_ndim, dst_ndim)
69553  *     elif dst_ndim < src_ndim:
69554  */
69555   __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0);
69556   if (__pyx_t_2) {
69557 
69558     /* "View.MemoryView":1282
69559  *
69560  *     if src_ndim < dst_ndim:
69561  *         broadcast_leading(&src, src_ndim, dst_ndim)             # <<<<<<<<<<<<<<
69562  *     elif dst_ndim < src_ndim:
69563  *         broadcast_leading(&dst, dst_ndim, src_ndim)
69564  */
69565     __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim);
69566 
69567     /* "View.MemoryView":1281
69568  *     cdef __Pyx_memviewslice tmp
69569  *
69570  *     if src_ndim < dst_ndim:             # <<<<<<<<<<<<<<
69571  *         broadcast_leading(&src, src_ndim, dst_ndim)
69572  *     elif dst_ndim < src_ndim:
69573  */
69574     goto __pyx_L3;
69575   }
69576 
69577   /* "View.MemoryView":1283
69578  *     if src_ndim < dst_ndim:
69579  *         broadcast_leading(&src, src_ndim, dst_ndim)
69580  *     elif dst_ndim < src_ndim:             # <<<<<<<<<<<<<<
69581  *         broadcast_leading(&dst, dst_ndim, src_ndim)
69582  *
69583  */
69584   __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0);
69585   if (__pyx_t_2) {
69586 
69587     /* "View.MemoryView":1284
69588  *         broadcast_leading(&src, src_ndim, dst_ndim)
69589  *     elif dst_ndim < src_ndim:
69590  *         broadcast_leading(&dst, dst_ndim, src_ndim)             # <<<<<<<<<<<<<<
69591  *
69592  *     cdef int ndim = max(src_ndim, dst_ndim)
69593  */
69594     __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim);
69595 
69596     /* "View.MemoryView":1283
69597  *     if src_ndim < dst_ndim:
69598  *         broadcast_leading(&src, src_ndim, dst_ndim)
69599  *     elif dst_ndim < src_ndim:             # <<<<<<<<<<<<<<
69600  *         broadcast_leading(&dst, dst_ndim, src_ndim)
69601  *
69602  */
69603   }
69604   __pyx_L3:;
69605 
69606   /* "View.MemoryView":1286
69607  *         broadcast_leading(&dst, dst_ndim, src_ndim)
69608  *
69609  *     cdef int ndim = max(src_ndim, dst_ndim)             # <<<<<<<<<<<<<<
69610  *
69611  *     for i in range(ndim):
69612  */
69613   __pyx_t_3 = __pyx_v_dst_ndim;
69614   __pyx_t_4 = __pyx_v_src_ndim;
69615   if (((__pyx_t_3 > __pyx_t_4) != 0)) {
69616     __pyx_t_5 = __pyx_t_3;
69617   } else {
69618     __pyx_t_5 = __pyx_t_4;
69619   }
69620   __pyx_v_ndim = __pyx_t_5;
69621 
69622   /* "View.MemoryView":1288
69623  *     cdef int ndim = max(src_ndim, dst_ndim)
69624  *
69625  *     for i in range(ndim):             # <<<<<<<<<<<<<<
69626  *         if src.shape[i] != dst.shape[i]:
69627  *             if src.shape[i] == 1:
69628  */
69629   __pyx_t_5 = __pyx_v_ndim;
69630   __pyx_t_3 = __pyx_t_5;
69631   for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
69632     __pyx_v_i = __pyx_t_4;
69633 
69634     /* "View.MemoryView":1289
69635  *
69636  *     for i in range(ndim):
69637  *         if src.shape[i] != dst.shape[i]:             # <<<<<<<<<<<<<<
69638  *             if src.shape[i] == 1:
69639  *                 broadcasting = True
69640  */
69641     __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0);
69642     if (__pyx_t_2) {
69643 
69644       /* "View.MemoryView":1290
69645  *     for i in range(ndim):
69646  *         if src.shape[i] != dst.shape[i]:
69647  *             if src.shape[i] == 1:             # <<<<<<<<<<<<<<
69648  *                 broadcasting = True
69649  *                 src.strides[i] = 0
69650  */
69651       __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0);
69652       if (__pyx_t_2) {
69653 
69654         /* "View.MemoryView":1291
69655  *         if src.shape[i] != dst.shape[i]:
69656  *             if src.shape[i] == 1:
69657  *                 broadcasting = True             # <<<<<<<<<<<<<<
69658  *                 src.strides[i] = 0
69659  *             else:
69660  */
69661         __pyx_v_broadcasting = 1;
69662 
69663         /* "View.MemoryView":1292
69664  *             if src.shape[i] == 1:
69665  *                 broadcasting = True
69666  *                 src.strides[i] = 0             # <<<<<<<<<<<<<<
69667  *             else:
69668  *                 _err_extents(i, dst.shape[i], src.shape[i])
69669  */
69670         (__pyx_v_src.strides[__pyx_v_i]) = 0;
69671 
69672         /* "View.MemoryView":1290
69673  *     for i in range(ndim):
69674  *         if src.shape[i] != dst.shape[i]:
69675  *             if src.shape[i] == 1:             # <<<<<<<<<<<<<<
69676  *                 broadcasting = True
69677  *                 src.strides[i] = 0
69678  */
69679         goto __pyx_L7;
69680       }
69681 
69682       /* "View.MemoryView":1294
69683  *                 src.strides[i] = 0
69684  *             else:
69685  *                 _err_extents(i, dst.shape[i], src.shape[i])             # <<<<<<<<<<<<<<
69686  *
69687  *         if src.suboffsets[i] >= 0:
69688  */
69689       /*else*/ {
69690         __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 1294, __pyx_L1_error)
69691       }
69692       __pyx_L7:;
69693 
69694       /* "View.MemoryView":1289
69695  *
69696  *     for i in range(ndim):
69697  *         if src.shape[i] != dst.shape[i]:             # <<<<<<<<<<<<<<
69698  *             if src.shape[i] == 1:
69699  *                 broadcasting = True
69700  */
69701     }
69702 
69703     /* "View.MemoryView":1296
69704  *                 _err_extents(i, dst.shape[i], src.shape[i])
69705  *
69706  *         if src.suboffsets[i] >= 0:             # <<<<<<<<<<<<<<
69707  *             _err_dim(ValueError, "Dimension %d is not direct", i)
69708  *
69709  */
69710     __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0);
69711     if (__pyx_t_2) {
69712 
69713       /* "View.MemoryView":1297
69714  *
69715  *         if src.suboffsets[i] >= 0:
69716  *             _err_dim(ValueError, "Dimension %d is not direct", i)             # <<<<<<<<<<<<<<
69717  *
69718  *     if slices_overlap(&src, &dst, ndim, itemsize):
69719  */
69720       __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 1297, __pyx_L1_error)
69721 
69722       /* "View.MemoryView":1296
69723  *                 _err_extents(i, dst.shape[i], src.shape[i])
69724  *
69725  *         if src.suboffsets[i] >= 0:             # <<<<<<<<<<<<<<
69726  *             _err_dim(ValueError, "Dimension %d is not direct", i)
69727  *
69728  */
69729     }
69730   }
69731 
69732   /* "View.MemoryView":1299
69733  *             _err_dim(ValueError, "Dimension %d is not direct", i)
69734  *
69735  *     if slices_overlap(&src, &dst, ndim, itemsize):             # <<<<<<<<<<<<<<
69736  *
69737  *         if not slice_is_contig(src, order, ndim):
69738  */
69739   __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0);
69740   if (__pyx_t_2) {
69741 
69742     /* "View.MemoryView":1301
69743  *     if slices_overlap(&src, &dst, ndim, itemsize):
69744  *
69745  *         if not slice_is_contig(src, order, ndim):             # <<<<<<<<<<<<<<
69746  *             order = get_best_order(&dst, ndim)
69747  *
69748  */
69749     __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0);
69750     if (__pyx_t_2) {
69751 
69752       /* "View.MemoryView":1302
69753  *
69754  *         if not slice_is_contig(src, order, ndim):
69755  *             order = get_best_order(&dst, ndim)             # <<<<<<<<<<<<<<
69756  *
69757  *         tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)
69758  */
69759       __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim);
69760 
69761       /* "View.MemoryView":1301
69762  *     if slices_overlap(&src, &dst, ndim, itemsize):
69763  *
69764  *         if not slice_is_contig(src, order, ndim):             # <<<<<<<<<<<<<<
69765  *             order = get_best_order(&dst, ndim)
69766  *
69767  */
69768     }
69769 
69770     /* "View.MemoryView":1304
69771  *             order = get_best_order(&dst, ndim)
69772  *
69773  *         tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)             # <<<<<<<<<<<<<<
69774  *         src = tmp
69775  *
69776  */
69777     __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(5, 1304, __pyx_L1_error)
69778     __pyx_v_tmpdata = __pyx_t_7;
69779 
69780     /* "View.MemoryView":1305
69781  *
69782  *         tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)
69783  *         src = tmp             # <<<<<<<<<<<<<<
69784  *
69785  *     if not broadcasting:
69786  */
69787     __pyx_v_src = __pyx_v_tmp;
69788 
69789     /* "View.MemoryView":1299
69790  *             _err_dim(ValueError, "Dimension %d is not direct", i)
69791  *
69792  *     if slices_overlap(&src, &dst, ndim, itemsize):             # <<<<<<<<<<<<<<
69793  *
69794  *         if not slice_is_contig(src, order, ndim):
69795  */
69796   }
69797 
69798   /* "View.MemoryView":1307
69799  *         src = tmp
69800  *
69801  *     if not broadcasting:             # <<<<<<<<<<<<<<
69802  *
69803  *
69804  */
69805   __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0);
69806   if (__pyx_t_2) {
69807 
69808     /* "View.MemoryView":1310
69809  *
69810  *
69811  *         if slice_is_contig(src, 'C', ndim):             # <<<<<<<<<<<<<<
69812  *             direct_copy = slice_is_contig(dst, 'C', ndim)
69813  *         elif slice_is_contig(src, 'F', ndim):
69814  */
69815     __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0);
69816     if (__pyx_t_2) {
69817 
69818       /* "View.MemoryView":1311
69819  *
69820  *         if slice_is_contig(src, 'C', ndim):
69821  *             direct_copy = slice_is_contig(dst, 'C', ndim)             # <<<<<<<<<<<<<<
69822  *         elif slice_is_contig(src, 'F', ndim):
69823  *             direct_copy = slice_is_contig(dst, 'F', ndim)
69824  */
69825       __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim);
69826 
69827       /* "View.MemoryView":1310
69828  *
69829  *
69830  *         if slice_is_contig(src, 'C', ndim):             # <<<<<<<<<<<<<<
69831  *             direct_copy = slice_is_contig(dst, 'C', ndim)
69832  *         elif slice_is_contig(src, 'F', ndim):
69833  */
69834       goto __pyx_L12;
69835     }
69836 
69837     /* "View.MemoryView":1312
69838  *         if slice_is_contig(src, 'C', ndim):
69839  *             direct_copy = slice_is_contig(dst, 'C', ndim)
69840  *         elif slice_is_contig(src, 'F', ndim):             # <<<<<<<<<<<<<<
69841  *             direct_copy = slice_is_contig(dst, 'F', ndim)
69842  *
69843  */
69844     __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0);
69845     if (__pyx_t_2) {
69846 
69847       /* "View.MemoryView":1313
69848  *             direct_copy = slice_is_contig(dst, 'C', ndim)
69849  *         elif slice_is_contig(src, 'F', ndim):
69850  *             direct_copy = slice_is_contig(dst, 'F', ndim)             # <<<<<<<<<<<<<<
69851  *
69852  *         if direct_copy:
69853  */
69854       __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim);
69855 
69856       /* "View.MemoryView":1312
69857  *         if slice_is_contig(src, 'C', ndim):
69858  *             direct_copy = slice_is_contig(dst, 'C', ndim)
69859  *         elif slice_is_contig(src, 'F', ndim):             # <<<<<<<<<<<<<<
69860  *             direct_copy = slice_is_contig(dst, 'F', ndim)
69861  *
69862  */
69863     }
69864     __pyx_L12:;
69865 
69866     /* "View.MemoryView":1315
69867  *             direct_copy = slice_is_contig(dst, 'F', ndim)
69868  *
69869  *         if direct_copy:             # <<<<<<<<<<<<<<
69870  *
69871  *             refcount_copying(&dst, dtype_is_object, ndim, False)
69872  */
69873     __pyx_t_2 = (__pyx_v_direct_copy != 0);
69874     if (__pyx_t_2) {
69875 
69876       /* "View.MemoryView":1317
69877  *         if direct_copy:
69878  *
69879  *             refcount_copying(&dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
69880  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))
69881  *             refcount_copying(&dst, dtype_is_object, ndim, True)
69882  */
69883       __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
69884 
69885       /* "View.MemoryView":1318
69886  *
69887  *             refcount_copying(&dst, dtype_is_object, ndim, False)
69888  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))             # <<<<<<<<<<<<<<
69889  *             refcount_copying(&dst, dtype_is_object, ndim, True)
69890  *             free(tmpdata)
69891  */
69892       (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim)));
69893 
69894       /* "View.MemoryView":1319
69895  *             refcount_copying(&dst, dtype_is_object, ndim, False)
69896  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))
69897  *             refcount_copying(&dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
69898  *             free(tmpdata)
69899  *             return 0
69900  */
69901       __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
69902 
69903       /* "View.MemoryView":1320
69904  *             memcpy(dst.data, src.data, slice_get_size(&src, ndim))
69905  *             refcount_copying(&dst, dtype_is_object, ndim, True)
69906  *             free(tmpdata)             # <<<<<<<<<<<<<<
69907  *             return 0
69908  *
69909  */
69910       free(__pyx_v_tmpdata);
69911 
69912       /* "View.MemoryView":1321
69913  *             refcount_copying(&dst, dtype_is_object, ndim, True)
69914  *             free(tmpdata)
69915  *             return 0             # <<<<<<<<<<<<<<
69916  *
69917  *     if order == 'F' == get_best_order(&dst, ndim):
69918  */
69919       __pyx_r = 0;
69920       goto __pyx_L0;
69921 
69922       /* "View.MemoryView":1315
69923  *             direct_copy = slice_is_contig(dst, 'F', ndim)
69924  *
69925  *         if direct_copy:             # <<<<<<<<<<<<<<
69926  *
69927  *             refcount_copying(&dst, dtype_is_object, ndim, False)
69928  */
69929     }
69930 
69931     /* "View.MemoryView":1307
69932  *         src = tmp
69933  *
69934  *     if not broadcasting:             # <<<<<<<<<<<<<<
69935  *
69936  *
69937  */
69938   }
69939 
69940   /* "View.MemoryView":1323
69941  *             return 0
69942  *
69943  *     if order == 'F' == get_best_order(&dst, ndim):             # <<<<<<<<<<<<<<
69944  *
69945  *
69946  */
69947   __pyx_t_2 = (__pyx_v_order == 'F');
69948   if (__pyx_t_2) {
69949     __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim));
69950   }
69951   __pyx_t_8 = (__pyx_t_2 != 0);
69952   if (__pyx_t_8) {
69953 
69954     /* "View.MemoryView":1326
69955  *
69956  *
69957  *         transpose_memslice(&src)             # <<<<<<<<<<<<<<
69958  *         transpose_memslice(&dst)
69959  *
69960  */
69961     __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(5, 1326, __pyx_L1_error)
69962 
69963     /* "View.MemoryView":1327
69964  *
69965  *         transpose_memslice(&src)
69966  *         transpose_memslice(&dst)             # <<<<<<<<<<<<<<
69967  *
69968  *     refcount_copying(&dst, dtype_is_object, ndim, False)
69969  */
69970     __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(5, 1327, __pyx_L1_error)
69971 
69972     /* "View.MemoryView":1323
69973  *             return 0
69974  *
69975  *     if order == 'F' == get_best_order(&dst, ndim):             # <<<<<<<<<<<<<<
69976  *
69977  *
69978  */
69979   }
69980 
69981   /* "View.MemoryView":1329
69982  *         transpose_memslice(&dst)
69983  *
69984  *     refcount_copying(&dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
69985  *     copy_strided_to_strided(&src, &dst, ndim, itemsize)
69986  *     refcount_copying(&dst, dtype_is_object, ndim, True)
69987  */
69988   __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
69989 
69990   /* "View.MemoryView":1330
69991  *
69992  *     refcount_copying(&dst, dtype_is_object, ndim, False)
69993  *     copy_strided_to_strided(&src, &dst, ndim, itemsize)             # <<<<<<<<<<<<<<
69994  *     refcount_copying(&dst, dtype_is_object, ndim, True)
69995  *
69996  */
69997   copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize);
69998 
69999   /* "View.MemoryView":1331
70000  *     refcount_copying(&dst, dtype_is_object, ndim, False)
70001  *     copy_strided_to_strided(&src, &dst, ndim, itemsize)
70002  *     refcount_copying(&dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
70003  *
70004  *     free(tmpdata)
70005  */
70006   __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
70007 
70008   /* "View.MemoryView":1333
70009  *     refcount_copying(&dst, dtype_is_object, ndim, True)
70010  *
70011  *     free(tmpdata)             # <<<<<<<<<<<<<<
70012  *     return 0
70013  *
70014  */
70015   free(__pyx_v_tmpdata);
70016 
70017   /* "View.MemoryView":1334
70018  *
70019  *     free(tmpdata)
70020  *     return 0             # <<<<<<<<<<<<<<
70021  *
70022  * @cname('__pyx_memoryview_broadcast_leading')
70023  */
70024   __pyx_r = 0;
70025   goto __pyx_L0;
70026 
70027   /* "View.MemoryView":1265
70028  *
70029  * @cname('__pyx_memoryview_copy_contents')
70030  * cdef int memoryview_copy_contents(__Pyx_memviewslice src,             # <<<<<<<<<<<<<<
70031  *                                   __Pyx_memviewslice dst,
70032  *                                   int src_ndim, int dst_ndim,
70033  */
70034 
70035   /* function exit code */
70036   __pyx_L1_error:;
70037   {
70038     #ifdef WITH_THREAD
70039     PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
70040     #endif
70041     __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename);
70042     #ifdef WITH_THREAD
70043     __Pyx_PyGILState_Release(__pyx_gilstate_save);
70044     #endif
70045   }
70046   __pyx_r = -1;
70047   __pyx_L0:;
70048   return __pyx_r;
70049 }
70050 
70051 /* "View.MemoryView":1337
70052  *
70053  * @cname('__pyx_memoryview_broadcast_leading')
70054  * cdef void broadcast_leading(__Pyx_memviewslice *mslice,             # <<<<<<<<<<<<<<
70055  *                             int ndim,
70056  *                             int ndim_other) nogil:
70057  */
70058 
70059 static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) {
70060   int __pyx_v_i;
70061   int __pyx_v_offset;
70062   int __pyx_t_1;
70063   int __pyx_t_2;
70064   int __pyx_t_3;
70065 
70066   /* "View.MemoryView":1341
70067  *                             int ndim_other) nogil:
70068  *     cdef int i
70069  *     cdef int offset = ndim_other - ndim             # <<<<<<<<<<<<<<
70070  *
70071  *     for i in range(ndim - 1, -1, -1):
70072  */
70073   __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim);
70074 
70075   /* "View.MemoryView":1343
70076  *     cdef int offset = ndim_other - ndim
70077  *
70078  *     for i in range(ndim - 1, -1, -1):             # <<<<<<<<<<<<<<
70079  *         mslice.shape[i + offset] = mslice.shape[i]
70080  *         mslice.strides[i + offset] = mslice.strides[i]
70081  */
70082   for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
70083     __pyx_v_i = __pyx_t_1;
70084 
70085     /* "View.MemoryView":1344
70086  *
70087  *     for i in range(ndim - 1, -1, -1):
70088  *         mslice.shape[i + offset] = mslice.shape[i]             # <<<<<<<<<<<<<<
70089  *         mslice.strides[i + offset] = mslice.strides[i]
70090  *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]
70091  */
70092     (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]);
70093 
70094     /* "View.MemoryView":1345
70095  *     for i in range(ndim - 1, -1, -1):
70096  *         mslice.shape[i + offset] = mslice.shape[i]
70097  *         mslice.strides[i + offset] = mslice.strides[i]             # <<<<<<<<<<<<<<
70098  *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]
70099  *
70100  */
70101     (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]);
70102 
70103     /* "View.MemoryView":1346
70104  *         mslice.shape[i + offset] = mslice.shape[i]
70105  *         mslice.strides[i + offset] = mslice.strides[i]
70106  *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]             # <<<<<<<<<<<<<<
70107  *
70108  *     for i in range(offset):
70109  */
70110     (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]);
70111   }
70112 
70113   /* "View.MemoryView":1348
70114  *         mslice.suboffsets[i + offset] = mslice.suboffsets[i]
70115  *
70116  *     for i in range(offset):             # <<<<<<<<<<<<<<
70117  *         mslice.shape[i] = 1
70118  *         mslice.strides[i] = mslice.strides[0]
70119  */
70120   __pyx_t_1 = __pyx_v_offset;
70121   __pyx_t_2 = __pyx_t_1;
70122   for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
70123     __pyx_v_i = __pyx_t_3;
70124 
70125     /* "View.MemoryView":1349
70126  *
70127  *     for i in range(offset):
70128  *         mslice.shape[i] = 1             # <<<<<<<<<<<<<<
70129  *         mslice.strides[i] = mslice.strides[0]
70130  *         mslice.suboffsets[i] = -1
70131  */
70132     (__pyx_v_mslice->shape[__pyx_v_i]) = 1;
70133 
70134     /* "View.MemoryView":1350
70135  *     for i in range(offset):
70136  *         mslice.shape[i] = 1
70137  *         mslice.strides[i] = mslice.strides[0]             # <<<<<<<<<<<<<<
70138  *         mslice.suboffsets[i] = -1
70139  *
70140  */
70141     (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]);
70142 
70143     /* "View.MemoryView":1351
70144  *         mslice.shape[i] = 1
70145  *         mslice.strides[i] = mslice.strides[0]
70146  *         mslice.suboffsets[i] = -1             # <<<<<<<<<<<<<<
70147  *
70148  *
70149  */
70150     (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L;
70151   }
70152 
70153   /* "View.MemoryView":1337
70154  *
70155  * @cname('__pyx_memoryview_broadcast_leading')
70156  * cdef void broadcast_leading(__Pyx_memviewslice *mslice,             # <<<<<<<<<<<<<<
70157  *                             int ndim,
70158  *                             int ndim_other) nogil:
70159  */
70160 
70161   /* function exit code */
70162 }
70163 
70164 /* "View.MemoryView":1359
70165  *
70166  * @cname('__pyx_memoryview_refcount_copying')
70167  * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object,             # <<<<<<<<<<<<<<
70168  *                            int ndim, bint inc) nogil:
70169  *
70170  */
70171 
70172 static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) {
70173   int __pyx_t_1;
70174 
70175   /* "View.MemoryView":1363
70176  *
70177  *
70178  *     if dtype_is_object:             # <<<<<<<<<<<<<<
70179  *         refcount_objects_in_slice_with_gil(dst.data, dst.shape,
70180  *                                            dst.strides, ndim, inc)
70181  */
70182   __pyx_t_1 = (__pyx_v_dtype_is_object != 0);
70183   if (__pyx_t_1) {
70184 
70185     /* "View.MemoryView":1364
70186  *
70187  *     if dtype_is_object:
70188  *         refcount_objects_in_slice_with_gil(dst.data, dst.shape,             # <<<<<<<<<<<<<<
70189  *                                            dst.strides, ndim, inc)
70190  *
70191  */
70192     __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc);
70193 
70194     /* "View.MemoryView":1363
70195  *
70196  *
70197  *     if dtype_is_object:             # <<<<<<<<<<<<<<
70198  *         refcount_objects_in_slice_with_gil(dst.data, dst.shape,
70199  *                                            dst.strides, ndim, inc)
70200  */
70201   }
70202 
70203   /* "View.MemoryView":1359
70204  *
70205  * @cname('__pyx_memoryview_refcount_copying')
70206  * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object,             # <<<<<<<<<<<<<<
70207  *                            int ndim, bint inc) nogil:
70208  *
70209  */
70210 
70211   /* function exit code */
70212 }
70213 
70214 /* "View.MemoryView":1368
70215  *
70216  * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
70217  * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
70218  *                                              Py_ssize_t *strides, int ndim,
70219  *                                              bint inc) with gil:
70220  */
70221 
70222 static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) {
70223   __Pyx_RefNannyDeclarations
70224   #ifdef WITH_THREAD
70225   PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
70226   #endif
70227   __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0);
70228 
70229   /* "View.MemoryView":1371
70230  *                                              Py_ssize_t *strides, int ndim,
70231  *                                              bint inc) with gil:
70232  *     refcount_objects_in_slice(data, shape, strides, ndim, inc)             # <<<<<<<<<<<<<<
70233  *
70234  * @cname('__pyx_memoryview_refcount_objects_in_slice')
70235  */
70236   __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc);
70237 
70238   /* "View.MemoryView":1368
70239  *
70240  * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
70241  * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
70242  *                                              Py_ssize_t *strides, int ndim,
70243  *                                              bint inc) with gil:
70244  */
70245 
70246   /* function exit code */
70247   __Pyx_RefNannyFinishContext();
70248   #ifdef WITH_THREAD
70249   __Pyx_PyGILState_Release(__pyx_gilstate_save);
70250   #endif
70251 }
70252 
70253 /* "View.MemoryView":1374
70254  *
70255  * @cname('__pyx_memoryview_refcount_objects_in_slice')
70256  * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
70257  *                                     Py_ssize_t *strides, int ndim, bint inc):
70258  *     cdef Py_ssize_t i
70259  */
70260 
70261 static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) {
70262   CYTHON_UNUSED Py_ssize_t __pyx_v_i;
70263   __Pyx_RefNannyDeclarations
70264   Py_ssize_t __pyx_t_1;
70265   Py_ssize_t __pyx_t_2;
70266   Py_ssize_t __pyx_t_3;
70267   int __pyx_t_4;
70268   __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0);
70269 
70270   /* "View.MemoryView":1378
70271  *     cdef Py_ssize_t i
70272  *
70273  *     for i in range(shape[0]):             # <<<<<<<<<<<<<<
70274  *         if ndim == 1:
70275  *             if inc:
70276  */
70277   __pyx_t_1 = (__pyx_v_shape[0]);
70278   __pyx_t_2 = __pyx_t_1;
70279   for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
70280     __pyx_v_i = __pyx_t_3;
70281 
70282     /* "View.MemoryView":1379
70283  *
70284  *     for i in range(shape[0]):
70285  *         if ndim == 1:             # <<<<<<<<<<<<<<
70286  *             if inc:
70287  *                 Py_INCREF((<PyObject **> data)[0])
70288  */
70289     __pyx_t_4 = ((__pyx_v_ndim == 1) != 0);
70290     if (__pyx_t_4) {
70291 
70292       /* "View.MemoryView":1380
70293  *     for i in range(shape[0]):
70294  *         if ndim == 1:
70295  *             if inc:             # <<<<<<<<<<<<<<
70296  *                 Py_INCREF((<PyObject **> data)[0])
70297  *             else:
70298  */
70299       __pyx_t_4 = (__pyx_v_inc != 0);
70300       if (__pyx_t_4) {
70301 
70302         /* "View.MemoryView":1381
70303  *         if ndim == 1:
70304  *             if inc:
70305  *                 Py_INCREF((<PyObject **> data)[0])             # <<<<<<<<<<<<<<
70306  *             else:
70307  *                 Py_DECREF((<PyObject **> data)[0])
70308  */
70309         Py_INCREF((((PyObject **)__pyx_v_data)[0]));
70310 
70311         /* "View.MemoryView":1380
70312  *     for i in range(shape[0]):
70313  *         if ndim == 1:
70314  *             if inc:             # <<<<<<<<<<<<<<
70315  *                 Py_INCREF((<PyObject **> data)[0])
70316  *             else:
70317  */
70318         goto __pyx_L6;
70319       }
70320 
70321       /* "View.MemoryView":1383
70322  *                 Py_INCREF((<PyObject **> data)[0])
70323  *             else:
70324  *                 Py_DECREF((<PyObject **> data)[0])             # <<<<<<<<<<<<<<
70325  *         else:
70326  *             refcount_objects_in_slice(data, shape + 1, strides + 1,
70327  */
70328       /*else*/ {
70329         Py_DECREF((((PyObject **)__pyx_v_data)[0]));
70330       }
70331       __pyx_L6:;
70332 
70333       /* "View.MemoryView":1379
70334  *
70335  *     for i in range(shape[0]):
70336  *         if ndim == 1:             # <<<<<<<<<<<<<<
70337  *             if inc:
70338  *                 Py_INCREF((<PyObject **> data)[0])
70339  */
70340       goto __pyx_L5;
70341     }
70342 
70343     /* "View.MemoryView":1385
70344  *                 Py_DECREF((<PyObject **> data)[0])
70345  *         else:
70346  *             refcount_objects_in_slice(data, shape + 1, strides + 1,             # <<<<<<<<<<<<<<
70347  *                                       ndim - 1, inc)
70348  *
70349  */
70350     /*else*/ {
70351 
70352       /* "View.MemoryView":1386
70353  *         else:
70354  *             refcount_objects_in_slice(data, shape + 1, strides + 1,
70355  *                                       ndim - 1, inc)             # <<<<<<<<<<<<<<
70356  *
70357  *         data += strides[0]
70358  */
70359       __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc);
70360     }
70361     __pyx_L5:;
70362 
70363     /* "View.MemoryView":1388
70364  *                                       ndim - 1, inc)
70365  *
70366  *         data += strides[0]             # <<<<<<<<<<<<<<
70367  *
70368  *
70369  */
70370     __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0]));
70371   }
70372 
70373   /* "View.MemoryView":1374
70374  *
70375  * @cname('__pyx_memoryview_refcount_objects_in_slice')
70376  * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
70377  *                                     Py_ssize_t *strides, int ndim, bint inc):
70378  *     cdef Py_ssize_t i
70379  */
70380 
70381   /* function exit code */
70382   __Pyx_RefNannyFinishContext();
70383 }
70384 
70385 /* "View.MemoryView":1394
70386  *
70387  * @cname('__pyx_memoryview_slice_assign_scalar')
70388  * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim,             # <<<<<<<<<<<<<<
70389  *                               size_t itemsize, void *item,
70390  *                               bint dtype_is_object) nogil:
70391  */
70392 
70393 static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) {
70394 
70395   /* "View.MemoryView":1397
70396  *                               size_t itemsize, void *item,
70397  *                               bint dtype_is_object) nogil:
70398  *     refcount_copying(dst, dtype_is_object, ndim, False)             # <<<<<<<<<<<<<<
70399  *     _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,
70400  *                          itemsize, item)
70401  */
70402   __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
70403 
70404   /* "View.MemoryView":1398
70405  *                               bint dtype_is_object) nogil:
70406  *     refcount_copying(dst, dtype_is_object, ndim, False)
70407  *     _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,             # <<<<<<<<<<<<<<
70408  *                          itemsize, item)
70409  *     refcount_copying(dst, dtype_is_object, ndim, True)
70410  */
70411   __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item);
70412 
70413   /* "View.MemoryView":1400
70414  *     _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,
70415  *                          itemsize, item)
70416  *     refcount_copying(dst, dtype_is_object, ndim, True)             # <<<<<<<<<<<<<<
70417  *
70418  *
70419  */
70420   __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
70421 
70422   /* "View.MemoryView":1394
70423  *
70424  * @cname('__pyx_memoryview_slice_assign_scalar')
70425  * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim,             # <<<<<<<<<<<<<<
70426  *                               size_t itemsize, void *item,
70427  *                               bint dtype_is_object) nogil:
70428  */
70429 
70430   /* function exit code */
70431 }
70432 
70433 /* "View.MemoryView":1404
70434  *
70435  * @cname('__pyx_memoryview__slice_assign_scalar')
70436  * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
70437  *                               Py_ssize_t *strides, int ndim,
70438  *                               size_t itemsize, void *item) nogil:
70439  */
70440 
70441 static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) {
70442   CYTHON_UNUSED Py_ssize_t __pyx_v_i;
70443   Py_ssize_t __pyx_v_stride;
70444   Py_ssize_t __pyx_v_extent;
70445   int __pyx_t_1;
70446   Py_ssize_t __pyx_t_2;
70447   Py_ssize_t __pyx_t_3;
70448   Py_ssize_t __pyx_t_4;
70449 
70450   /* "View.MemoryView":1408
70451  *                               size_t itemsize, void *item) nogil:
70452  *     cdef Py_ssize_t i
70453  *     cdef Py_ssize_t stride = strides[0]             # <<<<<<<<<<<<<<
70454  *     cdef Py_ssize_t extent = shape[0]
70455  *
70456  */
70457   __pyx_v_stride = (__pyx_v_strides[0]);
70458 
70459   /* "View.MemoryView":1409
70460  *     cdef Py_ssize_t i
70461  *     cdef Py_ssize_t stride = strides[0]
70462  *     cdef Py_ssize_t extent = shape[0]             # <<<<<<<<<<<<<<
70463  *
70464  *     if ndim == 1:
70465  */
70466   __pyx_v_extent = (__pyx_v_shape[0]);
70467 
70468   /* "View.MemoryView":1411
70469  *     cdef Py_ssize_t extent = shape[0]
70470  *
70471  *     if ndim == 1:             # <<<<<<<<<<<<<<
70472  *         for i in range(extent):
70473  *             memcpy(data, item, itemsize)
70474  */
70475   __pyx_t_1 = ((__pyx_v_ndim == 1) != 0);
70476   if (__pyx_t_1) {
70477 
70478     /* "View.MemoryView":1412
70479  *
70480  *     if ndim == 1:
70481  *         for i in range(extent):             # <<<<<<<<<<<<<<
70482  *             memcpy(data, item, itemsize)
70483  *             data += stride
70484  */
70485     __pyx_t_2 = __pyx_v_extent;
70486     __pyx_t_3 = __pyx_t_2;
70487     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
70488       __pyx_v_i = __pyx_t_4;
70489 
70490       /* "View.MemoryView":1413
70491  *     if ndim == 1:
70492  *         for i in range(extent):
70493  *             memcpy(data, item, itemsize)             # <<<<<<<<<<<<<<
70494  *             data += stride
70495  *     else:
70496  */
70497       (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize));
70498 
70499       /* "View.MemoryView":1414
70500  *         for i in range(extent):
70501  *             memcpy(data, item, itemsize)
70502  *             data += stride             # <<<<<<<<<<<<<<
70503  *     else:
70504  *         for i in range(extent):
70505  */
70506       __pyx_v_data = (__pyx_v_data + __pyx_v_stride);
70507     }
70508 
70509     /* "View.MemoryView":1411
70510  *     cdef Py_ssize_t extent = shape[0]
70511  *
70512  *     if ndim == 1:             # <<<<<<<<<<<<<<
70513  *         for i in range(extent):
70514  *             memcpy(data, item, itemsize)
70515  */
70516     goto __pyx_L3;
70517   }
70518 
70519   /* "View.MemoryView":1416
70520  *             data += stride
70521  *     else:
70522  *         for i in range(extent):             # <<<<<<<<<<<<<<
70523  *             _slice_assign_scalar(data, shape + 1, strides + 1,
70524  *                                 ndim - 1, itemsize, item)
70525  */
70526   /*else*/ {
70527     __pyx_t_2 = __pyx_v_extent;
70528     __pyx_t_3 = __pyx_t_2;
70529     for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
70530       __pyx_v_i = __pyx_t_4;
70531 
70532       /* "View.MemoryView":1417
70533  *     else:
70534  *         for i in range(extent):
70535  *             _slice_assign_scalar(data, shape + 1, strides + 1,             # <<<<<<<<<<<<<<
70536  *                                 ndim - 1, itemsize, item)
70537  *             data += stride
70538  */
70539       __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item);
70540 
70541       /* "View.MemoryView":1419
70542  *             _slice_assign_scalar(data, shape + 1, strides + 1,
70543  *                                 ndim - 1, itemsize, item)
70544  *             data += stride             # <<<<<<<<<<<<<<
70545  *
70546  *
70547  */
70548       __pyx_v_data = (__pyx_v_data + __pyx_v_stride);
70549     }
70550   }
70551   __pyx_L3:;
70552 
70553   /* "View.MemoryView":1404
70554  *
70555  * @cname('__pyx_memoryview__slice_assign_scalar')
70556  * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape,             # <<<<<<<<<<<<<<
70557  *                               Py_ssize_t *strides, int ndim,
70558  *                               size_t itemsize, void *item) nogil:
70559  */
70560 
70561   /* function exit code */
70562 }
70563 
70564 /* "(tree fragment)":1
70565  * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
70566  *     cdef object __pyx_PickleError
70567  *     cdef object __pyx_result
70568  */
70569 
70570 /* Python wrapper */
70571 static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
70572 static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, METH_VARARGS|METH_KEYWORDS, 0};
70573 static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
70574   PyObject *__pyx_v___pyx_type = 0;
70575   long __pyx_v___pyx_checksum;
70576   PyObject *__pyx_v___pyx_state = 0;
70577   PyObject *__pyx_r = 0;
70578   __Pyx_RefNannyDeclarations
70579   __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0);
70580   {
70581     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
70582     PyObject* values[3] = {0,0,0};
70583     if (unlikely(__pyx_kwds)) {
70584       Py_ssize_t kw_args;
70585       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
70586       switch (pos_args) {
70587         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
70588         CYTHON_FALLTHROUGH;
70589         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
70590         CYTHON_FALLTHROUGH;
70591         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
70592         CYTHON_FALLTHROUGH;
70593         case  0: break;
70594         default: goto __pyx_L5_argtuple_error;
70595       }
70596       kw_args = PyDict_Size(__pyx_kwds);
70597       switch (pos_args) {
70598         case  0:
70599         if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
70600         else goto __pyx_L5_argtuple_error;
70601         CYTHON_FALLTHROUGH;
70602         case  1:
70603         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
70604         else {
70605           __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(5, 1, __pyx_L3_error)
70606         }
70607         CYTHON_FALLTHROUGH;
70608         case  2:
70609         if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
70610         else {
70611           __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(5, 1, __pyx_L3_error)
70612         }
70613       }
70614       if (unlikely(kw_args > 0)) {
70615         if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(5, 1, __pyx_L3_error)
70616       }
70617     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
70618       goto __pyx_L5_argtuple_error;
70619     } else {
70620       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
70621       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
70622       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
70623     }
70624     __pyx_v___pyx_type = values[0];
70625     __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(5, 1, __pyx_L3_error)
70626     __pyx_v___pyx_state = values[2];
70627   }
70628   goto __pyx_L4_argument_unpacking_done;
70629   __pyx_L5_argtuple_error:;
70630   __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(5, 1, __pyx_L3_error)
70631   __pyx_L3_error:;
70632   __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
70633   __Pyx_RefNannyFinishContext();
70634   return NULL;
70635   __pyx_L4_argument_unpacking_done:;
70636   __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);
70637 
70638   /* function exit code */
70639   __Pyx_RefNannyFinishContext();
70640   return __pyx_r;
70641 }
70642 
70643 static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
70644   PyObject *__pyx_v___pyx_PickleError = 0;
70645   PyObject *__pyx_v___pyx_result = 0;
70646   PyObject *__pyx_r = NULL;
70647   __Pyx_RefNannyDeclarations
70648   int __pyx_t_1;
70649   PyObject *__pyx_t_2 = NULL;
70650   PyObject *__pyx_t_3 = NULL;
70651   PyObject *__pyx_t_4 = NULL;
70652   PyObject *__pyx_t_5 = NULL;
70653   int __pyx_t_6;
70654   __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0);
70655 
70656   /* "(tree fragment)":4
70657  *     cdef object __pyx_PickleError
70658  *     cdef object __pyx_result
70659  *     if __pyx_checksum != 0xb068931:             # <<<<<<<<<<<<<<
70660  *         from pickle import PickleError as __pyx_PickleError
70661  *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)
70662  */
70663   __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xb068931) != 0);
70664   if (__pyx_t_1) {
70665 
70666     /* "(tree fragment)":5
70667  *     cdef object __pyx_result
70668  *     if __pyx_checksum != 0xb068931:
70669  *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
70670  *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)
70671  *     __pyx_result = Enum.__new__(__pyx_type)
70672  */
70673     __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5, __pyx_L1_error)
70674     __Pyx_GOTREF(__pyx_t_2);
70675     __Pyx_INCREF(__pyx_n_s_PickleError);
70676     __Pyx_GIVEREF(__pyx_n_s_PickleError);
70677     PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
70678     __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 5, __pyx_L1_error)
70679     __Pyx_GOTREF(__pyx_t_3);
70680     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
70681     __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5, __pyx_L1_error)
70682     __Pyx_GOTREF(__pyx_t_2);
70683     __Pyx_INCREF(__pyx_t_2);
70684     __pyx_v___pyx_PickleError = __pyx_t_2;
70685     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
70686     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
70687 
70688     /* "(tree fragment)":6
70689  *     if __pyx_checksum != 0xb068931:
70690  *         from pickle import PickleError as __pyx_PickleError
70691  *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)             # <<<<<<<<<<<<<<
70692  *     __pyx_result = Enum.__new__(__pyx_type)
70693  *     if __pyx_state is not None:
70694  */
70695     __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6, __pyx_L1_error)
70696     __Pyx_GOTREF(__pyx_t_2);
70697     __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 6, __pyx_L1_error)
70698     __Pyx_GOTREF(__pyx_t_4);
70699     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
70700     __Pyx_INCREF(__pyx_v___pyx_PickleError);
70701     __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
70702     if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
70703       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
70704       if (likely(__pyx_t_5)) {
70705         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
70706         __Pyx_INCREF(__pyx_t_5);
70707         __Pyx_INCREF(function);
70708         __Pyx_DECREF_SET(__pyx_t_2, function);
70709       }
70710     }
70711     __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
70712     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
70713     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
70714     if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 6, __pyx_L1_error)
70715     __Pyx_GOTREF(__pyx_t_3);
70716     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
70717     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
70718     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
70719     __PYX_ERR(5, 6, __pyx_L1_error)
70720 
70721     /* "(tree fragment)":4
70722  *     cdef object __pyx_PickleError
70723  *     cdef object __pyx_result
70724  *     if __pyx_checksum != 0xb068931:             # <<<<<<<<<<<<<<
70725  *         from pickle import PickleError as __pyx_PickleError
70726  *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)
70727  */
70728   }
70729 
70730   /* "(tree fragment)":7
70731  *         from pickle import PickleError as __pyx_PickleError
70732  *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)
70733  *     __pyx_result = Enum.__new__(__pyx_type)             # <<<<<<<<<<<<<<
70734  *     if __pyx_state is not None:
70735  *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
70736  */
70737   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7, __pyx_L1_error)
70738   __Pyx_GOTREF(__pyx_t_2);
70739   __pyx_t_4 = NULL;
70740   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
70741     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
70742     if (likely(__pyx_t_4)) {
70743       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
70744       __Pyx_INCREF(__pyx_t_4);
70745       __Pyx_INCREF(function);
70746       __Pyx_DECREF_SET(__pyx_t_2, function);
70747     }
70748   }
70749   __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
70750   __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
70751   if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 7, __pyx_L1_error)
70752   __Pyx_GOTREF(__pyx_t_3);
70753   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
70754   __pyx_v___pyx_result = __pyx_t_3;
70755   __pyx_t_3 = 0;
70756 
70757   /* "(tree fragment)":8
70758  *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)
70759  *     __pyx_result = Enum.__new__(__pyx_type)
70760  *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
70761  *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
70762  *     return __pyx_result
70763  */
70764   __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
70765   __pyx_t_6 = (__pyx_t_1 != 0);
70766   if (__pyx_t_6) {
70767 
70768     /* "(tree fragment)":9
70769  *     __pyx_result = Enum.__new__(__pyx_type)
70770  *     if __pyx_state is not None:
70771  *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
70772  *     return __pyx_result
70773  * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
70774  */
70775     if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(5, 9, __pyx_L1_error)
70776     __pyx_t_3 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9, __pyx_L1_error)
70777     __Pyx_GOTREF(__pyx_t_3);
70778     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
70779 
70780     /* "(tree fragment)":8
70781  *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xb068931 = (name))" % __pyx_checksum)
70782  *     __pyx_result = Enum.__new__(__pyx_type)
70783  *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
70784  *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
70785  *     return __pyx_result
70786  */
70787   }
70788 
70789   /* "(tree fragment)":10
70790  *     if __pyx_state is not None:
70791  *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
70792  *     return __pyx_result             # <<<<<<<<<<<<<<
70793  * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
70794  *     __pyx_result.name = __pyx_state[0]
70795  */
70796   __Pyx_XDECREF(__pyx_r);
70797   __Pyx_INCREF(__pyx_v___pyx_result);
70798   __pyx_r = __pyx_v___pyx_result;
70799   goto __pyx_L0;
70800 
70801   /* "(tree fragment)":1
70802  * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
70803  *     cdef object __pyx_PickleError
70804  *     cdef object __pyx_result
70805  */
70806 
70807   /* function exit code */
70808   __pyx_L1_error:;
70809   __Pyx_XDECREF(__pyx_t_2);
70810   __Pyx_XDECREF(__pyx_t_3);
70811   __Pyx_XDECREF(__pyx_t_4);
70812   __Pyx_XDECREF(__pyx_t_5);
70813   __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
70814   __pyx_r = NULL;
70815   __pyx_L0:;
70816   __Pyx_XDECREF(__pyx_v___pyx_PickleError);
70817   __Pyx_XDECREF(__pyx_v___pyx_result);
70818   __Pyx_XGIVEREF(__pyx_r);
70819   __Pyx_RefNannyFinishContext();
70820   return __pyx_r;
70821 }
70822 
70823 /* "(tree fragment)":11
70824  *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
70825  *     return __pyx_result
70826  * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
70827  *     __pyx_result.name = __pyx_state[0]
70828  *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
70829  */
70830 
70831 static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
70832   PyObject *__pyx_r = NULL;
70833   __Pyx_RefNannyDeclarations
70834   PyObject *__pyx_t_1 = NULL;
70835   int __pyx_t_2;
70836   Py_ssize_t __pyx_t_3;
70837   int __pyx_t_4;
70838   int __pyx_t_5;
70839   PyObject *__pyx_t_6 = NULL;
70840   PyObject *__pyx_t_7 = NULL;
70841   PyObject *__pyx_t_8 = NULL;
70842   __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0);
70843 
70844   /* "(tree fragment)":12
70845  *     return __pyx_result
70846  * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
70847  *     __pyx_result.name = __pyx_state[0]             # <<<<<<<<<<<<<<
70848  *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
70849  *         __pyx_result.__dict__.update(__pyx_state[1])
70850  */
70851   if (unlikely(__pyx_v___pyx_state == Py_None)) {
70852     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
70853     __PYX_ERR(5, 12, __pyx_L1_error)
70854   }
70855   __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 12, __pyx_L1_error)
70856   __Pyx_GOTREF(__pyx_t_1);
70857   __Pyx_GIVEREF(__pyx_t_1);
70858   __Pyx_GOTREF(__pyx_v___pyx_result->name);
70859   __Pyx_DECREF(__pyx_v___pyx_result->name);
70860   __pyx_v___pyx_result->name = __pyx_t_1;
70861   __pyx_t_1 = 0;
70862 
70863   /* "(tree fragment)":13
70864  * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
70865  *     __pyx_result.name = __pyx_state[0]
70866  *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
70867  *         __pyx_result.__dict__.update(__pyx_state[1])
70868  */
70869   if (unlikely(__pyx_v___pyx_state == Py_None)) {
70870     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
70871     __PYX_ERR(5, 13, __pyx_L1_error)
70872   }
70873   __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(5, 13, __pyx_L1_error)
70874   __pyx_t_4 = ((__pyx_t_3 > 1) != 0);
70875   if (__pyx_t_4) {
70876   } else {
70877     __pyx_t_2 = __pyx_t_4;
70878     goto __pyx_L4_bool_binop_done;
70879   }
70880   __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(5, 13, __pyx_L1_error)
70881   __pyx_t_5 = (__pyx_t_4 != 0);
70882   __pyx_t_2 = __pyx_t_5;
70883   __pyx_L4_bool_binop_done:;
70884   if (__pyx_t_2) {
70885 
70886     /* "(tree fragment)":14
70887  *     __pyx_result.name = __pyx_state[0]
70888  *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
70889  *         __pyx_result.__dict__.update(__pyx_state[1])             # <<<<<<<<<<<<<<
70890  */
70891     __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 14, __pyx_L1_error)
70892     __Pyx_GOTREF(__pyx_t_6);
70893     __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 14, __pyx_L1_error)
70894     __Pyx_GOTREF(__pyx_t_7);
70895     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
70896     if (unlikely(__pyx_v___pyx_state == Py_None)) {
70897       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
70898       __PYX_ERR(5, 14, __pyx_L1_error)
70899     }
70900     __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 14, __pyx_L1_error)
70901     __Pyx_GOTREF(__pyx_t_6);
70902     __pyx_t_8 = NULL;
70903     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
70904       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
70905       if (likely(__pyx_t_8)) {
70906         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
70907         __Pyx_INCREF(__pyx_t_8);
70908         __Pyx_INCREF(function);
70909         __Pyx_DECREF_SET(__pyx_t_7, function);
70910       }
70911     }
70912     __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6);
70913     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
70914     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
70915     if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 14, __pyx_L1_error)
70916     __Pyx_GOTREF(__pyx_t_1);
70917     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
70918     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
70919 
70920     /* "(tree fragment)":13
70921  * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
70922  *     __pyx_result.name = __pyx_state[0]
70923  *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
70924  *         __pyx_result.__dict__.update(__pyx_state[1])
70925  */
70926   }
70927 
70928   /* "(tree fragment)":11
70929  *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
70930  *     return __pyx_result
70931  * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
70932  *     __pyx_result.name = __pyx_state[0]
70933  *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
70934  */
70935 
70936   /* function exit code */
70937   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
70938   goto __pyx_L0;
70939   __pyx_L1_error:;
70940   __Pyx_XDECREF(__pyx_t_1);
70941   __Pyx_XDECREF(__pyx_t_6);
70942   __Pyx_XDECREF(__pyx_t_7);
70943   __Pyx_XDECREF(__pyx_t_8);
70944   __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
70945   __pyx_r = 0;
70946   __pyx_L0:;
70947   __Pyx_XGIVEREF(__pyx_r);
70948   __Pyx_RefNannyFinishContext();
70949   return __pyx_r;
70950 }
70951 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject;
70952 
70953 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(PyTypeObject *t, PyObject *a, PyObject *k) {
70954   struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *p;
70955   PyObject *o;
70956   if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
70957     o = (*t->tp_alloc)(t, 0);
70958   } else {
70959     o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
70960   }
70961   if (unlikely(!o)) return 0;
70962   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)o);
70963   p->__pyx_vtab = __pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
70964   if (unlikely(__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_1__cinit__(o, a, k) < 0)) goto bad;
70965   return o;
70966   bad:
70967   Py_DECREF(o); o = 0;
70968   return NULL;
70969 }
70970 
70971 static void __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject(PyObject *o) {
70972   #if CYTHON_USE_TP_FINALIZE
70973   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
70974     if (PyObject_CallFinalizerFromDealloc(o)) return;
70975   }
70976   #endif
70977   (*Py_TYPE(o)->tp_free)(o);
70978 }
70979 
70980 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14SelectorObject_min_level(PyObject *o, CYTHON_UNUSED void *x) {
70981   return __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9min_level_1__get__(o);
70982 }
70983 
70984 static int __pyx_setprop_2yt_8geometry_18selection_routines_14SelectorObject_min_level(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
70985   if (v) {
70986     return __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9min_level_3__set__(o, v);
70987   }
70988   else {
70989     PyErr_SetString(PyExc_NotImplementedError, "__del__");
70990     return -1;
70991   }
70992 }
70993 
70994 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14SelectorObject_max_level(PyObject *o, CYTHON_UNUSED void *x) {
70995   return __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9max_level_1__get__(o);
70996 }
70997 
70998 static int __pyx_setprop_2yt_8geometry_18selection_routines_14SelectorObject_max_level(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
70999   if (v) {
71000     return __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9max_level_3__set__(o, v);
71001   }
71002   else {
71003     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71004     return -1;
71005   }
71006 }
71007 
71008 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14SelectorObject_overlap_cells(PyObject *o, CYTHON_UNUSED void *x) {
71009   return __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13overlap_cells_1__get__(o);
71010 }
71011 
71012 static int __pyx_setprop_2yt_8geometry_18selection_routines_14SelectorObject_overlap_cells(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71013   if (v) {
71014     return __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13overlap_cells_3__set__(o, v);
71015   }
71016   else {
71017     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71018     return -1;
71019   }
71020 }
71021 
71022 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14SelectorObject_domain_width(PyObject *o, CYTHON_UNUSED void *x) {
71023   return __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_12domain_width_1__get__(o);
71024 }
71025 
71026 static int __pyx_setprop_2yt_8geometry_18selection_routines_14SelectorObject_domain_width(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71027   if (v) {
71028     return __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_12domain_width_3__set__(o, v);
71029   }
71030   else {
71031     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71032     return -1;
71033   }
71034 }
71035 
71036 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14SelectorObject_domain_center(PyObject *o, CYTHON_UNUSED void *x) {
71037   return __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13domain_center_1__get__(o);
71038 }
71039 
71040 static int __pyx_setprop_2yt_8geometry_18selection_routines_14SelectorObject_domain_center(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71041   if (v) {
71042     return __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13domain_center_3__set__(o, v);
71043   }
71044   else {
71045     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71046     return -1;
71047   }
71048 }
71049 
71050 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14SelectorObject_periodicity(PyObject *o, CYTHON_UNUSED void *x) {
71051   return __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_11periodicity_1__get__(o);
71052 }
71053 
71054 static int __pyx_setprop_2yt_8geometry_18selection_routines_14SelectorObject_periodicity(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71055   if (v) {
71056     return __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_11periodicity_3__set__(o, v);
71057   }
71058   else {
71059     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71060     return -1;
71061   }
71062 }
71063 
71064 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_SelectorObject[] = {
71065   {"get_periodicity", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_3get_periodicity, METH_NOARGS, 0},
71066   {"select_grids", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_5select_grids, METH_VARARGS|METH_KEYWORDS, 0},
71067   {"count_octs", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_7count_octs, METH_VARARGS|METH_KEYWORDS, 0},
71068   {"count_oct_cells", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_9count_oct_cells, METH_VARARGS|METH_KEYWORDS, 0},
71069   {"fill_mesh_mask", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_11fill_mesh_mask, METH_O, 0},
71070   {"fill_mesh_cell_mask", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_13fill_mesh_cell_mask, METH_O, 0},
71071   {"fill_mask", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_15fill_mask, METH_O, 0},
71072   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_23_hash_vals, METH_NOARGS, 0},
71073   {"_base_hash", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_25_base_hash, METH_NOARGS, 0},
71074   {"_get_state_attnames", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_27_get_state_attnames, METH_NOARGS, 0},
71075   {"__getstate__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_29__getstate__, METH_NOARGS, 0},
71076   {"__getnewargs__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_31__getnewargs__, METH_NOARGS, 0},
71077   {"__setstate__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_33__setstate__, METH_O, 0},
71078   {"__pyx_fuse_0count_points", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_35count_points, METH_VARARGS|METH_KEYWORDS, 0},
71079   {"__pyx_fuse_1count_points", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_37count_points, METH_VARARGS|METH_KEYWORDS, 0},
71080   {"__pyx_fuse_0select_points", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_0__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_41select_points, METH_VARARGS|METH_KEYWORDS, 0},
71081   {"__pyx_fuse_1select_points", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_fuse_1__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_43select_points, METH_VARARGS|METH_KEYWORDS, 0},
71082   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_47__reduce_cython__, METH_NOARGS, 0},
71083   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_49__setstate_cython__, METH_O, 0},
71084   {0, 0, 0, 0}
71085 };
71086 
71087 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_SelectorObject[] = {
71088   {(char *)"min_level", __pyx_getprop_2yt_8geometry_18selection_routines_14SelectorObject_min_level, __pyx_setprop_2yt_8geometry_18selection_routines_14SelectorObject_min_level, (char *)0, 0},
71089   {(char *)"max_level", __pyx_getprop_2yt_8geometry_18selection_routines_14SelectorObject_max_level, __pyx_setprop_2yt_8geometry_18selection_routines_14SelectorObject_max_level, (char *)0, 0},
71090   {(char *)"overlap_cells", __pyx_getprop_2yt_8geometry_18selection_routines_14SelectorObject_overlap_cells, __pyx_setprop_2yt_8geometry_18selection_routines_14SelectorObject_overlap_cells, (char *)0, 0},
71091   {(char *)"domain_width", __pyx_getprop_2yt_8geometry_18selection_routines_14SelectorObject_domain_width, __pyx_setprop_2yt_8geometry_18selection_routines_14SelectorObject_domain_width, (char *)0, 0},
71092   {(char *)"domain_center", __pyx_getprop_2yt_8geometry_18selection_routines_14SelectorObject_domain_center, __pyx_setprop_2yt_8geometry_18selection_routines_14SelectorObject_domain_center, (char *)0, 0},
71093   {(char *)"periodicity", __pyx_getprop_2yt_8geometry_18selection_routines_14SelectorObject_periodicity, __pyx_setprop_2yt_8geometry_18selection_routines_14SelectorObject_periodicity, (char *)0, 0},
71094   {0, 0, 0, 0, 0}
71095 };
71096 
71097 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_SelectorObject = {
71098   PyVarObject_HEAD_INIT(0, 0)
71099   "yt.geometry.selection_routines.SelectorObject", /*tp_name*/
71100   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject), /*tp_basicsize*/
71101   0, /*tp_itemsize*/
71102   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject, /*tp_dealloc*/
71103   0, /*tp_print*/
71104   0, /*tp_getattr*/
71105   0, /*tp_setattr*/
71106   #if PY_MAJOR_VERSION < 3
71107   0, /*tp_compare*/
71108   #endif
71109   #if PY_MAJOR_VERSION >= 3
71110   0, /*tp_as_async*/
71111   #endif
71112   0, /*tp_repr*/
71113   0, /*tp_as_number*/
71114   0, /*tp_as_sequence*/
71115   0, /*tp_as_mapping*/
71116   __pyx_pw_2yt_8geometry_18selection_routines_14SelectorObject_21__hash__, /*tp_hash*/
71117   0, /*tp_call*/
71118   0, /*tp_str*/
71119   0, /*tp_getattro*/
71120   0, /*tp_setattro*/
71121   0, /*tp_as_buffer*/
71122   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
71123   0, /*tp_doc*/
71124   0, /*tp_traverse*/
71125   0, /*tp_clear*/
71126   0, /*tp_richcompare*/
71127   0, /*tp_weaklistoffset*/
71128   0, /*tp_iter*/
71129   0, /*tp_iternext*/
71130   __pyx_methods_2yt_8geometry_18selection_routines_SelectorObject, /*tp_methods*/
71131   0, /*tp_members*/
71132   __pyx_getsets_2yt_8geometry_18selection_routines_SelectorObject, /*tp_getset*/
71133   0, /*tp_base*/
71134   0, /*tp_dict*/
71135   0, /*tp_descr_get*/
71136   0, /*tp_descr_set*/
71137   0, /*tp_dictoffset*/
71138   0, /*tp_init*/
71139   0, /*tp_alloc*/
71140   __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject, /*tp_new*/
71141   0, /*tp_free*/
71142   0, /*tp_is_gc*/
71143   0, /*tp_bases*/
71144   0, /*tp_mro*/
71145   0, /*tp_cache*/
71146   0, /*tp_subclasses*/
71147   0, /*tp_weaklist*/
71148   0, /*tp_del*/
71149   0, /*tp_version_tag*/
71150   #if PY_VERSION_HEX >= 0x030400a1
71151   0, /*tp_finalize*/
71152   #endif
71153   #if PY_VERSION_HEX >= 0x030800b1
71154   0, /*tp_vectorcall*/
71155   #endif
71156 };
71157 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_AlwaysSelector __pyx_vtable_2yt_8geometry_18selection_routines_AlwaysSelector;
71158 
71159 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_AlwaysSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
71160   struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *p;
71161   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
71162   if (unlikely(!o)) return 0;
71163   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector *)o);
71164   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_AlwaysSelector;
71165   return o;
71166 }
71167 
71168 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_AlwaysSelector[] = {
71169   {"select_grids", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_3select_grids, METH_VARARGS|METH_KEYWORDS, 0},
71170   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_5_hash_vals, METH_NOARGS, 0},
71171   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_7__reduce_cython__, METH_NOARGS, 0},
71172   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_9__setstate_cython__, METH_O, 0},
71173   {0, 0, 0, 0}
71174 };
71175 
71176 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_AlwaysSelector = {
71177   PyVarObject_HEAD_INIT(0, 0)
71178   "yt.geometry.selection_routines.AlwaysSelector", /*tp_name*/
71179   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_AlwaysSelector), /*tp_basicsize*/
71180   0, /*tp_itemsize*/
71181   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject, /*tp_dealloc*/
71182   0, /*tp_print*/
71183   0, /*tp_getattr*/
71184   0, /*tp_setattr*/
71185   #if PY_MAJOR_VERSION < 3
71186   0, /*tp_compare*/
71187   #endif
71188   #if PY_MAJOR_VERSION >= 3
71189   0, /*tp_as_async*/
71190   #endif
71191   0, /*tp_repr*/
71192   0, /*tp_as_number*/
71193   0, /*tp_as_sequence*/
71194   0, /*tp_as_mapping*/
71195   0, /*tp_hash*/
71196   0, /*tp_call*/
71197   0, /*tp_str*/
71198   0, /*tp_getattro*/
71199   0, /*tp_setattro*/
71200   0, /*tp_as_buffer*/
71201   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
71202   0, /*tp_doc*/
71203   0, /*tp_traverse*/
71204   0, /*tp_clear*/
71205   0, /*tp_richcompare*/
71206   0, /*tp_weaklistoffset*/
71207   0, /*tp_iter*/
71208   0, /*tp_iternext*/
71209   __pyx_methods_2yt_8geometry_18selection_routines_AlwaysSelector, /*tp_methods*/
71210   0, /*tp_members*/
71211   0, /*tp_getset*/
71212   0, /*tp_base*/
71213   0, /*tp_dict*/
71214   0, /*tp_descr_get*/
71215   0, /*tp_descr_set*/
71216   0, /*tp_dictoffset*/
71217   __pyx_pw_2yt_8geometry_18selection_routines_14AlwaysSelector_1__init__, /*tp_init*/
71218   0, /*tp_alloc*/
71219   __pyx_tp_new_2yt_8geometry_18selection_routines_AlwaysSelector, /*tp_new*/
71220   0, /*tp_free*/
71221   0, /*tp_is_gc*/
71222   0, /*tp_bases*/
71223   0, /*tp_mro*/
71224   0, /*tp_cache*/
71225   0, /*tp_subclasses*/
71226   0, /*tp_weaklist*/
71227   0, /*tp_del*/
71228   0, /*tp_version_tag*/
71229   #if PY_VERSION_HEX >= 0x030400a1
71230   0, /*tp_finalize*/
71231   #endif
71232   #if PY_VERSION_HEX >= 0x030800b1
71233   0, /*tp_vectorcall*/
71234   #endif
71235 };
71236 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_OctreeSubsetSelector __pyx_vtable_2yt_8geometry_18selection_routines_OctreeSubsetSelector;
71237 
71238 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_OctreeSubsetSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
71239   struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *p;
71240   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
71241   if (unlikely(!o)) return 0;
71242   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)o);
71243   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_OctreeSubsetSelector;
71244   p->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
71245   return o;
71246 }
71247 
71248 static void __pyx_tp_dealloc_2yt_8geometry_18selection_routines_OctreeSubsetSelector(PyObject *o) {
71249   struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)o;
71250   #if CYTHON_USE_TP_FINALIZE
71251   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
71252     if (PyObject_CallFinalizerFromDealloc(o)) return;
71253   }
71254   #endif
71255   PyObject_GC_UnTrack(o);
71256   Py_CLEAR(p->base_selector);
71257   #if CYTHON_USE_TYPE_SLOTS
71258   if (PyType_IS_GC(Py_TYPE(o)->tp_base))
71259   #endif
71260   PyObject_GC_Track(o);
71261   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject(o);
71262 }
71263 
71264 static int __pyx_tp_traverse_2yt_8geometry_18selection_routines_OctreeSubsetSelector(PyObject *o, visitproc v, void *a) {
71265   int e;
71266   struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)o;
71267   e = ((likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) ? ((__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse) ? __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_2yt_8geometry_18selection_routines_OctreeSubsetSelector)); if (e) return e;
71268   if (p->base_selector) {
71269     e = (*v)(((PyObject *)p->base_selector), a); if (e) return e;
71270   }
71271   return 0;
71272 }
71273 
71274 static int __pyx_tp_clear_2yt_8geometry_18selection_routines_OctreeSubsetSelector(PyObject *o) {
71275   PyObject* tmp;
71276   struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector *)o;
71277   if (likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) { if (__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear) __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_2yt_8geometry_18selection_routines_OctreeSubsetSelector);
71278   tmp = ((PyObject*)p->base_selector);
71279   p->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
71280   Py_XDECREF(tmp);
71281   return 0;
71282 }
71283 
71284 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_base_selector(PyObject *o, CYTHON_UNUSED void *x) {
71285   return __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_1__get__(o);
71286 }
71287 
71288 static int __pyx_setprop_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_base_selector(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71289   if (v) {
71290     return __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_3__set__(o, v);
71291   }
71292   else {
71293     return __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_13base_selector_5__del__(o);
71294   }
71295 }
71296 
71297 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_domain_id(PyObject *o, CYTHON_UNUSED void *x) {
71298   return __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9domain_id_1__get__(o);
71299 }
71300 
71301 static int __pyx_setprop_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_domain_id(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71302   if (v) {
71303     return __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9domain_id_3__set__(o, v);
71304   }
71305   else {
71306     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71307     return -1;
71308   }
71309 }
71310 
71311 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_OctreeSubsetSelector[] = {
71312   {"select_grids", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_3select_grids, METH_VARARGS|METH_KEYWORDS, 0},
71313   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_5_hash_vals, METH_NOARGS, 0},
71314   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_7__reduce_cython__, METH_NOARGS, 0},
71315   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_9__setstate_cython__, METH_O, 0},
71316   {0, 0, 0, 0}
71317 };
71318 
71319 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_OctreeSubsetSelector[] = {
71320   {(char *)"base_selector", __pyx_getprop_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_base_selector, __pyx_setprop_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_base_selector, (char *)0, 0},
71321   {(char *)"domain_id", __pyx_getprop_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_domain_id, __pyx_setprop_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_domain_id, (char *)0, 0},
71322   {0, 0, 0, 0, 0}
71323 };
71324 
71325 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_OctreeSubsetSelector = {
71326   PyVarObject_HEAD_INIT(0, 0)
71327   "yt.geometry.selection_routines.OctreeSubsetSelector", /*tp_name*/
71328   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_OctreeSubsetSelector), /*tp_basicsize*/
71329   0, /*tp_itemsize*/
71330   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_OctreeSubsetSelector, /*tp_dealloc*/
71331   0, /*tp_print*/
71332   0, /*tp_getattr*/
71333   0, /*tp_setattr*/
71334   #if PY_MAJOR_VERSION < 3
71335   0, /*tp_compare*/
71336   #endif
71337   #if PY_MAJOR_VERSION >= 3
71338   0, /*tp_as_async*/
71339   #endif
71340   0, /*tp_repr*/
71341   0, /*tp_as_number*/
71342   0, /*tp_as_sequence*/
71343   0, /*tp_as_mapping*/
71344   0, /*tp_hash*/
71345   0, /*tp_call*/
71346   0, /*tp_str*/
71347   0, /*tp_getattro*/
71348   0, /*tp_setattro*/
71349   0, /*tp_as_buffer*/
71350   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
71351   0, /*tp_doc*/
71352   __pyx_tp_traverse_2yt_8geometry_18selection_routines_OctreeSubsetSelector, /*tp_traverse*/
71353   __pyx_tp_clear_2yt_8geometry_18selection_routines_OctreeSubsetSelector, /*tp_clear*/
71354   0, /*tp_richcompare*/
71355   0, /*tp_weaklistoffset*/
71356   0, /*tp_iter*/
71357   0, /*tp_iternext*/
71358   __pyx_methods_2yt_8geometry_18selection_routines_OctreeSubsetSelector, /*tp_methods*/
71359   0, /*tp_members*/
71360   __pyx_getsets_2yt_8geometry_18selection_routines_OctreeSubsetSelector, /*tp_getset*/
71361   0, /*tp_base*/
71362   0, /*tp_dict*/
71363   0, /*tp_descr_get*/
71364   0, /*tp_descr_set*/
71365   0, /*tp_dictoffset*/
71366   __pyx_pw_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_1__init__, /*tp_init*/
71367   0, /*tp_alloc*/
71368   __pyx_tp_new_2yt_8geometry_18selection_routines_OctreeSubsetSelector, /*tp_new*/
71369   0, /*tp_free*/
71370   0, /*tp_is_gc*/
71371   0, /*tp_bases*/
71372   0, /*tp_mro*/
71373   0, /*tp_cache*/
71374   0, /*tp_subclasses*/
71375   0, /*tp_weaklist*/
71376   0, /*tp_del*/
71377   0, /*tp_version_tag*/
71378   #if PY_VERSION_HEX >= 0x030400a1
71379   0, /*tp_finalize*/
71380   #endif
71381   #if PY_VERSION_HEX >= 0x030800b1
71382   0, /*tp_vectorcall*/
71383   #endif
71384 };
71385 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanSelector __pyx_vtable_2yt_8geometry_18selection_routines_BooleanSelector;
71386 
71387 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_BooleanSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
71388   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *p;
71389   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
71390   if (unlikely(!o)) return 0;
71391   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)o);
71392   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanSelector;
71393   p->sel1 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
71394   p->sel2 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
71395   return o;
71396 }
71397 
71398 static void __pyx_tp_dealloc_2yt_8geometry_18selection_routines_BooleanSelector(PyObject *o) {
71399   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)o;
71400   #if CYTHON_USE_TP_FINALIZE
71401   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
71402     if (PyObject_CallFinalizerFromDealloc(o)) return;
71403   }
71404   #endif
71405   PyObject_GC_UnTrack(o);
71406   Py_CLEAR(p->sel1);
71407   Py_CLEAR(p->sel2);
71408   #if CYTHON_USE_TYPE_SLOTS
71409   if (PyType_IS_GC(Py_TYPE(o)->tp_base))
71410   #endif
71411   PyObject_GC_Track(o);
71412   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject(o);
71413 }
71414 
71415 static int __pyx_tp_traverse_2yt_8geometry_18selection_routines_BooleanSelector(PyObject *o, visitproc v, void *a) {
71416   int e;
71417   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)o;
71418   e = ((likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) ? ((__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse) ? __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_2yt_8geometry_18selection_routines_BooleanSelector)); if (e) return e;
71419   if (p->sel1) {
71420     e = (*v)(((PyObject *)p->sel1), a); if (e) return e;
71421   }
71422   if (p->sel2) {
71423     e = (*v)(((PyObject *)p->sel2), a); if (e) return e;
71424   }
71425   return 0;
71426 }
71427 
71428 static int __pyx_tp_clear_2yt_8geometry_18selection_routines_BooleanSelector(PyObject *o) {
71429   PyObject* tmp;
71430   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector *)o;
71431   if (likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) { if (__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear) __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_2yt_8geometry_18selection_routines_BooleanSelector);
71432   tmp = ((PyObject*)p->sel1);
71433   p->sel1 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
71434   Py_XDECREF(tmp);
71435   tmp = ((PyObject*)p->sel2);
71436   p->sel2 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
71437   Py_XDECREF(tmp);
71438   return 0;
71439 }
71440 
71441 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_15BooleanSelector_sel1(PyObject *o, CYTHON_UNUSED void *x) {
71442   return __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_1__get__(o);
71443 }
71444 
71445 static int __pyx_setprop_2yt_8geometry_18selection_routines_15BooleanSelector_sel1(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71446   if (v) {
71447     return __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_3__set__(o, v);
71448   }
71449   else {
71450     return __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel1_5__del__(o);
71451   }
71452 }
71453 
71454 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_15BooleanSelector_sel2(PyObject *o, CYTHON_UNUSED void *x) {
71455   return __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_1__get__(o);
71456 }
71457 
71458 static int __pyx_setprop_2yt_8geometry_18selection_routines_15BooleanSelector_sel2(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71459   if (v) {
71460     return __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_3__set__(o, v);
71461   }
71462   else {
71463     return __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_4sel2_5__del__(o);
71464   }
71465 }
71466 
71467 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_BooleanSelector[] = {
71468   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_3__reduce_cython__, METH_NOARGS, 0},
71469   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_5__setstate_cython__, METH_O, 0},
71470   {0, 0, 0, 0}
71471 };
71472 
71473 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_BooleanSelector[] = {
71474   {(char *)"sel1", __pyx_getprop_2yt_8geometry_18selection_routines_15BooleanSelector_sel1, __pyx_setprop_2yt_8geometry_18selection_routines_15BooleanSelector_sel1, (char *)0, 0},
71475   {(char *)"sel2", __pyx_getprop_2yt_8geometry_18selection_routines_15BooleanSelector_sel2, __pyx_setprop_2yt_8geometry_18selection_routines_15BooleanSelector_sel2, (char *)0, 0},
71476   {0, 0, 0, 0, 0}
71477 };
71478 
71479 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_BooleanSelector = {
71480   PyVarObject_HEAD_INIT(0, 0)
71481   "yt.geometry.selection_routines.BooleanSelector", /*tp_name*/
71482   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanSelector), /*tp_basicsize*/
71483   0, /*tp_itemsize*/
71484   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_dealloc*/
71485   0, /*tp_print*/
71486   0, /*tp_getattr*/
71487   0, /*tp_setattr*/
71488   #if PY_MAJOR_VERSION < 3
71489   0, /*tp_compare*/
71490   #endif
71491   #if PY_MAJOR_VERSION >= 3
71492   0, /*tp_as_async*/
71493   #endif
71494   0, /*tp_repr*/
71495   0, /*tp_as_number*/
71496   0, /*tp_as_sequence*/
71497   0, /*tp_as_mapping*/
71498   0, /*tp_hash*/
71499   0, /*tp_call*/
71500   0, /*tp_str*/
71501   0, /*tp_getattro*/
71502   0, /*tp_setattro*/
71503   0, /*tp_as_buffer*/
71504   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
71505   0, /*tp_doc*/
71506   __pyx_tp_traverse_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_traverse*/
71507   __pyx_tp_clear_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_clear*/
71508   0, /*tp_richcompare*/
71509   0, /*tp_weaklistoffset*/
71510   0, /*tp_iter*/
71511   0, /*tp_iternext*/
71512   __pyx_methods_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_methods*/
71513   0, /*tp_members*/
71514   __pyx_getsets_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_getset*/
71515   0, /*tp_base*/
71516   0, /*tp_dict*/
71517   0, /*tp_descr_get*/
71518   0, /*tp_descr_set*/
71519   0, /*tp_dictoffset*/
71520   __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_1__init__, /*tp_init*/
71521   0, /*tp_alloc*/
71522   __pyx_tp_new_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_new*/
71523   0, /*tp_free*/
71524   0, /*tp_is_gc*/
71525   0, /*tp_bases*/
71526   0, /*tp_mro*/
71527   0, /*tp_cache*/
71528   0, /*tp_subclasses*/
71529   0, /*tp_weaklist*/
71530   0, /*tp_del*/
71531   0, /*tp_version_tag*/
71532   #if PY_VERSION_HEX >= 0x030400a1
71533   0, /*tp_finalize*/
71534   #endif
71535   #if PY_VERSION_HEX >= 0x030800b1
71536   0, /*tp_vectorcall*/
71537   #endif
71538 };
71539 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_PointSelector __pyx_vtable_2yt_8geometry_18selection_routines_PointSelector;
71540 
71541 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_PointSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
71542   struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *p;
71543   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
71544   if (unlikely(!o)) return 0;
71545   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector *)o);
71546   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_PointSelector;
71547   return o;
71548 }
71549 
71550 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_13PointSelector_p(PyObject *o, CYTHON_UNUSED void *x) {
71551   return __pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_1p_1__get__(o);
71552 }
71553 
71554 static int __pyx_setprop_2yt_8geometry_18selection_routines_13PointSelector_p(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71555   if (v) {
71556     return __pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_1p_3__set__(o, v);
71557   }
71558   else {
71559     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71560     return -1;
71561   }
71562 }
71563 
71564 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_PointSelector[] = {
71565   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_3_hash_vals, METH_NOARGS, 0},
71566   {"_get_state_attnames", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_5_get_state_attnames, METH_NOARGS, 0},
71567   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_7__reduce_cython__, METH_NOARGS, 0},
71568   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_9__setstate_cython__, METH_O, 0},
71569   {0, 0, 0, 0}
71570 };
71571 
71572 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_PointSelector[] = {
71573   {(char *)"p", __pyx_getprop_2yt_8geometry_18selection_routines_13PointSelector_p, __pyx_setprop_2yt_8geometry_18selection_routines_13PointSelector_p, (char *)0, 0},
71574   {0, 0, 0, 0, 0}
71575 };
71576 
71577 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_PointSelector = {
71578   PyVarObject_HEAD_INIT(0, 0)
71579   "yt.geometry.selection_routines.PointSelector", /*tp_name*/
71580   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_PointSelector), /*tp_basicsize*/
71581   0, /*tp_itemsize*/
71582   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject, /*tp_dealloc*/
71583   0, /*tp_print*/
71584   0, /*tp_getattr*/
71585   0, /*tp_setattr*/
71586   #if PY_MAJOR_VERSION < 3
71587   0, /*tp_compare*/
71588   #endif
71589   #if PY_MAJOR_VERSION >= 3
71590   0, /*tp_as_async*/
71591   #endif
71592   0, /*tp_repr*/
71593   0, /*tp_as_number*/
71594   0, /*tp_as_sequence*/
71595   0, /*tp_as_mapping*/
71596   0, /*tp_hash*/
71597   0, /*tp_call*/
71598   0, /*tp_str*/
71599   0, /*tp_getattro*/
71600   0, /*tp_setattro*/
71601   0, /*tp_as_buffer*/
71602   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
71603   0, /*tp_doc*/
71604   0, /*tp_traverse*/
71605   0, /*tp_clear*/
71606   0, /*tp_richcompare*/
71607   0, /*tp_weaklistoffset*/
71608   0, /*tp_iter*/
71609   0, /*tp_iternext*/
71610   __pyx_methods_2yt_8geometry_18selection_routines_PointSelector, /*tp_methods*/
71611   0, /*tp_members*/
71612   __pyx_getsets_2yt_8geometry_18selection_routines_PointSelector, /*tp_getset*/
71613   0, /*tp_base*/
71614   0, /*tp_dict*/
71615   0, /*tp_descr_get*/
71616   0, /*tp_descr_set*/
71617   0, /*tp_dictoffset*/
71618   __pyx_pw_2yt_8geometry_18selection_routines_13PointSelector_1__init__, /*tp_init*/
71619   0, /*tp_alloc*/
71620   __pyx_tp_new_2yt_8geometry_18selection_routines_PointSelector, /*tp_new*/
71621   0, /*tp_free*/
71622   0, /*tp_is_gc*/
71623   0, /*tp_bases*/
71624   0, /*tp_mro*/
71625   0, /*tp_cache*/
71626   0, /*tp_subclasses*/
71627   0, /*tp_weaklist*/
71628   0, /*tp_del*/
71629   0, /*tp_version_tag*/
71630   #if PY_VERSION_HEX >= 0x030400a1
71631   0, /*tp_finalize*/
71632   #endif
71633   #if PY_VERSION_HEX >= 0x030800b1
71634   0, /*tp_vectorcall*/
71635   #endif
71636 };
71637 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SphereSelector __pyx_vtable_2yt_8geometry_18selection_routines_SphereSelector;
71638 
71639 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_SphereSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
71640   struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *p;
71641   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
71642   if (unlikely(!o)) return 0;
71643   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector *)o);
71644   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_SphereSelector;
71645   return o;
71646 }
71647 
71648 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14SphereSelector_radius(PyObject *o, CYTHON_UNUSED void *x) {
71649   return __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_6radius_1__get__(o);
71650 }
71651 
71652 static int __pyx_setprop_2yt_8geometry_18selection_routines_14SphereSelector_radius(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71653   if (v) {
71654     return __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_6radius_3__set__(o, v);
71655   }
71656   else {
71657     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71658     return -1;
71659   }
71660 }
71661 
71662 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14SphereSelector_radius2(PyObject *o, CYTHON_UNUSED void *x) {
71663   return __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_7radius2_1__get__(o);
71664 }
71665 
71666 static int __pyx_setprop_2yt_8geometry_18selection_routines_14SphereSelector_radius2(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71667   if (v) {
71668     return __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_7radius2_3__set__(o, v);
71669   }
71670   else {
71671     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71672     return -1;
71673   }
71674 }
71675 
71676 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14SphereSelector_center(PyObject *o, CYTHON_UNUSED void *x) {
71677   return __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_6center_1__get__(o);
71678 }
71679 
71680 static int __pyx_setprop_2yt_8geometry_18selection_routines_14SphereSelector_center(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71681   if (v) {
71682     return __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_6center_3__set__(o, v);
71683   }
71684   else {
71685     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71686     return -1;
71687   }
71688 }
71689 
71690 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14SphereSelector_check_box(PyObject *o, CYTHON_UNUSED void *x) {
71691   return __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_9check_box_1__get__(o);
71692 }
71693 
71694 static int __pyx_setprop_2yt_8geometry_18selection_routines_14SphereSelector_check_box(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71695   if (v) {
71696     return __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_9check_box_3__set__(o, v);
71697   }
71698   else {
71699     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71700     return -1;
71701   }
71702 }
71703 
71704 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_SphereSelector[] = {
71705   {"set_bbox", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_3set_bbox, METH_O, 0},
71706   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_5_hash_vals, METH_NOARGS, 0},
71707   {"_get_state_attnames", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_7_get_state_attnames, METH_NOARGS, 0},
71708   {"__setstate__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_9__setstate__, METH_O, 0},
71709   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_11__reduce_cython__, METH_NOARGS, 0},
71710   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_13__setstate_cython__, METH_O, 0},
71711   {0, 0, 0, 0}
71712 };
71713 
71714 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_SphereSelector[] = {
71715   {(char *)"radius", __pyx_getprop_2yt_8geometry_18selection_routines_14SphereSelector_radius, __pyx_setprop_2yt_8geometry_18selection_routines_14SphereSelector_radius, (char *)0, 0},
71716   {(char *)"radius2", __pyx_getprop_2yt_8geometry_18selection_routines_14SphereSelector_radius2, __pyx_setprop_2yt_8geometry_18selection_routines_14SphereSelector_radius2, (char *)0, 0},
71717   {(char *)"center", __pyx_getprop_2yt_8geometry_18selection_routines_14SphereSelector_center, __pyx_setprop_2yt_8geometry_18selection_routines_14SphereSelector_center, (char *)0, 0},
71718   {(char *)"check_box", __pyx_getprop_2yt_8geometry_18selection_routines_14SphereSelector_check_box, __pyx_setprop_2yt_8geometry_18selection_routines_14SphereSelector_check_box, (char *)0, 0},
71719   {0, 0, 0, 0, 0}
71720 };
71721 
71722 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_SphereSelector = {
71723   PyVarObject_HEAD_INIT(0, 0)
71724   "yt.geometry.selection_routines.SphereSelector", /*tp_name*/
71725   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_SphereSelector), /*tp_basicsize*/
71726   0, /*tp_itemsize*/
71727   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject, /*tp_dealloc*/
71728   0, /*tp_print*/
71729   0, /*tp_getattr*/
71730   0, /*tp_setattr*/
71731   #if PY_MAJOR_VERSION < 3
71732   0, /*tp_compare*/
71733   #endif
71734   #if PY_MAJOR_VERSION >= 3
71735   0, /*tp_as_async*/
71736   #endif
71737   0, /*tp_repr*/
71738   0, /*tp_as_number*/
71739   0, /*tp_as_sequence*/
71740   0, /*tp_as_mapping*/
71741   0, /*tp_hash*/
71742   0, /*tp_call*/
71743   0, /*tp_str*/
71744   0, /*tp_getattro*/
71745   0, /*tp_setattro*/
71746   0, /*tp_as_buffer*/
71747   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
71748   0, /*tp_doc*/
71749   0, /*tp_traverse*/
71750   0, /*tp_clear*/
71751   0, /*tp_richcompare*/
71752   0, /*tp_weaklistoffset*/
71753   0, /*tp_iter*/
71754   0, /*tp_iternext*/
71755   __pyx_methods_2yt_8geometry_18selection_routines_SphereSelector, /*tp_methods*/
71756   0, /*tp_members*/
71757   __pyx_getsets_2yt_8geometry_18selection_routines_SphereSelector, /*tp_getset*/
71758   0, /*tp_base*/
71759   0, /*tp_dict*/
71760   0, /*tp_descr_get*/
71761   0, /*tp_descr_set*/
71762   0, /*tp_dictoffset*/
71763   __pyx_pw_2yt_8geometry_18selection_routines_14SphereSelector_1__init__, /*tp_init*/
71764   0, /*tp_alloc*/
71765   __pyx_tp_new_2yt_8geometry_18selection_routines_SphereSelector, /*tp_new*/
71766   0, /*tp_free*/
71767   0, /*tp_is_gc*/
71768   0, /*tp_bases*/
71769   0, /*tp_mro*/
71770   0, /*tp_cache*/
71771   0, /*tp_subclasses*/
71772   0, /*tp_weaklist*/
71773   0, /*tp_del*/
71774   0, /*tp_version_tag*/
71775   #if PY_VERSION_HEX >= 0x030400a1
71776   0, /*tp_finalize*/
71777   #endif
71778   #if PY_VERSION_HEX >= 0x030800b1
71779   0, /*tp_vectorcall*/
71780   #endif
71781 };
71782 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_RegionSelector __pyx_vtable_2yt_8geometry_18selection_routines_RegionSelector;
71783 
71784 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_RegionSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
71785   struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *p;
71786   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
71787   if (unlikely(!o)) return 0;
71788   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector *)o);
71789   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_RegionSelector;
71790   return o;
71791 }
71792 
71793 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14RegionSelector_left_edge(PyObject *o, CYTHON_UNUSED void *x) {
71794   return __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_9left_edge_1__get__(o);
71795 }
71796 
71797 static int __pyx_setprop_2yt_8geometry_18selection_routines_14RegionSelector_left_edge(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71798   if (v) {
71799     return __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_9left_edge_3__set__(o, v);
71800   }
71801   else {
71802     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71803     return -1;
71804   }
71805 }
71806 
71807 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14RegionSelector_right_edge(PyObject *o, CYTHON_UNUSED void *x) {
71808   return __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_10right_edge_1__get__(o);
71809 }
71810 
71811 static int __pyx_setprop_2yt_8geometry_18selection_routines_14RegionSelector_right_edge(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71812   if (v) {
71813     return __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_10right_edge_3__set__(o, v);
71814   }
71815   else {
71816     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71817     return -1;
71818   }
71819 }
71820 
71821 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14RegionSelector_right_edge_shift(PyObject *o, CYTHON_UNUSED void *x) {
71822   return __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_16right_edge_shift_1__get__(o);
71823 }
71824 
71825 static int __pyx_setprop_2yt_8geometry_18selection_routines_14RegionSelector_right_edge_shift(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71826   if (v) {
71827     return __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_16right_edge_shift_3__set__(o, v);
71828   }
71829   else {
71830     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71831     return -1;
71832   }
71833 }
71834 
71835 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14RegionSelector_is_all_data(PyObject *o, CYTHON_UNUSED void *x) {
71836   return __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_11is_all_data_1__get__(o);
71837 }
71838 
71839 static int __pyx_setprop_2yt_8geometry_18selection_routines_14RegionSelector_is_all_data(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71840   if (v) {
71841     return __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_11is_all_data_3__set__(o, v);
71842   }
71843   else {
71844     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71845     return -1;
71846   }
71847 }
71848 
71849 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14RegionSelector_loose_selection(PyObject *o, CYTHON_UNUSED void *x) {
71850   return __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_15loose_selection_1__get__(o);
71851 }
71852 
71853 static int __pyx_setprop_2yt_8geometry_18selection_routines_14RegionSelector_loose_selection(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71854   if (v) {
71855     return __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_15loose_selection_3__set__(o, v);
71856   }
71857   else {
71858     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71859     return -1;
71860   }
71861 }
71862 
71863 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_14RegionSelector_check_period(PyObject *o, CYTHON_UNUSED void *x) {
71864   return __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_12check_period_1__get__(o);
71865 }
71866 
71867 static int __pyx_setprop_2yt_8geometry_18selection_routines_14RegionSelector_check_period(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
71868   if (v) {
71869     return __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_12check_period_3__set__(o, v);
71870   }
71871   else {
71872     PyErr_SetString(PyExc_NotImplementedError, "__del__");
71873     return -1;
71874   }
71875 }
71876 
71877 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_RegionSelector[] = {
71878   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_3_hash_vals, METH_NOARGS, 0},
71879   {"_get_state_attnames", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_5_get_state_attnames, METH_NOARGS, 0},
71880   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_7__reduce_cython__, METH_NOARGS, 0},
71881   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_9__setstate_cython__, METH_O, 0},
71882   {0, 0, 0, 0}
71883 };
71884 
71885 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_RegionSelector[] = {
71886   {(char *)"left_edge", __pyx_getprop_2yt_8geometry_18selection_routines_14RegionSelector_left_edge, __pyx_setprop_2yt_8geometry_18selection_routines_14RegionSelector_left_edge, (char *)0, 0},
71887   {(char *)"right_edge", __pyx_getprop_2yt_8geometry_18selection_routines_14RegionSelector_right_edge, __pyx_setprop_2yt_8geometry_18selection_routines_14RegionSelector_right_edge, (char *)0, 0},
71888   {(char *)"right_edge_shift", __pyx_getprop_2yt_8geometry_18selection_routines_14RegionSelector_right_edge_shift, __pyx_setprop_2yt_8geometry_18selection_routines_14RegionSelector_right_edge_shift, (char *)0, 0},
71889   {(char *)"is_all_data", __pyx_getprop_2yt_8geometry_18selection_routines_14RegionSelector_is_all_data, __pyx_setprop_2yt_8geometry_18selection_routines_14RegionSelector_is_all_data, (char *)0, 0},
71890   {(char *)"loose_selection", __pyx_getprop_2yt_8geometry_18selection_routines_14RegionSelector_loose_selection, __pyx_setprop_2yt_8geometry_18selection_routines_14RegionSelector_loose_selection, (char *)0, 0},
71891   {(char *)"check_period", __pyx_getprop_2yt_8geometry_18selection_routines_14RegionSelector_check_period, __pyx_setprop_2yt_8geometry_18selection_routines_14RegionSelector_check_period, (char *)0, 0},
71892   {0, 0, 0, 0, 0}
71893 };
71894 
71895 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_RegionSelector = {
71896   PyVarObject_HEAD_INIT(0, 0)
71897   "yt.geometry.selection_routines.RegionSelector", /*tp_name*/
71898   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_RegionSelector), /*tp_basicsize*/
71899   0, /*tp_itemsize*/
71900   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject, /*tp_dealloc*/
71901   0, /*tp_print*/
71902   0, /*tp_getattr*/
71903   0, /*tp_setattr*/
71904   #if PY_MAJOR_VERSION < 3
71905   0, /*tp_compare*/
71906   #endif
71907   #if PY_MAJOR_VERSION >= 3
71908   0, /*tp_as_async*/
71909   #endif
71910   0, /*tp_repr*/
71911   0, /*tp_as_number*/
71912   0, /*tp_as_sequence*/
71913   0, /*tp_as_mapping*/
71914   0, /*tp_hash*/
71915   0, /*tp_call*/
71916   0, /*tp_str*/
71917   0, /*tp_getattro*/
71918   0, /*tp_setattro*/
71919   0, /*tp_as_buffer*/
71920   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
71921   0, /*tp_doc*/
71922   0, /*tp_traverse*/
71923   0, /*tp_clear*/
71924   0, /*tp_richcompare*/
71925   0, /*tp_weaklistoffset*/
71926   0, /*tp_iter*/
71927   0, /*tp_iternext*/
71928   __pyx_methods_2yt_8geometry_18selection_routines_RegionSelector, /*tp_methods*/
71929   0, /*tp_members*/
71930   __pyx_getsets_2yt_8geometry_18selection_routines_RegionSelector, /*tp_getset*/
71931   0, /*tp_base*/
71932   0, /*tp_dict*/
71933   0, /*tp_descr_get*/
71934   0, /*tp_descr_set*/
71935   0, /*tp_dictoffset*/
71936   __pyx_pw_2yt_8geometry_18selection_routines_14RegionSelector_1__init__, /*tp_init*/
71937   0, /*tp_alloc*/
71938   __pyx_tp_new_2yt_8geometry_18selection_routines_RegionSelector, /*tp_new*/
71939   0, /*tp_free*/
71940   0, /*tp_is_gc*/
71941   0, /*tp_bases*/
71942   0, /*tp_mro*/
71943   0, /*tp_cache*/
71944   0, /*tp_subclasses*/
71945   0, /*tp_weaklist*/
71946   0, /*tp_del*/
71947   0, /*tp_version_tag*/
71948   #if PY_VERSION_HEX >= 0x030400a1
71949   0, /*tp_finalize*/
71950   #endif
71951   #if PY_VERSION_HEX >= 0x030800b1
71952   0, /*tp_vectorcall*/
71953   #endif
71954 };
71955 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_CutRegionSelector __pyx_vtable_2yt_8geometry_18selection_routines_CutRegionSelector;
71956 
71957 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_CutRegionSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
71958   struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *p;
71959   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
71960   if (unlikely(!o)) return 0;
71961   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *)o);
71962   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_CutRegionSelector;
71963   p->_positions = ((PyObject*)Py_None); Py_INCREF(Py_None);
71964   p->_conditionals = ((PyObject*)Py_None); Py_INCREF(Py_None);
71965   return o;
71966 }
71967 
71968 static void __pyx_tp_dealloc_2yt_8geometry_18selection_routines_CutRegionSelector(PyObject *o) {
71969   struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *)o;
71970   #if CYTHON_USE_TP_FINALIZE
71971   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
71972     if (PyObject_CallFinalizerFromDealloc(o)) return;
71973   }
71974   #endif
71975   PyObject_GC_UnTrack(o);
71976   Py_CLEAR(p->_positions);
71977   Py_CLEAR(p->_conditionals);
71978   #if CYTHON_USE_TYPE_SLOTS
71979   if (PyType_IS_GC(Py_TYPE(o)->tp_base))
71980   #endif
71981   PyObject_GC_Track(o);
71982   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject(o);
71983 }
71984 
71985 static int __pyx_tp_traverse_2yt_8geometry_18selection_routines_CutRegionSelector(PyObject *o, visitproc v, void *a) {
71986   int e;
71987   struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *)o;
71988   e = ((likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) ? ((__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse) ? __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_2yt_8geometry_18selection_routines_CutRegionSelector)); if (e) return e;
71989   if (p->_positions) {
71990     e = (*v)(p->_positions, a); if (e) return e;
71991   }
71992   if (p->_conditionals) {
71993     e = (*v)(p->_conditionals, a); if (e) return e;
71994   }
71995   return 0;
71996 }
71997 
71998 static int __pyx_tp_clear_2yt_8geometry_18selection_routines_CutRegionSelector(PyObject *o) {
71999   PyObject* tmp;
72000   struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *)o;
72001   if (likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) { if (__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear) __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_2yt_8geometry_18selection_routines_CutRegionSelector);
72002   tmp = ((PyObject*)p->_positions);
72003   p->_positions = ((PyObject*)Py_None); Py_INCREF(Py_None);
72004   Py_XDECREF(tmp);
72005   tmp = ((PyObject*)p->_conditionals);
72006   p->_conditionals = ((PyObject*)Py_None); Py_INCREF(Py_None);
72007   Py_XDECREF(tmp);
72008   return 0;
72009 }
72010 
72011 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_CutRegionSelector[] = {
72012   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_17CutRegionSelector_3_hash_vals, METH_NOARGS, 0},
72013   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_17CutRegionSelector_5__reduce_cython__, METH_NOARGS, 0},
72014   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_17CutRegionSelector_7__setstate_cython__, METH_O, 0},
72015   {0, 0, 0, 0}
72016 };
72017 
72018 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_CutRegionSelector = {
72019   PyVarObject_HEAD_INIT(0, 0)
72020   "yt.geometry.selection_routines.CutRegionSelector", /*tp_name*/
72021   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector), /*tp_basicsize*/
72022   0, /*tp_itemsize*/
72023   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_CutRegionSelector, /*tp_dealloc*/
72024   0, /*tp_print*/
72025   0, /*tp_getattr*/
72026   0, /*tp_setattr*/
72027   #if PY_MAJOR_VERSION < 3
72028   0, /*tp_compare*/
72029   #endif
72030   #if PY_MAJOR_VERSION >= 3
72031   0, /*tp_as_async*/
72032   #endif
72033   0, /*tp_repr*/
72034   0, /*tp_as_number*/
72035   0, /*tp_as_sequence*/
72036   0, /*tp_as_mapping*/
72037   0, /*tp_hash*/
72038   0, /*tp_call*/
72039   0, /*tp_str*/
72040   0, /*tp_getattro*/
72041   0, /*tp_setattro*/
72042   0, /*tp_as_buffer*/
72043   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
72044   0, /*tp_doc*/
72045   __pyx_tp_traverse_2yt_8geometry_18selection_routines_CutRegionSelector, /*tp_traverse*/
72046   __pyx_tp_clear_2yt_8geometry_18selection_routines_CutRegionSelector, /*tp_clear*/
72047   0, /*tp_richcompare*/
72048   0, /*tp_weaklistoffset*/
72049   0, /*tp_iter*/
72050   0, /*tp_iternext*/
72051   __pyx_methods_2yt_8geometry_18selection_routines_CutRegionSelector, /*tp_methods*/
72052   0, /*tp_members*/
72053   0, /*tp_getset*/
72054   0, /*tp_base*/
72055   0, /*tp_dict*/
72056   0, /*tp_descr_get*/
72057   0, /*tp_descr_set*/
72058   0, /*tp_dictoffset*/
72059   __pyx_pw_2yt_8geometry_18selection_routines_17CutRegionSelector_1__init__, /*tp_init*/
72060   0, /*tp_alloc*/
72061   __pyx_tp_new_2yt_8geometry_18selection_routines_CutRegionSelector, /*tp_new*/
72062   0, /*tp_free*/
72063   0, /*tp_is_gc*/
72064   0, /*tp_bases*/
72065   0, /*tp_mro*/
72066   0, /*tp_cache*/
72067   0, /*tp_subclasses*/
72068   0, /*tp_weaklist*/
72069   0, /*tp_del*/
72070   0, /*tp_version_tag*/
72071   #if PY_VERSION_HEX >= 0x030400a1
72072   0, /*tp_finalize*/
72073   #endif
72074   #if PY_VERSION_HEX >= 0x030800b1
72075   0, /*tp_vectorcall*/
72076   #endif
72077 };
72078 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_DiskSelector __pyx_vtable_2yt_8geometry_18selection_routines_DiskSelector;
72079 
72080 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_DiskSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
72081   struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *p;
72082   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
72083   if (unlikely(!o)) return 0;
72084   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector *)o);
72085   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_DiskSelector;
72086   return o;
72087 }
72088 
72089 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_12DiskSelector_norm_vec(PyObject *o, CYTHON_UNUSED void *x) {
72090   return __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_8norm_vec_1__get__(o);
72091 }
72092 
72093 static int __pyx_setprop_2yt_8geometry_18selection_routines_12DiskSelector_norm_vec(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72094   if (v) {
72095     return __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_8norm_vec_3__set__(o, v);
72096   }
72097   else {
72098     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72099     return -1;
72100   }
72101 }
72102 
72103 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_12DiskSelector_center(PyObject *o, CYTHON_UNUSED void *x) {
72104   return __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6center_1__get__(o);
72105 }
72106 
72107 static int __pyx_setprop_2yt_8geometry_18selection_routines_12DiskSelector_center(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72108   if (v) {
72109     return __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6center_3__set__(o, v);
72110   }
72111   else {
72112     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72113     return -1;
72114   }
72115 }
72116 
72117 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_12DiskSelector_radius(PyObject *o, CYTHON_UNUSED void *x) {
72118   return __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6radius_1__get__(o);
72119 }
72120 
72121 static int __pyx_setprop_2yt_8geometry_18selection_routines_12DiskSelector_radius(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72122   if (v) {
72123     return __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6radius_3__set__(o, v);
72124   }
72125   else {
72126     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72127     return -1;
72128   }
72129 }
72130 
72131 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_12DiskSelector_radius2(PyObject *o, CYTHON_UNUSED void *x) {
72132   return __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_7radius2_1__get__(o);
72133 }
72134 
72135 static int __pyx_setprop_2yt_8geometry_18selection_routines_12DiskSelector_radius2(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72136   if (v) {
72137     return __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_7radius2_3__set__(o, v);
72138   }
72139   else {
72140     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72141     return -1;
72142   }
72143 }
72144 
72145 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_12DiskSelector_height(PyObject *o, CYTHON_UNUSED void *x) {
72146   return __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6height_1__get__(o);
72147 }
72148 
72149 static int __pyx_setprop_2yt_8geometry_18selection_routines_12DiskSelector_height(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72150   if (v) {
72151     return __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_6height_3__set__(o, v);
72152   }
72153   else {
72154     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72155     return -1;
72156   }
72157 }
72158 
72159 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_DiskSelector[] = {
72160   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_3_hash_vals, METH_NOARGS, 0},
72161   {"_get_state_attnames", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_5_get_state_attnames, METH_NOARGS, 0},
72162   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_7__reduce_cython__, METH_NOARGS, 0},
72163   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_9__setstate_cython__, METH_O, 0},
72164   {0, 0, 0, 0}
72165 };
72166 
72167 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_DiskSelector[] = {
72168   {(char *)"norm_vec", __pyx_getprop_2yt_8geometry_18selection_routines_12DiskSelector_norm_vec, __pyx_setprop_2yt_8geometry_18selection_routines_12DiskSelector_norm_vec, (char *)0, 0},
72169   {(char *)"center", __pyx_getprop_2yt_8geometry_18selection_routines_12DiskSelector_center, __pyx_setprop_2yt_8geometry_18selection_routines_12DiskSelector_center, (char *)0, 0},
72170   {(char *)"radius", __pyx_getprop_2yt_8geometry_18selection_routines_12DiskSelector_radius, __pyx_setprop_2yt_8geometry_18selection_routines_12DiskSelector_radius, (char *)0, 0},
72171   {(char *)"radius2", __pyx_getprop_2yt_8geometry_18selection_routines_12DiskSelector_radius2, __pyx_setprop_2yt_8geometry_18selection_routines_12DiskSelector_radius2, (char *)0, 0},
72172   {(char *)"height", __pyx_getprop_2yt_8geometry_18selection_routines_12DiskSelector_height, __pyx_setprop_2yt_8geometry_18selection_routines_12DiskSelector_height, (char *)0, 0},
72173   {0, 0, 0, 0, 0}
72174 };
72175 
72176 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_DiskSelector = {
72177   PyVarObject_HEAD_INIT(0, 0)
72178   "yt.geometry.selection_routines.DiskSelector", /*tp_name*/
72179   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_DiskSelector), /*tp_basicsize*/
72180   0, /*tp_itemsize*/
72181   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject, /*tp_dealloc*/
72182   0, /*tp_print*/
72183   0, /*tp_getattr*/
72184   0, /*tp_setattr*/
72185   #if PY_MAJOR_VERSION < 3
72186   0, /*tp_compare*/
72187   #endif
72188   #if PY_MAJOR_VERSION >= 3
72189   0, /*tp_as_async*/
72190   #endif
72191   0, /*tp_repr*/
72192   0, /*tp_as_number*/
72193   0, /*tp_as_sequence*/
72194   0, /*tp_as_mapping*/
72195   0, /*tp_hash*/
72196   0, /*tp_call*/
72197   0, /*tp_str*/
72198   0, /*tp_getattro*/
72199   0, /*tp_setattro*/
72200   0, /*tp_as_buffer*/
72201   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
72202   0, /*tp_doc*/
72203   0, /*tp_traverse*/
72204   0, /*tp_clear*/
72205   0, /*tp_richcompare*/
72206   0, /*tp_weaklistoffset*/
72207   0, /*tp_iter*/
72208   0, /*tp_iternext*/
72209   __pyx_methods_2yt_8geometry_18selection_routines_DiskSelector, /*tp_methods*/
72210   0, /*tp_members*/
72211   __pyx_getsets_2yt_8geometry_18selection_routines_DiskSelector, /*tp_getset*/
72212   0, /*tp_base*/
72213   0, /*tp_dict*/
72214   0, /*tp_descr_get*/
72215   0, /*tp_descr_set*/
72216   0, /*tp_dictoffset*/
72217   __pyx_pw_2yt_8geometry_18selection_routines_12DiskSelector_1__init__, /*tp_init*/
72218   0, /*tp_alloc*/
72219   __pyx_tp_new_2yt_8geometry_18selection_routines_DiskSelector, /*tp_new*/
72220   0, /*tp_free*/
72221   0, /*tp_is_gc*/
72222   0, /*tp_bases*/
72223   0, /*tp_mro*/
72224   0, /*tp_cache*/
72225   0, /*tp_subclasses*/
72226   0, /*tp_weaklist*/
72227   0, /*tp_del*/
72228   0, /*tp_version_tag*/
72229   #if PY_VERSION_HEX >= 0x030400a1
72230   0, /*tp_finalize*/
72231   #endif
72232   #if PY_VERSION_HEX >= 0x030800b1
72233   0, /*tp_vectorcall*/
72234   #endif
72235 };
72236 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_CuttingPlaneSelector __pyx_vtable_2yt_8geometry_18selection_routines_CuttingPlaneSelector;
72237 
72238 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_CuttingPlaneSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
72239   struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *p;
72240   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
72241   if (unlikely(!o)) return 0;
72242   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector *)o);
72243   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_CuttingPlaneSelector;
72244   return o;
72245 }
72246 
72247 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_norm_vec(PyObject *o, CYTHON_UNUSED void *x) {
72248   return __pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8norm_vec_1__get__(o);
72249 }
72250 
72251 static int __pyx_setprop_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_norm_vec(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72252   if (v) {
72253     return __pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_8norm_vec_3__set__(o, v);
72254   }
72255   else {
72256     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72257     return -1;
72258   }
72259 }
72260 
72261 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_d(PyObject *o, CYTHON_UNUSED void *x) {
72262   return __pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1d_1__get__(o);
72263 }
72264 
72265 static int __pyx_setprop_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_d(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72266   if (v) {
72267     return __pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1d_3__set__(o, v);
72268   }
72269   else {
72270     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72271     return -1;
72272   }
72273 }
72274 
72275 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_CuttingPlaneSelector[] = {
72276   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_3_hash_vals, METH_NOARGS, 0},
72277   {"_get_state_attnames", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_5_get_state_attnames, METH_NOARGS, 0},
72278   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_7__reduce_cython__, METH_NOARGS, 0},
72279   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_9__setstate_cython__, METH_O, 0},
72280   {0, 0, 0, 0}
72281 };
72282 
72283 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_CuttingPlaneSelector[] = {
72284   {(char *)"norm_vec", __pyx_getprop_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_norm_vec, __pyx_setprop_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_norm_vec, (char *)0, 0},
72285   {(char *)"d", __pyx_getprop_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_d, __pyx_setprop_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_d, (char *)0, 0},
72286   {0, 0, 0, 0, 0}
72287 };
72288 
72289 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_CuttingPlaneSelector = {
72290   PyVarObject_HEAD_INIT(0, 0)
72291   "yt.geometry.selection_routines.CuttingPlaneSelector", /*tp_name*/
72292   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_CuttingPlaneSelector), /*tp_basicsize*/
72293   0, /*tp_itemsize*/
72294   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject, /*tp_dealloc*/
72295   0, /*tp_print*/
72296   0, /*tp_getattr*/
72297   0, /*tp_setattr*/
72298   #if PY_MAJOR_VERSION < 3
72299   0, /*tp_compare*/
72300   #endif
72301   #if PY_MAJOR_VERSION >= 3
72302   0, /*tp_as_async*/
72303   #endif
72304   0, /*tp_repr*/
72305   0, /*tp_as_number*/
72306   0, /*tp_as_sequence*/
72307   0, /*tp_as_mapping*/
72308   0, /*tp_hash*/
72309   0, /*tp_call*/
72310   0, /*tp_str*/
72311   0, /*tp_getattro*/
72312   0, /*tp_setattro*/
72313   0, /*tp_as_buffer*/
72314   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
72315   0, /*tp_doc*/
72316   0, /*tp_traverse*/
72317   0, /*tp_clear*/
72318   0, /*tp_richcompare*/
72319   0, /*tp_weaklistoffset*/
72320   0, /*tp_iter*/
72321   0, /*tp_iternext*/
72322   __pyx_methods_2yt_8geometry_18selection_routines_CuttingPlaneSelector, /*tp_methods*/
72323   0, /*tp_members*/
72324   __pyx_getsets_2yt_8geometry_18selection_routines_CuttingPlaneSelector, /*tp_getset*/
72325   0, /*tp_base*/
72326   0, /*tp_dict*/
72327   0, /*tp_descr_get*/
72328   0, /*tp_descr_set*/
72329   0, /*tp_dictoffset*/
72330   __pyx_pw_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_1__init__, /*tp_init*/
72331   0, /*tp_alloc*/
72332   __pyx_tp_new_2yt_8geometry_18selection_routines_CuttingPlaneSelector, /*tp_new*/
72333   0, /*tp_free*/
72334   0, /*tp_is_gc*/
72335   0, /*tp_bases*/
72336   0, /*tp_mro*/
72337   0, /*tp_cache*/
72338   0, /*tp_subclasses*/
72339   0, /*tp_weaklist*/
72340   0, /*tp_del*/
72341   0, /*tp_version_tag*/
72342   #if PY_VERSION_HEX >= 0x030400a1
72343   0, /*tp_finalize*/
72344   #endif
72345   #if PY_VERSION_HEX >= 0x030800b1
72346   0, /*tp_vectorcall*/
72347   #endif
72348 };
72349 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SliceSelector __pyx_vtable_2yt_8geometry_18selection_routines_SliceSelector;
72350 
72351 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_SliceSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
72352   struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *p;
72353   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
72354   if (unlikely(!o)) return 0;
72355   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector *)o);
72356   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_SliceSelector;
72357   return o;
72358 }
72359 
72360 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_13SliceSelector_axis(PyObject *o, CYTHON_UNUSED void *x) {
72361   return __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_4axis_1__get__(o);
72362 }
72363 
72364 static int __pyx_setprop_2yt_8geometry_18selection_routines_13SliceSelector_axis(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72365   if (v) {
72366     return __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_4axis_3__set__(o, v);
72367   }
72368   else {
72369     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72370     return -1;
72371   }
72372 }
72373 
72374 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_13SliceSelector_coord(PyObject *o, CYTHON_UNUSED void *x) {
72375   return __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_5coord_1__get__(o);
72376 }
72377 
72378 static int __pyx_setprop_2yt_8geometry_18selection_routines_13SliceSelector_coord(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72379   if (v) {
72380     return __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_5coord_3__set__(o, v);
72381   }
72382   else {
72383     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72384     return -1;
72385   }
72386 }
72387 
72388 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_13SliceSelector_ax(PyObject *o, CYTHON_UNUSED void *x) {
72389   return __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_2ax_1__get__(o);
72390 }
72391 
72392 static int __pyx_setprop_2yt_8geometry_18selection_routines_13SliceSelector_ax(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72393   if (v) {
72394     return __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_2ax_3__set__(o, v);
72395   }
72396   else {
72397     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72398     return -1;
72399   }
72400 }
72401 
72402 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_13SliceSelector_ay(PyObject *o, CYTHON_UNUSED void *x) {
72403   return __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_2ay_1__get__(o);
72404 }
72405 
72406 static int __pyx_setprop_2yt_8geometry_18selection_routines_13SliceSelector_ay(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72407   if (v) {
72408     return __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_2ay_3__set__(o, v);
72409   }
72410   else {
72411     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72412     return -1;
72413   }
72414 }
72415 
72416 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_13SliceSelector_reduced_dimensionality(PyObject *o, CYTHON_UNUSED void *x) {
72417   return __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_22reduced_dimensionality_1__get__(o);
72418 }
72419 
72420 static int __pyx_setprop_2yt_8geometry_18selection_routines_13SliceSelector_reduced_dimensionality(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72421   if (v) {
72422     return __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_22reduced_dimensionality_3__set__(o, v);
72423   }
72424   else {
72425     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72426     return -1;
72427   }
72428 }
72429 
72430 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_SliceSelector[] = {
72431   {"fill_mask", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_3fill_mask, METH_O, 0},
72432   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_5_hash_vals, METH_NOARGS, 0},
72433   {"_get_state_attnames", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_7_get_state_attnames, METH_NOARGS, 0},
72434   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_9__reduce_cython__, METH_NOARGS, 0},
72435   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_11__setstate_cython__, METH_O, 0},
72436   {0, 0, 0, 0}
72437 };
72438 
72439 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_SliceSelector[] = {
72440   {(char *)"axis", __pyx_getprop_2yt_8geometry_18selection_routines_13SliceSelector_axis, __pyx_setprop_2yt_8geometry_18selection_routines_13SliceSelector_axis, (char *)0, 0},
72441   {(char *)"coord", __pyx_getprop_2yt_8geometry_18selection_routines_13SliceSelector_coord, __pyx_setprop_2yt_8geometry_18selection_routines_13SliceSelector_coord, (char *)0, 0},
72442   {(char *)"ax", __pyx_getprop_2yt_8geometry_18selection_routines_13SliceSelector_ax, __pyx_setprop_2yt_8geometry_18selection_routines_13SliceSelector_ax, (char *)0, 0},
72443   {(char *)"ay", __pyx_getprop_2yt_8geometry_18selection_routines_13SliceSelector_ay, __pyx_setprop_2yt_8geometry_18selection_routines_13SliceSelector_ay, (char *)0, 0},
72444   {(char *)"reduced_dimensionality", __pyx_getprop_2yt_8geometry_18selection_routines_13SliceSelector_reduced_dimensionality, __pyx_setprop_2yt_8geometry_18selection_routines_13SliceSelector_reduced_dimensionality, (char *)0, 0},
72445   {0, 0, 0, 0, 0}
72446 };
72447 
72448 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_SliceSelector = {
72449   PyVarObject_HEAD_INIT(0, 0)
72450   "yt.geometry.selection_routines.SliceSelector", /*tp_name*/
72451   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_SliceSelector), /*tp_basicsize*/
72452   0, /*tp_itemsize*/
72453   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject, /*tp_dealloc*/
72454   0, /*tp_print*/
72455   0, /*tp_getattr*/
72456   0, /*tp_setattr*/
72457   #if PY_MAJOR_VERSION < 3
72458   0, /*tp_compare*/
72459   #endif
72460   #if PY_MAJOR_VERSION >= 3
72461   0, /*tp_as_async*/
72462   #endif
72463   0, /*tp_repr*/
72464   0, /*tp_as_number*/
72465   0, /*tp_as_sequence*/
72466   0, /*tp_as_mapping*/
72467   0, /*tp_hash*/
72468   0, /*tp_call*/
72469   0, /*tp_str*/
72470   0, /*tp_getattro*/
72471   0, /*tp_setattro*/
72472   0, /*tp_as_buffer*/
72473   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
72474   0, /*tp_doc*/
72475   0, /*tp_traverse*/
72476   0, /*tp_clear*/
72477   0, /*tp_richcompare*/
72478   0, /*tp_weaklistoffset*/
72479   0, /*tp_iter*/
72480   0, /*tp_iternext*/
72481   __pyx_methods_2yt_8geometry_18selection_routines_SliceSelector, /*tp_methods*/
72482   0, /*tp_members*/
72483   __pyx_getsets_2yt_8geometry_18selection_routines_SliceSelector, /*tp_getset*/
72484   0, /*tp_base*/
72485   0, /*tp_dict*/
72486   0, /*tp_descr_get*/
72487   0, /*tp_descr_set*/
72488   0, /*tp_dictoffset*/
72489   __pyx_pw_2yt_8geometry_18selection_routines_13SliceSelector_1__init__, /*tp_init*/
72490   0, /*tp_alloc*/
72491   __pyx_tp_new_2yt_8geometry_18selection_routines_SliceSelector, /*tp_new*/
72492   0, /*tp_free*/
72493   0, /*tp_is_gc*/
72494   0, /*tp_bases*/
72495   0, /*tp_mro*/
72496   0, /*tp_cache*/
72497   0, /*tp_subclasses*/
72498   0, /*tp_weaklist*/
72499   0, /*tp_del*/
72500   0, /*tp_version_tag*/
72501   #if PY_VERSION_HEX >= 0x030400a1
72502   0, /*tp_finalize*/
72503   #endif
72504   #if PY_VERSION_HEX >= 0x030800b1
72505   0, /*tp_vectorcall*/
72506   #endif
72507 };
72508 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_OrthoRaySelector __pyx_vtable_2yt_8geometry_18selection_routines_OrthoRaySelector;
72509 
72510 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_OrthoRaySelector(PyTypeObject *t, PyObject *a, PyObject *k) {
72511   struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *p;
72512   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
72513   if (unlikely(!o)) return 0;
72514   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector *)o);
72515   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_OrthoRaySelector;
72516   return o;
72517 }
72518 
72519 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_px_ax(PyObject *o, CYTHON_UNUSED void *x) {
72520   return __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5px_ax_1__get__(o);
72521 }
72522 
72523 static int __pyx_setprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_px_ax(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72524   if (v) {
72525     return __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5px_ax_3__set__(o, v);
72526   }
72527   else {
72528     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72529     return -1;
72530   }
72531 }
72532 
72533 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_py_ax(PyObject *o, CYTHON_UNUSED void *x) {
72534   return __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5py_ax_1__get__(o);
72535 }
72536 
72537 static int __pyx_setprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_py_ax(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72538   if (v) {
72539     return __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5py_ax_3__set__(o, v);
72540   }
72541   else {
72542     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72543     return -1;
72544   }
72545 }
72546 
72547 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_px(PyObject *o, CYTHON_UNUSED void *x) {
72548   return __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_2px_1__get__(o);
72549 }
72550 
72551 static int __pyx_setprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_px(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72552   if (v) {
72553     return __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_2px_3__set__(o, v);
72554   }
72555   else {
72556     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72557     return -1;
72558   }
72559 }
72560 
72561 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_py(PyObject *o, CYTHON_UNUSED void *x) {
72562   return __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_2py_1__get__(o);
72563 }
72564 
72565 static int __pyx_setprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_py(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72566   if (v) {
72567     return __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_2py_3__set__(o, v);
72568   }
72569   else {
72570     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72571     return -1;
72572   }
72573 }
72574 
72575 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_axis(PyObject *o, CYTHON_UNUSED void *x) {
72576   return __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_4axis_1__get__(o);
72577 }
72578 
72579 static int __pyx_setprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_axis(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72580   if (v) {
72581     return __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_4axis_3__set__(o, v);
72582   }
72583   else {
72584     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72585     return -1;
72586   }
72587 }
72588 
72589 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_OrthoRaySelector[] = {
72590   {"fill_mask", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_3fill_mask, METH_O, 0},
72591   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_5_hash_vals, METH_NOARGS, 0},
72592   {"_get_state_attnames", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_7_get_state_attnames, METH_NOARGS, 0},
72593   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_9__reduce_cython__, METH_NOARGS, 0},
72594   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_11__setstate_cython__, METH_O, 0},
72595   {0, 0, 0, 0}
72596 };
72597 
72598 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_OrthoRaySelector[] = {
72599   {(char *)"px_ax", __pyx_getprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_px_ax, __pyx_setprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_px_ax, (char *)0, 0},
72600   {(char *)"py_ax", __pyx_getprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_py_ax, __pyx_setprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_py_ax, (char *)0, 0},
72601   {(char *)"px", __pyx_getprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_px, __pyx_setprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_px, (char *)0, 0},
72602   {(char *)"py", __pyx_getprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_py, __pyx_setprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_py, (char *)0, 0},
72603   {(char *)"axis", __pyx_getprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_axis, __pyx_setprop_2yt_8geometry_18selection_routines_16OrthoRaySelector_axis, (char *)0, 0},
72604   {0, 0, 0, 0, 0}
72605 };
72606 
72607 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_OrthoRaySelector = {
72608   PyVarObject_HEAD_INIT(0, 0)
72609   "yt.geometry.selection_routines.OrthoRaySelector", /*tp_name*/
72610   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_OrthoRaySelector), /*tp_basicsize*/
72611   0, /*tp_itemsize*/
72612   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject, /*tp_dealloc*/
72613   0, /*tp_print*/
72614   0, /*tp_getattr*/
72615   0, /*tp_setattr*/
72616   #if PY_MAJOR_VERSION < 3
72617   0, /*tp_compare*/
72618   #endif
72619   #if PY_MAJOR_VERSION >= 3
72620   0, /*tp_as_async*/
72621   #endif
72622   0, /*tp_repr*/
72623   0, /*tp_as_number*/
72624   0, /*tp_as_sequence*/
72625   0, /*tp_as_mapping*/
72626   0, /*tp_hash*/
72627   0, /*tp_call*/
72628   0, /*tp_str*/
72629   0, /*tp_getattro*/
72630   0, /*tp_setattro*/
72631   0, /*tp_as_buffer*/
72632   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
72633   0, /*tp_doc*/
72634   0, /*tp_traverse*/
72635   0, /*tp_clear*/
72636   0, /*tp_richcompare*/
72637   0, /*tp_weaklistoffset*/
72638   0, /*tp_iter*/
72639   0, /*tp_iternext*/
72640   __pyx_methods_2yt_8geometry_18selection_routines_OrthoRaySelector, /*tp_methods*/
72641   0, /*tp_members*/
72642   __pyx_getsets_2yt_8geometry_18selection_routines_OrthoRaySelector, /*tp_getset*/
72643   0, /*tp_base*/
72644   0, /*tp_dict*/
72645   0, /*tp_descr_get*/
72646   0, /*tp_descr_set*/
72647   0, /*tp_dictoffset*/
72648   __pyx_pw_2yt_8geometry_18selection_routines_16OrthoRaySelector_1__init__, /*tp_init*/
72649   0, /*tp_alloc*/
72650   __pyx_tp_new_2yt_8geometry_18selection_routines_OrthoRaySelector, /*tp_new*/
72651   0, /*tp_free*/
72652   0, /*tp_is_gc*/
72653   0, /*tp_bases*/
72654   0, /*tp_mro*/
72655   0, /*tp_cache*/
72656   0, /*tp_subclasses*/
72657   0, /*tp_weaklist*/
72658   0, /*tp_del*/
72659   0, /*tp_version_tag*/
72660   #if PY_VERSION_HEX >= 0x030400a1
72661   0, /*tp_finalize*/
72662   #endif
72663   #if PY_VERSION_HEX >= 0x030800b1
72664   0, /*tp_vectorcall*/
72665   #endif
72666 };
72667 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_RaySelector __pyx_vtable_2yt_8geometry_18selection_routines_RaySelector;
72668 
72669 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_RaySelector(PyTypeObject *t, PyObject *a, PyObject *k) {
72670   struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *p;
72671   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
72672   if (unlikely(!o)) return 0;
72673   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector *)o);
72674   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_RaySelector;
72675   return o;
72676 }
72677 
72678 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_11RaySelector_p1(PyObject *o, CYTHON_UNUSED void *x) {
72679   return __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_2p1_1__get__(o);
72680 }
72681 
72682 static int __pyx_setprop_2yt_8geometry_18selection_routines_11RaySelector_p1(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72683   if (v) {
72684     return __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_2p1_3__set__(o, v);
72685   }
72686   else {
72687     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72688     return -1;
72689   }
72690 }
72691 
72692 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_11RaySelector_p2(PyObject *o, CYTHON_UNUSED void *x) {
72693   return __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_2p2_1__get__(o);
72694 }
72695 
72696 static int __pyx_setprop_2yt_8geometry_18selection_routines_11RaySelector_p2(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72697   if (v) {
72698     return __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_2p2_3__set__(o, v);
72699   }
72700   else {
72701     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72702     return -1;
72703   }
72704 }
72705 
72706 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_11RaySelector_vec(PyObject *o, CYTHON_UNUSED void *x) {
72707   return __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_3vec_1__get__(o);
72708 }
72709 
72710 static int __pyx_setprop_2yt_8geometry_18selection_routines_11RaySelector_vec(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72711   if (v) {
72712     return __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_3vec_3__set__(o, v);
72713   }
72714   else {
72715     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72716     return -1;
72717   }
72718 }
72719 
72720 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_RaySelector[] = {
72721   {"fill_mask", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_3fill_mask, METH_O, 0},
72722   {"get_dt", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_5get_dt, METH_O, 0},
72723   {"get_dt_mesh", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_7get_dt_mesh, METH_VARARGS|METH_KEYWORDS, 0},
72724   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_9_hash_vals, METH_NOARGS, 0},
72725   {"_get_state_attnames", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_11_get_state_attnames, METH_NOARGS, 0},
72726   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_13__reduce_cython__, METH_NOARGS, 0},
72727   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_15__setstate_cython__, METH_O, 0},
72728   {0, 0, 0, 0}
72729 };
72730 
72731 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_RaySelector[] = {
72732   {(char *)"p1", __pyx_getprop_2yt_8geometry_18selection_routines_11RaySelector_p1, __pyx_setprop_2yt_8geometry_18selection_routines_11RaySelector_p1, (char *)0, 0},
72733   {(char *)"p2", __pyx_getprop_2yt_8geometry_18selection_routines_11RaySelector_p2, __pyx_setprop_2yt_8geometry_18selection_routines_11RaySelector_p2, (char *)0, 0},
72734   {(char *)"vec", __pyx_getprop_2yt_8geometry_18selection_routines_11RaySelector_vec, __pyx_setprop_2yt_8geometry_18selection_routines_11RaySelector_vec, (char *)0, 0},
72735   {0, 0, 0, 0, 0}
72736 };
72737 
72738 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_RaySelector = {
72739   PyVarObject_HEAD_INIT(0, 0)
72740   "yt.geometry.selection_routines.RaySelector", /*tp_name*/
72741   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_RaySelector), /*tp_basicsize*/
72742   0, /*tp_itemsize*/
72743   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject, /*tp_dealloc*/
72744   0, /*tp_print*/
72745   0, /*tp_getattr*/
72746   0, /*tp_setattr*/
72747   #if PY_MAJOR_VERSION < 3
72748   0, /*tp_compare*/
72749   #endif
72750   #if PY_MAJOR_VERSION >= 3
72751   0, /*tp_as_async*/
72752   #endif
72753   0, /*tp_repr*/
72754   0, /*tp_as_number*/
72755   0, /*tp_as_sequence*/
72756   0, /*tp_as_mapping*/
72757   0, /*tp_hash*/
72758   0, /*tp_call*/
72759   0, /*tp_str*/
72760   0, /*tp_getattro*/
72761   0, /*tp_setattro*/
72762   0, /*tp_as_buffer*/
72763   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
72764   0, /*tp_doc*/
72765   0, /*tp_traverse*/
72766   0, /*tp_clear*/
72767   0, /*tp_richcompare*/
72768   0, /*tp_weaklistoffset*/
72769   0, /*tp_iter*/
72770   0, /*tp_iternext*/
72771   __pyx_methods_2yt_8geometry_18selection_routines_RaySelector, /*tp_methods*/
72772   0, /*tp_members*/
72773   __pyx_getsets_2yt_8geometry_18selection_routines_RaySelector, /*tp_getset*/
72774   0, /*tp_base*/
72775   0, /*tp_dict*/
72776   0, /*tp_descr_get*/
72777   0, /*tp_descr_set*/
72778   0, /*tp_dictoffset*/
72779   __pyx_pw_2yt_8geometry_18selection_routines_11RaySelector_1__init__, /*tp_init*/
72780   0, /*tp_alloc*/
72781   __pyx_tp_new_2yt_8geometry_18selection_routines_RaySelector, /*tp_new*/
72782   0, /*tp_free*/
72783   0, /*tp_is_gc*/
72784   0, /*tp_bases*/
72785   0, /*tp_mro*/
72786   0, /*tp_cache*/
72787   0, /*tp_subclasses*/
72788   0, /*tp_weaklist*/
72789   0, /*tp_del*/
72790   0, /*tp_version_tag*/
72791   #if PY_VERSION_HEX >= 0x030400a1
72792   0, /*tp_finalize*/
72793   #endif
72794   #if PY_VERSION_HEX >= 0x030800b1
72795   0, /*tp_vectorcall*/
72796   #endif
72797 };
72798 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_DataCollectionSelector __pyx_vtable_2yt_8geometry_18selection_routines_DataCollectionSelector;
72799 
72800 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_DataCollectionSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
72801   struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *p;
72802   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
72803   if (unlikely(!o)) return 0;
72804   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *)o);
72805   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_DataCollectionSelector;
72806   p->obj_ids = Py_None; Py_INCREF(Py_None);
72807   return o;
72808 }
72809 
72810 static void __pyx_tp_dealloc_2yt_8geometry_18selection_routines_DataCollectionSelector(PyObject *o) {
72811   struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *)o;
72812   #if CYTHON_USE_TP_FINALIZE
72813   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
72814     if (PyObject_CallFinalizerFromDealloc(o)) return;
72815   }
72816   #endif
72817   PyObject_GC_UnTrack(o);
72818   Py_CLEAR(p->obj_ids);
72819   #if CYTHON_USE_TYPE_SLOTS
72820   if (PyType_IS_GC(Py_TYPE(o)->tp_base))
72821   #endif
72822   PyObject_GC_Track(o);
72823   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject(o);
72824 }
72825 
72826 static int __pyx_tp_traverse_2yt_8geometry_18selection_routines_DataCollectionSelector(PyObject *o, visitproc v, void *a) {
72827   int e;
72828   struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *)o;
72829   e = ((likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) ? ((__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse) ? __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_2yt_8geometry_18selection_routines_DataCollectionSelector)); if (e) return e;
72830   if (p->obj_ids) {
72831     e = (*v)(p->obj_ids, a); if (e) return e;
72832   }
72833   return 0;
72834 }
72835 
72836 static int __pyx_tp_clear_2yt_8geometry_18selection_routines_DataCollectionSelector(PyObject *o) {
72837   PyObject* tmp;
72838   struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector *)o;
72839   if (likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) { if (__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear) __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_2yt_8geometry_18selection_routines_DataCollectionSelector);
72840   tmp = ((PyObject*)p->obj_ids);
72841   p->obj_ids = Py_None; Py_INCREF(Py_None);
72842   Py_XDECREF(tmp);
72843   return 0;
72844 }
72845 
72846 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_DataCollectionSelector[] = {
72847   {"select_grids", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_3select_grids, METH_VARARGS|METH_KEYWORDS, 0},
72848   {"fill_mask", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_5fill_mask, METH_O, 0},
72849   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_7_hash_vals, METH_NOARGS, 0},
72850   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_9__reduce_cython__, METH_NOARGS, 0},
72851   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_11__setstate_cython__, METH_O, 0},
72852   {0, 0, 0, 0}
72853 };
72854 
72855 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_DataCollectionSelector = {
72856   PyVarObject_HEAD_INIT(0, 0)
72857   "yt.geometry.selection_routines.DataCollectionSelector", /*tp_name*/
72858   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_DataCollectionSelector), /*tp_basicsize*/
72859   0, /*tp_itemsize*/
72860   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_DataCollectionSelector, /*tp_dealloc*/
72861   0, /*tp_print*/
72862   0, /*tp_getattr*/
72863   0, /*tp_setattr*/
72864   #if PY_MAJOR_VERSION < 3
72865   0, /*tp_compare*/
72866   #endif
72867   #if PY_MAJOR_VERSION >= 3
72868   0, /*tp_as_async*/
72869   #endif
72870   0, /*tp_repr*/
72871   0, /*tp_as_number*/
72872   0, /*tp_as_sequence*/
72873   0, /*tp_as_mapping*/
72874   0, /*tp_hash*/
72875   0, /*tp_call*/
72876   0, /*tp_str*/
72877   0, /*tp_getattro*/
72878   0, /*tp_setattro*/
72879   0, /*tp_as_buffer*/
72880   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
72881   0, /*tp_doc*/
72882   __pyx_tp_traverse_2yt_8geometry_18selection_routines_DataCollectionSelector, /*tp_traverse*/
72883   __pyx_tp_clear_2yt_8geometry_18selection_routines_DataCollectionSelector, /*tp_clear*/
72884   0, /*tp_richcompare*/
72885   0, /*tp_weaklistoffset*/
72886   0, /*tp_iter*/
72887   0, /*tp_iternext*/
72888   __pyx_methods_2yt_8geometry_18selection_routines_DataCollectionSelector, /*tp_methods*/
72889   0, /*tp_members*/
72890   0, /*tp_getset*/
72891   0, /*tp_base*/
72892   0, /*tp_dict*/
72893   0, /*tp_descr_get*/
72894   0, /*tp_descr_set*/
72895   0, /*tp_dictoffset*/
72896   __pyx_pw_2yt_8geometry_18selection_routines_22DataCollectionSelector_1__init__, /*tp_init*/
72897   0, /*tp_alloc*/
72898   __pyx_tp_new_2yt_8geometry_18selection_routines_DataCollectionSelector, /*tp_new*/
72899   0, /*tp_free*/
72900   0, /*tp_is_gc*/
72901   0, /*tp_bases*/
72902   0, /*tp_mro*/
72903   0, /*tp_cache*/
72904   0, /*tp_subclasses*/
72905   0, /*tp_weaklist*/
72906   0, /*tp_del*/
72907   0, /*tp_version_tag*/
72908   #if PY_VERSION_HEX >= 0x030400a1
72909   0, /*tp_finalize*/
72910   #endif
72911   #if PY_VERSION_HEX >= 0x030800b1
72912   0, /*tp_vectorcall*/
72913   #endif
72914 };
72915 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_EllipsoidSelector __pyx_vtable_2yt_8geometry_18selection_routines_EllipsoidSelector;
72916 
72917 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_EllipsoidSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
72918   struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *p;
72919   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
72920   if (unlikely(!o)) return 0;
72921   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector *)o);
72922   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_EllipsoidSelector;
72923   return o;
72924 }
72925 
72926 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_17EllipsoidSelector_vec(PyObject *o, CYTHON_UNUSED void *x) {
72927   return __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3vec_1__get__(o);
72928 }
72929 
72930 static int __pyx_setprop_2yt_8geometry_18selection_routines_17EllipsoidSelector_vec(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72931   if (v) {
72932     return __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3vec_3__set__(o, v);
72933   }
72934   else {
72935     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72936     return -1;
72937   }
72938 }
72939 
72940 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_17EllipsoidSelector_mag(PyObject *o, CYTHON_UNUSED void *x) {
72941   return __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3mag_1__get__(o);
72942 }
72943 
72944 static int __pyx_setprop_2yt_8geometry_18selection_routines_17EllipsoidSelector_mag(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72945   if (v) {
72946     return __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3mag_3__set__(o, v);
72947   }
72948   else {
72949     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72950     return -1;
72951   }
72952 }
72953 
72954 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_17EllipsoidSelector_center(PyObject *o, CYTHON_UNUSED void *x) {
72955   return __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_6center_1__get__(o);
72956 }
72957 
72958 static int __pyx_setprop_2yt_8geometry_18selection_routines_17EllipsoidSelector_center(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
72959   if (v) {
72960     return __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_6center_3__set__(o, v);
72961   }
72962   else {
72963     PyErr_SetString(PyExc_NotImplementedError, "__del__");
72964     return -1;
72965   }
72966 }
72967 
72968 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_EllipsoidSelector[] = {
72969   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_3_hash_vals, METH_NOARGS, 0},
72970   {"_get_state_attnames", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_5_get_state_attnames, METH_NOARGS, 0},
72971   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_7__reduce_cython__, METH_NOARGS, 0},
72972   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_9__setstate_cython__, METH_O, 0},
72973   {0, 0, 0, 0}
72974 };
72975 
72976 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_EllipsoidSelector[] = {
72977   {(char *)"vec", __pyx_getprop_2yt_8geometry_18selection_routines_17EllipsoidSelector_vec, __pyx_setprop_2yt_8geometry_18selection_routines_17EllipsoidSelector_vec, (char *)0, 0},
72978   {(char *)"mag", __pyx_getprop_2yt_8geometry_18selection_routines_17EllipsoidSelector_mag, __pyx_setprop_2yt_8geometry_18selection_routines_17EllipsoidSelector_mag, (char *)0, 0},
72979   {(char *)"center", __pyx_getprop_2yt_8geometry_18selection_routines_17EllipsoidSelector_center, __pyx_setprop_2yt_8geometry_18selection_routines_17EllipsoidSelector_center, (char *)0, 0},
72980   {0, 0, 0, 0, 0}
72981 };
72982 
72983 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_EllipsoidSelector = {
72984   PyVarObject_HEAD_INIT(0, 0)
72985   "yt.geometry.selection_routines.EllipsoidSelector", /*tp_name*/
72986   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_EllipsoidSelector), /*tp_basicsize*/
72987   0, /*tp_itemsize*/
72988   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject, /*tp_dealloc*/
72989   0, /*tp_print*/
72990   0, /*tp_getattr*/
72991   0, /*tp_setattr*/
72992   #if PY_MAJOR_VERSION < 3
72993   0, /*tp_compare*/
72994   #endif
72995   #if PY_MAJOR_VERSION >= 3
72996   0, /*tp_as_async*/
72997   #endif
72998   0, /*tp_repr*/
72999   0, /*tp_as_number*/
73000   0, /*tp_as_sequence*/
73001   0, /*tp_as_mapping*/
73002   0, /*tp_hash*/
73003   0, /*tp_call*/
73004   0, /*tp_str*/
73005   0, /*tp_getattro*/
73006   0, /*tp_setattro*/
73007   0, /*tp_as_buffer*/
73008   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
73009   0, /*tp_doc*/
73010   0, /*tp_traverse*/
73011   0, /*tp_clear*/
73012   0, /*tp_richcompare*/
73013   0, /*tp_weaklistoffset*/
73014   0, /*tp_iter*/
73015   0, /*tp_iternext*/
73016   __pyx_methods_2yt_8geometry_18selection_routines_EllipsoidSelector, /*tp_methods*/
73017   0, /*tp_members*/
73018   __pyx_getsets_2yt_8geometry_18selection_routines_EllipsoidSelector, /*tp_getset*/
73019   0, /*tp_base*/
73020   0, /*tp_dict*/
73021   0, /*tp_descr_get*/
73022   0, /*tp_descr_set*/
73023   0, /*tp_dictoffset*/
73024   __pyx_pw_2yt_8geometry_18selection_routines_17EllipsoidSelector_1__init__, /*tp_init*/
73025   0, /*tp_alloc*/
73026   __pyx_tp_new_2yt_8geometry_18selection_routines_EllipsoidSelector, /*tp_new*/
73027   0, /*tp_free*/
73028   0, /*tp_is_gc*/
73029   0, /*tp_bases*/
73030   0, /*tp_mro*/
73031   0, /*tp_cache*/
73032   0, /*tp_subclasses*/
73033   0, /*tp_weaklist*/
73034   0, /*tp_del*/
73035   0, /*tp_version_tag*/
73036   #if PY_VERSION_HEX >= 0x030400a1
73037   0, /*tp_finalize*/
73038   #endif
73039   #if PY_VERSION_HEX >= 0x030800b1
73040   0, /*tp_vectorcall*/
73041   #endif
73042 };
73043 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_GridSelector __pyx_vtable_2yt_8geometry_18selection_routines_GridSelector;
73044 
73045 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_GridSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
73046   struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *p;
73047   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
73048   if (unlikely(!o)) return 0;
73049   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *)o);
73050   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_GridSelector;
73051   p->ind = Py_None; Py_INCREF(Py_None);
73052   return o;
73053 }
73054 
73055 static void __pyx_tp_dealloc_2yt_8geometry_18selection_routines_GridSelector(PyObject *o) {
73056   struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *)o;
73057   #if CYTHON_USE_TP_FINALIZE
73058   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
73059     if (PyObject_CallFinalizerFromDealloc(o)) return;
73060   }
73061   #endif
73062   PyObject_GC_UnTrack(o);
73063   Py_CLEAR(p->ind);
73064   #if CYTHON_USE_TYPE_SLOTS
73065   if (PyType_IS_GC(Py_TYPE(o)->tp_base))
73066   #endif
73067   PyObject_GC_Track(o);
73068   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject(o);
73069 }
73070 
73071 static int __pyx_tp_traverse_2yt_8geometry_18selection_routines_GridSelector(PyObject *o, visitproc v, void *a) {
73072   int e;
73073   struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *)o;
73074   e = ((likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) ? ((__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse) ? __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_2yt_8geometry_18selection_routines_GridSelector)); if (e) return e;
73075   if (p->ind) {
73076     e = (*v)(p->ind, a); if (e) return e;
73077   }
73078   return 0;
73079 }
73080 
73081 static int __pyx_tp_clear_2yt_8geometry_18selection_routines_GridSelector(PyObject *o) {
73082   PyObject* tmp;
73083   struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector *)o;
73084   if (likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) { if (__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear) __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_2yt_8geometry_18selection_routines_GridSelector);
73085   tmp = ((PyObject*)p->ind);
73086   p->ind = Py_None; Py_INCREF(Py_None);
73087   Py_XDECREF(tmp);
73088   return 0;
73089 }
73090 
73091 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_GridSelector[] = {
73092   {"select_grids", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_3select_grids, METH_VARARGS|METH_KEYWORDS, 0},
73093   {"fill_mask", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_5fill_mask, METH_O, 0},
73094   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_7_hash_vals, METH_NOARGS, 0},
73095   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_9__reduce_cython__, METH_NOARGS, 0},
73096   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_11__setstate_cython__, METH_O, 0},
73097   {0, 0, 0, 0}
73098 };
73099 
73100 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_GridSelector = {
73101   PyVarObject_HEAD_INIT(0, 0)
73102   "yt.geometry.selection_routines.GridSelector", /*tp_name*/
73103   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_GridSelector), /*tp_basicsize*/
73104   0, /*tp_itemsize*/
73105   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_GridSelector, /*tp_dealloc*/
73106   0, /*tp_print*/
73107   0, /*tp_getattr*/
73108   0, /*tp_setattr*/
73109   #if PY_MAJOR_VERSION < 3
73110   0, /*tp_compare*/
73111   #endif
73112   #if PY_MAJOR_VERSION >= 3
73113   0, /*tp_as_async*/
73114   #endif
73115   0, /*tp_repr*/
73116   0, /*tp_as_number*/
73117   0, /*tp_as_sequence*/
73118   0, /*tp_as_mapping*/
73119   0, /*tp_hash*/
73120   0, /*tp_call*/
73121   0, /*tp_str*/
73122   0, /*tp_getattro*/
73123   0, /*tp_setattro*/
73124   0, /*tp_as_buffer*/
73125   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
73126   0, /*tp_doc*/
73127   __pyx_tp_traverse_2yt_8geometry_18selection_routines_GridSelector, /*tp_traverse*/
73128   __pyx_tp_clear_2yt_8geometry_18selection_routines_GridSelector, /*tp_clear*/
73129   0, /*tp_richcompare*/
73130   0, /*tp_weaklistoffset*/
73131   0, /*tp_iter*/
73132   0, /*tp_iternext*/
73133   __pyx_methods_2yt_8geometry_18selection_routines_GridSelector, /*tp_methods*/
73134   0, /*tp_members*/
73135   0, /*tp_getset*/
73136   0, /*tp_base*/
73137   0, /*tp_dict*/
73138   0, /*tp_descr_get*/
73139   0, /*tp_descr_set*/
73140   0, /*tp_dictoffset*/
73141   __pyx_pw_2yt_8geometry_18selection_routines_12GridSelector_1__init__, /*tp_init*/
73142   0, /*tp_alloc*/
73143   __pyx_tp_new_2yt_8geometry_18selection_routines_GridSelector, /*tp_new*/
73144   0, /*tp_free*/
73145   0, /*tp_is_gc*/
73146   0, /*tp_bases*/
73147   0, /*tp_mro*/
73148   0, /*tp_cache*/
73149   0, /*tp_subclasses*/
73150   0, /*tp_weaklist*/
73151   0, /*tp_del*/
73152   0, /*tp_version_tag*/
73153   #if PY_VERSION_HEX >= 0x030400a1
73154   0, /*tp_finalize*/
73155   #endif
73156   #if PY_VERSION_HEX >= 0x030800b1
73157   0, /*tp_vectorcall*/
73158   #endif
73159 };
73160 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector __pyx_vtable_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector;
73161 
73162 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
73163   struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *p;
73164   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
73165   if (unlikely(!o)) return 0;
73166   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *)o);
73167   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector;
73168   p->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
73169   return o;
73170 }
73171 
73172 static void __pyx_tp_dealloc_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector(PyObject *o) {
73173   struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *)o;
73174   #if CYTHON_USE_TP_FINALIZE
73175   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
73176     if (PyObject_CallFinalizerFromDealloc(o)) return;
73177   }
73178   #endif
73179   PyObject_GC_UnTrack(o);
73180   Py_CLEAR(p->base_selector);
73181   #if CYTHON_USE_TYPE_SLOTS
73182   if (PyType_IS_GC(Py_TYPE(o)->tp_base))
73183   #endif
73184   PyObject_GC_Track(o);
73185   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject(o);
73186 }
73187 
73188 static int __pyx_tp_traverse_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector(PyObject *o, visitproc v, void *a) {
73189   int e;
73190   struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *)o;
73191   e = ((likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) ? ((__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse) ? __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector)); if (e) return e;
73192   if (p->base_selector) {
73193     e = (*v)(((PyObject *)p->base_selector), a); if (e) return e;
73194   }
73195   return 0;
73196 }
73197 
73198 static int __pyx_tp_clear_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector(PyObject *o) {
73199   PyObject* tmp;
73200   struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector *)o;
73201   if (likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) { if (__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear) __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector);
73202   tmp = ((PyObject*)p->base_selector);
73203   p->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
73204   Py_XDECREF(tmp);
73205   return 0;
73206 }
73207 
73208 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_base_selector(PyObject *o, CYTHON_UNUSED void *x) {
73209   return __pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_1__get__(o);
73210 }
73211 
73212 static int __pyx_setprop_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_base_selector(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
73213   if (v) {
73214     return __pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_3__set__(o, v);
73215   }
73216   else {
73217     return __pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_13base_selector_5__del__(o);
73218   }
73219 }
73220 
73221 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector[] = {
73222   {"select_grids", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_3select_grids, METH_VARARGS|METH_KEYWORDS, 0},
73223   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_5_hash_vals, METH_NOARGS, 0},
73224   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_7__reduce_cython__, METH_NOARGS, 0},
73225   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_9__setstate_cython__, METH_O, 0},
73226   {0, 0, 0, 0}
73227 };
73228 
73229 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector[] = {
73230   {(char *)"base_selector", __pyx_getprop_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_base_selector, __pyx_setprop_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_base_selector, (char *)0, 0},
73231   {0, 0, 0, 0, 0}
73232 };
73233 
73234 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector = {
73235   PyVarObject_HEAD_INIT(0, 0)
73236   "yt.geometry.selection_routines.IndexedOctreeSubsetSelector", /*tp_name*/
73237   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector), /*tp_basicsize*/
73238   0, /*tp_itemsize*/
73239   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector, /*tp_dealloc*/
73240   0, /*tp_print*/
73241   0, /*tp_getattr*/
73242   0, /*tp_setattr*/
73243   #if PY_MAJOR_VERSION < 3
73244   0, /*tp_compare*/
73245   #endif
73246   #if PY_MAJOR_VERSION >= 3
73247   0, /*tp_as_async*/
73248   #endif
73249   0, /*tp_repr*/
73250   0, /*tp_as_number*/
73251   0, /*tp_as_sequence*/
73252   0, /*tp_as_mapping*/
73253   0, /*tp_hash*/
73254   0, /*tp_call*/
73255   0, /*tp_str*/
73256   0, /*tp_getattro*/
73257   0, /*tp_setattro*/
73258   0, /*tp_as_buffer*/
73259   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
73260   0, /*tp_doc*/
73261   __pyx_tp_traverse_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector, /*tp_traverse*/
73262   __pyx_tp_clear_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector, /*tp_clear*/
73263   0, /*tp_richcompare*/
73264   0, /*tp_weaklistoffset*/
73265   0, /*tp_iter*/
73266   0, /*tp_iternext*/
73267   __pyx_methods_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector, /*tp_methods*/
73268   0, /*tp_members*/
73269   __pyx_getsets_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector, /*tp_getset*/
73270   0, /*tp_base*/
73271   0, /*tp_dict*/
73272   0, /*tp_descr_get*/
73273   0, /*tp_descr_set*/
73274   0, /*tp_dictoffset*/
73275   __pyx_pw_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_1__init__, /*tp_init*/
73276   0, /*tp_alloc*/
73277   __pyx_tp_new_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector, /*tp_new*/
73278   0, /*tp_free*/
73279   0, /*tp_is_gc*/
73280   0, /*tp_bases*/
73281   0, /*tp_mro*/
73282   0, /*tp_cache*/
73283   0, /*tp_subclasses*/
73284   0, /*tp_weaklist*/
73285   0, /*tp_del*/
73286   0, /*tp_version_tag*/
73287   #if PY_VERSION_HEX >= 0x030400a1
73288   0, /*tp_finalize*/
73289   #endif
73290   #if PY_VERSION_HEX >= 0x030800b1
73291   0, /*tp_vectorcall*/
73292   #endif
73293 };
73294 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ComposeSelector __pyx_vtable_2yt_8geometry_18selection_routines_ComposeSelector;
73295 
73296 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_ComposeSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
73297   struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *p;
73298   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
73299   if (unlikely(!o)) return 0;
73300   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *)o);
73301   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_ComposeSelector;
73302   p->selector1 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
73303   p->selector2 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
73304   return o;
73305 }
73306 
73307 static void __pyx_tp_dealloc_2yt_8geometry_18selection_routines_ComposeSelector(PyObject *o) {
73308   struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *)o;
73309   #if CYTHON_USE_TP_FINALIZE
73310   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
73311     if (PyObject_CallFinalizerFromDealloc(o)) return;
73312   }
73313   #endif
73314   PyObject_GC_UnTrack(o);
73315   Py_CLEAR(p->selector1);
73316   Py_CLEAR(p->selector2);
73317   #if CYTHON_USE_TYPE_SLOTS
73318   if (PyType_IS_GC(Py_TYPE(o)->tp_base))
73319   #endif
73320   PyObject_GC_Track(o);
73321   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject(o);
73322 }
73323 
73324 static int __pyx_tp_traverse_2yt_8geometry_18selection_routines_ComposeSelector(PyObject *o, visitproc v, void *a) {
73325   int e;
73326   struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *)o;
73327   e = ((likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) ? ((__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse) ? __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_2yt_8geometry_18selection_routines_ComposeSelector)); if (e) return e;
73328   if (p->selector1) {
73329     e = (*v)(((PyObject *)p->selector1), a); if (e) return e;
73330   }
73331   if (p->selector2) {
73332     e = (*v)(((PyObject *)p->selector2), a); if (e) return e;
73333   }
73334   return 0;
73335 }
73336 
73337 static int __pyx_tp_clear_2yt_8geometry_18selection_routines_ComposeSelector(PyObject *o) {
73338   PyObject* tmp;
73339   struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector *)o;
73340   if (likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) { if (__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear) __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_2yt_8geometry_18selection_routines_ComposeSelector);
73341   tmp = ((PyObject*)p->selector1);
73342   p->selector1 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
73343   Py_XDECREF(tmp);
73344   tmp = ((PyObject*)p->selector2);
73345   p->selector2 = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
73346   Py_XDECREF(tmp);
73347   return 0;
73348 }
73349 
73350 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_ComposeSelector[] = {
73351   {"select_grids", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_3select_grids, METH_VARARGS|METH_KEYWORDS, 0},
73352   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_5_hash_vals, METH_NOARGS, 0},
73353   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_7__reduce_cython__, METH_NOARGS, 0},
73354   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_9__setstate_cython__, METH_O, 0},
73355   {0, 0, 0, 0}
73356 };
73357 
73358 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_ComposeSelector = {
73359   PyVarObject_HEAD_INIT(0, 0)
73360   "yt.geometry.selection_routines.ComposeSelector", /*tp_name*/
73361   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_ComposeSelector), /*tp_basicsize*/
73362   0, /*tp_itemsize*/
73363   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_ComposeSelector, /*tp_dealloc*/
73364   0, /*tp_print*/
73365   0, /*tp_getattr*/
73366   0, /*tp_setattr*/
73367   #if PY_MAJOR_VERSION < 3
73368   0, /*tp_compare*/
73369   #endif
73370   #if PY_MAJOR_VERSION >= 3
73371   0, /*tp_as_async*/
73372   #endif
73373   0, /*tp_repr*/
73374   0, /*tp_as_number*/
73375   0, /*tp_as_sequence*/
73376   0, /*tp_as_mapping*/
73377   0, /*tp_hash*/
73378   0, /*tp_call*/
73379   0, /*tp_str*/
73380   0, /*tp_getattro*/
73381   0, /*tp_setattro*/
73382   0, /*tp_as_buffer*/
73383   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
73384   0, /*tp_doc*/
73385   __pyx_tp_traverse_2yt_8geometry_18selection_routines_ComposeSelector, /*tp_traverse*/
73386   __pyx_tp_clear_2yt_8geometry_18selection_routines_ComposeSelector, /*tp_clear*/
73387   0, /*tp_richcompare*/
73388   0, /*tp_weaklistoffset*/
73389   0, /*tp_iter*/
73390   0, /*tp_iternext*/
73391   __pyx_methods_2yt_8geometry_18selection_routines_ComposeSelector, /*tp_methods*/
73392   0, /*tp_members*/
73393   0, /*tp_getset*/
73394   0, /*tp_base*/
73395   0, /*tp_dict*/
73396   0, /*tp_descr_get*/
73397   0, /*tp_descr_set*/
73398   0, /*tp_dictoffset*/
73399   __pyx_pw_2yt_8geometry_18selection_routines_15ComposeSelector_1__init__, /*tp_init*/
73400   0, /*tp_alloc*/
73401   __pyx_tp_new_2yt_8geometry_18selection_routines_ComposeSelector, /*tp_new*/
73402   0, /*tp_free*/
73403   0, /*tp_is_gc*/
73404   0, /*tp_bases*/
73405   0, /*tp_mro*/
73406   0, /*tp_cache*/
73407   0, /*tp_subclasses*/
73408   0, /*tp_weaklist*/
73409   0, /*tp_del*/
73410   0, /*tp_version_tag*/
73411   #if PY_VERSION_HEX >= 0x030400a1
73412   0, /*tp_finalize*/
73413   #endif
73414   #if PY_VERSION_HEX >= 0x030800b1
73415   0, /*tp_vectorcall*/
73416   #endif
73417 };
73418 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_HaloParticlesSelector __pyx_vtable_2yt_8geometry_18selection_routines_HaloParticlesSelector;
73419 
73420 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_HaloParticlesSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
73421   struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *p;
73422   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
73423   if (unlikely(!o)) return 0;
73424   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)o);
73425   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_HaloParticlesSelector;
73426   p->base_source = Py_None; Py_INCREF(Py_None);
73427   p->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
73428   p->pind = Py_None; Py_INCREF(Py_None);
73429   return o;
73430 }
73431 
73432 static void __pyx_tp_dealloc_2yt_8geometry_18selection_routines_HaloParticlesSelector(PyObject *o) {
73433   struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)o;
73434   #if CYTHON_USE_TP_FINALIZE
73435   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
73436     if (PyObject_CallFinalizerFromDealloc(o)) return;
73437   }
73438   #endif
73439   PyObject_GC_UnTrack(o);
73440   Py_CLEAR(p->base_source);
73441   Py_CLEAR(p->base_selector);
73442   Py_CLEAR(p->pind);
73443   #if CYTHON_USE_TYPE_SLOTS
73444   if (PyType_IS_GC(Py_TYPE(o)->tp_base))
73445   #endif
73446   PyObject_GC_Track(o);
73447   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject(o);
73448 }
73449 
73450 static int __pyx_tp_traverse_2yt_8geometry_18selection_routines_HaloParticlesSelector(PyObject *o, visitproc v, void *a) {
73451   int e;
73452   struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)o;
73453   e = ((likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) ? ((__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse) ? __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_2yt_8geometry_18selection_routines_HaloParticlesSelector)); if (e) return e;
73454   if (p->base_source) {
73455     e = (*v)(p->base_source, a); if (e) return e;
73456   }
73457   if (p->base_selector) {
73458     e = (*v)(((PyObject *)p->base_selector), a); if (e) return e;
73459   }
73460   if (p->pind) {
73461     e = (*v)(p->pind, a); if (e) return e;
73462   }
73463   return 0;
73464 }
73465 
73466 static int __pyx_tp_clear_2yt_8geometry_18selection_routines_HaloParticlesSelector(PyObject *o) {
73467   PyObject* tmp;
73468   struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector *)o;
73469   if (likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) { if (__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear) __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_2yt_8geometry_18selection_routines_HaloParticlesSelector);
73470   tmp = ((PyObject*)p->base_source);
73471   p->base_source = Py_None; Py_INCREF(Py_None);
73472   Py_XDECREF(tmp);
73473   tmp = ((PyObject*)p->base_selector);
73474   p->base_selector = ((struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *)Py_None); Py_INCREF(Py_None);
73475   Py_XDECREF(tmp);
73476   tmp = ((PyObject*)p->pind);
73477   p->pind = Py_None; Py_INCREF(Py_None);
73478   Py_XDECREF(tmp);
73479   return 0;
73480 }
73481 
73482 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_21HaloParticlesSelector_base_source(PyObject *o, CYTHON_UNUSED void *x) {
73483   return __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_1__get__(o);
73484 }
73485 
73486 static int __pyx_setprop_2yt_8geometry_18selection_routines_21HaloParticlesSelector_base_source(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
73487   if (v) {
73488     return __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_3__set__(o, v);
73489   }
73490   else {
73491     return __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_11base_source_5__del__(o);
73492   }
73493 }
73494 
73495 static PyObject *__pyx_getprop_2yt_8geometry_18selection_routines_21HaloParticlesSelector_halo_id(PyObject *o, CYTHON_UNUSED void *x) {
73496   return __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7halo_id_1__get__(o);
73497 }
73498 
73499 static int __pyx_setprop_2yt_8geometry_18selection_routines_21HaloParticlesSelector_halo_id(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
73500   if (v) {
73501     return __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7halo_id_3__set__(o, v);
73502   }
73503   else {
73504     PyErr_SetString(PyExc_NotImplementedError, "__del__");
73505     return -1;
73506   }
73507 }
73508 
73509 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_HaloParticlesSelector[] = {
73510   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_3_hash_vals, METH_NOARGS, 0},
73511   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_5__reduce_cython__, METH_NOARGS, 0},
73512   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_7__setstate_cython__, METH_O, 0},
73513   {0, 0, 0, 0}
73514 };
73515 
73516 static struct PyGetSetDef __pyx_getsets_2yt_8geometry_18selection_routines_HaloParticlesSelector[] = {
73517   {(char *)"base_source", __pyx_getprop_2yt_8geometry_18selection_routines_21HaloParticlesSelector_base_source, __pyx_setprop_2yt_8geometry_18selection_routines_21HaloParticlesSelector_base_source, (char *)0, 0},
73518   {(char *)"halo_id", __pyx_getprop_2yt_8geometry_18selection_routines_21HaloParticlesSelector_halo_id, __pyx_setprop_2yt_8geometry_18selection_routines_21HaloParticlesSelector_halo_id, (char *)0, 0},
73519   {0, 0, 0, 0, 0}
73520 };
73521 
73522 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_HaloParticlesSelector = {
73523   PyVarObject_HEAD_INIT(0, 0)
73524   "yt.geometry.selection_routines.HaloParticlesSelector", /*tp_name*/
73525   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_HaloParticlesSelector), /*tp_basicsize*/
73526   0, /*tp_itemsize*/
73527   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_HaloParticlesSelector, /*tp_dealloc*/
73528   0, /*tp_print*/
73529   0, /*tp_getattr*/
73530   0, /*tp_setattr*/
73531   #if PY_MAJOR_VERSION < 3
73532   0, /*tp_compare*/
73533   #endif
73534   #if PY_MAJOR_VERSION >= 3
73535   0, /*tp_as_async*/
73536   #endif
73537   0, /*tp_repr*/
73538   0, /*tp_as_number*/
73539   0, /*tp_as_sequence*/
73540   0, /*tp_as_mapping*/
73541   0, /*tp_hash*/
73542   0, /*tp_call*/
73543   0, /*tp_str*/
73544   0, /*tp_getattro*/
73545   0, /*tp_setattro*/
73546   0, /*tp_as_buffer*/
73547   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
73548   0, /*tp_doc*/
73549   __pyx_tp_traverse_2yt_8geometry_18selection_routines_HaloParticlesSelector, /*tp_traverse*/
73550   __pyx_tp_clear_2yt_8geometry_18selection_routines_HaloParticlesSelector, /*tp_clear*/
73551   0, /*tp_richcompare*/
73552   0, /*tp_weaklistoffset*/
73553   0, /*tp_iter*/
73554   0, /*tp_iternext*/
73555   __pyx_methods_2yt_8geometry_18selection_routines_HaloParticlesSelector, /*tp_methods*/
73556   0, /*tp_members*/
73557   __pyx_getsets_2yt_8geometry_18selection_routines_HaloParticlesSelector, /*tp_getset*/
73558   0, /*tp_base*/
73559   0, /*tp_dict*/
73560   0, /*tp_descr_get*/
73561   0, /*tp_descr_set*/
73562   0, /*tp_dictoffset*/
73563   __pyx_pw_2yt_8geometry_18selection_routines_21HaloParticlesSelector_1__init__, /*tp_init*/
73564   0, /*tp_alloc*/
73565   __pyx_tp_new_2yt_8geometry_18selection_routines_HaloParticlesSelector, /*tp_new*/
73566   0, /*tp_free*/
73567   0, /*tp_is_gc*/
73568   0, /*tp_bases*/
73569   0, /*tp_mro*/
73570   0, /*tp_cache*/
73571   0, /*tp_subclasses*/
73572   0, /*tp_weaklist*/
73573   0, /*tp_del*/
73574   0, /*tp_version_tag*/
73575   #if PY_VERSION_HEX >= 0x030400a1
73576   0, /*tp_finalize*/
73577   #endif
73578   #if PY_VERSION_HEX >= 0x030800b1
73579   0, /*tp_vectorcall*/
73580   #endif
73581 };
73582 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanANDSelector __pyx_vtable_2yt_8geometry_18selection_routines_BooleanANDSelector;
73583 
73584 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_BooleanANDSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
73585   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *p;
73586   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_BooleanSelector(t, a, k);
73587   if (unlikely(!o)) return 0;
73588   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector *)o);
73589   p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanANDSelector;
73590   return o;
73591 }
73592 
73593 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_BooleanANDSelector[] = {
73594   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_18BooleanANDSelector_1_hash_vals, METH_NOARGS, 0},
73595   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_18BooleanANDSelector_3__reduce_cython__, METH_NOARGS, 0},
73596   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_18BooleanANDSelector_5__setstate_cython__, METH_O, 0},
73597   {0, 0, 0, 0}
73598 };
73599 
73600 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_BooleanANDSelector = {
73601   PyVarObject_HEAD_INIT(0, 0)
73602   "yt.geometry.selection_routines.BooleanANDSelector", /*tp_name*/
73603   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanANDSelector), /*tp_basicsize*/
73604   0, /*tp_itemsize*/
73605   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_dealloc*/
73606   0, /*tp_print*/
73607   0, /*tp_getattr*/
73608   0, /*tp_setattr*/
73609   #if PY_MAJOR_VERSION < 3
73610   0, /*tp_compare*/
73611   #endif
73612   #if PY_MAJOR_VERSION >= 3
73613   0, /*tp_as_async*/
73614   #endif
73615   0, /*tp_repr*/
73616   0, /*tp_as_number*/
73617   0, /*tp_as_sequence*/
73618   0, /*tp_as_mapping*/
73619   0, /*tp_hash*/
73620   0, /*tp_call*/
73621   0, /*tp_str*/
73622   0, /*tp_getattro*/
73623   0, /*tp_setattro*/
73624   0, /*tp_as_buffer*/
73625   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
73626   0, /*tp_doc*/
73627   __pyx_tp_traverse_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_traverse*/
73628   __pyx_tp_clear_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_clear*/
73629   0, /*tp_richcompare*/
73630   0, /*tp_weaklistoffset*/
73631   0, /*tp_iter*/
73632   0, /*tp_iternext*/
73633   __pyx_methods_2yt_8geometry_18selection_routines_BooleanANDSelector, /*tp_methods*/
73634   0, /*tp_members*/
73635   0, /*tp_getset*/
73636   0, /*tp_base*/
73637   0, /*tp_dict*/
73638   0, /*tp_descr_get*/
73639   0, /*tp_descr_set*/
73640   0, /*tp_dictoffset*/
73641   #if CYTHON_COMPILING_IN_PYPY
73642   __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_1__init__, /*tp_init*/
73643   #else
73644   0, /*tp_init*/
73645   #endif
73646   0, /*tp_alloc*/
73647   __pyx_tp_new_2yt_8geometry_18selection_routines_BooleanANDSelector, /*tp_new*/
73648   0, /*tp_free*/
73649   0, /*tp_is_gc*/
73650   0, /*tp_bases*/
73651   0, /*tp_mro*/
73652   0, /*tp_cache*/
73653   0, /*tp_subclasses*/
73654   0, /*tp_weaklist*/
73655   0, /*tp_del*/
73656   0, /*tp_version_tag*/
73657   #if PY_VERSION_HEX >= 0x030400a1
73658   0, /*tp_finalize*/
73659   #endif
73660   #if PY_VERSION_HEX >= 0x030800b1
73661   0, /*tp_vectorcall*/
73662   #endif
73663 };
73664 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanORSelector __pyx_vtable_2yt_8geometry_18selection_routines_BooleanORSelector;
73665 
73666 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_BooleanORSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
73667   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *p;
73668   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_BooleanSelector(t, a, k);
73669   if (unlikely(!o)) return 0;
73670   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector *)o);
73671   p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanORSelector;
73672   return o;
73673 }
73674 
73675 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_BooleanORSelector[] = {
73676   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_17BooleanORSelector_1_hash_vals, METH_NOARGS, 0},
73677   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_17BooleanORSelector_3__reduce_cython__, METH_NOARGS, 0},
73678   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_17BooleanORSelector_5__setstate_cython__, METH_O, 0},
73679   {0, 0, 0, 0}
73680 };
73681 
73682 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_BooleanORSelector = {
73683   PyVarObject_HEAD_INIT(0, 0)
73684   "yt.geometry.selection_routines.BooleanORSelector", /*tp_name*/
73685   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanORSelector), /*tp_basicsize*/
73686   0, /*tp_itemsize*/
73687   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_dealloc*/
73688   0, /*tp_print*/
73689   0, /*tp_getattr*/
73690   0, /*tp_setattr*/
73691   #if PY_MAJOR_VERSION < 3
73692   0, /*tp_compare*/
73693   #endif
73694   #if PY_MAJOR_VERSION >= 3
73695   0, /*tp_as_async*/
73696   #endif
73697   0, /*tp_repr*/
73698   0, /*tp_as_number*/
73699   0, /*tp_as_sequence*/
73700   0, /*tp_as_mapping*/
73701   0, /*tp_hash*/
73702   0, /*tp_call*/
73703   0, /*tp_str*/
73704   0, /*tp_getattro*/
73705   0, /*tp_setattro*/
73706   0, /*tp_as_buffer*/
73707   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
73708   0, /*tp_doc*/
73709   __pyx_tp_traverse_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_traverse*/
73710   __pyx_tp_clear_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_clear*/
73711   0, /*tp_richcompare*/
73712   0, /*tp_weaklistoffset*/
73713   0, /*tp_iter*/
73714   0, /*tp_iternext*/
73715   __pyx_methods_2yt_8geometry_18selection_routines_BooleanORSelector, /*tp_methods*/
73716   0, /*tp_members*/
73717   0, /*tp_getset*/
73718   0, /*tp_base*/
73719   0, /*tp_dict*/
73720   0, /*tp_descr_get*/
73721   0, /*tp_descr_set*/
73722   0, /*tp_dictoffset*/
73723   #if CYTHON_COMPILING_IN_PYPY
73724   __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_1__init__, /*tp_init*/
73725   #else
73726   0, /*tp_init*/
73727   #endif
73728   0, /*tp_alloc*/
73729   __pyx_tp_new_2yt_8geometry_18selection_routines_BooleanORSelector, /*tp_new*/
73730   0, /*tp_free*/
73731   0, /*tp_is_gc*/
73732   0, /*tp_bases*/
73733   0, /*tp_mro*/
73734   0, /*tp_cache*/
73735   0, /*tp_subclasses*/
73736   0, /*tp_weaklist*/
73737   0, /*tp_del*/
73738   0, /*tp_version_tag*/
73739   #if PY_VERSION_HEX >= 0x030400a1
73740   0, /*tp_finalize*/
73741   #endif
73742   #if PY_VERSION_HEX >= 0x030800b1
73743   0, /*tp_vectorcall*/
73744   #endif
73745 };
73746 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanNOTSelector __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNOTSelector;
73747 
73748 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_BooleanNOTSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
73749   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *p;
73750   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_BooleanSelector(t, a, k);
73751   if (unlikely(!o)) return 0;
73752   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector *)o);
73753   p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanNOTSelector;
73754   return o;
73755 }
73756 
73757 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_BooleanNOTSelector[] = {
73758   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNOTSelector_1_hash_vals, METH_NOARGS, 0},
73759   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNOTSelector_3__reduce_cython__, METH_NOARGS, 0},
73760   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNOTSelector_5__setstate_cython__, METH_O, 0},
73761   {0, 0, 0, 0}
73762 };
73763 
73764 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_BooleanNOTSelector = {
73765   PyVarObject_HEAD_INIT(0, 0)
73766   "yt.geometry.selection_routines.BooleanNOTSelector", /*tp_name*/
73767   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNOTSelector), /*tp_basicsize*/
73768   0, /*tp_itemsize*/
73769   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_dealloc*/
73770   0, /*tp_print*/
73771   0, /*tp_getattr*/
73772   0, /*tp_setattr*/
73773   #if PY_MAJOR_VERSION < 3
73774   0, /*tp_compare*/
73775   #endif
73776   #if PY_MAJOR_VERSION >= 3
73777   0, /*tp_as_async*/
73778   #endif
73779   0, /*tp_repr*/
73780   0, /*tp_as_number*/
73781   0, /*tp_as_sequence*/
73782   0, /*tp_as_mapping*/
73783   0, /*tp_hash*/
73784   0, /*tp_call*/
73785   0, /*tp_str*/
73786   0, /*tp_getattro*/
73787   0, /*tp_setattro*/
73788   0, /*tp_as_buffer*/
73789   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
73790   0, /*tp_doc*/
73791   __pyx_tp_traverse_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_traverse*/
73792   __pyx_tp_clear_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_clear*/
73793   0, /*tp_richcompare*/
73794   0, /*tp_weaklistoffset*/
73795   0, /*tp_iter*/
73796   0, /*tp_iternext*/
73797   __pyx_methods_2yt_8geometry_18selection_routines_BooleanNOTSelector, /*tp_methods*/
73798   0, /*tp_members*/
73799   0, /*tp_getset*/
73800   0, /*tp_base*/
73801   0, /*tp_dict*/
73802   0, /*tp_descr_get*/
73803   0, /*tp_descr_set*/
73804   0, /*tp_dictoffset*/
73805   #if CYTHON_COMPILING_IN_PYPY
73806   __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_1__init__, /*tp_init*/
73807   #else
73808   0, /*tp_init*/
73809   #endif
73810   0, /*tp_alloc*/
73811   __pyx_tp_new_2yt_8geometry_18selection_routines_BooleanNOTSelector, /*tp_new*/
73812   0, /*tp_free*/
73813   0, /*tp_is_gc*/
73814   0, /*tp_bases*/
73815   0, /*tp_mro*/
73816   0, /*tp_cache*/
73817   0, /*tp_subclasses*/
73818   0, /*tp_weaklist*/
73819   0, /*tp_del*/
73820   0, /*tp_version_tag*/
73821   #if PY_VERSION_HEX >= 0x030400a1
73822   0, /*tp_finalize*/
73823   #endif
73824   #if PY_VERSION_HEX >= 0x030800b1
73825   0, /*tp_vectorcall*/
73826   #endif
73827 };
73828 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanXORSelector __pyx_vtable_2yt_8geometry_18selection_routines_BooleanXORSelector;
73829 
73830 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_BooleanXORSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
73831   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *p;
73832   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_BooleanSelector(t, a, k);
73833   if (unlikely(!o)) return 0;
73834   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector *)o);
73835   p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanXORSelector;
73836   return o;
73837 }
73838 
73839 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_BooleanXORSelector[] = {
73840   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_18BooleanXORSelector_1_hash_vals, METH_NOARGS, 0},
73841   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_18BooleanXORSelector_3__reduce_cython__, METH_NOARGS, 0},
73842   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_18BooleanXORSelector_5__setstate_cython__, METH_O, 0},
73843   {0, 0, 0, 0}
73844 };
73845 
73846 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_BooleanXORSelector = {
73847   PyVarObject_HEAD_INIT(0, 0)
73848   "yt.geometry.selection_routines.BooleanXORSelector", /*tp_name*/
73849   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanXORSelector), /*tp_basicsize*/
73850   0, /*tp_itemsize*/
73851   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_dealloc*/
73852   0, /*tp_print*/
73853   0, /*tp_getattr*/
73854   0, /*tp_setattr*/
73855   #if PY_MAJOR_VERSION < 3
73856   0, /*tp_compare*/
73857   #endif
73858   #if PY_MAJOR_VERSION >= 3
73859   0, /*tp_as_async*/
73860   #endif
73861   0, /*tp_repr*/
73862   0, /*tp_as_number*/
73863   0, /*tp_as_sequence*/
73864   0, /*tp_as_mapping*/
73865   0, /*tp_hash*/
73866   0, /*tp_call*/
73867   0, /*tp_str*/
73868   0, /*tp_getattro*/
73869   0, /*tp_setattro*/
73870   0, /*tp_as_buffer*/
73871   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
73872   0, /*tp_doc*/
73873   __pyx_tp_traverse_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_traverse*/
73874   __pyx_tp_clear_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_clear*/
73875   0, /*tp_richcompare*/
73876   0, /*tp_weaklistoffset*/
73877   0, /*tp_iter*/
73878   0, /*tp_iternext*/
73879   __pyx_methods_2yt_8geometry_18selection_routines_BooleanXORSelector, /*tp_methods*/
73880   0, /*tp_members*/
73881   0, /*tp_getset*/
73882   0, /*tp_base*/
73883   0, /*tp_dict*/
73884   0, /*tp_descr_get*/
73885   0, /*tp_descr_set*/
73886   0, /*tp_dictoffset*/
73887   #if CYTHON_COMPILING_IN_PYPY
73888   __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_1__init__, /*tp_init*/
73889   #else
73890   0, /*tp_init*/
73891   #endif
73892   0, /*tp_alloc*/
73893   __pyx_tp_new_2yt_8geometry_18selection_routines_BooleanXORSelector, /*tp_new*/
73894   0, /*tp_free*/
73895   0, /*tp_is_gc*/
73896   0, /*tp_bases*/
73897   0, /*tp_mro*/
73898   0, /*tp_cache*/
73899   0, /*tp_subclasses*/
73900   0, /*tp_weaklist*/
73901   0, /*tp_del*/
73902   0, /*tp_version_tag*/
73903   #if PY_VERSION_HEX >= 0x030400a1
73904   0, /*tp_finalize*/
73905   #endif
73906   #if PY_VERSION_HEX >= 0x030800b1
73907   0, /*tp_vectorcall*/
73908   #endif
73909 };
73910 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_BooleanNEGSelector __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNEGSelector;
73911 
73912 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_BooleanNEGSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
73913   struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *p;
73914   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_BooleanSelector(t, a, k);
73915   if (unlikely(!o)) return 0;
73916   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector *)o);
73917   p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanNEGSelector;
73918   return o;
73919 }
73920 
73921 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_BooleanNEGSelector[] = {
73922   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNEGSelector_1_hash_vals, METH_NOARGS, 0},
73923   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNEGSelector_3__reduce_cython__, METH_NOARGS, 0},
73924   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_18BooleanNEGSelector_5__setstate_cython__, METH_O, 0},
73925   {0, 0, 0, 0}
73926 };
73927 
73928 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_BooleanNEGSelector = {
73929   PyVarObject_HEAD_INIT(0, 0)
73930   "yt.geometry.selection_routines.BooleanNEGSelector", /*tp_name*/
73931   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_BooleanNEGSelector), /*tp_basicsize*/
73932   0, /*tp_itemsize*/
73933   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_dealloc*/
73934   0, /*tp_print*/
73935   0, /*tp_getattr*/
73936   0, /*tp_setattr*/
73937   #if PY_MAJOR_VERSION < 3
73938   0, /*tp_compare*/
73939   #endif
73940   #if PY_MAJOR_VERSION >= 3
73941   0, /*tp_as_async*/
73942   #endif
73943   0, /*tp_repr*/
73944   0, /*tp_as_number*/
73945   0, /*tp_as_sequence*/
73946   0, /*tp_as_mapping*/
73947   0, /*tp_hash*/
73948   0, /*tp_call*/
73949   0, /*tp_str*/
73950   0, /*tp_getattro*/
73951   0, /*tp_setattro*/
73952   0, /*tp_as_buffer*/
73953   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
73954   0, /*tp_doc*/
73955   __pyx_tp_traverse_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_traverse*/
73956   __pyx_tp_clear_2yt_8geometry_18selection_routines_BooleanSelector, /*tp_clear*/
73957   0, /*tp_richcompare*/
73958   0, /*tp_weaklistoffset*/
73959   0, /*tp_iter*/
73960   0, /*tp_iternext*/
73961   __pyx_methods_2yt_8geometry_18selection_routines_BooleanNEGSelector, /*tp_methods*/
73962   0, /*tp_members*/
73963   0, /*tp_getset*/
73964   0, /*tp_base*/
73965   0, /*tp_dict*/
73966   0, /*tp_descr_get*/
73967   0, /*tp_descr_set*/
73968   0, /*tp_dictoffset*/
73969   #if CYTHON_COMPILING_IN_PYPY
73970   __pyx_pw_2yt_8geometry_18selection_routines_15BooleanSelector_1__init__, /*tp_init*/
73971   #else
73972   0, /*tp_init*/
73973   #endif
73974   0, /*tp_alloc*/
73975   __pyx_tp_new_2yt_8geometry_18selection_routines_BooleanNEGSelector, /*tp_new*/
73976   0, /*tp_free*/
73977   0, /*tp_is_gc*/
73978   0, /*tp_bases*/
73979   0, /*tp_mro*/
73980   0, /*tp_cache*/
73981   0, /*tp_subclasses*/
73982   0, /*tp_weaklist*/
73983   0, /*tp_del*/
73984   0, /*tp_version_tag*/
73985   #if PY_VERSION_HEX >= 0x030400a1
73986   0, /*tp_finalize*/
73987   #endif
73988   #if PY_VERSION_HEX >= 0x030800b1
73989   0, /*tp_vectorcall*/
73990   #endif
73991 };
73992 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ChainedBooleanSelector __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanSelector;
73993 
73994 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_ChainedBooleanSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
73995   struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *p;
73996   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_SelectorObject(t, a, k);
73997   if (unlikely(!o)) return 0;
73998   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *)o);
73999   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanSelector;
74000   p->selectors = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
74001   return o;
74002 }
74003 
74004 static void __pyx_tp_dealloc_2yt_8geometry_18selection_routines_ChainedBooleanSelector(PyObject *o) {
74005   struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *)o;
74006   #if CYTHON_USE_TP_FINALIZE
74007   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
74008     if (PyObject_CallFinalizerFromDealloc(o)) return;
74009   }
74010   #endif
74011   PyObject_GC_UnTrack(o);
74012   Py_CLEAR(p->selectors);
74013   #if CYTHON_USE_TYPE_SLOTS
74014   if (PyType_IS_GC(Py_TYPE(o)->tp_base))
74015   #endif
74016   PyObject_GC_Track(o);
74017   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_SelectorObject(o);
74018 }
74019 
74020 static int __pyx_tp_traverse_2yt_8geometry_18selection_routines_ChainedBooleanSelector(PyObject *o, visitproc v, void *a) {
74021   int e;
74022   struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *)o;
74023   e = ((likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) ? ((__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse) ? __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_2yt_8geometry_18selection_routines_ChainedBooleanSelector)); if (e) return e;
74024   if (p->selectors) {
74025     e = (*v)(((PyObject *)p->selectors), a); if (e) return e;
74026   }
74027   return 0;
74028 }
74029 
74030 static int __pyx_tp_clear_2yt_8geometry_18selection_routines_ChainedBooleanSelector(PyObject *o) {
74031   PyObject* tmp;
74032   struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *p = (struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector *)o;
74033   if (likely(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject)) { if (__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear) __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_2yt_8geometry_18selection_routines_ChainedBooleanSelector);
74034   tmp = ((PyObject*)p->selectors);
74035   p->selectors = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
74036   Py_XDECREF(tmp);
74037   return 0;
74038 }
74039 
74040 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_ChainedBooleanSelector[] = {
74041   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_3__reduce_cython__, METH_NOARGS, 0},
74042   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_5__setstate_cython__, METH_O, 0},
74043   {0, 0, 0, 0}
74044 };
74045 
74046 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanSelector = {
74047   PyVarObject_HEAD_INIT(0, 0)
74048   "yt.geometry.selection_routines.ChainedBooleanSelector", /*tp_name*/
74049   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanSelector), /*tp_basicsize*/
74050   0, /*tp_itemsize*/
74051   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_ChainedBooleanSelector, /*tp_dealloc*/
74052   0, /*tp_print*/
74053   0, /*tp_getattr*/
74054   0, /*tp_setattr*/
74055   #if PY_MAJOR_VERSION < 3
74056   0, /*tp_compare*/
74057   #endif
74058   #if PY_MAJOR_VERSION >= 3
74059   0, /*tp_as_async*/
74060   #endif
74061   0, /*tp_repr*/
74062   0, /*tp_as_number*/
74063   0, /*tp_as_sequence*/
74064   0, /*tp_as_mapping*/
74065   0, /*tp_hash*/
74066   0, /*tp_call*/
74067   0, /*tp_str*/
74068   0, /*tp_getattro*/
74069   0, /*tp_setattro*/
74070   0, /*tp_as_buffer*/
74071   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
74072   0, /*tp_doc*/
74073   __pyx_tp_traverse_2yt_8geometry_18selection_routines_ChainedBooleanSelector, /*tp_traverse*/
74074   __pyx_tp_clear_2yt_8geometry_18selection_routines_ChainedBooleanSelector, /*tp_clear*/
74075   0, /*tp_richcompare*/
74076   0, /*tp_weaklistoffset*/
74077   0, /*tp_iter*/
74078   0, /*tp_iternext*/
74079   __pyx_methods_2yt_8geometry_18selection_routines_ChainedBooleanSelector, /*tp_methods*/
74080   0, /*tp_members*/
74081   0, /*tp_getset*/
74082   0, /*tp_base*/
74083   0, /*tp_dict*/
74084   0, /*tp_descr_get*/
74085   0, /*tp_descr_set*/
74086   0, /*tp_dictoffset*/
74087   __pyx_pw_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_1__init__, /*tp_init*/
74088   0, /*tp_alloc*/
74089   __pyx_tp_new_2yt_8geometry_18selection_routines_ChainedBooleanSelector, /*tp_new*/
74090   0, /*tp_free*/
74091   0, /*tp_is_gc*/
74092   0, /*tp_bases*/
74093   0, /*tp_mro*/
74094   0, /*tp_cache*/
74095   0, /*tp_subclasses*/
74096   0, /*tp_weaklist*/
74097   0, /*tp_del*/
74098   0, /*tp_version_tag*/
74099   #if PY_VERSION_HEX >= 0x030400a1
74100   0, /*tp_finalize*/
74101   #endif
74102   #if PY_VERSION_HEX >= 0x030800b1
74103   0, /*tp_vectorcall*/
74104   #endif
74105 };
74106 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector;
74107 
74108 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
74109   struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *p;
74110   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_ChainedBooleanSelector(t, a, k);
74111   if (unlikely(!o)) return 0;
74112   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector *)o);
74113   p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector;
74114   return o;
74115 }
74116 
74117 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector[] = {
74118   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_1_hash_vals, METH_NOARGS, 0},
74119   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_3__reduce_cython__, METH_NOARGS, 0},
74120   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_5__setstate_cython__, METH_O, 0},
74121   {0, 0, 0, 0}
74122 };
74123 
74124 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector = {
74125   PyVarObject_HEAD_INIT(0, 0)
74126   "yt.geometry.selection_routines.ChainedBooleanANDSelector", /*tp_name*/
74127   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector), /*tp_basicsize*/
74128   0, /*tp_itemsize*/
74129   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_ChainedBooleanSelector, /*tp_dealloc*/
74130   0, /*tp_print*/
74131   0, /*tp_getattr*/
74132   0, /*tp_setattr*/
74133   #if PY_MAJOR_VERSION < 3
74134   0, /*tp_compare*/
74135   #endif
74136   #if PY_MAJOR_VERSION >= 3
74137   0, /*tp_as_async*/
74138   #endif
74139   0, /*tp_repr*/
74140   0, /*tp_as_number*/
74141   0, /*tp_as_sequence*/
74142   0, /*tp_as_mapping*/
74143   0, /*tp_hash*/
74144   0, /*tp_call*/
74145   0, /*tp_str*/
74146   0, /*tp_getattro*/
74147   0, /*tp_setattro*/
74148   0, /*tp_as_buffer*/
74149   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
74150   0, /*tp_doc*/
74151   __pyx_tp_traverse_2yt_8geometry_18selection_routines_ChainedBooleanSelector, /*tp_traverse*/
74152   __pyx_tp_clear_2yt_8geometry_18selection_routines_ChainedBooleanSelector, /*tp_clear*/
74153   0, /*tp_richcompare*/
74154   0, /*tp_weaklistoffset*/
74155   0, /*tp_iter*/
74156   0, /*tp_iternext*/
74157   __pyx_methods_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector, /*tp_methods*/
74158   0, /*tp_members*/
74159   0, /*tp_getset*/
74160   0, /*tp_base*/
74161   0, /*tp_dict*/
74162   0, /*tp_descr_get*/
74163   0, /*tp_descr_set*/
74164   0, /*tp_dictoffset*/
74165   #if CYTHON_COMPILING_IN_PYPY
74166   __pyx_pw_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_1__init__, /*tp_init*/
74167   #else
74168   0, /*tp_init*/
74169   #endif
74170   0, /*tp_alloc*/
74171   __pyx_tp_new_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector, /*tp_new*/
74172   0, /*tp_free*/
74173   0, /*tp_is_gc*/
74174   0, /*tp_bases*/
74175   0, /*tp_mro*/
74176   0, /*tp_cache*/
74177   0, /*tp_subclasses*/
74178   0, /*tp_weaklist*/
74179   0, /*tp_del*/
74180   0, /*tp_version_tag*/
74181   #if PY_VERSION_HEX >= 0x030400a1
74182   0, /*tp_finalize*/
74183   #endif
74184   #if PY_VERSION_HEX >= 0x030800b1
74185   0, /*tp_vectorcall*/
74186   #endif
74187 };
74188 static struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_ChainedBooleanORSelector __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanORSelector;
74189 
74190 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines_ChainedBooleanORSelector(PyTypeObject *t, PyObject *a, PyObject *k) {
74191   struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *p;
74192   PyObject *o = __pyx_tp_new_2yt_8geometry_18selection_routines_ChainedBooleanSelector(t, a, k);
74193   if (unlikely(!o)) return 0;
74194   p = ((struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector *)o);
74195   p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_2yt_8geometry_18selection_routines_SelectorObject*)__pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanORSelector;
74196   return o;
74197 }
74198 
74199 static PyMethodDef __pyx_methods_2yt_8geometry_18selection_routines_ChainedBooleanORSelector[] = {
74200   {"_hash_vals", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_1_hash_vals, METH_NOARGS, 0},
74201   {"__reduce_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_3__reduce_cython__, METH_NOARGS, 0},
74202   {"__setstate_cython__", (PyCFunction)__pyx_pw_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_5__setstate_cython__, METH_O, 0},
74203   {0, 0, 0, 0}
74204 };
74205 
74206 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanORSelector = {
74207   PyVarObject_HEAD_INIT(0, 0)
74208   "yt.geometry.selection_routines.ChainedBooleanORSelector", /*tp_name*/
74209   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines_ChainedBooleanORSelector), /*tp_basicsize*/
74210   0, /*tp_itemsize*/
74211   __pyx_tp_dealloc_2yt_8geometry_18selection_routines_ChainedBooleanSelector, /*tp_dealloc*/
74212   0, /*tp_print*/
74213   0, /*tp_getattr*/
74214   0, /*tp_setattr*/
74215   #if PY_MAJOR_VERSION < 3
74216   0, /*tp_compare*/
74217   #endif
74218   #if PY_MAJOR_VERSION >= 3
74219   0, /*tp_as_async*/
74220   #endif
74221   0, /*tp_repr*/
74222   0, /*tp_as_number*/
74223   0, /*tp_as_sequence*/
74224   0, /*tp_as_mapping*/
74225   0, /*tp_hash*/
74226   0, /*tp_call*/
74227   0, /*tp_str*/
74228   0, /*tp_getattro*/
74229   0, /*tp_setattro*/
74230   0, /*tp_as_buffer*/
74231   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
74232   0, /*tp_doc*/
74233   __pyx_tp_traverse_2yt_8geometry_18selection_routines_ChainedBooleanSelector, /*tp_traverse*/
74234   __pyx_tp_clear_2yt_8geometry_18selection_routines_ChainedBooleanSelector, /*tp_clear*/
74235   0, /*tp_richcompare*/
74236   0, /*tp_weaklistoffset*/
74237   0, /*tp_iter*/
74238   0, /*tp_iternext*/
74239   __pyx_methods_2yt_8geometry_18selection_routines_ChainedBooleanORSelector, /*tp_methods*/
74240   0, /*tp_members*/
74241   0, /*tp_getset*/
74242   0, /*tp_base*/
74243   0, /*tp_dict*/
74244   0, /*tp_descr_get*/
74245   0, /*tp_descr_set*/
74246   0, /*tp_dictoffset*/
74247   #if CYTHON_COMPILING_IN_PYPY
74248   __pyx_pw_2yt_8geometry_18selection_routines_22ChainedBooleanSelector_1__init__, /*tp_init*/
74249   #else
74250   0, /*tp_init*/
74251   #endif
74252   0, /*tp_alloc*/
74253   __pyx_tp_new_2yt_8geometry_18selection_routines_ChainedBooleanORSelector, /*tp_new*/
74254   0, /*tp_free*/
74255   0, /*tp_is_gc*/
74256   0, /*tp_bases*/
74257   0, /*tp_mro*/
74258   0, /*tp_cache*/
74259   0, /*tp_subclasses*/
74260   0, /*tp_weaklist*/
74261   0, /*tp_del*/
74262   0, /*tp_version_tag*/
74263   #if PY_VERSION_HEX >= 0x030400a1
74264   0, /*tp_finalize*/
74265   #endif
74266   #if PY_VERSION_HEX >= 0x030800b1
74267   0, /*tp_vectorcall*/
74268   #endif
74269 };
74270 
74271 static struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *__pyx_freelist_2yt_8geometry_18selection_routines___pyx_scope_struct____init__[8];
74272 static int __pyx_freecount_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ = 0;
74273 
74274 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines___pyx_scope_struct____init__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
74275   PyObject *o;
74276   if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__)))) {
74277     o = (PyObject*)__pyx_freelist_2yt_8geometry_18selection_routines___pyx_scope_struct____init__[--__pyx_freecount_2yt_8geometry_18selection_routines___pyx_scope_struct____init__];
74278     memset(o, 0, sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__));
74279     (void) PyObject_INIT(o, t);
74280     PyObject_GC_Track(o);
74281   } else {
74282     o = (*t->tp_alloc)(t, 0);
74283     if (unlikely(!o)) return 0;
74284   }
74285   return o;
74286 }
74287 
74288 static void __pyx_tp_dealloc_2yt_8geometry_18selection_routines___pyx_scope_struct____init__(PyObject *o) {
74289   struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *p = (struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *)o;
74290   PyObject_GC_UnTrack(o);
74291   Py_CLEAR(p->__pyx_v_positions);
74292   if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__)))) {
74293     __pyx_freelist_2yt_8geometry_18selection_routines___pyx_scope_struct____init__[__pyx_freecount_2yt_8geometry_18selection_routines___pyx_scope_struct____init__++] = ((struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *)o);
74294   } else {
74295     (*Py_TYPE(o)->tp_free)(o);
74296   }
74297 }
74298 
74299 static int __pyx_tp_traverse_2yt_8geometry_18selection_routines___pyx_scope_struct____init__(PyObject *o, visitproc v, void *a) {
74300   int e;
74301   struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *p = (struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *)o;
74302   if (p->__pyx_v_positions) {
74303     e = (*v)(p->__pyx_v_positions, a); if (e) return e;
74304   }
74305   return 0;
74306 }
74307 
74308 static int __pyx_tp_clear_2yt_8geometry_18selection_routines___pyx_scope_struct____init__(PyObject *o) {
74309   PyObject* tmp;
74310   struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *p = (struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ *)o;
74311   tmp = ((PyObject*)p->__pyx_v_positions);
74312   p->__pyx_v_positions = Py_None; Py_INCREF(Py_None);
74313   Py_XDECREF(tmp);
74314   return 0;
74315 }
74316 
74317 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ = {
74318   PyVarObject_HEAD_INIT(0, 0)
74319   "yt.geometry.selection_routines.__pyx_scope_struct____init__", /*tp_name*/
74320   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct____init__), /*tp_basicsize*/
74321   0, /*tp_itemsize*/
74322   __pyx_tp_dealloc_2yt_8geometry_18selection_routines___pyx_scope_struct____init__, /*tp_dealloc*/
74323   0, /*tp_print*/
74324   0, /*tp_getattr*/
74325   0, /*tp_setattr*/
74326   #if PY_MAJOR_VERSION < 3
74327   0, /*tp_compare*/
74328   #endif
74329   #if PY_MAJOR_VERSION >= 3
74330   0, /*tp_as_async*/
74331   #endif
74332   0, /*tp_repr*/
74333   0, /*tp_as_number*/
74334   0, /*tp_as_sequence*/
74335   0, /*tp_as_mapping*/
74336   0, /*tp_hash*/
74337   0, /*tp_call*/
74338   0, /*tp_str*/
74339   0, /*tp_getattro*/
74340   0, /*tp_setattro*/
74341   0, /*tp_as_buffer*/
74342   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
74343   0, /*tp_doc*/
74344   __pyx_tp_traverse_2yt_8geometry_18selection_routines___pyx_scope_struct____init__, /*tp_traverse*/
74345   __pyx_tp_clear_2yt_8geometry_18selection_routines___pyx_scope_struct____init__, /*tp_clear*/
74346   0, /*tp_richcompare*/
74347   0, /*tp_weaklistoffset*/
74348   0, /*tp_iter*/
74349   0, /*tp_iternext*/
74350   0, /*tp_methods*/
74351   0, /*tp_members*/
74352   0, /*tp_getset*/
74353   0, /*tp_base*/
74354   0, /*tp_dict*/
74355   0, /*tp_descr_get*/
74356   0, /*tp_descr_set*/
74357   0, /*tp_dictoffset*/
74358   0, /*tp_init*/
74359   0, /*tp_alloc*/
74360   __pyx_tp_new_2yt_8geometry_18selection_routines___pyx_scope_struct____init__, /*tp_new*/
74361   0, /*tp_free*/
74362   0, /*tp_is_gc*/
74363   0, /*tp_bases*/
74364   0, /*tp_mro*/
74365   0, /*tp_cache*/
74366   0, /*tp_subclasses*/
74367   0, /*tp_weaklist*/
74368   0, /*tp_del*/
74369   0, /*tp_version_tag*/
74370   #if PY_VERSION_HEX >= 0x030400a1
74371   0, /*tp_finalize*/
74372   #endif
74373   #if PY_VERSION_HEX >= 0x030800b1
74374   0, /*tp_vectorcall*/
74375   #endif
74376 };
74377 
74378 static struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr *__pyx_freelist_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr[8];
74379 static int __pyx_freecount_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr = 0;
74380 
74381 static PyObject *__pyx_tp_new_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
74382   PyObject *o;
74383   if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr)))) {
74384     o = (PyObject*)__pyx_freelist_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr[--__pyx_freecount_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr];
74385     memset(o, 0, sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr));
74386     (void) PyObject_INIT(o, t);
74387     PyObject_GC_Track(o);
74388   } else {
74389     o = (*t->tp_alloc)(t, 0);
74390     if (unlikely(!o)) return 0;
74391   }
74392   return o;
74393 }
74394 
74395 static void __pyx_tp_dealloc_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr(PyObject *o) {
74396   struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr *p = (struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr *)o;
74397   PyObject_GC_UnTrack(o);
74398   Py_CLEAR(p->__pyx_outer_scope);
74399   Py_CLEAR(p->__pyx_v_position);
74400   if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr)))) {
74401     __pyx_freelist_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr[__pyx_freecount_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr++] = ((struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr *)o);
74402   } else {
74403     (*Py_TYPE(o)->tp_free)(o);
74404   }
74405 }
74406 
74407 static int __pyx_tp_traverse_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr(PyObject *o, visitproc v, void *a) {
74408   int e;
74409   struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr *p = (struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr *)o;
74410   if (p->__pyx_outer_scope) {
74411     e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
74412   }
74413   if (p->__pyx_v_position) {
74414     e = (*v)(p->__pyx_v_position, a); if (e) return e;
74415   }
74416   return 0;
74417 }
74418 
74419 static PyTypeObject __pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr = {
74420   PyVarObject_HEAD_INIT(0, 0)
74421   "yt.geometry.selection_routines.__pyx_scope_struct_1_genexpr", /*tp_name*/
74422   sizeof(struct __pyx_obj_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr), /*tp_basicsize*/
74423   0, /*tp_itemsize*/
74424   __pyx_tp_dealloc_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr, /*tp_dealloc*/
74425   0, /*tp_print*/
74426   0, /*tp_getattr*/
74427   0, /*tp_setattr*/
74428   #if PY_MAJOR_VERSION < 3
74429   0, /*tp_compare*/
74430   #endif
74431   #if PY_MAJOR_VERSION >= 3
74432   0, /*tp_as_async*/
74433   #endif
74434   0, /*tp_repr*/
74435   0, /*tp_as_number*/
74436   0, /*tp_as_sequence*/
74437   0, /*tp_as_mapping*/
74438   0, /*tp_hash*/
74439   0, /*tp_call*/
74440   0, /*tp_str*/
74441   0, /*tp_getattro*/
74442   0, /*tp_setattro*/
74443   0, /*tp_as_buffer*/
74444   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
74445   0, /*tp_doc*/
74446   __pyx_tp_traverse_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr, /*tp_traverse*/
74447   0, /*tp_clear*/
74448   0, /*tp_richcompare*/
74449   0, /*tp_weaklistoffset*/
74450   0, /*tp_iter*/
74451   0, /*tp_iternext*/
74452   0, /*tp_methods*/
74453   0, /*tp_members*/
74454   0, /*tp_getset*/
74455   0, /*tp_base*/
74456   0, /*tp_dict*/
74457   0, /*tp_descr_get*/
74458   0, /*tp_descr_set*/
74459   0, /*tp_dictoffset*/
74460   0, /*tp_init*/
74461   0, /*tp_alloc*/
74462   __pyx_tp_new_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr, /*tp_new*/
74463   0, /*tp_free*/
74464   0, /*tp_is_gc*/
74465   0, /*tp_bases*/
74466   0, /*tp_mro*/
74467   0, /*tp_cache*/
74468   0, /*tp_subclasses*/
74469   0, /*tp_weaklist*/
74470   0, /*tp_del*/
74471   0, /*tp_version_tag*/
74472   #if PY_VERSION_HEX >= 0x030400a1
74473   0, /*tp_finalize*/
74474   #endif
74475   #if PY_VERSION_HEX >= 0x030800b1
74476   0, /*tp_vectorcall*/
74477   #endif
74478 };
74479 static struct __pyx_vtabstruct_array __pyx_vtable_array;
74480 
74481 static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) {
74482   struct __pyx_array_obj *p;
74483   PyObject *o;
74484   if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
74485     o = (*t->tp_alloc)(t, 0);
74486   } else {
74487     o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
74488   }
74489   if (unlikely(!o)) return 0;
74490   p = ((struct __pyx_array_obj *)o);
74491   p->__pyx_vtab = __pyx_vtabptr_array;
74492   p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None);
74493   p->_format = ((PyObject*)Py_None); Py_INCREF(Py_None);
74494   if (unlikely(__pyx_array___cinit__(o, a, k) < 0)) goto bad;
74495   return o;
74496   bad:
74497   Py_DECREF(o); o = 0;
74498   return NULL;
74499 }
74500 
74501 static void __pyx_tp_dealloc_array(PyObject *o) {
74502   struct __pyx_array_obj *p = (struct __pyx_array_obj *)o;
74503   #if CYTHON_USE_TP_FINALIZE
74504   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
74505     if (PyObject_CallFinalizerFromDealloc(o)) return;
74506   }
74507   #endif
74508   {
74509     PyObject *etype, *eval, *etb;
74510     PyErr_Fetch(&etype, &eval, &etb);
74511     ++Py_REFCNT(o);
74512     __pyx_array___dealloc__(o);
74513     --Py_REFCNT(o);
74514     PyErr_Restore(etype, eval, etb);
74515   }
74516   Py_CLEAR(p->mode);
74517   Py_CLEAR(p->_format);
74518   (*Py_TYPE(o)->tp_free)(o);
74519 }
74520 static PyObject *__pyx_sq_item_array(PyObject *o, Py_ssize_t i) {
74521   PyObject *r;
74522   PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
74523   r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
74524   Py_DECREF(x);
74525   return r;
74526 }
74527 
74528 static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) {
74529   if (v) {
74530     return __pyx_array___setitem__(o, i, v);
74531   }
74532   else {
74533     PyErr_Format(PyExc_NotImplementedError,
74534       "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
74535     return -1;
74536   }
74537 }
74538 
74539 static PyObject *__pyx_tp_getattro_array(PyObject *o, PyObject *n) {
74540   PyObject *v = __Pyx_PyObject_GenericGetAttr(o, n);
74541   if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) {
74542     PyErr_Clear();
74543     v = __pyx_array___getattr__(o, n);
74544   }
74545   return v;
74546 }
74547 
74548 static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED void *x) {
74549   return __pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(o);
74550 }
74551 
74552 static PyMethodDef __pyx_methods_array[] = {
74553   {"__getattr__", (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, 0},
74554   {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_array_1__reduce_cython__, METH_NOARGS, 0},
74555   {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_array_3__setstate_cython__, METH_O, 0},
74556   {0, 0, 0, 0}
74557 };
74558 
74559 static struct PyGetSetDef __pyx_getsets_array[] = {
74560   {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, (char *)0, 0},
74561   {0, 0, 0, 0, 0}
74562 };
74563 
74564 static PySequenceMethods __pyx_tp_as_sequence_array = {
74565   __pyx_array___len__, /*sq_length*/
74566   0, /*sq_concat*/
74567   0, /*sq_repeat*/
74568   __pyx_sq_item_array, /*sq_item*/
74569   0, /*sq_slice*/
74570   0, /*sq_ass_item*/
74571   0, /*sq_ass_slice*/
74572   0, /*sq_contains*/
74573   0, /*sq_inplace_concat*/
74574   0, /*sq_inplace_repeat*/
74575 };
74576 
74577 static PyMappingMethods __pyx_tp_as_mapping_array = {
74578   __pyx_array___len__, /*mp_length*/
74579   __pyx_array___getitem__, /*mp_subscript*/
74580   __pyx_mp_ass_subscript_array, /*mp_ass_subscript*/
74581 };
74582 
74583 static PyBufferProcs __pyx_tp_as_buffer_array = {
74584   #if PY_MAJOR_VERSION < 3
74585   0, /*bf_getreadbuffer*/
74586   #endif
74587   #if PY_MAJOR_VERSION < 3
74588   0, /*bf_getwritebuffer*/
74589   #endif
74590   #if PY_MAJOR_VERSION < 3
74591   0, /*bf_getsegcount*/
74592   #endif
74593   #if PY_MAJOR_VERSION < 3
74594   0, /*bf_getcharbuffer*/
74595   #endif
74596   __pyx_array_getbuffer, /*bf_getbuffer*/
74597   0, /*bf_releasebuffer*/
74598 };
74599 
74600 static PyTypeObject __pyx_type___pyx_array = {
74601   PyVarObject_HEAD_INIT(0, 0)
74602   "yt.geometry.selection_routines.array", /*tp_name*/
74603   sizeof(struct __pyx_array_obj), /*tp_basicsize*/
74604   0, /*tp_itemsize*/
74605   __pyx_tp_dealloc_array, /*tp_dealloc*/
74606   0, /*tp_print*/
74607   0, /*tp_getattr*/
74608   0, /*tp_setattr*/
74609   #if PY_MAJOR_VERSION < 3
74610   0, /*tp_compare*/
74611   #endif
74612   #if PY_MAJOR_VERSION >= 3
74613   0, /*tp_as_async*/
74614   #endif
74615   0, /*tp_repr*/
74616   0, /*tp_as_number*/
74617   &__pyx_tp_as_sequence_array, /*tp_as_sequence*/
74618   &__pyx_tp_as_mapping_array, /*tp_as_mapping*/
74619   0, /*tp_hash*/
74620   0, /*tp_call*/
74621   0, /*tp_str*/
74622   __pyx_tp_getattro_array, /*tp_getattro*/
74623   0, /*tp_setattro*/
74624   &__pyx_tp_as_buffer_array, /*tp_as_buffer*/
74625   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
74626   0, /*tp_doc*/
74627   0, /*tp_traverse*/
74628   0, /*tp_clear*/
74629   0, /*tp_richcompare*/
74630   0, /*tp_weaklistoffset*/
74631   0, /*tp_iter*/
74632   0, /*tp_iternext*/
74633   __pyx_methods_array, /*tp_methods*/
74634   0, /*tp_members*/
74635   __pyx_getsets_array, /*tp_getset*/
74636   0, /*tp_base*/
74637   0, /*tp_dict*/
74638   0, /*tp_descr_get*/
74639   0, /*tp_descr_set*/
74640   0, /*tp_dictoffset*/
74641   0, /*tp_init*/
74642   0, /*tp_alloc*/
74643   __pyx_tp_new_array, /*tp_new*/
74644   0, /*tp_free*/
74645   0, /*tp_is_gc*/
74646   0, /*tp_bases*/
74647   0, /*tp_mro*/
74648   0, /*tp_cache*/
74649   0, /*tp_subclasses*/
74650   0, /*tp_weaklist*/
74651   0, /*tp_del*/
74652   0, /*tp_version_tag*/
74653   #if PY_VERSION_HEX >= 0x030400a1
74654   0, /*tp_finalize*/
74655   #endif
74656   #if PY_VERSION_HEX >= 0x030800b1
74657   0, /*tp_vectorcall*/
74658   #endif
74659 };
74660 
74661 static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
74662   struct __pyx_MemviewEnum_obj *p;
74663   PyObject *o;
74664   if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
74665     o = (*t->tp_alloc)(t, 0);
74666   } else {
74667     o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
74668   }
74669   if (unlikely(!o)) return 0;
74670   p = ((struct __pyx_MemviewEnum_obj *)o);
74671   p->name = Py_None; Py_INCREF(Py_None);
74672   return o;
74673 }
74674 
74675 static void __pyx_tp_dealloc_Enum(PyObject *o) {
74676   struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o;
74677   #if CYTHON_USE_TP_FINALIZE
74678   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
74679     if (PyObject_CallFinalizerFromDealloc(o)) return;
74680   }
74681   #endif
74682   PyObject_GC_UnTrack(o);
74683   Py_CLEAR(p->name);
74684   (*Py_TYPE(o)->tp_free)(o);
74685 }
74686 
74687 static int __pyx_tp_traverse_Enum(PyObject *o, visitproc v, void *a) {
74688   int e;
74689   struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o;
74690   if (p->name) {
74691     e = (*v)(p->name, a); if (e) return e;
74692   }
74693   return 0;
74694 }
74695 
74696 static int __pyx_tp_clear_Enum(PyObject *o) {
74697   PyObject* tmp;
74698   struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o;
74699   tmp = ((PyObject*)p->name);
74700   p->name = Py_None; Py_INCREF(Py_None);
74701   Py_XDECREF(tmp);
74702   return 0;
74703 }
74704 
74705 static PyMethodDef __pyx_methods_Enum[] = {
74706   {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, METH_NOARGS, 0},
74707   {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, METH_O, 0},
74708   {0, 0, 0, 0}
74709 };
74710 
74711 static PyTypeObject __pyx_type___pyx_MemviewEnum = {
74712   PyVarObject_HEAD_INIT(0, 0)
74713   "yt.geometry.selection_routines.Enum", /*tp_name*/
74714   sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/
74715   0, /*tp_itemsize*/
74716   __pyx_tp_dealloc_Enum, /*tp_dealloc*/
74717   0, /*tp_print*/
74718   0, /*tp_getattr*/
74719   0, /*tp_setattr*/
74720   #if PY_MAJOR_VERSION < 3
74721   0, /*tp_compare*/
74722   #endif
74723   #if PY_MAJOR_VERSION >= 3
74724   0, /*tp_as_async*/
74725   #endif
74726   __pyx_MemviewEnum___repr__, /*tp_repr*/
74727   0, /*tp_as_number*/
74728   0, /*tp_as_sequence*/
74729   0, /*tp_as_mapping*/
74730   0, /*tp_hash*/
74731   0, /*tp_call*/
74732   0, /*tp_str*/
74733   0, /*tp_getattro*/
74734   0, /*tp_setattro*/
74735   0, /*tp_as_buffer*/
74736   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
74737   0, /*tp_doc*/
74738   __pyx_tp_traverse_Enum, /*tp_traverse*/
74739   __pyx_tp_clear_Enum, /*tp_clear*/
74740   0, /*tp_richcompare*/
74741   0, /*tp_weaklistoffset*/
74742   0, /*tp_iter*/
74743   0, /*tp_iternext*/
74744   __pyx_methods_Enum, /*tp_methods*/
74745   0, /*tp_members*/
74746   0, /*tp_getset*/
74747   0, /*tp_base*/
74748   0, /*tp_dict*/
74749   0, /*tp_descr_get*/
74750   0, /*tp_descr_set*/
74751   0, /*tp_dictoffset*/
74752   __pyx_MemviewEnum___init__, /*tp_init*/
74753   0, /*tp_alloc*/
74754   __pyx_tp_new_Enum, /*tp_new*/
74755   0, /*tp_free*/
74756   0, /*tp_is_gc*/
74757   0, /*tp_bases*/
74758   0, /*tp_mro*/
74759   0, /*tp_cache*/
74760   0, /*tp_subclasses*/
74761   0, /*tp_weaklist*/
74762   0, /*tp_del*/
74763   0, /*tp_version_tag*/
74764   #if PY_VERSION_HEX >= 0x030400a1
74765   0, /*tp_finalize*/
74766   #endif
74767   #if PY_VERSION_HEX >= 0x030800b1
74768   0, /*tp_vectorcall*/
74769   #endif
74770 };
74771 static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview;
74772 
74773 static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) {
74774   struct __pyx_memoryview_obj *p;
74775   PyObject *o;
74776   if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
74777     o = (*t->tp_alloc)(t, 0);
74778   } else {
74779     o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
74780   }
74781   if (unlikely(!o)) return 0;
74782   p = ((struct __pyx_memoryview_obj *)o);
74783   p->__pyx_vtab = __pyx_vtabptr_memoryview;
74784   p->obj = Py_None; Py_INCREF(Py_None);
74785   p->_size = Py_None; Py_INCREF(Py_None);
74786   p->_array_interface = Py_None; Py_INCREF(Py_None);
74787   p->view.obj = NULL;
74788   if (unlikely(__pyx_memoryview___cinit__(o, a, k) < 0)) goto bad;
74789   return o;
74790   bad:
74791   Py_DECREF(o); o = 0;
74792   return NULL;
74793 }
74794 
74795 static void __pyx_tp_dealloc_memoryview(PyObject *o) {
74796   struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o;
74797   #if CYTHON_USE_TP_FINALIZE
74798   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
74799     if (PyObject_CallFinalizerFromDealloc(o)) return;
74800   }
74801   #endif
74802   PyObject_GC_UnTrack(o);
74803   {
74804     PyObject *etype, *eval, *etb;
74805     PyErr_Fetch(&etype, &eval, &etb);
74806     ++Py_REFCNT(o);
74807     __pyx_memoryview___dealloc__(o);
74808     --Py_REFCNT(o);
74809     PyErr_Restore(etype, eval, etb);
74810   }
74811   Py_CLEAR(p->obj);
74812   Py_CLEAR(p->_size);
74813   Py_CLEAR(p->_array_interface);
74814   (*Py_TYPE(o)->tp_free)(o);
74815 }
74816 
74817 static int __pyx_tp_traverse_memoryview(PyObject *o, visitproc v, void *a) {
74818   int e;
74819   struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o;
74820   if (p->obj) {
74821     e = (*v)(p->obj, a); if (e) return e;
74822   }
74823   if (p->_size) {
74824     e = (*v)(p->_size, a); if (e) return e;
74825   }
74826   if (p->_array_interface) {
74827     e = (*v)(p->_array_interface, a); if (e) return e;
74828   }
74829   if (p->view.obj) {
74830     e = (*v)(p->view.obj, a); if (e) return e;
74831   }
74832   return 0;
74833 }
74834 
74835 static int __pyx_tp_clear_memoryview(PyObject *o) {
74836   PyObject* tmp;
74837   struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o;
74838   tmp = ((PyObject*)p->obj);
74839   p->obj = Py_None; Py_INCREF(Py_None);
74840   Py_XDECREF(tmp);
74841   tmp = ((PyObject*)p->_size);
74842   p->_size = Py_None; Py_INCREF(Py_None);
74843   Py_XDECREF(tmp);
74844   tmp = ((PyObject*)p->_array_interface);
74845   p->_array_interface = Py_None; Py_INCREF(Py_None);
74846   Py_XDECREF(tmp);
74847   Py_CLEAR(p->view.obj);
74848   return 0;
74849 }
74850 static PyObject *__pyx_sq_item_memoryview(PyObject *o, Py_ssize_t i) {
74851   PyObject *r;
74852   PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
74853   r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
74854   Py_DECREF(x);
74855   return r;
74856 }
74857 
74858 static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject *v) {
74859   if (v) {
74860     return __pyx_memoryview___setitem__(o, i, v);
74861   }
74862   else {
74863     PyErr_Format(PyExc_NotImplementedError,
74864       "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
74865     return -1;
74866   }
74867 }
74868 
74869 static PyObject *__pyx_getprop___pyx_memoryview_T(PyObject *o, CYTHON_UNUSED void *x) {
74870   return __pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(o);
74871 }
74872 
74873 static PyObject *__pyx_getprop___pyx_memoryview_base(PyObject *o, CYTHON_UNUSED void *x) {
74874   return __pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(o);
74875 }
74876 
74877 static PyObject *__pyx_getprop___pyx_memoryview_shape(PyObject *o, CYTHON_UNUSED void *x) {
74878   return __pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(o);
74879 }
74880 
74881 static PyObject *__pyx_getprop___pyx_memoryview_strides(PyObject *o, CYTHON_UNUSED void *x) {
74882   return __pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(o);
74883 }
74884 
74885 static PyObject *__pyx_getprop___pyx_memoryview_suboffsets(PyObject *o, CYTHON_UNUSED void *x) {
74886   return __pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(o);
74887 }
74888 
74889 static PyObject *__pyx_getprop___pyx_memoryview_ndim(PyObject *o, CYTHON_UNUSED void *x) {
74890   return __pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(o);
74891 }
74892 
74893 static PyObject *__pyx_getprop___pyx_memoryview_itemsize(PyObject *o, CYTHON_UNUSED void *x) {
74894   return __pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(o);
74895 }
74896 
74897 static PyObject *__pyx_getprop___pyx_memoryview_nbytes(PyObject *o, CYTHON_UNUSED void *x) {
74898   return __pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(o);
74899 }
74900 
74901 static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED void *x) {
74902   return __pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(o);
74903 }
74904 
74905 static PyMethodDef __pyx_methods_memoryview[] = {
74906   {"is_c_contig", (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, 0},
74907   {"is_f_contig", (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, 0},
74908   {"copy", (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, 0},
74909   {"copy_fortran", (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, 0},
74910   {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_1__reduce_cython__, METH_NOARGS, 0},
74911   {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_3__setstate_cython__, METH_O, 0},
74912   {0, 0, 0, 0}
74913 };
74914 
74915 static struct PyGetSetDef __pyx_getsets_memoryview[] = {
74916   {(char *)"T", __pyx_getprop___pyx_memoryview_T, 0, (char *)0, 0},
74917   {(char *)"base", __pyx_getprop___pyx_memoryview_base, 0, (char *)0, 0},
74918   {(char *)"shape", __pyx_getprop___pyx_memoryview_shape, 0, (char *)0, 0},
74919   {(char *)"strides", __pyx_getprop___pyx_memoryview_strides, 0, (char *)0, 0},
74920   {(char *)"suboffsets", __pyx_getprop___pyx_memoryview_suboffsets, 0, (char *)0, 0},
74921   {(char *)"ndim", __pyx_getprop___pyx_memoryview_ndim, 0, (char *)0, 0},
74922   {(char *)"itemsize", __pyx_getprop___pyx_memoryview_itemsize, 0, (char *)0, 0},
74923   {(char *)"nbytes", __pyx_getprop___pyx_memoryview_nbytes, 0, (char *)0, 0},
74924   {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, (char *)0, 0},
74925   {0, 0, 0, 0, 0}
74926 };
74927 
74928 static PySequenceMethods __pyx_tp_as_sequence_memoryview = {
74929   __pyx_memoryview___len__, /*sq_length*/
74930   0, /*sq_concat*/
74931   0, /*sq_repeat*/
74932   __pyx_sq_item_memoryview, /*sq_item*/
74933   0, /*sq_slice*/
74934   0, /*sq_ass_item*/
74935   0, /*sq_ass_slice*/
74936   0, /*sq_contains*/
74937   0, /*sq_inplace_concat*/
74938   0, /*sq_inplace_repeat*/
74939 };
74940 
74941 static PyMappingMethods __pyx_tp_as_mapping_memoryview = {
74942   __pyx_memoryview___len__, /*mp_length*/
74943   __pyx_memoryview___getitem__, /*mp_subscript*/
74944   __pyx_mp_ass_subscript_memoryview, /*mp_ass_subscript*/
74945 };
74946 
74947 static PyBufferProcs __pyx_tp_as_buffer_memoryview = {
74948   #if PY_MAJOR_VERSION < 3
74949   0, /*bf_getreadbuffer*/
74950   #endif
74951   #if PY_MAJOR_VERSION < 3
74952   0, /*bf_getwritebuffer*/
74953   #endif
74954   #if PY_MAJOR_VERSION < 3
74955   0, /*bf_getsegcount*/
74956   #endif
74957   #if PY_MAJOR_VERSION < 3
74958   0, /*bf_getcharbuffer*/
74959   #endif
74960   __pyx_memoryview_getbuffer, /*bf_getbuffer*/
74961   0, /*bf_releasebuffer*/
74962 };
74963 
74964 static PyTypeObject __pyx_type___pyx_memoryview = {
74965   PyVarObject_HEAD_INIT(0, 0)
74966   "yt.geometry.selection_routines.memoryview", /*tp_name*/
74967   sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/
74968   0, /*tp_itemsize*/
74969   __pyx_tp_dealloc_memoryview, /*tp_dealloc*/
74970   0, /*tp_print*/
74971   0, /*tp_getattr*/
74972   0, /*tp_setattr*/
74973   #if PY_MAJOR_VERSION < 3
74974   0, /*tp_compare*/
74975   #endif
74976   #if PY_MAJOR_VERSION >= 3
74977   0, /*tp_as_async*/
74978   #endif
74979   __pyx_memoryview___repr__, /*tp_repr*/
74980   0, /*tp_as_number*/
74981   &__pyx_tp_as_sequence_memoryview, /*tp_as_sequence*/
74982   &__pyx_tp_as_mapping_memoryview, /*tp_as_mapping*/
74983   0, /*tp_hash*/
74984   0, /*tp_call*/
74985   __pyx_memoryview___str__, /*tp_str*/
74986   0, /*tp_getattro*/
74987   0, /*tp_setattro*/
74988   &__pyx_tp_as_buffer_memoryview, /*tp_as_buffer*/
74989   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
74990   0, /*tp_doc*/
74991   __pyx_tp_traverse_memoryview, /*tp_traverse*/
74992   __pyx_tp_clear_memoryview, /*tp_clear*/
74993   0, /*tp_richcompare*/
74994   0, /*tp_weaklistoffset*/
74995   0, /*tp_iter*/
74996   0, /*tp_iternext*/
74997   __pyx_methods_memoryview, /*tp_methods*/
74998   0, /*tp_members*/
74999   __pyx_getsets_memoryview, /*tp_getset*/
75000   0, /*tp_base*/
75001   0, /*tp_dict*/
75002   0, /*tp_descr_get*/
75003   0, /*tp_descr_set*/
75004   0, /*tp_dictoffset*/
75005   0, /*tp_init*/
75006   0, /*tp_alloc*/
75007   __pyx_tp_new_memoryview, /*tp_new*/
75008   0, /*tp_free*/
75009   0, /*tp_is_gc*/
75010   0, /*tp_bases*/
75011   0, /*tp_mro*/
75012   0, /*tp_cache*/
75013   0, /*tp_subclasses*/
75014   0, /*tp_weaklist*/
75015   0, /*tp_del*/
75016   0, /*tp_version_tag*/
75017   #if PY_VERSION_HEX >= 0x030400a1
75018   0, /*tp_finalize*/
75019   #endif
75020   #if PY_VERSION_HEX >= 0x030800b1
75021   0, /*tp_vectorcall*/
75022   #endif
75023 };
75024 static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice;
75025 
75026 static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) {
75027   struct __pyx_memoryviewslice_obj *p;
75028   PyObject *o = __pyx_tp_new_memoryview(t, a, k);
75029   if (unlikely(!o)) return 0;
75030   p = ((struct __pyx_memoryviewslice_obj *)o);
75031   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice;
75032   p->from_object = Py_None; Py_INCREF(Py_None);
75033   p->from_slice.memview = NULL;
75034   return o;
75035 }
75036 
75037 static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) {
75038   struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o;
75039   #if CYTHON_USE_TP_FINALIZE
75040   if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
75041     if (PyObject_CallFinalizerFromDealloc(o)) return;
75042   }
75043   #endif
75044   PyObject_GC_UnTrack(o);
75045   {
75046     PyObject *etype, *eval, *etb;
75047     PyErr_Fetch(&etype, &eval, &etb);
75048     ++Py_REFCNT(o);
75049     __pyx_memoryviewslice___dealloc__(o);
75050     --Py_REFCNT(o);
75051     PyErr_Restore(etype, eval, etb);
75052   }
75053   Py_CLEAR(p->from_object);
75054   PyObject_GC_Track(o);
75055   __pyx_tp_dealloc_memoryview(o);
75056 }
75057 
75058 static int __pyx_tp_traverse__memoryviewslice(PyObject *o, visitproc v, void *a) {
75059   int e;
75060   struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o;
75061   e = __pyx_tp_traverse_memoryview(o, v, a); if (e) return e;
75062   if (p->from_object) {
75063     e = (*v)(p->from_object, a); if (e) return e;
75064   }
75065   return 0;
75066 }
75067 
75068 static int __pyx_tp_clear__memoryviewslice(PyObject *o) {
75069   PyObject* tmp;
75070   struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o;
75071   __pyx_tp_clear_memoryview(o);
75072   tmp = ((PyObject*)p->from_object);
75073   p->from_object = Py_None; Py_INCREF(Py_None);
75074   Py_XDECREF(tmp);
75075   __PYX_XDEC_MEMVIEW(&p->from_slice, 1);
75076   return 0;
75077 }
75078 
75079 static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) {
75080   return __pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(o);
75081 }
75082 
75083 static PyMethodDef __pyx_methods__memoryviewslice[] = {
75084   {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, METH_NOARGS, 0},
75085   {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, METH_O, 0},
75086   {0, 0, 0, 0}
75087 };
75088 
75089 static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = {
75090   {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, (char *)0, 0},
75091   {0, 0, 0, 0, 0}
75092 };
75093 
75094 static PyTypeObject __pyx_type___pyx_memoryviewslice = {
75095   PyVarObject_HEAD_INIT(0, 0)
75096   "yt.geometry.selection_routines._memoryviewslice", /*tp_name*/
75097   sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/
75098   0, /*tp_itemsize*/
75099   __pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/
75100   0, /*tp_print*/
75101   0, /*tp_getattr*/
75102   0, /*tp_setattr*/
75103   #if PY_MAJOR_VERSION < 3
75104   0, /*tp_compare*/
75105   #endif
75106   #if PY_MAJOR_VERSION >= 3
75107   0, /*tp_as_async*/
75108   #endif
75109   #if CYTHON_COMPILING_IN_PYPY
75110   __pyx_memoryview___repr__, /*tp_repr*/
75111   #else
75112   0, /*tp_repr*/
75113   #endif
75114   0, /*tp_as_number*/
75115   0, /*tp_as_sequence*/
75116   0, /*tp_as_mapping*/
75117   0, /*tp_hash*/
75118   0, /*tp_call*/
75119   #if CYTHON_COMPILING_IN_PYPY
75120   __pyx_memoryview___str__, /*tp_str*/
75121   #else
75122   0, /*tp_str*/
75123   #endif
75124   0, /*tp_getattro*/
75125   0, /*tp_setattro*/
75126   0, /*tp_as_buffer*/
75127   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
75128   "Internal class for passing memoryview slices to Python", /*tp_doc*/
75129   __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/
75130   __pyx_tp_clear__memoryviewslice, /*tp_clear*/
75131   0, /*tp_richcompare*/
75132   0, /*tp_weaklistoffset*/
75133   0, /*tp_iter*/
75134   0, /*tp_iternext*/
75135   __pyx_methods__memoryviewslice, /*tp_methods*/
75136   0, /*tp_members*/
75137   __pyx_getsets__memoryviewslice, /*tp_getset*/
75138   0, /*tp_base*/
75139   0, /*tp_dict*/
75140   0, /*tp_descr_get*/
75141   0, /*tp_descr_set*/
75142   0, /*tp_dictoffset*/
75143   0, /*tp_init*/
75144   0, /*tp_alloc*/
75145   __pyx_tp_new__memoryviewslice, /*tp_new*/
75146   0, /*tp_free*/
75147   0, /*tp_is_gc*/
75148   0, /*tp_bases*/
75149   0, /*tp_mro*/
75150   0, /*tp_cache*/
75151   0, /*tp_subclasses*/
75152   0, /*tp_weaklist*/
75153   0, /*tp_del*/
75154   0, /*tp_version_tag*/
75155   #if PY_VERSION_HEX >= 0x030400a1
75156   0, /*tp_finalize*/
75157   #endif
75158   #if PY_VERSION_HEX >= 0x030800b1
75159   0, /*tp_vectorcall*/
75160   #endif
75161 };
75162 
75163 static PyMethodDef __pyx_methods[] = {
75164   {0, 0, 0, 0}
75165 };
75166 
75167 #if PY_MAJOR_VERSION >= 3
75168 #if CYTHON_PEP489_MULTI_PHASE_INIT
75169 static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
75170 static int __pyx_pymod_exec_selection_routines(PyObject* module); /*proto*/
75171 static PyModuleDef_Slot __pyx_moduledef_slots[] = {
75172   {Py_mod_create, (void*)__pyx_pymod_create},
75173   {Py_mod_exec, (void*)__pyx_pymod_exec_selection_routines},
75174   {0, NULL}
75175 };
75176 #endif
75177 
75178 static struct PyModuleDef __pyx_moduledef = {
75179     PyModuleDef_HEAD_INIT,
75180     "selection_routines",
75181     __pyx_k_Geometry_selection_routines, /* m_doc */
75182   #if CYTHON_PEP489_MULTI_PHASE_INIT
75183     0, /* m_size */
75184   #else
75185     -1, /* m_size */
75186   #endif
75187     __pyx_methods /* m_methods */,
75188   #if CYTHON_PEP489_MULTI_PHASE_INIT
75189     __pyx_moduledef_slots, /* m_slots */
75190   #else
75191     NULL, /* m_reload */
75192   #endif
75193     NULL, /* m_traverse */
75194     NULL, /* m_clear */
75195     NULL /* m_free */
75196 };
75197 #endif
75198 #ifndef CYTHON_SMALL_CODE
75199 #if defined(__clang__)
75200     #define CYTHON_SMALL_CODE
75201 #elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
75202     #define CYTHON_SMALL_CODE __attribute__((cold))
75203 #else
75204     #define CYTHON_SMALL_CODE
75205 #endif
75206 #endif
75207 
75208 static __Pyx_StringTabEntry __pyx_string_tab[] = {
75209   {&__pyx_n_s_A, __pyx_k_A, sizeof(__pyx_k_A), 0, 0, 1, 1},
75210   {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 1},
75211   {&__pyx_n_s_ActiveDimensions, __pyx_k_ActiveDimensions, sizeof(__pyx_k_ActiveDimensions), 0, 0, 1, 1},
75212   {&__pyx_n_s_AlwaysSelector, __pyx_k_AlwaysSelector, sizeof(__pyx_k_AlwaysSelector), 0, 0, 1, 1},
75213   {&__pyx_n_s_B, __pyx_k_B, sizeof(__pyx_k_B), 0, 0, 1, 1},
75214   {&__pyx_n_s_BooleanANDSelector, __pyx_k_BooleanANDSelector, sizeof(__pyx_k_BooleanANDSelector), 0, 0, 1, 1},
75215   {&__pyx_n_s_BooleanNEGSelector, __pyx_k_BooleanNEGSelector, sizeof(__pyx_k_BooleanNEGSelector), 0, 0, 1, 1},
75216   {&__pyx_n_s_BooleanNOTSelector, __pyx_k_BooleanNOTSelector, sizeof(__pyx_k_BooleanNOTSelector), 0, 0, 1, 1},
75217   {&__pyx_n_s_BooleanORSelector, __pyx_k_BooleanORSelector, sizeof(__pyx_k_BooleanORSelector), 0, 0, 1, 1},
75218   {&__pyx_n_s_BooleanSelector, __pyx_k_BooleanSelector, sizeof(__pyx_k_BooleanSelector), 0, 0, 1, 1},
75219   {&__pyx_n_s_BooleanXORSelector, __pyx_k_BooleanXORSelector, sizeof(__pyx_k_BooleanXORSelector), 0, 0, 1, 1},
75220   {&__pyx_kp_s_Buffer_view_does_not_expose_stri, __pyx_k_Buffer_view_does_not_expose_stri, sizeof(__pyx_k_Buffer_view_does_not_expose_stri), 0, 0, 1, 0},
75221   {&__pyx_n_s_C, __pyx_k_C, sizeof(__pyx_k_C), 0, 0, 1, 1},
75222   {&__pyx_kp_s_Can_only_create_a_buffer_that_is, __pyx_k_Can_only_create_a_buffer_that_is, sizeof(__pyx_k_Can_only_create_a_buffer_that_is), 0, 0, 1, 0},
75223   {&__pyx_kp_s_Cannot_assign_to_read_only_memor, __pyx_k_Cannot_assign_to_read_only_memor, sizeof(__pyx_k_Cannot_assign_to_read_only_memor), 0, 0, 1, 0},
75224   {&__pyx_kp_s_Cannot_create_writable_memory_vi, __pyx_k_Cannot_create_writable_memory_vi, sizeof(__pyx_k_Cannot_create_writable_memory_vi), 0, 0, 1, 0},
75225   {&__pyx_kp_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0},
75226   {&__pyx_n_s_ChainedBooleanANDSelector, __pyx_k_ChainedBooleanANDSelector, sizeof(__pyx_k_ChainedBooleanANDSelector), 0, 0, 1, 1},
75227   {&__pyx_n_s_ChainedBooleanORSelector, __pyx_k_ChainedBooleanORSelector, sizeof(__pyx_k_ChainedBooleanORSelector), 0, 0, 1, 1},
75228   {&__pyx_n_s_ChainedBooleanSelector, __pyx_k_ChainedBooleanSelector, sizeof(__pyx_k_ChainedBooleanSelector), 0, 0, 1, 1},
75229   {&__pyx_n_s_ComposeSelector, __pyx_k_ComposeSelector, sizeof(__pyx_k_ComposeSelector), 0, 0, 1, 1},
75230   {&__pyx_n_s_CutRegionSelector, __pyx_k_CutRegionSelector, sizeof(__pyx_k_CutRegionSelector), 0, 0, 1, 1},
75231   {&__pyx_n_s_CuttingPlaneSelector, __pyx_k_CuttingPlaneSelector, sizeof(__pyx_k_CuttingPlaneSelector), 0, 0, 1, 1},
75232   {&__pyx_n_s_DataCollectionSelector, __pyx_k_DataCollectionSelector, sizeof(__pyx_k_DataCollectionSelector), 0, 0, 1, 1},
75233   {&__pyx_n_s_DiskSelector, __pyx_k_DiskSelector, sizeof(__pyx_k_DiskSelector), 0, 0, 1, 1},
75234   {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1},
75235   {&__pyx_n_s_EllipsoidSelector, __pyx_k_EllipsoidSelector, sizeof(__pyx_k_EllipsoidSelector), 0, 0, 1, 1},
75236   {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0},
75237   {&__pyx_kp_s_Expected_at_least_d_argument_s_g, __pyx_k_Expected_at_least_d_argument_s_g, sizeof(__pyx_k_Expected_at_least_d_argument_s_g), 0, 0, 1, 0},
75238   {&__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},
75239   {&__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},
75240   {&__pyx_kp_s_Function_call_with_ambiguous_arg, __pyx_k_Function_call_with_ambiguous_arg, sizeof(__pyx_k_Function_call_with_ambiguous_arg), 0, 0, 1, 0},
75241   {&__pyx_n_s_GridSelector, __pyx_k_GridSelector, sizeof(__pyx_k_GridSelector), 0, 0, 1, 1},
75242   {&__pyx_n_s_HaloParticlesSelector, __pyx_k_HaloParticlesSelector, sizeof(__pyx_k_HaloParticlesSelector), 0, 0, 1, 1},
75243   {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1},
75244   {&__pyx_kp_s_Incompatible_checksums_s_vs_0xb0, __pyx_k_Incompatible_checksums_s_vs_0xb0, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xb0), 0, 0, 1, 0},
75245   {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1},
75246   {&__pyx_n_s_IndexedOctreeSubsetSelector, __pyx_k_IndexedOctreeSubsetSelector, sizeof(__pyx_k_IndexedOctreeSubsetSelector), 0, 0, 1, 1},
75247   {&__pyx_kp_s_Indirect_dimensions_not_supporte, __pyx_k_Indirect_dimensions_not_supporte, sizeof(__pyx_k_Indirect_dimensions_not_supporte), 0, 0, 1, 0},
75248   {&__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0},
75249   {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0},
75250   {&__pyx_n_s_LeftEdge, __pyx_k_LeftEdge, sizeof(__pyx_k_LeftEdge), 0, 0, 1, 1},
75251   {&__pyx_n_s_Level, __pyx_k_Level, sizeof(__pyx_k_Level), 0, 0, 1, 1},
75252   {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1},
75253   {&__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_k_MemoryView_of_r_at_0x_x, sizeof(__pyx_k_MemoryView_of_r_at_0x_x), 0, 0, 1, 0},
75254   {&__pyx_kp_s_MemoryView_of_r_object, __pyx_k_MemoryView_of_r_object, sizeof(__pyx_k_MemoryView_of_r_object), 0, 0, 1, 0},
75255   {&__pyx_kp_s_No_matching_signature_found, __pyx_k_No_matching_signature_found, sizeof(__pyx_k_No_matching_signature_found), 0, 0, 1, 0},
75256   {&__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},
75257   {&__pyx_n_s_NotImplementedError, __pyx_k_NotImplementedError, sizeof(__pyx_k_NotImplementedError), 0, 0, 1, 1},
75258   {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1},
75259   {&__pyx_n_s_OctreeSubsetSelector, __pyx_k_OctreeSubsetSelector, sizeof(__pyx_k_OctreeSubsetSelector), 0, 0, 1, 1},
75260   {&__pyx_n_s_OrthoRaySelector, __pyx_k_OrthoRaySelector, sizeof(__pyx_k_OrthoRaySelector), 0, 0, 1, 1},
75261   {&__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_k_Out_of_bounds_on_buffer_access_a, sizeof(__pyx_k_Out_of_bounds_on_buffer_access_a), 0, 0, 1, 0},
75262   {&__pyx_n_s_OverflowError, __pyx_k_OverflowError, sizeof(__pyx_k_OverflowError), 0, 0, 1, 1},
75263   {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1},
75264   {&__pyx_n_s_PointSelector, __pyx_k_PointSelector, sizeof(__pyx_k_PointSelector), 0, 0, 1, 1},
75265   {&__pyx_n_s_RaySelector, __pyx_k_RaySelector, sizeof(__pyx_k_RaySelector), 0, 0, 1, 1},
75266   {&__pyx_n_s_RegionSelector, __pyx_k_RegionSelector, sizeof(__pyx_k_RegionSelector), 0, 0, 1, 1},
75267   {&__pyx_kp_s_Region_right_edge_s_left_edge_wi, __pyx_k_Region_right_edge_s_left_edge_wi, sizeof(__pyx_k_Region_right_edge_s_left_edge_wi), 0, 0, 1, 0},
75268   {&__pyx_n_s_RightEdge, __pyx_k_RightEdge, sizeof(__pyx_k_RightEdge), 0, 0, 1, 1},
75269   {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1},
75270   {&__pyx_n_s_SelectorObject, __pyx_k_SelectorObject, sizeof(__pyx_k_SelectorObject), 0, 0, 1, 1},
75271   {&__pyx_n_s_SelectorObject_count_points, __pyx_k_SelectorObject_count_points, sizeof(__pyx_k_SelectorObject_count_points), 0, 0, 1, 1},
75272   {&__pyx_n_s_SelectorObject_select_points, __pyx_k_SelectorObject_select_points, sizeof(__pyx_k_SelectorObject_select_points), 0, 0, 1, 1},
75273   {&__pyx_n_s_SliceSelector, __pyx_k_SliceSelector, sizeof(__pyx_k_SliceSelector), 0, 0, 1, 1},
75274   {&__pyx_n_s_SphereSelector, __pyx_k_SphereSelector, sizeof(__pyx_k_SphereSelector), 0, 0, 1, 1},
75275   {&__pyx_n_s_T, __pyx_k_T, sizeof(__pyx_k_T), 0, 0, 1, 1},
75276   {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1},
75277   {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0},
75278   {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
75279   {&__pyx_n_s_View_MemoryView, __pyx_k_View_MemoryView, sizeof(__pyx_k_View_MemoryView), 0, 0, 1, 1},
75280   {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0},
75281   {&__pyx_kp_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 0},
75282   {&__pyx_n_s_all, __pyx_k_all, sizeof(__pyx_k_all), 0, 0, 1, 1},
75283   {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1},
75284   {&__pyx_n_s_always, __pyx_k_always, sizeof(__pyx_k_always), 0, 0, 1, 1},
75285   {&__pyx_n_s_always_selector, __pyx_k_always_selector, sizeof(__pyx_k_always_selector), 0, 0, 1, 1},
75286   {&__pyx_n_s_and, __pyx_k_and, sizeof(__pyx_k_and), 0, 0, 1, 1},
75287   {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1},
75288   {&__pyx_n_s_array, __pyx_k_array, sizeof(__pyx_k_array), 0, 0, 1, 1},
75289   {&__pyx_n_s_ascii, __pyx_k_ascii, sizeof(__pyx_k_ascii), 0, 0, 1, 1},
75290   {&__pyx_n_s_astype, __pyx_k_astype, sizeof(__pyx_k_astype), 0, 0, 1, 1},
75291   {&__pyx_n_s_atleast_1d, __pyx_k_atleast_1d, sizeof(__pyx_k_atleast_1d), 0, 0, 1, 1},
75292   {&__pyx_n_s_ax, __pyx_k_ax, sizeof(__pyx_k_ax), 0, 0, 1, 1},
75293   {&__pyx_n_s_axis, __pyx_k_axis, sizeof(__pyx_k_axis), 0, 0, 1, 1},
75294   {&__pyx_n_s_axis_name, __pyx_k_axis_name, sizeof(__pyx_k_axis_name), 0, 0, 1, 1},
75295   {&__pyx_n_s_ay, __pyx_k_ay, sizeof(__pyx_k_ay), 0, 0, 1, 1},
75296   {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1},
75297   {&__pyx_n_s_base_hash, __pyx_k_base_hash, sizeof(__pyx_k_base_hash), 0, 0, 1, 1},
75298   {&__pyx_n_s_base_selector, __pyx_k_base_selector, sizeof(__pyx_k_base_selector), 0, 0, 1, 1},
75299   {&__pyx_n_s_base_source, __pyx_k_base_source, sizeof(__pyx_k_base_source), 0, 0, 1, 1},
75300   {&__pyx_n_s_bool, __pyx_k_bool, sizeof(__pyx_k_bool), 0, 0, 1, 1},
75301   {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1},
75302   {&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1},
75303   {&__pyx_n_s_center, __pyx_k_center, sizeof(__pyx_k_center), 0, 0, 1, 1},
75304   {&__pyx_kp_s_center_0, __pyx_k_center_0, sizeof(__pyx_k_center_0), 0, 0, 1, 0},
75305   {&__pyx_kp_s_center_1, __pyx_k_center_1, sizeof(__pyx_k_center_1), 0, 0, 1, 0},
75306   {&__pyx_kp_s_center_2, __pyx_k_center_2, sizeof(__pyx_k_center_2), 0, 0, 1, 0},
75307   {&__pyx_n_s_chained_and, __pyx_k_chained_and, sizeof(__pyx_k_chained_and), 0, 0, 1, 1},
75308   {&__pyx_n_s_chained_or, __pyx_k_chained_or, sizeof(__pyx_k_chained_or), 0, 0, 1, 1},
75309   {&__pyx_n_s_check_box, __pyx_k_check_box, sizeof(__pyx_k_check_box), 0, 0, 1, 1},
75310   {&__pyx_n_s_check_period, __pyx_k_check_period, sizeof(__pyx_k_check_period), 0, 0, 1, 1},
75311   {&__pyx_n_s_child_mask, __pyx_k_child_mask, sizeof(__pyx_k_child_mask), 0, 0, 1, 1},
75312   {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1},
75313   {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1},
75314   {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1},
75315   {&__pyx_n_s_code_length, __pyx_k_code_length, sizeof(__pyx_k_code_length), 0, 0, 1, 1},
75316   {&__pyx_n_s_compose_selector, __pyx_k_compose_selector, sizeof(__pyx_k_compose_selector), 0, 0, 1, 1},
75317   {&__pyx_kp_s_conditional_s, __pyx_k_conditional_s, sizeof(__pyx_k_conditional_s), 0, 0, 1, 0},
75318   {&__pyx_n_s_conditionals, __pyx_k_conditionals, sizeof(__pyx_k_conditionals), 0, 0, 1, 1},
75319   {&__pyx_n_s_connectivity_coords, __pyx_k_connectivity_coords, sizeof(__pyx_k_connectivity_coords), 0, 0, 1, 1},
75320   {&__pyx_n_s_connectivity_indices, __pyx_k_connectivity_indices, sizeof(__pyx_k_connectivity_indices), 0, 0, 1, 1},
75321   {&__pyx_n_s_connectivity_length, __pyx_k_connectivity_length, sizeof(__pyx_k_connectivity_length), 0, 0, 1, 1},
75322   {&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0},
75323   {&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0},
75324   {&__pyx_n_s_convert_mask_to_indices, __pyx_k_convert_mask_to_indices, sizeof(__pyx_k_convert_mask_to_indices), 0, 0, 1, 1},
75325   {&__pyx_n_s_convert_to_units, __pyx_k_convert_to_units, sizeof(__pyx_k_convert_to_units), 0, 0, 1, 1},
75326   {&__pyx_n_s_coord, __pyx_k_coord, sizeof(__pyx_k_coord), 0, 0, 1, 1},
75327   {&__pyx_n_s_coordinates, __pyx_k_coordinates, sizeof(__pyx_k_coordinates), 0, 0, 1, 1},
75328   {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1},
75329   {&__pyx_n_s_count_points, __pyx_k_count_points, sizeof(__pyx_k_count_points), 0, 0, 1, 1},
75330   {&__pyx_n_s_cpos, __pyx_k_cpos, sizeof(__pyx_k_cpos), 0, 0, 1, 1},
75331   {&__pyx_n_s_cut_region_selector, __pyx_k_cut_region_selector, sizeof(__pyx_k_cut_region_selector), 0, 0, 1, 1},
75332   {&__pyx_n_s_cutting_selector, __pyx_k_cutting_selector, sizeof(__pyx_k_cutting_selector), 0, 0, 1, 1},
75333   {&__pyx_n_s_cx, __pyx_k_cx, sizeof(__pyx_k_cx), 0, 0, 1, 1},
75334   {&__pyx_n_s_cy, __pyx_k_cy, sizeof(__pyx_k_cy), 0, 0, 1, 1},
75335   {&__pyx_n_s_cz, __pyx_k_cz, sizeof(__pyx_k_cz), 0, 0, 1, 1},
75336   {&__pyx_n_s_d, __pyx_k_d, sizeof(__pyx_k_d), 0, 0, 1, 1},
75337   {&__pyx_n_s_d_2, __pyx_k_d_2, sizeof(__pyx_k_d_2), 0, 0, 1, 1},
75338   {&__pyx_n_s_data_collection_selector, __pyx_k_data_collection_selector, sizeof(__pyx_k_data_collection_selector), 0, 0, 1, 1},
75339   {&__pyx_n_s_data_objects, __pyx_k_data_objects, sizeof(__pyx_k_data_objects), 0, 0, 1, 1},
75340   {&__pyx_n_s_dds, __pyx_k_dds, sizeof(__pyx_k_dds), 0, 0, 1, 1},
75341   {&__pyx_n_s_defaults, __pyx_k_defaults, sizeof(__pyx_k_defaults), 0, 0, 1, 1},
75342   {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1},
75343   {&__pyx_n_s_dimensionality, __pyx_k_dimensionality, sizeof(__pyx_k_dimensionality), 0, 0, 1, 1},
75344   {&__pyx_n_s_disk_selector, __pyx_k_disk_selector, sizeof(__pyx_k_disk_selector), 0, 0, 1, 1},
75345   {&__pyx_n_s_dobj, __pyx_k_dobj, sizeof(__pyx_k_dobj), 0, 0, 1, 1},
75346   {&__pyx_n_s_dobj1, __pyx_k_dobj1, sizeof(__pyx_k_dobj1), 0, 0, 1, 1},
75347   {&__pyx_n_s_dobj2, __pyx_k_dobj2, sizeof(__pyx_k_dobj2), 0, 0, 1, 1},
75348   {&__pyx_n_s_domain_center, __pyx_k_domain_center, sizeof(__pyx_k_domain_center), 0, 0, 1, 1},
75349   {&__pyx_n_s_domain_id, __pyx_k_domain_id, sizeof(__pyx_k_domain_id), 0, 0, 1, 1},
75350   {&__pyx_n_s_domain_left_edge, __pyx_k_domain_left_edge, sizeof(__pyx_k_domain_left_edge), 0, 0, 1, 1},
75351   {&__pyx_n_s_domain_override, __pyx_k_domain_override, sizeof(__pyx_k_domain_override), 0, 0, 1, 1},
75352   {&__pyx_n_s_domain_right_edge, __pyx_k_domain_right_edge, sizeof(__pyx_k_domain_right_edge), 0, 0, 1, 1},
75353   {&__pyx_n_s_domain_width, __pyx_k_domain_width, sizeof(__pyx_k_domain_width), 0, 0, 1, 1},
75354   {&__pyx_kp_s_domain_width_0, __pyx_k_domain_width_0, sizeof(__pyx_k_domain_width_0), 0, 0, 1, 0},
75355   {&__pyx_kp_s_domain_width_1, __pyx_k_domain_width_1, sizeof(__pyx_k_domain_width_1), 0, 0, 1, 0},
75356   {&__pyx_kp_s_domain_width_2, __pyx_k_domain_width_2, sizeof(__pyx_k_domain_width_2), 0, 0, 1, 0},
75357   {&__pyx_n_s_double, __pyx_k_double, sizeof(__pyx_k_double), 0, 0, 1, 1},
75358   {&__pyx_n_s_ds, __pyx_k_ds, sizeof(__pyx_k_ds), 0, 0, 1, 1},
75359   {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1},
75360   {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1},
75361   {&__pyx_n_s_dx, __pyx_k_dx, sizeof(__pyx_k_dx), 0, 0, 1, 1},
75362   {&__pyx_n_s_dy, __pyx_k_dy, sizeof(__pyx_k_dy), 0, 0, 1, 1},
75363   {&__pyx_n_s_dz, __pyx_k_dz, sizeof(__pyx_k_dz), 0, 0, 1, 1},
75364   {&__pyx_n_s_e0, __pyx_k_e0, sizeof(__pyx_k_e0), 0, 0, 1, 1},
75365   {&__pyx_n_s_e1, __pyx_k_e1, sizeof(__pyx_k_e1), 0, 0, 1, 1},
75366   {&__pyx_n_s_e2, __pyx_k_e2, sizeof(__pyx_k_e2), 0, 0, 1, 1},
75367   {&__pyx_n_s_ellipsoid_selector, __pyx_k_ellipsoid_selector, sizeof(__pyx_k_ellipsoid_selector), 0, 0, 1, 1},
75368   {&__pyx_n_s_empty, __pyx_k_empty, sizeof(__pyx_k_empty), 0, 0, 1, 1},
75369   {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1},
75370   {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1},
75371   {&__pyx_n_s_end_point, __pyx_k_end_point, sizeof(__pyx_k_end_point), 0, 0, 1, 1},
75372   {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1},
75373   {&__pyx_n_s_eps, __pyx_k_eps, sizeof(__pyx_k_eps), 0, 0, 1, 1},
75374   {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1},
75375   {&__pyx_n_s_extend, __pyx_k_extend, sizeof(__pyx_k_extend), 0, 0, 1, 1},
75376   {&__pyx_n_s_file, __pyx_k_file, sizeof(__pyx_k_file), 0, 0, 1, 1},
75377   {&__pyx_n_s_filter_bbox, __pyx_k_filter_bbox, sizeof(__pyx_k_filter_bbox), 0, 0, 1, 1},
75378   {&__pyx_n_s_finfo, __pyx_k_finfo, sizeof(__pyx_k_finfo), 0, 0, 1, 1},
75379   {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1},
75380   {&__pyx_n_s_float, __pyx_k_float, sizeof(__pyx_k_float), 0, 0, 1, 1},
75381   {&__pyx_n_s_float32, __pyx_k_float32, sizeof(__pyx_k_float32), 0, 0, 1, 1},
75382   {&__pyx_n_s_float64, __pyx_k_float64, sizeof(__pyx_k_float64), 0, 0, 1, 1},
75383   {&__pyx_n_s_fmod, __pyx_k_fmod, sizeof(__pyx_k_fmod), 0, 0, 1, 1},
75384   {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1},
75385   {&__pyx_n_s_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 0, 1, 1},
75386   {&__pyx_n_u_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 1, 0, 1},
75387   {&__pyx_n_s_genexpr, __pyx_k_genexpr, sizeof(__pyx_k_genexpr), 0, 0, 1, 1},
75388   {&__pyx_n_s_get_state_attnames, __pyx_k_get_state_attnames, sizeof(__pyx_k_get_state_attnames), 0, 0, 1, 1},
75389   {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1},
75390   {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0},
75391   {&__pyx_n_s_grid_selector, __pyx_k_grid_selector, sizeof(__pyx_k_grid_selector), 0, 0, 1, 1},
75392   {&__pyx_n_s_halo_particles, __pyx_k_halo_particles, sizeof(__pyx_k_halo_particles), 0, 0, 1, 1},
75393   {&__pyx_n_s_halo_particles_selector, __pyx_k_halo_particles_selector, sizeof(__pyx_k_halo_particles_selector), 0, 0, 1, 1},
75394   {&__pyx_n_s_hash_vals, __pyx_k_hash_vals, sizeof(__pyx_k_hash_vals), 0, 0, 1, 1},
75395   {&__pyx_n_s_height, __pyx_k_height, sizeof(__pyx_k_height), 0, 0, 1, 1},
75396   {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1},
75397   {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1},
75398   {&__pyx_n_s_id_offset, __pyx_k_id_offset, sizeof(__pyx_k_id_offset), 0, 0, 1, 1},
75399   {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
75400   {&__pyx_n_s_index, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1},
75401   {&__pyx_n_s_index_offset, __pyx_k_index_offset, sizeof(__pyx_k_index_offset), 0, 0, 1, 1},
75402   {&__pyx_n_s_indexed_octree_subset_selector, __pyx_k_indexed_octree_subset_selector, sizeof(__pyx_k_indexed_octree_subset_selector), 0, 0, 1, 1},
75403   {&__pyx_n_s_indices, __pyx_k_indices, sizeof(__pyx_k_indices), 0, 0, 1, 1},
75404   {&__pyx_n_s_inf, __pyx_k_inf, sizeof(__pyx_k_inf), 0, 0, 1, 1},
75405   {&__pyx_n_s_init___locals_genexpr, __pyx_k_init___locals_genexpr, sizeof(__pyx_k_init___locals_genexpr), 0, 0, 1, 1},
75406   {&__pyx_n_s_int64, __pyx_k_int64, sizeof(__pyx_k_int64), 0, 0, 1, 1},
75407   {&__pyx_n_s_intersection_selector, __pyx_k_intersection_selector, sizeof(__pyx_k_intersection_selector), 0, 0, 1, 1},
75408   {&__pyx_n_s_is_all_data, __pyx_k_is_all_data, sizeof(__pyx_k_is_all_data), 0, 0, 1, 1},
75409   {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1},
75410   {&__pyx_kp_s_itemsize_0_for_cython_array, __pyx_k_itemsize_0_for_cython_array, sizeof(__pyx_k_itemsize_0_for_cython_array), 0, 0, 1, 0},
75411   {&__pyx_n_s_j, __pyx_k_j, sizeof(__pyx_k_j), 0, 0, 1, 1},
75412   {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1},
75413   {&__pyx_n_s_kind, __pyx_k_kind, sizeof(__pyx_k_kind), 0, 0, 1, 1},
75414   {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1},
75415   {&__pyx_n_s_left_edge, __pyx_k_left_edge, sizeof(__pyx_k_left_edge), 0, 0, 1, 1},
75416   {&__pyx_kp_s_left_edge_0, __pyx_k_left_edge_0, sizeof(__pyx_k_left_edge_0), 0, 0, 1, 0},
75417   {&__pyx_kp_s_left_edge_1, __pyx_k_left_edge_1, sizeof(__pyx_k_left_edge_1), 0, 0, 1, 0},
75418   {&__pyx_kp_s_left_edge_2, __pyx_k_left_edge_2, sizeof(__pyx_k_left_edge_2), 0, 0, 1, 0},
75419   {&__pyx_n_s_left_edges, __pyx_k_left_edges, sizeof(__pyx_k_left_edges), 0, 0, 1, 1},
75420   {&__pyx_n_s_levels, __pyx_k_levels, sizeof(__pyx_k_levels), 0, 0, 1, 1},
75421   {&__pyx_n_s_logical_or, __pyx_k_logical_or, sizeof(__pyx_k_logical_or), 0, 0, 1, 1},
75422   {&__pyx_n_s_loose_selection, __pyx_k_loose_selection, sizeof(__pyx_k_loose_selection), 0, 0, 1, 1},
75423   {&__pyx_n_s_mag, __pyx_k_mag, sizeof(__pyx_k_mag), 0, 0, 1, 1},
75424   {&__pyx_kp_s_mag_0, __pyx_k_mag_0, sizeof(__pyx_k_mag_0), 0, 0, 1, 0},
75425   {&__pyx_kp_s_mag_1, __pyx_k_mag_1, sizeof(__pyx_k_mag_1), 0, 0, 1, 0},
75426   {&__pyx_kp_s_mag_2, __pyx_k_mag_2, sizeof(__pyx_k_mag_2), 0, 0, 1, 0},
75427   {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
75428   {&__pyx_n_s_mask, __pyx_k_mask, sizeof(__pyx_k_mask), 0, 0, 1, 1},
75429   {&__pyx_n_s_mask_fill, __pyx_k_mask_fill, sizeof(__pyx_k_mask_fill), 0, 0, 1, 1},
75430   {&__pyx_n_s_max_ind, __pyx_k_max_ind, sizeof(__pyx_k_max_ind), 0, 0, 1, 1},
75431   {&__pyx_n_s_max_level, __pyx_k_max_level, sizeof(__pyx_k_max_level), 0, 0, 1, 1},
75432   {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1},
75433   {&__pyx_n_s_mesh, __pyx_k_mesh, sizeof(__pyx_k_mesh), 0, 0, 1, 1},
75434   {&__pyx_n_s_min_ind, __pyx_k_min_ind, sizeof(__pyx_k_min_ind), 0, 0, 1, 1},
75435   {&__pyx_n_s_min_level, __pyx_k_min_level, sizeof(__pyx_k_min_level), 0, 0, 1, 1},
75436   {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1},
75437   {&__pyx_n_s_n_c, __pyx_k_n_c, sizeof(__pyx_k_n_c), 0, 0, 1, 1},
75438   {&__pyx_n_s_n_p, __pyx_k_n_p, sizeof(__pyx_k_n_p), 0, 0, 1, 1},
75439   {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
75440   {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1},
75441   {&__pyx_kp_u_ndarray_is_not_C_contiguous, __pyx_k_ndarray_is_not_C_contiguous, sizeof(__pyx_k_ndarray_is_not_C_contiguous), 0, 1, 0, 0},
75442   {&__pyx_kp_u_ndarray_is_not_Fortran_contiguou, __pyx_k_ndarray_is_not_Fortran_contiguou, sizeof(__pyx_k_ndarray_is_not_Fortran_contiguou), 0, 1, 0, 0},
75443   {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1},
75444   {&__pyx_n_s_neg, __pyx_k_neg, sizeof(__pyx_k_neg), 0, 0, 1, 1},
75445   {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1},
75446   {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0},
75447   {&__pyx_n_s_norm_vec, __pyx_k_norm_vec, sizeof(__pyx_k_norm_vec), 0, 0, 1, 1},
75448   {&__pyx_kp_s_norm_vec_0, __pyx_k_norm_vec_0, sizeof(__pyx_k_norm_vec_0), 0, 0, 1, 0},
75449   {&__pyx_kp_s_norm_vec_1, __pyx_k_norm_vec_1, sizeof(__pyx_k_norm_vec_1), 0, 0, 1, 0},
75450   {&__pyx_kp_s_norm_vec_2, __pyx_k_norm_vec_2, sizeof(__pyx_k_norm_vec_2), 0, 0, 1, 0},
75451   {&__pyx_n_s_norm_vec_3, __pyx_k_norm_vec_3, sizeof(__pyx_k_norm_vec_3), 0, 0, 1, 1},
75452   {&__pyx_n_s_not, __pyx_k_not, sizeof(__pyx_k_not), 0, 0, 1, 1},
75453   {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1},
75454   {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1},
75455   {&__pyx_kp_s_numpy_core_multiarray_failed_to, __pyx_k_numpy_core_multiarray_failed_to, sizeof(__pyx_k_numpy_core_multiarray_failed_to), 0, 0, 1, 0},
75456   {&__pyx_kp_s_numpy_core_umath_failed_to_impor, __pyx_k_numpy_core_umath_failed_to_impor, sizeof(__pyx_k_numpy_core_umath_failed_to_impor), 0, 0, 1, 0},
75457   {&__pyx_n_s_nz, __pyx_k_nz, sizeof(__pyx_k_nz), 0, 0, 1, 1},
75458   {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1},
75459   {&__pyx_n_s_obj_ids, __pyx_k_obj_ids, sizeof(__pyx_k_obj_ids), 0, 0, 1, 1},
75460   {&__pyx_n_s_object, __pyx_k_object, sizeof(__pyx_k_object), 0, 0, 1, 1},
75461   {&__pyx_n_s_oct_handler, __pyx_k_oct_handler, sizeof(__pyx_k_oct_handler), 0, 0, 1, 1},
75462   {&__pyx_n_s_octree, __pyx_k_octree, sizeof(__pyx_k_octree), 0, 0, 1, 1},
75463   {&__pyx_n_s_octree_subset_selector, __pyx_k_octree_subset_selector, sizeof(__pyx_k_octree_subset_selector), 0, 0, 1, 1},
75464   {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1},
75465   {&__pyx_n_s_ones, __pyx_k_ones, sizeof(__pyx_k_ones), 0, 0, 1, 1},
75466   {&__pyx_n_s_or, __pyx_k_or, sizeof(__pyx_k_or), 0, 0, 1, 1},
75467   {&__pyx_n_s_ortho_ray_selector, __pyx_k_ortho_ray_selector, sizeof(__pyx_k_ortho_ray_selector), 0, 0, 1, 1},
75468   {&__pyx_n_s_out, __pyx_k_out, sizeof(__pyx_k_out), 0, 0, 1, 1},
75469   {&__pyx_n_s_overlap_cells, __pyx_k_overlap_cells, sizeof(__pyx_k_overlap_cells), 0, 0, 1, 1},
75470   {&__pyx_n_s_p, __pyx_k_p, sizeof(__pyx_k_p), 0, 0, 1, 1},
75471   {&__pyx_n_s_p1, __pyx_k_p1, sizeof(__pyx_k_p1), 0, 0, 1, 1},
75472   {&__pyx_kp_s_p1_0, __pyx_k_p1_0, sizeof(__pyx_k_p1_0), 0, 0, 1, 0},
75473   {&__pyx_kp_s_p1_1, __pyx_k_p1_1, sizeof(__pyx_k_p1_1), 0, 0, 1, 0},
75474   {&__pyx_kp_s_p1_2, __pyx_k_p1_2, sizeof(__pyx_k_p1_2), 0, 0, 1, 0},
75475   {&__pyx_n_s_p2, __pyx_k_p2, sizeof(__pyx_k_p2), 0, 0, 1, 1},
75476   {&__pyx_kp_s_p2_0, __pyx_k_p2_0, sizeof(__pyx_k_p2_0), 0, 0, 1, 0},
75477   {&__pyx_kp_s_p2_1, __pyx_k_p2_1, sizeof(__pyx_k_p2_1), 0, 0, 1, 0},
75478   {&__pyx_kp_s_p2_2, __pyx_k_p2_2, sizeof(__pyx_k_p2_2), 0, 0, 1, 0},
75479   {&__pyx_kp_s_p_0, __pyx_k_p_0, sizeof(__pyx_k_p_0), 0, 0, 1, 0},
75480   {&__pyx_kp_s_p_1, __pyx_k_p_1, sizeof(__pyx_k_p_1), 0, 0, 1, 0},
75481   {&__pyx_kp_s_p_2, __pyx_k_p_2, sizeof(__pyx_k_p_2), 0, 0, 1, 0},
75482   {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1},
75483   {&__pyx_n_s_particle_indices, __pyx_k_particle_indices, sizeof(__pyx_k_particle_indices), 0, 0, 1, 1},
75484   {&__pyx_n_s_periodicity, __pyx_k_periodicity, sizeof(__pyx_k_periodicity), 0, 0, 1, 1},
75485   {&__pyx_kp_s_periodicity_0, __pyx_k_periodicity_0, sizeof(__pyx_k_periodicity_0), 0, 0, 1, 0},
75486   {&__pyx_kp_s_periodicity_1, __pyx_k_periodicity_1, sizeof(__pyx_k_periodicity_1), 0, 0, 1, 0},
75487   {&__pyx_kp_s_periodicity_2, __pyx_k_periodicity_2, sizeof(__pyx_k_periodicity_2), 0, 0, 1, 0},
75488   {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1},
75489   {&__pyx_n_s_point_selector, __pyx_k_point_selector, sizeof(__pyx_k_point_selector), 0, 0, 1, 1},
75490   {&__pyx_n_s_points_in_cells, __pyx_k_points_in_cells, sizeof(__pyx_k_points_in_cells), 0, 0, 1, 1},
75491   {&__pyx_n_s_pos, __pyx_k_pos, sizeof(__pyx_k_pos), 0, 0, 1, 1},
75492   {&__pyx_n_s_print, __pyx_k_print, sizeof(__pyx_k_print), 0, 0, 1, 1},
75493   {&__pyx_n_s_px, __pyx_k_px, sizeof(__pyx_k_px), 0, 0, 1, 1},
75494   {&__pyx_n_s_px_ax, __pyx_k_px_ax, sizeof(__pyx_k_px_ax), 0, 0, 1, 1},
75495   {&__pyx_n_s_py, __pyx_k_py, sizeof(__pyx_k_py), 0, 0, 1, 1},
75496   {&__pyx_n_s_py_ax, __pyx_k_py_ax, sizeof(__pyx_k_py_ax), 0, 0, 1, 1},
75497   {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1},
75498   {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1},
75499   {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1},
75500   {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1},
75501   {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1},
75502   {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1},
75503   {&__pyx_n_s_pyx_unpickle_Enum, __pyx_k_pyx_unpickle_Enum, sizeof(__pyx_k_pyx_unpickle_Enum), 0, 0, 1, 1},
75504   {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
75505   {&__pyx_n_s_pz, __pyx_k_pz, sizeof(__pyx_k_pz), 0, 0, 1, 1},
75506   {&__pyx_n_s_radii, __pyx_k_radii, sizeof(__pyx_k_radii), 0, 0, 1, 1},
75507   {&__pyx_n_s_radii_2, __pyx_k_radii_2, sizeof(__pyx_k_radii_2), 0, 0, 1, 1},
75508   {&__pyx_n_s_radius, __pyx_k_radius, sizeof(__pyx_k_radius), 0, 0, 1, 1},
75509   {&__pyx_n_s_radius2, __pyx_k_radius2, sizeof(__pyx_k_radius2), 0, 0, 1, 1},
75510   {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
75511   {&__pyx_n_s_ray_selector, __pyx_k_ray_selector, sizeof(__pyx_k_ray_selector), 0, 0, 1, 1},
75512   {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1},
75513   {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1},
75514   {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1},
75515   {&__pyx_n_s_reduced_dimensionality, __pyx_k_reduced_dimensionality, sizeof(__pyx_k_reduced_dimensionality), 0, 0, 1, 1},
75516   {&__pyx_n_s_region_selector, __pyx_k_region_selector, sizeof(__pyx_k_region_selector), 0, 0, 1, 1},
75517   {&__pyx_n_s_right_edge, __pyx_k_right_edge, sizeof(__pyx_k_right_edge), 0, 0, 1, 1},
75518   {&__pyx_kp_s_right_edge_0, __pyx_k_right_edge_0, sizeof(__pyx_k_right_edge_0), 0, 0, 1, 0},
75519   {&__pyx_kp_s_right_edge_1, __pyx_k_right_edge_1, sizeof(__pyx_k_right_edge_1), 0, 0, 1, 0},
75520   {&__pyx_kp_s_right_edge_2, __pyx_k_right_edge_2, sizeof(__pyx_k_right_edge_2), 0, 0, 1, 0},
75521   {&__pyx_n_s_right_edge_shift, __pyx_k_right_edge_shift, sizeof(__pyx_k_right_edge_shift), 0, 0, 1, 1},
75522   {&__pyx_n_s_right_edges, __pyx_k_right_edges, sizeof(__pyx_k_right_edges), 0, 0, 1, 1},
75523   {&__pyx_n_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 1},
75524   {&__pyx_n_s_select_grids, __pyx_k_select_grids, sizeof(__pyx_k_select_grids), 0, 0, 1, 1},
75525   {&__pyx_n_s_select_points, __pyx_k_select_points, sizeof(__pyx_k_select_points), 0, 0, 1, 1},
75526   {&__pyx_n_s_selector, __pyx_k_selector, sizeof(__pyx_k_selector), 0, 0, 1, 1},
75527   {&__pyx_n_s_selector1, __pyx_k_selector1, sizeof(__pyx_k_selector1), 0, 0, 1, 1},
75528   {&__pyx_n_s_selector2, __pyx_k_selector2, sizeof(__pyx_k_selector2), 0, 0, 1, 1},
75529   {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1},
75530   {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1},
75531   {&__pyx_n_s_set_bbox, __pyx_k_set_bbox, sizeof(__pyx_k_set_bbox), 0, 0, 1, 1},
75532   {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1},
75533   {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1},
75534   {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1},
75535   {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1},
75536   {&__pyx_n_s_slice_selector, __pyx_k_slice_selector, sizeof(__pyx_k_slice_selector), 0, 0, 1, 1},
75537   {&__pyx_n_s_sphere_selector, __pyx_k_sphere_selector, sizeof(__pyx_k_sphere_selector), 0, 0, 1, 1},
75538   {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1},
75539   {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1},
75540   {&__pyx_n_s_start_point, __pyx_k_start_point, sizeof(__pyx_k_start_point), 0, 0, 1, 1},
75541   {&__pyx_n_s_step, __pyx_k_step, sizeof(__pyx_k_step), 0, 0, 1, 1},
75542   {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1},
75543   {&__pyx_kp_s_strided_and_direct, __pyx_k_strided_and_direct, sizeof(__pyx_k_strided_and_direct), 0, 0, 1, 0},
75544   {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0},
75545   {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0},
75546   {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0},
75547   {&__pyx_n_s_strip, __pyx_k_strip, sizeof(__pyx_k_strip), 0, 0, 1, 1},
75548   {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1},
75549   {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1},
75550   {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
75551   {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1},
75552   {&__pyx_n_s_to_ndarray, __pyx_k_to_ndarray, sizeof(__pyx_k_to_ndarray), 0, 0, 1, 1},
75553   {&__pyx_n_s_tobytes, __pyx_k_tobytes, sizeof(__pyx_k_tobytes), 0, 0, 1, 1},
75554   {&__pyx_n_s_transpose, __pyx_k_transpose, sizeof(__pyx_k_transpose), 0, 0, 1, 1},
75555   {&__pyx_n_s_uint8, __pyx_k_uint8, sizeof(__pyx_k_uint8), 0, 0, 1, 1},
75556   {&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0},
75557   {&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0},
75558   {&__pyx_n_s_union_selector, __pyx_k_union_selector, sizeof(__pyx_k_union_selector), 0, 0, 1, 1},
75559   {&__pyx_n_s_units, __pyx_k_units, sizeof(__pyx_k_units), 0, 0, 1, 1},
75560   {&__pyx_kp_u_unknown_dtype_code_in_numpy_pxd, __pyx_k_unknown_dtype_code_in_numpy_pxd, sizeof(__pyx_k_unknown_dtype_code_in_numpy_pxd), 0, 1, 0, 0},
75561   {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1},
75562   {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1},
75563   {&__pyx_n_s_vals, __pyx_k_vals, sizeof(__pyx_k_vals), 0, 0, 1, 1},
75564   {&__pyx_n_s_vec, __pyx_k_vec, sizeof(__pyx_k_vec), 0, 0, 1, 1},
75565   {&__pyx_kp_s_vec_0, __pyx_k_vec_0, sizeof(__pyx_k_vec_0), 0, 0, 1, 0},
75566   {&__pyx_kp_s_vec_0_0, __pyx_k_vec_0_0, sizeof(__pyx_k_vec_0_0), 0, 0, 1, 0},
75567   {&__pyx_kp_s_vec_0_1, __pyx_k_vec_0_1, sizeof(__pyx_k_vec_0_1), 0, 0, 1, 0},
75568   {&__pyx_kp_s_vec_0_2, __pyx_k_vec_0_2, sizeof(__pyx_k_vec_0_2), 0, 0, 1, 0},
75569   {&__pyx_kp_s_vec_1, __pyx_k_vec_1, sizeof(__pyx_k_vec_1), 0, 0, 1, 0},
75570   {&__pyx_kp_s_vec_1_0, __pyx_k_vec_1_0, sizeof(__pyx_k_vec_1_0), 0, 0, 1, 0},
75571   {&__pyx_kp_s_vec_1_1, __pyx_k_vec_1_1, sizeof(__pyx_k_vec_1_1), 0, 0, 1, 0},
75572   {&__pyx_kp_s_vec_1_2, __pyx_k_vec_1_2, sizeof(__pyx_k_vec_1_2), 0, 0, 1, 0},
75573   {&__pyx_kp_s_vec_2, __pyx_k_vec_2, sizeof(__pyx_k_vec_2), 0, 0, 1, 0},
75574   {&__pyx_kp_s_vec_2_0, __pyx_k_vec_2_0, sizeof(__pyx_k_vec_2_0), 0, 0, 1, 0},
75575   {&__pyx_kp_s_vec_2_1, __pyx_k_vec_2_1, sizeof(__pyx_k_vec_2_1), 0, 0, 1, 0},
75576   {&__pyx_kp_s_vec_2_2, __pyx_k_vec_2_2, sizeof(__pyx_k_vec_2_2), 0, 0, 1, 0},
75577   {&__pyx_n_s_view, __pyx_k_view, sizeof(__pyx_k_view), 0, 0, 1, 1},
75578   {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1},
75579   {&__pyx_n_s_xor, __pyx_k_xor, sizeof(__pyx_k_xor), 0, 0, 1, 1},
75580   {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1},
75581   {&__pyx_kp_s_yt_attempted_to_read_outside_the, __pyx_k_yt_attempted_to_read_outside_the, sizeof(__pyx_k_yt_attempted_to_read_outside_the), 0, 0, 1, 0},
75582   {&__pyx_kp_s_yt_geometry__selection_routines, __pyx_k_yt_geometry__selection_routines, sizeof(__pyx_k_yt_geometry__selection_routines), 0, 0, 1, 0},
75583   {&__pyx_n_s_yt_geometry_selection_routines, __pyx_k_yt_geometry_selection_routines, sizeof(__pyx_k_yt_geometry_selection_routines), 0, 0, 1, 1},
75584   {&__pyx_kp_s_yt_geometry_selection_routines_p, __pyx_k_yt_geometry_selection_routines_p, sizeof(__pyx_k_yt_geometry_selection_routines_p), 0, 0, 1, 0},
75585   {&__pyx_n_s_z, __pyx_k_z, sizeof(__pyx_k_z), 0, 0, 1, 1},
75586   {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1},
75587   {0, 0, 0, 0, 0, 0, 0}
75588 };
75589 static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
75590   __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 81, __pyx_L1_error)
75591   __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(0, 123, __pyx_L1_error)
75592   __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 472, __pyx_L1_error)
75593   __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(1, 566, __pyx_L1_error)
75594   __pyx_builtin_super = __Pyx_GetBuiltinName(__pyx_n_s_super); if (!__pyx_builtin_super) __PYX_ERR(2, 169, __pyx_L1_error)
75595   __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(3, 36, __pyx_L1_error)
75596   __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(22, 272, __pyx_L1_error)
75597   __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(22, 1038, __pyx_L1_error)
75598   __pyx_builtin_OverflowError = __Pyx_GetBuiltinName(__pyx_n_s_OverflowError); if (!__pyx_builtin_OverflowError) __PYX_ERR(5, 81, __pyx_L1_error)
75599   __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(5, 94, __pyx_L1_error)
75600   __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(5, 148, __pyx_L1_error)
75601   __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(5, 400, __pyx_L1_error)
75602   __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(5, 609, __pyx_L1_error)
75603   return 0;
75604   __pyx_L1_error:;
75605   return -1;
75606 }
75607 
75608 static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
75609   __Pyx_RefNannyDeclarations
75610   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
75611 
75612   /* "yt/geometry/_selection_routines/selector_object.pxi":34
75613  *         cdef int i
75614  *         cdef np.ndarray[np.uint8_t, ndim=1] periodicity
75615  *         periodicity = np.zeros(3, dtype='uint8')             # <<<<<<<<<<<<<<
75616  *         for i in range(3):
75617  *             periodicity[i] = self.periodicity[i]
75618  */
75619   __pyx_tuple_ = PyTuple_Pack(1, __pyx_int_3); if (unlikely(!__pyx_tuple_)) __PYX_ERR(1, 34, __pyx_L1_error)
75620   __Pyx_GOTREF(__pyx_tuple_);
75621   __Pyx_GIVEREF(__pyx_tuple_);
75622 
75623   /* "yt/geometry/_selection_routines/selector_object.pxi":472
75624  *     @cython.wraparound(False)
75625  *     @cython.cdivision(True)
75626  *     def count_points(self, np.ndarray[floating, ndim=1] x,             # <<<<<<<<<<<<<<
75627  *                            np.ndarray[floating, ndim=1] y,
75628  *                            np.ndarray[floating, ndim=1] z,
75629  */
75630   __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_No_matching_signature_found); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 472, __pyx_L1_error)
75631   __Pyx_GOTREF(__pyx_tuple__4);
75632   __Pyx_GIVEREF(__pyx_tuple__4);
75633   __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_Function_call_with_ambiguous_arg); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 472, __pyx_L1_error)
75634   __Pyx_GOTREF(__pyx_tuple__5);
75635   __Pyx_GIVEREF(__pyx_tuple__5);
75636 
75637   /* "yt/geometry/_selection_routines/selector_object.pxi":586
75638  *         # returns a tuple containing (attribute name, attribute value) tuples needed to
75639  *         # rebuild the state:
75640  *         base_atts = ("min_level", "max_level", "overlap_cells",             # <<<<<<<<<<<<<<
75641  *                      "periodicity", "domain_width", "domain_center")
75642  *         child_atts = self._get_state_attnames()
75643  */
75644   __pyx_tuple__6 = PyTuple_Pack(6, __pyx_n_s_min_level, __pyx_n_s_max_level, __pyx_n_s_overlap_cells, __pyx_n_s_periodicity, __pyx_n_s_domain_width, __pyx_n_s_domain_center); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 586, __pyx_L1_error)
75645   __Pyx_GOTREF(__pyx_tuple__6);
75646   __Pyx_GIVEREF(__pyx_tuple__6);
75647 
75648   /* "yt/geometry/_selection_routines/selector_object.pxi":601
75649  *         # __setstate__ Note that we could avoid this by making dobj an optional argument
75650  *         # to __cinit__
75651  *         return (None, )             # <<<<<<<<<<<<<<
75652  *
75653  *     def __setstate__(self, state_tuple):
75654  */
75655   __pyx_tuple__7 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 601, __pyx_L1_error)
75656   __Pyx_GOTREF(__pyx_tuple__7);
75657   __Pyx_GIVEREF(__pyx_tuple__7);
75658 
75659   /* "(tree fragment)":2
75660  * def __reduce_cython__(self):
75661  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75662  * def __setstate_cython__(self, __pyx_state):
75663  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75664  */
75665   __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(5, 2, __pyx_L1_error)
75666   __Pyx_GOTREF(__pyx_tuple__8);
75667   __Pyx_GIVEREF(__pyx_tuple__8);
75668 
75669   /* "(tree fragment)":4
75670  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75671  * def __setstate_cython__(self, __pyx_state):
75672  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75673  */
75674   __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(5, 4, __pyx_L1_error)
75675   __Pyx_GOTREF(__pyx_tuple__9);
75676   __Pyx_GIVEREF(__pyx_tuple__9);
75677 
75678   /* "yt/geometry/_selection_routines/point_selector.pxi":75
75679  *
75680  *     def _get_state_attnames(self):
75681  *         return ('p', )             # <<<<<<<<<<<<<<
75682  *
75683  * point_selector = PointSelector
75684  */
75685   __pyx_tuple__10 = PyTuple_Pack(1, __pyx_n_s_p); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(6, 75, __pyx_L1_error)
75686   __Pyx_GOTREF(__pyx_tuple__10);
75687   __Pyx_GIVEREF(__pyx_tuple__10);
75688 
75689   /* "(tree fragment)":2
75690  * def __reduce_cython__(self):
75691  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75692  * def __setstate_cython__(self, __pyx_state):
75693  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75694  */
75695   __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(5, 2, __pyx_L1_error)
75696   __Pyx_GOTREF(__pyx_tuple__11);
75697   __Pyx_GIVEREF(__pyx_tuple__11);
75698 
75699   /* "(tree fragment)":4
75700  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75701  * def __setstate_cython__(self, __pyx_state):
75702  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75703  */
75704   __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(5, 4, __pyx_L1_error)
75705   __Pyx_GOTREF(__pyx_tuple__12);
75706   __Pyx_GIVEREF(__pyx_tuple__12);
75707 
75708   /* "yt/geometry/_selection_routines/sphere_selector.pxi":166
75709  *
75710  *     def _get_state_attnames(self):
75711  *         return ("radius", "radius2", "center", "check_box")             # <<<<<<<<<<<<<<
75712  *
75713  *     def __setstate__(self, hashes):
75714  */
75715   __pyx_tuple__13 = PyTuple_Pack(4, __pyx_n_s_radius, __pyx_n_s_radius2, __pyx_n_s_center, __pyx_n_s_check_box); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(2, 166, __pyx_L1_error)
75716   __Pyx_GOTREF(__pyx_tuple__13);
75717   __Pyx_GIVEREF(__pyx_tuple__13);
75718 
75719   /* "(tree fragment)":2
75720  * def __reduce_cython__(self):
75721  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75722  * def __setstate_cython__(self, __pyx_state):
75723  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75724  */
75725   __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(5, 2, __pyx_L1_error)
75726   __Pyx_GOTREF(__pyx_tuple__14);
75727   __Pyx_GIVEREF(__pyx_tuple__14);
75728 
75729   /* "(tree fragment)":4
75730  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75731  * def __setstate_cython__(self, __pyx_state):
75732  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75733  */
75734   __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(5, 4, __pyx_L1_error)
75735   __Pyx_GOTREF(__pyx_tuple__15);
75736   __Pyx_GIVEREF(__pyx_tuple__15);
75737 
75738   /* "yt/geometry/_selection_routines/region_selector.pxi":208
75739  *
75740  *     def _get_state_attnames(self):
75741  *         return ('left_edge', 'right_edge', 'right_edge_shift', 'check_period',             # <<<<<<<<<<<<<<
75742  *                 'is_all_data', 'loose_selection')
75743  *
75744  */
75745   __pyx_tuple__16 = PyTuple_Pack(6, __pyx_n_s_left_edge, __pyx_n_s_right_edge, __pyx_n_s_right_edge_shift, __pyx_n_s_check_period, __pyx_n_s_is_all_data, __pyx_n_s_loose_selection); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(7, 208, __pyx_L1_error)
75746   __Pyx_GOTREF(__pyx_tuple__16);
75747   __Pyx_GIVEREF(__pyx_tuple__16);
75748 
75749   /* "(tree fragment)":2
75750  * def __reduce_cython__(self):
75751  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75752  * def __setstate_cython__(self, __pyx_state):
75753  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75754  */
75755   __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(5, 2, __pyx_L1_error)
75756   __Pyx_GOTREF(__pyx_tuple__17);
75757   __Pyx_GIVEREF(__pyx_tuple__17);
75758 
75759   /* "(tree fragment)":4
75760  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75761  * def __setstate_cython__(self, __pyx_state):
75762  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75763  */
75764   __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(5, 4, __pyx_L1_error)
75765   __Pyx_GOTREF(__pyx_tuple__18);
75766   __Pyx_GIVEREF(__pyx_tuple__18);
75767 
75768   /* "(tree fragment)":2
75769  * def __reduce_cython__(self):
75770  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75771  * def __setstate_cython__(self, __pyx_state):
75772  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75773  */
75774   __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(5, 2, __pyx_L1_error)
75775   __Pyx_GOTREF(__pyx_tuple__19);
75776   __Pyx_GIVEREF(__pyx_tuple__19);
75777 
75778   /* "(tree fragment)":4
75779  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75780  * def __setstate_cython__(self, __pyx_state):
75781  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75782  */
75783   __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(5, 4, __pyx_L1_error)
75784   __Pyx_GOTREF(__pyx_tuple__20);
75785   __Pyx_GIVEREF(__pyx_tuple__20);
75786 
75787   /* "yt/geometry/_selection_routines/disk_selector.pxi":165
75788  *
75789  *     def _get_state_attnames(self):
75790  *         return ("radius", "radius2", "height", "norm_vec", "center")             # <<<<<<<<<<<<<<
75791  *
75792  *
75793  */
75794   __pyx_tuple__21 = PyTuple_Pack(5, __pyx_n_s_radius, __pyx_n_s_radius2, __pyx_n_s_height, __pyx_n_s_norm_vec_3, __pyx_n_s_center); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(8, 165, __pyx_L1_error)
75795   __Pyx_GOTREF(__pyx_tuple__21);
75796   __Pyx_GIVEREF(__pyx_tuple__21);
75797 
75798   /* "(tree fragment)":2
75799  * def __reduce_cython__(self):
75800  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75801  * def __setstate_cython__(self, __pyx_state):
75802  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75803  */
75804   __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(5, 2, __pyx_L1_error)
75805   __Pyx_GOTREF(__pyx_tuple__22);
75806   __Pyx_GIVEREF(__pyx_tuple__22);
75807 
75808   /* "(tree fragment)":4
75809  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75810  * def __setstate_cython__(self, __pyx_state):
75811  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75812  */
75813   __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(5, 4, __pyx_L1_error)
75814   __Pyx_GOTREF(__pyx_tuple__23);
75815   __Pyx_GIVEREF(__pyx_tuple__23);
75816 
75817   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":115
75818  *
75819  *     def _get_state_attnames(self):
75820  *         return ("d", "norm_vec")             # <<<<<<<<<<<<<<
75821  *
75822  * cutting_selector = CuttingPlaneSelector
75823  */
75824   __pyx_tuple__24 = PyTuple_Pack(2, __pyx_n_s_d, __pyx_n_s_norm_vec_3); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(9, 115, __pyx_L1_error)
75825   __Pyx_GOTREF(__pyx_tuple__24);
75826   __Pyx_GIVEREF(__pyx_tuple__24);
75827 
75828   /* "(tree fragment)":2
75829  * def __reduce_cython__(self):
75830  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75831  * def __setstate_cython__(self, __pyx_state):
75832  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75833  */
75834   __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(5, 2, __pyx_L1_error)
75835   __Pyx_GOTREF(__pyx_tuple__25);
75836   __Pyx_GIVEREF(__pyx_tuple__25);
75837 
75838   /* "(tree fragment)":4
75839  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75840  * def __setstate_cython__(self, __pyx_state):
75841  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75842  */
75843   __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(5, 4, __pyx_L1_error)
75844   __Pyx_GOTREF(__pyx_tuple__26);
75845   __Pyx_GIVEREF(__pyx_tuple__26);
75846 
75847   /* "yt/geometry/_selection_routines/slice_selector.pxi":120
75848  *
75849  *     def _get_state_attnames(self):
75850  *         return ("axis", "coord", "ax", "ay", "reduced_dimensionality")             # <<<<<<<<<<<<<<
75851  *
75852  * slice_selector = SliceSelector
75853  */
75854   __pyx_tuple__27 = PyTuple_Pack(5, __pyx_n_s_axis, __pyx_n_s_coord, __pyx_n_s_ax, __pyx_n_s_ay, __pyx_n_s_reduced_dimensionality); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(10, 120, __pyx_L1_error)
75855   __Pyx_GOTREF(__pyx_tuple__27);
75856   __Pyx_GIVEREF(__pyx_tuple__27);
75857 
75858   /* "(tree fragment)":2
75859  * def __reduce_cython__(self):
75860  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75861  * def __setstate_cython__(self, __pyx_state):
75862  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75863  */
75864   __pyx_tuple__28 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(5, 2, __pyx_L1_error)
75865   __Pyx_GOTREF(__pyx_tuple__28);
75866   __Pyx_GIVEREF(__pyx_tuple__28);
75867 
75868   /* "(tree fragment)":4
75869  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75870  * def __setstate_cython__(self, __pyx_state):
75871  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75872  */
75873   __pyx_tuple__29 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(5, 4, __pyx_L1_error)
75874   __Pyx_GOTREF(__pyx_tuple__29);
75875   __Pyx_GIVEREF(__pyx_tuple__29);
75876 
75877   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":114
75878  *
75879  *     def _get_state_attnames(self):
75880  *         return ("px_ax", "py_ax", "px", "py", "axis")             # <<<<<<<<<<<<<<
75881  *
75882  * ortho_ray_selector = OrthoRaySelector
75883  */
75884   __pyx_tuple__30 = PyTuple_Pack(5, __pyx_n_s_px_ax, __pyx_n_s_py_ax, __pyx_n_s_px, __pyx_n_s_py, __pyx_n_s_axis); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(11, 114, __pyx_L1_error)
75885   __Pyx_GOTREF(__pyx_tuple__30);
75886   __Pyx_GIVEREF(__pyx_tuple__30);
75887 
75888   /* "(tree fragment)":2
75889  * def __reduce_cython__(self):
75890  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75891  * def __setstate_cython__(self, __pyx_state):
75892  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75893  */
75894   __pyx_tuple__31 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(5, 2, __pyx_L1_error)
75895   __Pyx_GOTREF(__pyx_tuple__31);
75896   __Pyx_GIVEREF(__pyx_tuple__31);
75897 
75898   /* "(tree fragment)":4
75899  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75900  * def __setstate_cython__(self, __pyx_state):
75901  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75902  */
75903   __pyx_tuple__32 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(5, 4, __pyx_L1_error)
75904   __Pyx_GOTREF(__pyx_tuple__32);
75905   __Pyx_GIVEREF(__pyx_tuple__32);
75906 
75907   /* "yt/geometry/_selection_routines/ray_selector.pxi":142
75908  *             raise NotImplementedError
75909  *         cdef VolumeContainer vc
75910  *         child_mask = np.ones((1,1,1), dtype="uint8")             # <<<<<<<<<<<<<<
75911  *         t = np.zeros((1,1,1), dtype="float64")
75912  *         dt = np.zeros((1,1,1), dtype="float64") - 1
75913  */
75914   __pyx_tuple__33 = PyTuple_Pack(3, __pyx_int_1, __pyx_int_1, __pyx_int_1); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(12, 142, __pyx_L1_error)
75915   __Pyx_GOTREF(__pyx_tuple__33);
75916   __Pyx_GIVEREF(__pyx_tuple__33);
75917   __pyx_tuple__34 = PyTuple_Pack(1, __pyx_tuple__33); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(12, 142, __pyx_L1_error)
75918   __Pyx_GOTREF(__pyx_tuple__34);
75919   __Pyx_GIVEREF(__pyx_tuple__34);
75920 
75921   /* "yt/geometry/_selection_routines/ray_selector.pxi":287
75922  *
75923  *     def _get_state_attnames(self):
75924  *         return ("p1", "p2", "vec")             # <<<<<<<<<<<<<<
75925  *
75926  * ray_selector = RaySelector
75927  */
75928   __pyx_tuple__35 = PyTuple_Pack(3, __pyx_n_s_p1, __pyx_n_s_p2, __pyx_n_s_vec); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(12, 287, __pyx_L1_error)
75929   __Pyx_GOTREF(__pyx_tuple__35);
75930   __Pyx_GIVEREF(__pyx_tuple__35);
75931 
75932   /* "(tree fragment)":2
75933  * def __reduce_cython__(self):
75934  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75935  * def __setstate_cython__(self, __pyx_state):
75936  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75937  */
75938   __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(5, 2, __pyx_L1_error)
75939   __Pyx_GOTREF(__pyx_tuple__36);
75940   __Pyx_GIVEREF(__pyx_tuple__36);
75941 
75942   /* "(tree fragment)":4
75943  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75944  * def __setstate_cython__(self, __pyx_state):
75945  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75946  */
75947   __pyx_tuple__37 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(5, 4, __pyx_L1_error)
75948   __Pyx_GOTREF(__pyx_tuple__37);
75949   __Pyx_GIVEREF(__pyx_tuple__37);
75950 
75951   /* "(tree fragment)":2
75952  * def __reduce_cython__(self):
75953  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75954  * def __setstate_cython__(self, __pyx_state):
75955  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75956  */
75957   __pyx_tuple__38 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(5, 2, __pyx_L1_error)
75958   __Pyx_GOTREF(__pyx_tuple__38);
75959   __Pyx_GIVEREF(__pyx_tuple__38);
75960 
75961   /* "(tree fragment)":4
75962  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75963  * def __setstate_cython__(self, __pyx_state):
75964  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75965  */
75966   __pyx_tuple__39 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(5, 4, __pyx_L1_error)
75967   __Pyx_GOTREF(__pyx_tuple__39);
75968   __Pyx_GIVEREF(__pyx_tuple__39);
75969 
75970   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":145
75971  *
75972  *     def _get_state_attnames(self):
75973  *         return ("mag", "center", "vec")             # <<<<<<<<<<<<<<
75974  *
75975  *
75976  */
75977   __pyx_tuple__40 = PyTuple_Pack(3, __pyx_n_s_mag, __pyx_n_s_center, __pyx_n_s_vec); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(14, 145, __pyx_L1_error)
75978   __Pyx_GOTREF(__pyx_tuple__40);
75979   __Pyx_GIVEREF(__pyx_tuple__40);
75980 
75981   /* "(tree fragment)":2
75982  * def __reduce_cython__(self):
75983  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75984  * def __setstate_cython__(self, __pyx_state):
75985  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75986  */
75987   __pyx_tuple__41 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(5, 2, __pyx_L1_error)
75988   __Pyx_GOTREF(__pyx_tuple__41);
75989   __Pyx_GIVEREF(__pyx_tuple__41);
75990 
75991   /* "(tree fragment)":4
75992  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
75993  * def __setstate_cython__(self, __pyx_state):
75994  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
75995  */
75996   __pyx_tuple__42 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(5, 4, __pyx_L1_error)
75997   __Pyx_GOTREF(__pyx_tuple__42);
75998   __Pyx_GIVEREF(__pyx_tuple__42);
75999 
76000   /* "(tree fragment)":2
76001  * def __reduce_cython__(self):
76002  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76003  * def __setstate_cython__(self, __pyx_state):
76004  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76005  */
76006   __pyx_tuple__43 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(5, 2, __pyx_L1_error)
76007   __Pyx_GOTREF(__pyx_tuple__43);
76008   __Pyx_GIVEREF(__pyx_tuple__43);
76009 
76010   /* "(tree fragment)":4
76011  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76012  * def __setstate_cython__(self, __pyx_state):
76013  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76014  */
76015   __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(5, 4, __pyx_L1_error)
76016   __Pyx_GOTREF(__pyx_tuple__44);
76017   __Pyx_GIVEREF(__pyx_tuple__44);
76018 
76019   /* "(tree fragment)":2
76020  * def __reduce_cython__(self):
76021  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76022  * def __setstate_cython__(self, __pyx_state):
76023  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76024  */
76025   __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(5, 2, __pyx_L1_error)
76026   __Pyx_GOTREF(__pyx_tuple__45);
76027   __Pyx_GIVEREF(__pyx_tuple__45);
76028 
76029   /* "(tree fragment)":4
76030  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76031  * def __setstate_cython__(self, __pyx_state):
76032  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76033  */
76034   __pyx_tuple__46 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(5, 4, __pyx_L1_error)
76035   __Pyx_GOTREF(__pyx_tuple__46);
76036   __Pyx_GIVEREF(__pyx_tuple__46);
76037 
76038   /* "(tree fragment)":2
76039  * def __reduce_cython__(self):
76040  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76041  * def __setstate_cython__(self, __pyx_state):
76042  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76043  */
76044   __pyx_tuple__47 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(5, 2, __pyx_L1_error)
76045   __Pyx_GOTREF(__pyx_tuple__47);
76046   __Pyx_GIVEREF(__pyx_tuple__47);
76047 
76048   /* "(tree fragment)":4
76049  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76050  * def __setstate_cython__(self, __pyx_state):
76051  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76052  */
76053   __pyx_tuple__48 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(5, 4, __pyx_L1_error)
76054   __Pyx_GOTREF(__pyx_tuple__48);
76055   __Pyx_GIVEREF(__pyx_tuple__48);
76056 
76057   /* "yt/geometry/_selection_routines/always_selector.pxi":43
76058  *
76059  *     def _hash_vals(self):
76060  *         return ("always", 1,)             # <<<<<<<<<<<<<<
76061  *
76062  * always_selector = AlwaysSelector
76063  */
76064   __pyx_tuple__49 = PyTuple_Pack(2, __pyx_n_s_always, __pyx_int_1); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(18, 43, __pyx_L1_error)
76065   __Pyx_GOTREF(__pyx_tuple__49);
76066   __Pyx_GIVEREF(__pyx_tuple__49);
76067 
76068   /* "(tree fragment)":2
76069  * def __reduce_cython__(self):
76070  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76071  * def __setstate_cython__(self, __pyx_state):
76072  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76073  */
76074   __pyx_tuple__50 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(5, 2, __pyx_L1_error)
76075   __Pyx_GOTREF(__pyx_tuple__50);
76076   __Pyx_GIVEREF(__pyx_tuple__50);
76077 
76078   /* "(tree fragment)":4
76079  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76080  * def __setstate_cython__(self, __pyx_state):
76081  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76082  */
76083   __pyx_tuple__51 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(5, 4, __pyx_L1_error)
76084   __Pyx_GOTREF(__pyx_tuple__51);
76085   __Pyx_GIVEREF(__pyx_tuple__51);
76086 
76087   /* "(tree fragment)":2
76088  * def __reduce_cython__(self):
76089  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76090  * def __setstate_cython__(self, __pyx_state):
76091  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76092  */
76093   __pyx_tuple__52 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(5, 2, __pyx_L1_error)
76094   __Pyx_GOTREF(__pyx_tuple__52);
76095   __Pyx_GIVEREF(__pyx_tuple__52);
76096 
76097   /* "(tree fragment)":4
76098  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76099  * def __setstate_cython__(self, __pyx_state):
76100  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76101  */
76102   __pyx_tuple__53 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(5, 4, __pyx_L1_error)
76103   __Pyx_GOTREF(__pyx_tuple__53);
76104   __Pyx_GIVEREF(__pyx_tuple__53);
76105 
76106   /* "(tree fragment)":2
76107  * def __reduce_cython__(self):
76108  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76109  * def __setstate_cython__(self, __pyx_state):
76110  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76111  */
76112   __pyx_tuple__54 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(5, 2, __pyx_L1_error)
76113   __Pyx_GOTREF(__pyx_tuple__54);
76114   __Pyx_GIVEREF(__pyx_tuple__54);
76115 
76116   /* "(tree fragment)":4
76117  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76118  * def __setstate_cython__(self, __pyx_state):
76119  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76120  */
76121   __pyx_tuple__55 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(5, 4, __pyx_L1_error)
76122   __Pyx_GOTREF(__pyx_tuple__55);
76123   __Pyx_GIVEREF(__pyx_tuple__55);
76124 
76125   /* "(tree fragment)":2
76126  * def __reduce_cython__(self):
76127  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76128  * def __setstate_cython__(self, __pyx_state):
76129  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76130  */
76131   __pyx_tuple__56 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(5, 2, __pyx_L1_error)
76132   __Pyx_GOTREF(__pyx_tuple__56);
76133   __Pyx_GIVEREF(__pyx_tuple__56);
76134 
76135   /* "(tree fragment)":4
76136  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76137  * def __setstate_cython__(self, __pyx_state):
76138  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76139  */
76140   __pyx_tuple__57 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(5, 4, __pyx_L1_error)
76141   __Pyx_GOTREF(__pyx_tuple__57);
76142   __Pyx_GIVEREF(__pyx_tuple__57);
76143 
76144   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":65
76145  *     def _hash_vals(self):
76146  *         return (self.sel1._hash_vals() +
76147  *                 ("and",) +             # <<<<<<<<<<<<<<
76148  *                 self.sel2._hash_vals())
76149  *
76150  */
76151   __pyx_tuple__58 = PyTuple_Pack(1, __pyx_n_s_and); if (unlikely(!__pyx_tuple__58)) __PYX_ERR(21, 65, __pyx_L1_error)
76152   __Pyx_GOTREF(__pyx_tuple__58);
76153   __Pyx_GIVEREF(__pyx_tuple__58);
76154 
76155   /* "(tree fragment)":2
76156  * def __reduce_cython__(self):
76157  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76158  * def __setstate_cython__(self, __pyx_state):
76159  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76160  */
76161   __pyx_tuple__59 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(5, 2, __pyx_L1_error)
76162   __Pyx_GOTREF(__pyx_tuple__59);
76163   __Pyx_GIVEREF(__pyx_tuple__59);
76164 
76165   /* "(tree fragment)":4
76166  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76167  * def __setstate_cython__(self, __pyx_state):
76168  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76169  */
76170   __pyx_tuple__60 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(5, 4, __pyx_L1_error)
76171   __Pyx_GOTREF(__pyx_tuple__60);
76172   __Pyx_GIVEREF(__pyx_tuple__60);
76173 
76174   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":118
76175  *     def _hash_vals(self):
76176  *         return (self.sel1._hash_vals() +
76177  *                 ("or",) +             # <<<<<<<<<<<<<<
76178  *                 self.sel2._hash_vals())
76179  *
76180  */
76181   __pyx_tuple__61 = PyTuple_Pack(1, __pyx_n_s_or); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(21, 118, __pyx_L1_error)
76182   __Pyx_GOTREF(__pyx_tuple__61);
76183   __Pyx_GIVEREF(__pyx_tuple__61);
76184 
76185   /* "(tree fragment)":2
76186  * def __reduce_cython__(self):
76187  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76188  * def __setstate_cython__(self, __pyx_state):
76189  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76190  */
76191   __pyx_tuple__62 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(5, 2, __pyx_L1_error)
76192   __Pyx_GOTREF(__pyx_tuple__62);
76193   __Pyx_GIVEREF(__pyx_tuple__62);
76194 
76195   /* "(tree fragment)":4
76196  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76197  * def __setstate_cython__(self, __pyx_state):
76198  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76199  */
76200   __pyx_tuple__63 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(5, 4, __pyx_L1_error)
76201   __Pyx_GOTREF(__pyx_tuple__63);
76202   __Pyx_GIVEREF(__pyx_tuple__63);
76203 
76204   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":157
76205  *     def _hash_vals(self):
76206  *         return (self.sel1._hash_vals() +
76207  *                 ("not",))             # <<<<<<<<<<<<<<
76208  *
76209  * cdef class BooleanXORSelector(BooleanSelector):
76210  */
76211   __pyx_tuple__64 = PyTuple_Pack(1, __pyx_n_s_not); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(21, 157, __pyx_L1_error)
76212   __Pyx_GOTREF(__pyx_tuple__64);
76213   __Pyx_GIVEREF(__pyx_tuple__64);
76214 
76215   /* "(tree fragment)":2
76216  * def __reduce_cython__(self):
76217  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76218  * def __setstate_cython__(self, __pyx_state):
76219  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76220  */
76221   __pyx_tuple__65 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(5, 2, __pyx_L1_error)
76222   __Pyx_GOTREF(__pyx_tuple__65);
76223   __Pyx_GIVEREF(__pyx_tuple__65);
76224 
76225   /* "(tree fragment)":4
76226  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76227  * def __setstate_cython__(self, __pyx_state):
76228  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76229  */
76230   __pyx_tuple__66 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__66)) __PYX_ERR(5, 4, __pyx_L1_error)
76231   __Pyx_GOTREF(__pyx_tuple__66);
76232   __Pyx_GIVEREF(__pyx_tuple__66);
76233 
76234   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":210
76235  *     def _hash_vals(self):
76236  *         return (self.sel1._hash_vals() +
76237  *                 ("xor",) +             # <<<<<<<<<<<<<<
76238  *                 self.sel2._hash_vals())
76239  *
76240  */
76241   __pyx_tuple__67 = PyTuple_Pack(1, __pyx_n_s_xor); if (unlikely(!__pyx_tuple__67)) __PYX_ERR(21, 210, __pyx_L1_error)
76242   __Pyx_GOTREF(__pyx_tuple__67);
76243   __Pyx_GIVEREF(__pyx_tuple__67);
76244 
76245   /* "(tree fragment)":2
76246  * def __reduce_cython__(self):
76247  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76248  * def __setstate_cython__(self, __pyx_state):
76249  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76250  */
76251   __pyx_tuple__68 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(5, 2, __pyx_L1_error)
76252   __Pyx_GOTREF(__pyx_tuple__68);
76253   __Pyx_GIVEREF(__pyx_tuple__68);
76254 
76255   /* "(tree fragment)":4
76256  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76257  * def __setstate_cython__(self, __pyx_state):
76258  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76259  */
76260   __pyx_tuple__69 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(5, 4, __pyx_L1_error)
76261   __Pyx_GOTREF(__pyx_tuple__69);
76262   __Pyx_GIVEREF(__pyx_tuple__69);
76263 
76264   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":263
76265  *     def _hash_vals(self):
76266  *         return (self.sel1._hash_vals() +
76267  *                 ("neg",) +             # <<<<<<<<<<<<<<
76268  *                 self.sel2._hash_vals())
76269  *
76270  */
76271   __pyx_tuple__70 = PyTuple_Pack(1, __pyx_n_s_neg); if (unlikely(!__pyx_tuple__70)) __PYX_ERR(21, 263, __pyx_L1_error)
76272   __Pyx_GOTREF(__pyx_tuple__70);
76273   __Pyx_GIVEREF(__pyx_tuple__70);
76274 
76275   /* "(tree fragment)":2
76276  * def __reduce_cython__(self):
76277  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76278  * def __setstate_cython__(self, __pyx_state):
76279  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76280  */
76281   __pyx_tuple__71 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(5, 2, __pyx_L1_error)
76282   __Pyx_GOTREF(__pyx_tuple__71);
76283   __Pyx_GIVEREF(__pyx_tuple__71);
76284 
76285   /* "(tree fragment)":4
76286  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76287  * def __setstate_cython__(self, __pyx_state):
76288  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76289  */
76290   __pyx_tuple__72 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(5, 4, __pyx_L1_error)
76291   __Pyx_GOTREF(__pyx_tuple__72);
76292   __Pyx_GIVEREF(__pyx_tuple__72);
76293 
76294   /* "(tree fragment)":2
76295  * def __reduce_cython__(self):
76296  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76297  * def __setstate_cython__(self, __pyx_state):
76298  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76299  */
76300   __pyx_tuple__73 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(5, 2, __pyx_L1_error)
76301   __Pyx_GOTREF(__pyx_tuple__73);
76302   __Pyx_GIVEREF(__pyx_tuple__73);
76303 
76304   /* "(tree fragment)":4
76305  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76306  * def __setstate_cython__(self, __pyx_state):
76307  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76308  */
76309   __pyx_tuple__74 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(5, 4, __pyx_L1_error)
76310   __Pyx_GOTREF(__pyx_tuple__74);
76311   __Pyx_GIVEREF(__pyx_tuple__74);
76312 
76313   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":352
76314  *
76315  *     def _hash_vals(self):
76316  *         v = ("chained_and",)             # <<<<<<<<<<<<<<
76317  *         for s in self.selectors:
76318  *             v += s._hash_vals()
76319  */
76320   __pyx_tuple__75 = PyTuple_Pack(1, __pyx_n_s_chained_and); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(21, 352, __pyx_L1_error)
76321   __Pyx_GOTREF(__pyx_tuple__75);
76322   __Pyx_GIVEREF(__pyx_tuple__75);
76323 
76324   /* "(tree fragment)":2
76325  * def __reduce_cython__(self):
76326  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76327  * def __setstate_cython__(self, __pyx_state):
76328  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76329  */
76330   __pyx_tuple__76 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__76)) __PYX_ERR(5, 2, __pyx_L1_error)
76331   __Pyx_GOTREF(__pyx_tuple__76);
76332   __Pyx_GIVEREF(__pyx_tuple__76);
76333 
76334   /* "(tree fragment)":4
76335  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76336  * def __setstate_cython__(self, __pyx_state):
76337  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76338  */
76339   __pyx_tuple__77 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(5, 4, __pyx_L1_error)
76340   __Pyx_GOTREF(__pyx_tuple__77);
76341   __Pyx_GIVEREF(__pyx_tuple__77);
76342 
76343   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":435
76344  *
76345  *     def _hash_vals(self):
76346  *         v = ("chained_or",)             # <<<<<<<<<<<<<<
76347  *         for s in self.selectors:
76348  *             v += s._hash_vals()
76349  */
76350   __pyx_tuple__78 = PyTuple_Pack(1, __pyx_n_s_chained_or); if (unlikely(!__pyx_tuple__78)) __PYX_ERR(21, 435, __pyx_L1_error)
76351   __Pyx_GOTREF(__pyx_tuple__78);
76352   __Pyx_GIVEREF(__pyx_tuple__78);
76353 
76354   /* "(tree fragment)":2
76355  * def __reduce_cython__(self):
76356  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76357  * def __setstate_cython__(self, __pyx_state):
76358  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76359  */
76360   __pyx_tuple__79 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(5, 2, __pyx_L1_error)
76361   __Pyx_GOTREF(__pyx_tuple__79);
76362   __Pyx_GIVEREF(__pyx_tuple__79);
76363 
76364   /* "(tree fragment)":4
76365  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76366  * def __setstate_cython__(self, __pyx_state):
76367  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76368  */
76369   __pyx_tuple__80 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__80)) __PYX_ERR(5, 4, __pyx_L1_error)
76370   __Pyx_GOTREF(__pyx_tuple__80);
76371   __Pyx_GIVEREF(__pyx_tuple__80);
76372 
76373   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":272
76374  *             if ((flags & pybuf.PyBUF_C_CONTIGUOUS == pybuf.PyBUF_C_CONTIGUOUS)
76375  *                 and not PyArray_CHKFLAGS(self, NPY_ARRAY_C_CONTIGUOUS)):
76376  *                 raise ValueError(u"ndarray is not C contiguous")             # <<<<<<<<<<<<<<
76377  *
76378  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
76379  */
76380   __pyx_tuple__81 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_C_contiguous); if (unlikely(!__pyx_tuple__81)) __PYX_ERR(22, 272, __pyx_L1_error)
76381   __Pyx_GOTREF(__pyx_tuple__81);
76382   __Pyx_GIVEREF(__pyx_tuple__81);
76383 
76384   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":276
76385  *             if ((flags & pybuf.PyBUF_F_CONTIGUOUS == pybuf.PyBUF_F_CONTIGUOUS)
76386  *                 and not PyArray_CHKFLAGS(self, NPY_ARRAY_F_CONTIGUOUS)):
76387  *                 raise ValueError(u"ndarray is not Fortran contiguous")             # <<<<<<<<<<<<<<
76388  *
76389  *             info.buf = PyArray_DATA(self)
76390  */
76391   __pyx_tuple__82 = PyTuple_Pack(1, __pyx_kp_u_ndarray_is_not_Fortran_contiguou); if (unlikely(!__pyx_tuple__82)) __PYX_ERR(22, 276, __pyx_L1_error)
76392   __Pyx_GOTREF(__pyx_tuple__82);
76393   __Pyx_GIVEREF(__pyx_tuple__82);
76394 
76395   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":306
76396  *                 if ((descr.byteorder == c'>' and little_endian) or
76397  *                     (descr.byteorder == c'<' and not little_endian)):
76398  *                     raise ValueError(u"Non-native byte order not supported")             # <<<<<<<<<<<<<<
76399  *                 if   t == NPY_BYTE:        f = "b"
76400  *                 elif t == NPY_UBYTE:       f = "B"
76401  */
76402   __pyx_tuple__83 = PyTuple_Pack(1, __pyx_kp_u_Non_native_byte_order_not_suppor); if (unlikely(!__pyx_tuple__83)) __PYX_ERR(22, 306, __pyx_L1_error)
76403   __Pyx_GOTREF(__pyx_tuple__83);
76404   __Pyx_GIVEREF(__pyx_tuple__83);
76405 
76406   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":856
76407  *
76408  *         if (end - f) - <int>(new_offset - offset[0]) < 15:
76409  *             raise RuntimeError(u"Format string allocated too short, see comment in numpy.pxd")             # <<<<<<<<<<<<<<
76410  *
76411  *         if ((child.byteorder == c'>' and little_endian) or
76412  */
76413   __pyx_tuple__84 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor); if (unlikely(!__pyx_tuple__84)) __PYX_ERR(22, 856, __pyx_L1_error)
76414   __Pyx_GOTREF(__pyx_tuple__84);
76415   __Pyx_GIVEREF(__pyx_tuple__84);
76416 
76417   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":880
76418  *             t = child.type_num
76419  *             if end - f < 5:
76420  *                 raise RuntimeError(u"Format string allocated too short.")             # <<<<<<<<<<<<<<
76421  *
76422  *             # Until ticket #99 is fixed, use integers to avoid warnings
76423  */
76424   __pyx_tuple__85 = PyTuple_Pack(1, __pyx_kp_u_Format_string_allocated_too_shor_2); if (unlikely(!__pyx_tuple__85)) __PYX_ERR(22, 880, __pyx_L1_error)
76425   __Pyx_GOTREF(__pyx_tuple__85);
76426   __Pyx_GIVEREF(__pyx_tuple__85);
76427 
76428   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1038
76429  *         _import_array()
76430  *     except Exception:
76431  *         raise ImportError("numpy.core.multiarray failed to import")             # <<<<<<<<<<<<<<
76432  *
76433  * cdef inline int import_umath() except -1:
76434  */
76435   __pyx_tuple__86 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_multiarray_failed_to); if (unlikely(!__pyx_tuple__86)) __PYX_ERR(22, 1038, __pyx_L1_error)
76436   __Pyx_GOTREF(__pyx_tuple__86);
76437   __Pyx_GIVEREF(__pyx_tuple__86);
76438 
76439   /* "../../../.local/lib/python3.6/site-packages/Cython/Includes/numpy/__init__.pxd":1044
76440  *         _import_umath()
76441  *     except Exception:
76442  *         raise ImportError("numpy.core.umath failed to import")             # <<<<<<<<<<<<<<
76443  *
76444  * cdef inline int import_ufunc() except -1:
76445  */
76446   __pyx_tuple__87 = PyTuple_Pack(1, __pyx_kp_s_numpy_core_umath_failed_to_impor); if (unlikely(!__pyx_tuple__87)) __PYX_ERR(22, 1044, __pyx_L1_error)
76447   __Pyx_GOTREF(__pyx_tuple__87);
76448   __Pyx_GIVEREF(__pyx_tuple__87);
76449 
76450   /* "View.MemoryView":133
76451  *
76452  *         if not self.ndim:
76453  *             raise ValueError("Empty shape tuple for cython.array")             # <<<<<<<<<<<<<<
76454  *
76455  *         if itemsize <= 0:
76456  */
76457   __pyx_tuple__88 = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple__88)) __PYX_ERR(5, 133, __pyx_L1_error)
76458   __Pyx_GOTREF(__pyx_tuple__88);
76459   __Pyx_GIVEREF(__pyx_tuple__88);
76460 
76461   /* "View.MemoryView":136
76462  *
76463  *         if itemsize <= 0:
76464  *             raise ValueError("itemsize <= 0 for cython.array")             # <<<<<<<<<<<<<<
76465  *
76466  *         if not isinstance(format, bytes):
76467  */
76468   __pyx_tuple__89 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__89)) __PYX_ERR(5, 136, __pyx_L1_error)
76469   __Pyx_GOTREF(__pyx_tuple__89);
76470   __Pyx_GIVEREF(__pyx_tuple__89);
76471 
76472   /* "View.MemoryView":148
76473  *
76474  *         if not self._shape:
76475  *             raise MemoryError("unable to allocate shape and strides.")             # <<<<<<<<<<<<<<
76476  *
76477  *
76478  */
76479   __pyx_tuple__90 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__90)) __PYX_ERR(5, 148, __pyx_L1_error)
76480   __Pyx_GOTREF(__pyx_tuple__90);
76481   __Pyx_GIVEREF(__pyx_tuple__90);
76482 
76483   /* "View.MemoryView":176
76484  *             self.data = <char *>malloc(self.len)
76485  *             if not self.data:
76486  *                 raise MemoryError("unable to allocate array data.")             # <<<<<<<<<<<<<<
76487  *
76488  *             if self.dtype_is_object:
76489  */
76490   __pyx_tuple__91 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__91)) __PYX_ERR(5, 176, __pyx_L1_error)
76491   __Pyx_GOTREF(__pyx_tuple__91);
76492   __Pyx_GIVEREF(__pyx_tuple__91);
76493 
76494   /* "View.MemoryView":192
76495  *             bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
76496  *         if not (flags & bufmode):
76497  *             raise ValueError("Can only create a buffer that is contiguous in memory.")             # <<<<<<<<<<<<<<
76498  *         info.buf = self.data
76499  *         info.len = self.len
76500  */
76501   __pyx_tuple__92 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__92)) __PYX_ERR(5, 192, __pyx_L1_error)
76502   __Pyx_GOTREF(__pyx_tuple__92);
76503   __Pyx_GIVEREF(__pyx_tuple__92);
76504 
76505   /* "(tree fragment)":2
76506  * def __reduce_cython__(self):
76507  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76508  * def __setstate_cython__(self, __pyx_state):
76509  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76510  */
76511   __pyx_tuple__93 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__93)) __PYX_ERR(5, 2, __pyx_L1_error)
76512   __Pyx_GOTREF(__pyx_tuple__93);
76513   __Pyx_GIVEREF(__pyx_tuple__93);
76514 
76515   /* "(tree fragment)":4
76516  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76517  * def __setstate_cython__(self, __pyx_state):
76518  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76519  */
76520   __pyx_tuple__94 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__94)) __PYX_ERR(5, 4, __pyx_L1_error)
76521   __Pyx_GOTREF(__pyx_tuple__94);
76522   __Pyx_GIVEREF(__pyx_tuple__94);
76523 
76524   /* "View.MemoryView":414
76525  *     def __setitem__(memoryview self, object index, object value):
76526  *         if self.view.readonly:
76527  *             raise TypeError("Cannot assign to read-only memoryview")             # <<<<<<<<<<<<<<
76528  *
76529  *         have_slices, index = _unellipsify(index, self.view.ndim)
76530  */
76531   __pyx_tuple__95 = PyTuple_Pack(1, __pyx_kp_s_Cannot_assign_to_read_only_memor); if (unlikely(!__pyx_tuple__95)) __PYX_ERR(5, 414, __pyx_L1_error)
76532   __Pyx_GOTREF(__pyx_tuple__95);
76533   __Pyx_GIVEREF(__pyx_tuple__95);
76534 
76535   /* "View.MemoryView":491
76536  *             result = struct.unpack(self.view.format, bytesitem)
76537  *         except struct.error:
76538  *             raise ValueError("Unable to convert item to object")             # <<<<<<<<<<<<<<
76539  *         else:
76540  *             if len(self.view.format) == 1:
76541  */
76542   __pyx_tuple__96 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__96)) __PYX_ERR(5, 491, __pyx_L1_error)
76543   __Pyx_GOTREF(__pyx_tuple__96);
76544   __Pyx_GIVEREF(__pyx_tuple__96);
76545 
76546   /* "View.MemoryView":516
76547  *     def __getbuffer__(self, Py_buffer *info, int flags):
76548  *         if flags & PyBUF_WRITABLE and self.view.readonly:
76549  *             raise ValueError("Cannot create writable memory view from read-only memoryview")             # <<<<<<<<<<<<<<
76550  *
76551  *         if flags & PyBUF_ND:
76552  */
76553   __pyx_tuple__97 = PyTuple_Pack(1, __pyx_kp_s_Cannot_create_writable_memory_vi); if (unlikely(!__pyx_tuple__97)) __PYX_ERR(5, 516, __pyx_L1_error)
76554   __Pyx_GOTREF(__pyx_tuple__97);
76555   __Pyx_GIVEREF(__pyx_tuple__97);
76556 
76557   /* "View.MemoryView":566
76558  *         if self.view.strides == NULL:
76559  *
76560  *             raise ValueError("Buffer view does not expose strides")             # <<<<<<<<<<<<<<
76561  *
76562  *         return tuple([stride for stride in self.view.strides[:self.view.ndim]])
76563  */
76564   __pyx_tuple__98 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__98)) __PYX_ERR(5, 566, __pyx_L1_error)
76565   __Pyx_GOTREF(__pyx_tuple__98);
76566   __Pyx_GIVEREF(__pyx_tuple__98);
76567 
76568   /* "View.MemoryView":573
76569  *     def suboffsets(self):
76570  *         if self.view.suboffsets == NULL:
76571  *             return (-1,) * self.view.ndim             # <<<<<<<<<<<<<<
76572  *
76573  *         return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]])
76574  */
76575   __pyx_tuple__99 = PyTuple_New(1); if (unlikely(!__pyx_tuple__99)) __PYX_ERR(5, 573, __pyx_L1_error)
76576   __Pyx_GOTREF(__pyx_tuple__99);
76577   __Pyx_INCREF(__pyx_int_neg_1);
76578   __Pyx_GIVEREF(__pyx_int_neg_1);
76579   PyTuple_SET_ITEM(__pyx_tuple__99, 0, __pyx_int_neg_1);
76580   __Pyx_GIVEREF(__pyx_tuple__99);
76581 
76582   /* "(tree fragment)":2
76583  * def __reduce_cython__(self):
76584  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76585  * def __setstate_cython__(self, __pyx_state):
76586  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76587  */
76588   __pyx_tuple__100 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__100)) __PYX_ERR(5, 2, __pyx_L1_error)
76589   __Pyx_GOTREF(__pyx_tuple__100);
76590   __Pyx_GIVEREF(__pyx_tuple__100);
76591 
76592   /* "(tree fragment)":4
76593  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76594  * def __setstate_cython__(self, __pyx_state):
76595  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76596  */
76597   __pyx_tuple__101 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__101)) __PYX_ERR(5, 4, __pyx_L1_error)
76598   __Pyx_GOTREF(__pyx_tuple__101);
76599   __Pyx_GIVEREF(__pyx_tuple__101);
76600 
76601   /* "View.MemoryView":678
76602  *         if item is Ellipsis:
76603  *             if not seen_ellipsis:
76604  *                 result.extend([slice(None)] * (ndim - len(tup) + 1))             # <<<<<<<<<<<<<<
76605  *                 seen_ellipsis = True
76606  *             else:
76607  */
76608   __pyx_slice__102 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__102)) __PYX_ERR(5, 678, __pyx_L1_error)
76609   __Pyx_GOTREF(__pyx_slice__102);
76610   __Pyx_GIVEREF(__pyx_slice__102);
76611 
76612   /* "View.MemoryView":699
76613  *     for suboffset in suboffsets[:ndim]:
76614  *         if suboffset >= 0:
76615  *             raise ValueError("Indirect dimensions not supported")             # <<<<<<<<<<<<<<
76616  *
76617  *
76618  */
76619   __pyx_tuple__103 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__103)) __PYX_ERR(5, 699, __pyx_L1_error)
76620   __Pyx_GOTREF(__pyx_tuple__103);
76621   __Pyx_GIVEREF(__pyx_tuple__103);
76622 
76623   /* "(tree fragment)":2
76624  * def __reduce_cython__(self):
76625  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76626  * def __setstate_cython__(self, __pyx_state):
76627  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76628  */
76629   __pyx_tuple__104 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__104)) __PYX_ERR(5, 2, __pyx_L1_error)
76630   __Pyx_GOTREF(__pyx_tuple__104);
76631   __Pyx_GIVEREF(__pyx_tuple__104);
76632 
76633   /* "(tree fragment)":4
76634  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")
76635  * def __setstate_cython__(self, __pyx_state):
76636  *     raise TypeError("no default __reduce__ due to non-trivial __cinit__")             # <<<<<<<<<<<<<<
76637  */
76638   __pyx_tuple__105 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__105)) __PYX_ERR(5, 4, __pyx_L1_error)
76639   __Pyx_GOTREF(__pyx_tuple__105);
76640   __Pyx_GIVEREF(__pyx_tuple__105);
76641 
76642   /* "yt/geometry/selection_routines.pyx":75
76643  * @cython.wraparound(False)
76644  * @cython.cdivision(True)
76645  * def convert_mask_to_indices(np.ndarray[np.uint8_t, ndim=3, cast=True] mask,             # <<<<<<<<<<<<<<
76646  *             int count, int transpose = 0):
76647  *     cdef int i, j, k, cpos
76648  */
76649   __pyx_tuple__106 = PyTuple_Pack(8, __pyx_n_s_mask, __pyx_n_s_count, __pyx_n_s_transpose, __pyx_n_s_i, __pyx_n_s_j, __pyx_n_s_k, __pyx_n_s_cpos, __pyx_n_s_indices); if (unlikely(!__pyx_tuple__106)) __PYX_ERR(0, 75, __pyx_L1_error)
76650   __Pyx_GOTREF(__pyx_tuple__106);
76651   __Pyx_GIVEREF(__pyx_tuple__106);
76652   __pyx_codeobj__107 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__106, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_yt_geometry_selection_routines_p, __pyx_n_s_convert_mask_to_indices, 75, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__107)) __PYX_ERR(0, 75, __pyx_L1_error)
76653 
76654   /* "yt/geometry/selection_routines.pyx":114
76655  *     return count
76656  *
76657  * def mask_fill(np.ndarray[np.float64_t, ndim=1] out,             # <<<<<<<<<<<<<<
76658  *               np.int64_t offset,
76659  *               np.ndarray[np.uint8_t, ndim=3, cast=True] mask,
76660  */
76661   __pyx_tuple__108 = PyTuple_Pack(4, __pyx_n_s_out, __pyx_n_s_offset, __pyx_n_s_mask, __pyx_n_s_vals); if (unlikely(!__pyx_tuple__108)) __PYX_ERR(0, 114, __pyx_L1_error)
76662   __Pyx_GOTREF(__pyx_tuple__108);
76663   __Pyx_GIVEREF(__pyx_tuple__108);
76664   __pyx_codeobj__109 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__108, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_yt_geometry_selection_routines_p, __pyx_n_s_mask_fill, 114, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__109)) __PYX_ERR(0, 114, __pyx_L1_error)
76665 
76666   /* "yt/geometry/selection_routines.pyx":128
76667  * @cython.boundscheck(False)
76668  * @cython.wraparound(False)
76669  * def points_in_cells(             # <<<<<<<<<<<<<<
76670  *         np.float64_t[:] cx,
76671  *         np.float64_t[:] cy,
76672  */
76673   __pyx_tuple__110 = PyTuple_Pack(14, __pyx_n_s_cx, __pyx_n_s_cy, __pyx_n_s_cz, __pyx_n_s_dx, __pyx_n_s_dy, __pyx_n_s_dz, __pyx_n_s_px, __pyx_n_s_py, __pyx_n_s_pz, __pyx_n_s_p, __pyx_n_s_c, __pyx_n_s_n_p, __pyx_n_s_n_c, __pyx_n_s_mask); if (unlikely(!__pyx_tuple__110)) __PYX_ERR(0, 128, __pyx_L1_error)
76674   __Pyx_GOTREF(__pyx_tuple__110);
76675   __Pyx_GIVEREF(__pyx_tuple__110);
76676   __pyx_codeobj__111 = (PyObject*)__Pyx_PyCode_New(9, 0, 14, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__110, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_yt_geometry_selection_routines_p, __pyx_n_s_points_in_cells, 128, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__111)) __PYX_ERR(0, 128, __pyx_L1_error)
76677 
76678   /* "yt/geometry/_selection_routines/selector_object.pxi":472
76679  *     @cython.wraparound(False)
76680  *     @cython.cdivision(True)
76681  *     def count_points(self, np.ndarray[floating, ndim=1] x,             # <<<<<<<<<<<<<<
76682  *                            np.ndarray[floating, ndim=1] y,
76683  *                            np.ndarray[floating, ndim=1] z,
76684  */
76685   __pyx_tuple__112 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_radii, __pyx_n_s_count, __pyx_n_s_i, __pyx_n_s_pos, __pyx_n_s_radius, __pyx_n_s_radii_2); if (unlikely(!__pyx_tuple__112)) __PYX_ERR(1, 472, __pyx_L1_error)
76686   __Pyx_GOTREF(__pyx_tuple__112);
76687   __Pyx_GIVEREF(__pyx_tuple__112);
76688   __pyx_codeobj__113 = (PyObject*)__Pyx_PyCode_New(5, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__112, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_yt_geometry__selection_routines, __pyx_n_s_count_points, 472, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__113)) __PYX_ERR(1, 472, __pyx_L1_error)
76689 
76690   /* "yt/geometry/_selection_routines/selector_object.pxi":506
76691  *     @cython.wraparound(False)
76692  *     @cython.cdivision(True)
76693  *     def select_points(self,             # <<<<<<<<<<<<<<
76694  *                       np.ndarray[floating, ndim=1] x,
76695  *                       np.ndarray[floating, ndim=1] y,
76696  */
76697   __pyx_tuple__114 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_x, __pyx_n_s_y, __pyx_n_s_z, __pyx_n_s_radii, __pyx_n_s_count, __pyx_n_s_i, __pyx_n_s_pos, __pyx_n_s_radius, __pyx_n_s_mask, __pyx_n_s_radii_2); if (unlikely(!__pyx_tuple__114)) __PYX_ERR(1, 506, __pyx_L1_error)
76698   __Pyx_GOTREF(__pyx_tuple__114);
76699   __Pyx_GIVEREF(__pyx_tuple__114);
76700   __pyx_codeobj__115 = (PyObject*)__Pyx_PyCode_New(5, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__114, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_yt_geometry__selection_routines, __pyx_n_s_select_points, 506, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__115)) __PYX_ERR(1, 506, __pyx_L1_error)
76701 
76702   /* "View.MemoryView":286
76703  *         return self.name
76704  *
76705  * cdef generic = Enum("<strided and direct or indirect>")             # <<<<<<<<<<<<<<
76706  * cdef strided = Enum("<strided and direct>") # default
76707  * cdef indirect = Enum("<strided and indirect>")
76708  */
76709   __pyx_tuple__116 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__116)) __PYX_ERR(5, 286, __pyx_L1_error)
76710   __Pyx_GOTREF(__pyx_tuple__116);
76711   __Pyx_GIVEREF(__pyx_tuple__116);
76712 
76713   /* "View.MemoryView":287
76714  *
76715  * cdef generic = Enum("<strided and direct or indirect>")
76716  * cdef strided = Enum("<strided and direct>") # default             # <<<<<<<<<<<<<<
76717  * cdef indirect = Enum("<strided and indirect>")
76718  *
76719  */
76720   __pyx_tuple__117 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__117)) __PYX_ERR(5, 287, __pyx_L1_error)
76721   __Pyx_GOTREF(__pyx_tuple__117);
76722   __Pyx_GIVEREF(__pyx_tuple__117);
76723 
76724   /* "View.MemoryView":288
76725  * cdef generic = Enum("<strided and direct or indirect>")
76726  * cdef strided = Enum("<strided and direct>") # default
76727  * cdef indirect = Enum("<strided and indirect>")             # <<<<<<<<<<<<<<
76728  *
76729  *
76730  */
76731   __pyx_tuple__118 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__118)) __PYX_ERR(5, 288, __pyx_L1_error)
76732   __Pyx_GOTREF(__pyx_tuple__118);
76733   __Pyx_GIVEREF(__pyx_tuple__118);
76734 
76735   /* "View.MemoryView":291
76736  *
76737  *
76738  * cdef contiguous = Enum("<contiguous and direct>")             # <<<<<<<<<<<<<<
76739  * cdef indirect_contiguous = Enum("<contiguous and indirect>")
76740  *
76741  */
76742   __pyx_tuple__119 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__119)) __PYX_ERR(5, 291, __pyx_L1_error)
76743   __Pyx_GOTREF(__pyx_tuple__119);
76744   __Pyx_GIVEREF(__pyx_tuple__119);
76745 
76746   /* "View.MemoryView":292
76747  *
76748  * cdef contiguous = Enum("<contiguous and direct>")
76749  * cdef indirect_contiguous = Enum("<contiguous and indirect>")             # <<<<<<<<<<<<<<
76750  *
76751  *
76752  */
76753   __pyx_tuple__120 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__120)) __PYX_ERR(5, 292, __pyx_L1_error)
76754   __Pyx_GOTREF(__pyx_tuple__120);
76755   __Pyx_GIVEREF(__pyx_tuple__120);
76756 
76757   /* "(tree fragment)":1
76758  * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
76759  *     cdef object __pyx_PickleError
76760  *     cdef object __pyx_result
76761  */
76762   __pyx_tuple__121 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__121)) __PYX_ERR(5, 1, __pyx_L1_error)
76763   __Pyx_GOTREF(__pyx_tuple__121);
76764   __Pyx_GIVEREF(__pyx_tuple__121);
76765   __pyx_codeobj__122 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__121, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__122)) __PYX_ERR(5, 1, __pyx_L1_error)
76766   __Pyx_RefNannyFinishContext();
76767   return 0;
76768   __pyx_L1_error:;
76769   __Pyx_RefNannyFinishContext();
76770   return -1;
76771 }
76772 
76773 static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
76774   __pyx_umethod_PyByteArray_Type_extend.type = (PyObject*)&PyByteArray_Type;
76775   if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
76776   __pyx_float_0_0 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_float_0_0)) __PYX_ERR(0, 1, __pyx_L1_error)
76777   __pyx_float_1_0 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_float_1_0)) __PYX_ERR(0, 1, __pyx_L1_error)
76778   __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
76779   __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
76780   __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) __PYX_ERR(0, 1, __pyx_L1_error)
76781   __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) __PYX_ERR(0, 1, __pyx_L1_error)
76782   __pyx_int_99 = PyInt_FromLong(99); if (unlikely(!__pyx_int_99)) __PYX_ERR(0, 1, __pyx_L1_error)
76783   __pyx_int_184977713 = PyInt_FromLong(184977713L); if (unlikely(!__pyx_int_184977713)) __PYX_ERR(0, 1, __pyx_L1_error)
76784   __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error)
76785   return 0;
76786   __pyx_L1_error:;
76787   return -1;
76788 }
76789 
76790 static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/
76791 static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/
76792 static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/
76793 static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/
76794 static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/
76795 static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/
76796 static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/
76797 
76798 static int __Pyx_modinit_global_init_code(void) {
76799   __Pyx_RefNannyDeclarations
76800   __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0);
76801   /*--- Global init code ---*/
76802   generic = Py_None; Py_INCREF(Py_None);
76803   strided = Py_None; Py_INCREF(Py_None);
76804   indirect = Py_None; Py_INCREF(Py_None);
76805   contiguous = Py_None; Py_INCREF(Py_None);
76806   indirect_contiguous = Py_None; Py_INCREF(Py_None);
76807   __Pyx_RefNannyFinishContext();
76808   return 0;
76809 }
76810 
76811 static int __Pyx_modinit_variable_export_code(void) {
76812   __Pyx_RefNannyDeclarations
76813   __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
76814   /*--- Variable export code ---*/
76815   __Pyx_RefNannyFinishContext();
76816   return 0;
76817 }
76818 
76819 static int __Pyx_modinit_function_export_code(void) {
76820   __Pyx_RefNannyDeclarations
76821   __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
76822   /*--- Function export code ---*/
76823   __Pyx_RefNannyFinishContext();
76824   return 0;
76825 }
76826 
76827 static int __Pyx_modinit_type_init_code(void) {
76828   __Pyx_RefNannyDeclarations
76829   __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0);
76830   /*--- Type init code ---*/
76831   __pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject = &__pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject;
76832   __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject.recursively_visit_octs = (void (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, int, struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_recursively_visit_octs *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_recursively_visit_octs;
76833   __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject.visit_oct_cells = (void (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *, struct __pyx_t_2yt_8geometry_12oct_visitors_Oct *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor *, int, int, int))__pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_visit_oct_cells;
76834   __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject.select_grid = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_grid;
76835   __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject.select_grid_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid_edge *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_grid_edge;
76836   __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_cell;
76837   __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_point;
76838   __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_sphere;
76839   __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_bbox;
76840   __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_select_bbox_edge;
76841   __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject.fill_mask_selector = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, int *, PyArrayObject *, PyArrayObject *, int))__pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_fill_mask_selector;
76842   __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject.visit_grid_cells = (void (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, struct __pyx_t_2yt_8geometry_13grid_visitors_GridVisitorData *, __pyx_t_2yt_8geometry_13grid_visitors_grid_visitor_function *, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_visit_grid_cells *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_visit_grid_cells;
76843   __pyx_vtable_2yt_8geometry_18selection_routines_SelectorObject.periodic_difference = (__pyx_t_5numpy_float64_t (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t, __pyx_t_5numpy_float64_t, int))__pyx_f_2yt_8geometry_18selection_routines_14SelectorObject_periodic_difference;
76844   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_SelectorObject) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
76845   #if PY_VERSION_HEX < 0x030800B1
76846   __pyx_type_2yt_8geometry_18selection_routines_SelectorObject.tp_print = 0;
76847   #endif
76848   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_SelectorObject.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_SelectorObject.tp_getattro == PyObject_GenericGetAttr)) {
76849     __pyx_type_2yt_8geometry_18selection_routines_SelectorObject.tp_getattro = __Pyx_PyObject_GenericGetAttr;
76850   }
76851   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_SelectorObject.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
76852   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_SelectorObject, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_SelectorObject) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
76853   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_SelectorObject) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
76854   __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject = &__pyx_type_2yt_8geometry_18selection_routines_SelectorObject;
76855   __pyx_vtabptr_2yt_8geometry_18selection_routines_AlwaysSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_AlwaysSelector;
76856   __pyx_vtable_2yt_8geometry_18selection_routines_AlwaysSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
76857   __pyx_vtable_2yt_8geometry_18selection_routines_AlwaysSelector.__pyx_base.select_grid = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_grid;
76858   __pyx_vtable_2yt_8geometry_18selection_routines_AlwaysSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_cell;
76859   __pyx_vtable_2yt_8geometry_18selection_routines_AlwaysSelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_point;
76860   __pyx_vtable_2yt_8geometry_18selection_routines_AlwaysSelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_sphere;
76861   __pyx_vtable_2yt_8geometry_18selection_routines_AlwaysSelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_bbox;
76862   __pyx_vtable_2yt_8geometry_18selection_routines_AlwaysSelector.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14AlwaysSelector_select_bbox_edge;
76863   __pyx_type_2yt_8geometry_18selection_routines_AlwaysSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
76864   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_AlwaysSelector) < 0) __PYX_ERR(18, 1, __pyx_L1_error)
76865   #if PY_VERSION_HEX < 0x030800B1
76866   __pyx_type_2yt_8geometry_18selection_routines_AlwaysSelector.tp_print = 0;
76867   #endif
76868   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_AlwaysSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_AlwaysSelector.tp_getattro == PyObject_GenericGetAttr)) {
76869     __pyx_type_2yt_8geometry_18selection_routines_AlwaysSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
76870   }
76871   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_AlwaysSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_AlwaysSelector) < 0) __PYX_ERR(18, 1, __pyx_L1_error)
76872   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_AlwaysSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_AlwaysSelector) < 0) __PYX_ERR(18, 1, __pyx_L1_error)
76873   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_AlwaysSelector) < 0) __PYX_ERR(18, 1, __pyx_L1_error)
76874   __pyx_ptype_2yt_8geometry_18selection_routines_AlwaysSelector = &__pyx_type_2yt_8geometry_18selection_routines_AlwaysSelector;
76875   __pyx_vtabptr_2yt_8geometry_18selection_routines_OctreeSubsetSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_OctreeSubsetSelector;
76876   __pyx_vtable_2yt_8geometry_18selection_routines_OctreeSubsetSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
76877   __pyx_vtable_2yt_8geometry_18selection_routines_OctreeSubsetSelector.__pyx_base.select_grid = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_grid;
76878   __pyx_vtable_2yt_8geometry_18selection_routines_OctreeSubsetSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_cell;
76879   __pyx_vtable_2yt_8geometry_18selection_routines_OctreeSubsetSelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_point;
76880   __pyx_vtable_2yt_8geometry_18selection_routines_OctreeSubsetSelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_sphere;
76881   __pyx_vtable_2yt_8geometry_18selection_routines_OctreeSubsetSelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_20OctreeSubsetSelector_select_bbox;
76882   __pyx_type_2yt_8geometry_18selection_routines_OctreeSubsetSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
76883   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_OctreeSubsetSelector) < 0) __PYX_ERR(16, 1, __pyx_L1_error)
76884   #if PY_VERSION_HEX < 0x030800B1
76885   __pyx_type_2yt_8geometry_18selection_routines_OctreeSubsetSelector.tp_print = 0;
76886   #endif
76887   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_OctreeSubsetSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_OctreeSubsetSelector.tp_getattro == PyObject_GenericGetAttr)) {
76888     __pyx_type_2yt_8geometry_18selection_routines_OctreeSubsetSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
76889   }
76890   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_OctreeSubsetSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_OctreeSubsetSelector) < 0) __PYX_ERR(16, 1, __pyx_L1_error)
76891   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_OctreeSubsetSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_OctreeSubsetSelector) < 0) __PYX_ERR(16, 1, __pyx_L1_error)
76892   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_OctreeSubsetSelector) < 0) __PYX_ERR(16, 1, __pyx_L1_error)
76893   __pyx_ptype_2yt_8geometry_18selection_routines_OctreeSubsetSelector = &__pyx_type_2yt_8geometry_18selection_routines_OctreeSubsetSelector;
76894   __pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_BooleanSelector;
76895   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
76896   __pyx_type_2yt_8geometry_18selection_routines_BooleanSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
76897   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_BooleanSelector) < 0) __PYX_ERR(21, 2, __pyx_L1_error)
76898   #if PY_VERSION_HEX < 0x030800B1
76899   __pyx_type_2yt_8geometry_18selection_routines_BooleanSelector.tp_print = 0;
76900   #endif
76901   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_BooleanSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_BooleanSelector.tp_getattro == PyObject_GenericGetAttr)) {
76902     __pyx_type_2yt_8geometry_18selection_routines_BooleanSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
76903   }
76904   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_BooleanSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanSelector) < 0) __PYX_ERR(21, 2, __pyx_L1_error)
76905   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_BooleanSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_BooleanSelector) < 0) __PYX_ERR(21, 2, __pyx_L1_error)
76906   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_BooleanSelector) < 0) __PYX_ERR(21, 2, __pyx_L1_error)
76907   __pyx_ptype_2yt_8geometry_18selection_routines_BooleanSelector = &__pyx_type_2yt_8geometry_18selection_routines_BooleanSelector;
76908   __pyx_vtabptr_2yt_8geometry_18selection_routines_PointSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_PointSelector;
76909   __pyx_vtable_2yt_8geometry_18selection_routines_PointSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
76910   __pyx_vtable_2yt_8geometry_18selection_routines_PointSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_13PointSelector_select_cell;
76911   __pyx_vtable_2yt_8geometry_18selection_routines_PointSelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_13PointSelector_select_sphere;
76912   __pyx_vtable_2yt_8geometry_18selection_routines_PointSelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_13PointSelector_select_bbox;
76913   __pyx_vtable_2yt_8geometry_18selection_routines_PointSelector.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_13PointSelector_select_bbox_edge;
76914   __pyx_type_2yt_8geometry_18selection_routines_PointSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
76915   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_PointSelector) < 0) __PYX_ERR(6, 1, __pyx_L1_error)
76916   #if PY_VERSION_HEX < 0x030800B1
76917   __pyx_type_2yt_8geometry_18selection_routines_PointSelector.tp_print = 0;
76918   #endif
76919   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_PointSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_PointSelector.tp_getattro == PyObject_GenericGetAttr)) {
76920     __pyx_type_2yt_8geometry_18selection_routines_PointSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
76921   }
76922   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_PointSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_PointSelector) < 0) __PYX_ERR(6, 1, __pyx_L1_error)
76923   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_PointSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_PointSelector) < 0) __PYX_ERR(6, 1, __pyx_L1_error)
76924   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_PointSelector) < 0) __PYX_ERR(6, 1, __pyx_L1_error)
76925   __pyx_ptype_2yt_8geometry_18selection_routines_PointSelector = &__pyx_type_2yt_8geometry_18selection_routines_PointSelector;
76926   __pyx_vtabptr_2yt_8geometry_18selection_routines_SphereSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_SphereSelector;
76927   __pyx_vtable_2yt_8geometry_18selection_routines_SphereSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
76928   __pyx_vtable_2yt_8geometry_18selection_routines_SphereSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_cell;
76929   __pyx_vtable_2yt_8geometry_18selection_routines_SphereSelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_point;
76930   __pyx_vtable_2yt_8geometry_18selection_routines_SphereSelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_sphere;
76931   __pyx_vtable_2yt_8geometry_18selection_routines_SphereSelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_bbox;
76932   __pyx_vtable_2yt_8geometry_18selection_routines_SphereSelector.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14SphereSelector_select_bbox_edge;
76933   __pyx_type_2yt_8geometry_18selection_routines_SphereSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
76934   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_SphereSelector) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
76935   #if PY_VERSION_HEX < 0x030800B1
76936   __pyx_type_2yt_8geometry_18selection_routines_SphereSelector.tp_print = 0;
76937   #endif
76938   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_SphereSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_SphereSelector.tp_getattro == PyObject_GenericGetAttr)) {
76939     __pyx_type_2yt_8geometry_18selection_routines_SphereSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
76940   }
76941   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_SphereSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_SphereSelector) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
76942   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_SphereSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_SphereSelector) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
76943   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_SphereSelector) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
76944   __pyx_ptype_2yt_8geometry_18selection_routines_SphereSelector = &__pyx_type_2yt_8geometry_18selection_routines_SphereSelector;
76945   __pyx_vtabptr_2yt_8geometry_18selection_routines_RegionSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_RegionSelector;
76946   __pyx_vtable_2yt_8geometry_18selection_routines_RegionSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
76947   __pyx_vtable_2yt_8geometry_18selection_routines_RegionSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_cell;
76948   __pyx_vtable_2yt_8geometry_18selection_routines_RegionSelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_point;
76949   __pyx_vtable_2yt_8geometry_18selection_routines_RegionSelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_sphere;
76950   __pyx_vtable_2yt_8geometry_18selection_routines_RegionSelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_bbox;
76951   __pyx_vtable_2yt_8geometry_18selection_routines_RegionSelector.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_select_bbox_edge;
76952   __pyx_vtable_2yt_8geometry_18selection_routines_RegionSelector.__pyx_base.fill_mask_selector = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, int *, PyArrayObject *, PyArrayObject *, int))__pyx_f_2yt_8geometry_18selection_routines_14RegionSelector_fill_mask_selector;
76953   __pyx_type_2yt_8geometry_18selection_routines_RegionSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
76954   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_RegionSelector) < 0) __PYX_ERR(7, 1, __pyx_L1_error)
76955   #if PY_VERSION_HEX < 0x030800B1
76956   __pyx_type_2yt_8geometry_18selection_routines_RegionSelector.tp_print = 0;
76957   #endif
76958   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_RegionSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_RegionSelector.tp_getattro == PyObject_GenericGetAttr)) {
76959     __pyx_type_2yt_8geometry_18selection_routines_RegionSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
76960   }
76961   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_RegionSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_RegionSelector) < 0) __PYX_ERR(7, 1, __pyx_L1_error)
76962   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_RegionSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_RegionSelector) < 0) __PYX_ERR(7, 1, __pyx_L1_error)
76963   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_RegionSelector) < 0) __PYX_ERR(7, 1, __pyx_L1_error)
76964   __pyx_ptype_2yt_8geometry_18selection_routines_RegionSelector = &__pyx_type_2yt_8geometry_18selection_routines_RegionSelector;
76965   __pyx_vtabptr_2yt_8geometry_18selection_routines_CutRegionSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_CutRegionSelector;
76966   __pyx_vtable_2yt_8geometry_18selection_routines_CutRegionSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
76967   __pyx_vtable_2yt_8geometry_18selection_routines_CutRegionSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_cell;
76968   __pyx_vtable_2yt_8geometry_18selection_routines_CutRegionSelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_point;
76969   __pyx_vtable_2yt_8geometry_18selection_routines_CutRegionSelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_sphere;
76970   __pyx_vtable_2yt_8geometry_18selection_routines_CutRegionSelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_bbox;
76971   __pyx_vtable_2yt_8geometry_18selection_routines_CutRegionSelector.select_bbox_dge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_CutRegionSelector *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_17CutRegionSelector_select_bbox_dge;
76972   __pyx_type_2yt_8geometry_18selection_routines_CutRegionSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
76973   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_CutRegionSelector) < 0) __PYX_ERR(3, 1, __pyx_L1_error)
76974   #if PY_VERSION_HEX < 0x030800B1
76975   __pyx_type_2yt_8geometry_18selection_routines_CutRegionSelector.tp_print = 0;
76976   #endif
76977   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_CutRegionSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_CutRegionSelector.tp_getattro == PyObject_GenericGetAttr)) {
76978     __pyx_type_2yt_8geometry_18selection_routines_CutRegionSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
76979   }
76980   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_CutRegionSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_CutRegionSelector) < 0) __PYX_ERR(3, 1, __pyx_L1_error)
76981   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CutRegionSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_CutRegionSelector) < 0) __PYX_ERR(3, 1, __pyx_L1_error)
76982   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_CutRegionSelector) < 0) __PYX_ERR(3, 1, __pyx_L1_error)
76983   __pyx_ptype_2yt_8geometry_18selection_routines_CutRegionSelector = &__pyx_type_2yt_8geometry_18selection_routines_CutRegionSelector;
76984   __pyx_vtabptr_2yt_8geometry_18selection_routines_DiskSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_DiskSelector;
76985   __pyx_vtable_2yt_8geometry_18selection_routines_DiskSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
76986   __pyx_vtable_2yt_8geometry_18selection_routines_DiskSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_cell;
76987   __pyx_vtable_2yt_8geometry_18selection_routines_DiskSelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_point;
76988   __pyx_vtable_2yt_8geometry_18selection_routines_DiskSelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_sphere;
76989   __pyx_vtable_2yt_8geometry_18selection_routines_DiskSelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_bbox;
76990   __pyx_vtable_2yt_8geometry_18selection_routines_DiskSelector.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_12DiskSelector_select_bbox_edge;
76991   __pyx_type_2yt_8geometry_18selection_routines_DiskSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
76992   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_DiskSelector) < 0) __PYX_ERR(8, 1, __pyx_L1_error)
76993   #if PY_VERSION_HEX < 0x030800B1
76994   __pyx_type_2yt_8geometry_18selection_routines_DiskSelector.tp_print = 0;
76995   #endif
76996   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_DiskSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_DiskSelector.tp_getattro == PyObject_GenericGetAttr)) {
76997     __pyx_type_2yt_8geometry_18selection_routines_DiskSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
76998   }
76999   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_DiskSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_DiskSelector) < 0) __PYX_ERR(8, 1, __pyx_L1_error)
77000   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DiskSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_DiskSelector) < 0) __PYX_ERR(8, 1, __pyx_L1_error)
77001   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_DiskSelector) < 0) __PYX_ERR(8, 1, __pyx_L1_error)
77002   __pyx_ptype_2yt_8geometry_18selection_routines_DiskSelector = &__pyx_type_2yt_8geometry_18selection_routines_DiskSelector;
77003   __pyx_vtabptr_2yt_8geometry_18selection_routines_CuttingPlaneSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_CuttingPlaneSelector;
77004   __pyx_vtable_2yt_8geometry_18selection_routines_CuttingPlaneSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
77005   __pyx_vtable_2yt_8geometry_18selection_routines_CuttingPlaneSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_cell;
77006   __pyx_vtable_2yt_8geometry_18selection_routines_CuttingPlaneSelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_point;
77007   __pyx_vtable_2yt_8geometry_18selection_routines_CuttingPlaneSelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_sphere;
77008   __pyx_vtable_2yt_8geometry_18selection_routines_CuttingPlaneSelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_bbox;
77009   __pyx_vtable_2yt_8geometry_18selection_routines_CuttingPlaneSelector.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_20CuttingPlaneSelector_select_bbox_edge;
77010   __pyx_type_2yt_8geometry_18selection_routines_CuttingPlaneSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
77011   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_CuttingPlaneSelector) < 0) __PYX_ERR(9, 1, __pyx_L1_error)
77012   #if PY_VERSION_HEX < 0x030800B1
77013   __pyx_type_2yt_8geometry_18selection_routines_CuttingPlaneSelector.tp_print = 0;
77014   #endif
77015   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_CuttingPlaneSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_CuttingPlaneSelector.tp_getattro == PyObject_GenericGetAttr)) {
77016     __pyx_type_2yt_8geometry_18selection_routines_CuttingPlaneSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77017   }
77018   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_CuttingPlaneSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_CuttingPlaneSelector) < 0) __PYX_ERR(9, 1, __pyx_L1_error)
77019   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_CuttingPlaneSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_CuttingPlaneSelector) < 0) __PYX_ERR(9, 1, __pyx_L1_error)
77020   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_CuttingPlaneSelector) < 0) __PYX_ERR(9, 1, __pyx_L1_error)
77021   __pyx_ptype_2yt_8geometry_18selection_routines_CuttingPlaneSelector = &__pyx_type_2yt_8geometry_18selection_routines_CuttingPlaneSelector;
77022   __pyx_vtabptr_2yt_8geometry_18selection_routines_SliceSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_SliceSelector;
77023   __pyx_vtable_2yt_8geometry_18selection_routines_SliceSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
77024   __pyx_vtable_2yt_8geometry_18selection_routines_SliceSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_cell;
77025   __pyx_vtable_2yt_8geometry_18selection_routines_SliceSelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_point;
77026   __pyx_vtable_2yt_8geometry_18selection_routines_SliceSelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_sphere;
77027   __pyx_vtable_2yt_8geometry_18selection_routines_SliceSelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_bbox;
77028   __pyx_vtable_2yt_8geometry_18selection_routines_SliceSelector.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_13SliceSelector_select_bbox_edge;
77029   __pyx_type_2yt_8geometry_18selection_routines_SliceSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
77030   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_SliceSelector) < 0) __PYX_ERR(10, 1, __pyx_L1_error)
77031   #if PY_VERSION_HEX < 0x030800B1
77032   __pyx_type_2yt_8geometry_18selection_routines_SliceSelector.tp_print = 0;
77033   #endif
77034   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_SliceSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_SliceSelector.tp_getattro == PyObject_GenericGetAttr)) {
77035     __pyx_type_2yt_8geometry_18selection_routines_SliceSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77036   }
77037   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_SliceSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_SliceSelector) < 0) __PYX_ERR(10, 1, __pyx_L1_error)
77038   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_SliceSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_SliceSelector) < 0) __PYX_ERR(10, 1, __pyx_L1_error)
77039   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_SliceSelector) < 0) __PYX_ERR(10, 1, __pyx_L1_error)
77040   __pyx_ptype_2yt_8geometry_18selection_routines_SliceSelector = &__pyx_type_2yt_8geometry_18selection_routines_SliceSelector;
77041   __pyx_vtabptr_2yt_8geometry_18selection_routines_OrthoRaySelector = &__pyx_vtable_2yt_8geometry_18selection_routines_OrthoRaySelector;
77042   __pyx_vtable_2yt_8geometry_18selection_routines_OrthoRaySelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
77043   __pyx_vtable_2yt_8geometry_18selection_routines_OrthoRaySelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_cell;
77044   __pyx_vtable_2yt_8geometry_18selection_routines_OrthoRaySelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_point;
77045   __pyx_vtable_2yt_8geometry_18selection_routines_OrthoRaySelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_sphere;
77046   __pyx_vtable_2yt_8geometry_18selection_routines_OrthoRaySelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_bbox;
77047   __pyx_vtable_2yt_8geometry_18selection_routines_OrthoRaySelector.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_16OrthoRaySelector_select_bbox_edge;
77048   __pyx_type_2yt_8geometry_18selection_routines_OrthoRaySelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
77049   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_OrthoRaySelector) < 0) __PYX_ERR(11, 1, __pyx_L1_error)
77050   #if PY_VERSION_HEX < 0x030800B1
77051   __pyx_type_2yt_8geometry_18selection_routines_OrthoRaySelector.tp_print = 0;
77052   #endif
77053   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_OrthoRaySelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_OrthoRaySelector.tp_getattro == PyObject_GenericGetAttr)) {
77054     __pyx_type_2yt_8geometry_18selection_routines_OrthoRaySelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77055   }
77056   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_OrthoRaySelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_OrthoRaySelector) < 0) __PYX_ERR(11, 1, __pyx_L1_error)
77057   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_OrthoRaySelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_OrthoRaySelector) < 0) __PYX_ERR(11, 1, __pyx_L1_error)
77058   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_OrthoRaySelector) < 0) __PYX_ERR(11, 1, __pyx_L1_error)
77059   __pyx_ptype_2yt_8geometry_18selection_routines_OrthoRaySelector = &__pyx_type_2yt_8geometry_18selection_routines_OrthoRaySelector;
77060   __pyx_vtabptr_2yt_8geometry_18selection_routines_RaySelector = &__pyx_vtable_2yt_8geometry_18selection_routines_RaySelector;
77061   __pyx_vtable_2yt_8geometry_18selection_routines_RaySelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
77062   __pyx_vtable_2yt_8geometry_18selection_routines_RaySelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_cell;
77063   __pyx_vtable_2yt_8geometry_18selection_routines_RaySelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_point;
77064   __pyx_vtable_2yt_8geometry_18selection_routines_RaySelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_sphere;
77065   __pyx_vtable_2yt_8geometry_18selection_routines_RaySelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_bbox;
77066   __pyx_vtable_2yt_8geometry_18selection_routines_RaySelector.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_11RaySelector_select_bbox_edge;
77067   __pyx_type_2yt_8geometry_18selection_routines_RaySelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
77068   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_RaySelector) < 0) __PYX_ERR(12, 23, __pyx_L1_error)
77069   #if PY_VERSION_HEX < 0x030800B1
77070   __pyx_type_2yt_8geometry_18selection_routines_RaySelector.tp_print = 0;
77071   #endif
77072   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_RaySelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_RaySelector.tp_getattro == PyObject_GenericGetAttr)) {
77073     __pyx_type_2yt_8geometry_18selection_routines_RaySelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77074   }
77075   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_RaySelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_RaySelector) < 0) __PYX_ERR(12, 23, __pyx_L1_error)
77076   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_RaySelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_RaySelector) < 0) __PYX_ERR(12, 23, __pyx_L1_error)
77077   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_RaySelector) < 0) __PYX_ERR(12, 23, __pyx_L1_error)
77078   __pyx_ptype_2yt_8geometry_18selection_routines_RaySelector = &__pyx_type_2yt_8geometry_18selection_routines_RaySelector;
77079   __pyx_vtabptr_2yt_8geometry_18selection_routines_DataCollectionSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_DataCollectionSelector;
77080   __pyx_vtable_2yt_8geometry_18selection_routines_DataCollectionSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
77081   __pyx_type_2yt_8geometry_18selection_routines_DataCollectionSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
77082   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_DataCollectionSelector) < 0) __PYX_ERR(13, 1, __pyx_L1_error)
77083   #if PY_VERSION_HEX < 0x030800B1
77084   __pyx_type_2yt_8geometry_18selection_routines_DataCollectionSelector.tp_print = 0;
77085   #endif
77086   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_DataCollectionSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_DataCollectionSelector.tp_getattro == PyObject_GenericGetAttr)) {
77087     __pyx_type_2yt_8geometry_18selection_routines_DataCollectionSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77088   }
77089   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_DataCollectionSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_DataCollectionSelector) < 0) __PYX_ERR(13, 1, __pyx_L1_error)
77090   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_DataCollectionSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_DataCollectionSelector) < 0) __PYX_ERR(13, 1, __pyx_L1_error)
77091   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_DataCollectionSelector) < 0) __PYX_ERR(13, 1, __pyx_L1_error)
77092   __pyx_ptype_2yt_8geometry_18selection_routines_DataCollectionSelector = &__pyx_type_2yt_8geometry_18selection_routines_DataCollectionSelector;
77093   __pyx_vtabptr_2yt_8geometry_18selection_routines_EllipsoidSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_EllipsoidSelector;
77094   __pyx_vtable_2yt_8geometry_18selection_routines_EllipsoidSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
77095   __pyx_vtable_2yt_8geometry_18selection_routines_EllipsoidSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_cell;
77096   __pyx_vtable_2yt_8geometry_18selection_routines_EllipsoidSelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_point;
77097   __pyx_vtable_2yt_8geometry_18selection_routines_EllipsoidSelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_sphere;
77098   __pyx_vtable_2yt_8geometry_18selection_routines_EllipsoidSelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_bbox;
77099   __pyx_vtable_2yt_8geometry_18selection_routines_EllipsoidSelector.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_17EllipsoidSelector_select_bbox_edge;
77100   __pyx_type_2yt_8geometry_18selection_routines_EllipsoidSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
77101   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_EllipsoidSelector) < 0) __PYX_ERR(14, 1, __pyx_L1_error)
77102   #if PY_VERSION_HEX < 0x030800B1
77103   __pyx_type_2yt_8geometry_18selection_routines_EllipsoidSelector.tp_print = 0;
77104   #endif
77105   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_EllipsoidSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_EllipsoidSelector.tp_getattro == PyObject_GenericGetAttr)) {
77106     __pyx_type_2yt_8geometry_18selection_routines_EllipsoidSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77107   }
77108   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_EllipsoidSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_EllipsoidSelector) < 0) __PYX_ERR(14, 1, __pyx_L1_error)
77109   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_EllipsoidSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_EllipsoidSelector) < 0) __PYX_ERR(14, 1, __pyx_L1_error)
77110   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_EllipsoidSelector) < 0) __PYX_ERR(14, 1, __pyx_L1_error)
77111   __pyx_ptype_2yt_8geometry_18selection_routines_EllipsoidSelector = &__pyx_type_2yt_8geometry_18selection_routines_EllipsoidSelector;
77112   __pyx_vtabptr_2yt_8geometry_18selection_routines_GridSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_GridSelector;
77113   __pyx_vtable_2yt_8geometry_18selection_routines_GridSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
77114   __pyx_vtable_2yt_8geometry_18selection_routines_GridSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_12GridSelector_select_cell;
77115   __pyx_vtable_2yt_8geometry_18selection_routines_GridSelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_12GridSelector_select_point;
77116   __pyx_type_2yt_8geometry_18selection_routines_GridSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
77117   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_GridSelector) < 0) __PYX_ERR(15, 1, __pyx_L1_error)
77118   #if PY_VERSION_HEX < 0x030800B1
77119   __pyx_type_2yt_8geometry_18selection_routines_GridSelector.tp_print = 0;
77120   #endif
77121   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_GridSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_GridSelector.tp_getattro == PyObject_GenericGetAttr)) {
77122     __pyx_type_2yt_8geometry_18selection_routines_GridSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77123   }
77124   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_GridSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_GridSelector) < 0) __PYX_ERR(15, 1, __pyx_L1_error)
77125   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_GridSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_GridSelector) < 0) __PYX_ERR(15, 1, __pyx_L1_error)
77126   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_GridSelector) < 0) __PYX_ERR(15, 1, __pyx_L1_error)
77127   __pyx_ptype_2yt_8geometry_18selection_routines_GridSelector = &__pyx_type_2yt_8geometry_18selection_routines_GridSelector;
77128   __pyx_vtabptr_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector;
77129   __pyx_vtable_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
77130   __pyx_vtable_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector.__pyx_base.select_grid = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_grid;
77131   __pyx_vtable_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_cell;
77132   __pyx_vtable_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_point;
77133   __pyx_vtable_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_sphere;
77134   __pyx_vtable_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_27IndexedOctreeSubsetSelector_select_bbox;
77135   __pyx_type_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
77136   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector) < 0) __PYX_ERR(17, 1, __pyx_L1_error)
77137   #if PY_VERSION_HEX < 0x030800B1
77138   __pyx_type_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector.tp_print = 0;
77139   #endif
77140   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector.tp_getattro == PyObject_GenericGetAttr)) {
77141     __pyx_type_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77142   }
77143   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector) < 0) __PYX_ERR(17, 1, __pyx_L1_error)
77144   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_IndexedOctreeSubsetSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector) < 0) __PYX_ERR(17, 1, __pyx_L1_error)
77145   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector) < 0) __PYX_ERR(17, 1, __pyx_L1_error)
77146   __pyx_ptype_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector = &__pyx_type_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector;
77147   __pyx_vtabptr_2yt_8geometry_18selection_routines_ComposeSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_ComposeSelector;
77148   __pyx_vtable_2yt_8geometry_18selection_routines_ComposeSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
77149   __pyx_vtable_2yt_8geometry_18selection_routines_ComposeSelector.__pyx_base.select_grid = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_grid;
77150   __pyx_vtable_2yt_8geometry_18selection_routines_ComposeSelector.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_cell;
77151   __pyx_vtable_2yt_8geometry_18selection_routines_ComposeSelector.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_point;
77152   __pyx_vtable_2yt_8geometry_18selection_routines_ComposeSelector.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_sphere;
77153   __pyx_vtable_2yt_8geometry_18selection_routines_ComposeSelector.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_bbox;
77154   __pyx_vtable_2yt_8geometry_18selection_routines_ComposeSelector.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_15ComposeSelector_select_bbox_edge;
77155   __pyx_type_2yt_8geometry_18selection_routines_ComposeSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
77156   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_ComposeSelector) < 0) __PYX_ERR(19, 1, __pyx_L1_error)
77157   #if PY_VERSION_HEX < 0x030800B1
77158   __pyx_type_2yt_8geometry_18selection_routines_ComposeSelector.tp_print = 0;
77159   #endif
77160   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_ComposeSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_ComposeSelector.tp_getattro == PyObject_GenericGetAttr)) {
77161     __pyx_type_2yt_8geometry_18selection_routines_ComposeSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77162   }
77163   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_ComposeSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_ComposeSelector) < 0) __PYX_ERR(19, 1, __pyx_L1_error)
77164   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ComposeSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_ComposeSelector) < 0) __PYX_ERR(19, 1, __pyx_L1_error)
77165   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_ComposeSelector) < 0) __PYX_ERR(19, 1, __pyx_L1_error)
77166   __pyx_ptype_2yt_8geometry_18selection_routines_ComposeSelector = &__pyx_type_2yt_8geometry_18selection_routines_ComposeSelector;
77167   __pyx_vtabptr_2yt_8geometry_18selection_routines_HaloParticlesSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_HaloParticlesSelector;
77168   __pyx_vtable_2yt_8geometry_18selection_routines_HaloParticlesSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
77169   __pyx_type_2yt_8geometry_18selection_routines_HaloParticlesSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
77170   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_HaloParticlesSelector) < 0) __PYX_ERR(20, 1, __pyx_L1_error)
77171   #if PY_VERSION_HEX < 0x030800B1
77172   __pyx_type_2yt_8geometry_18selection_routines_HaloParticlesSelector.tp_print = 0;
77173   #endif
77174   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_HaloParticlesSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_HaloParticlesSelector.tp_getattro == PyObject_GenericGetAttr)) {
77175     __pyx_type_2yt_8geometry_18selection_routines_HaloParticlesSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77176   }
77177   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_HaloParticlesSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_HaloParticlesSelector) < 0) __PYX_ERR(20, 1, __pyx_L1_error)
77178   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_HaloParticlesSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_HaloParticlesSelector) < 0) __PYX_ERR(20, 1, __pyx_L1_error)
77179   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_HaloParticlesSelector) < 0) __PYX_ERR(20, 1, __pyx_L1_error)
77180   __pyx_ptype_2yt_8geometry_18selection_routines_HaloParticlesSelector = &__pyx_type_2yt_8geometry_18selection_routines_HaloParticlesSelector;
77181   __pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanANDSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_BooleanANDSelector;
77182   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanANDSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanSelector;
77183   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanANDSelector.__pyx_base.__pyx_base.select_grid = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_grid;
77184   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanANDSelector.__pyx_base.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_cell;
77185   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanANDSelector.__pyx_base.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_point;
77186   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanANDSelector.__pyx_base.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_sphere;
77187   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanANDSelector.__pyx_base.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_bbox;
77188   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanANDSelector.__pyx_base.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanANDSelector_select_bbox_edge;
77189   __pyx_type_2yt_8geometry_18selection_routines_BooleanANDSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_BooleanSelector;
77190   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_BooleanANDSelector) < 0) __PYX_ERR(21, 16, __pyx_L1_error)
77191   #if PY_VERSION_HEX < 0x030800B1
77192   __pyx_type_2yt_8geometry_18selection_routines_BooleanANDSelector.tp_print = 0;
77193   #endif
77194   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_BooleanANDSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_BooleanANDSelector.tp_getattro == PyObject_GenericGetAttr)) {
77195     __pyx_type_2yt_8geometry_18selection_routines_BooleanANDSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77196   }
77197   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_BooleanANDSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanANDSelector) < 0) __PYX_ERR(21, 16, __pyx_L1_error)
77198   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_BooleanANDSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_BooleanANDSelector) < 0) __PYX_ERR(21, 16, __pyx_L1_error)
77199   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_BooleanANDSelector) < 0) __PYX_ERR(21, 16, __pyx_L1_error)
77200   __pyx_ptype_2yt_8geometry_18selection_routines_BooleanANDSelector = &__pyx_type_2yt_8geometry_18selection_routines_BooleanANDSelector;
77201   __pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanORSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_BooleanORSelector;
77202   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanORSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanSelector;
77203   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanORSelector.__pyx_base.__pyx_base.select_grid = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_grid;
77204   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanORSelector.__pyx_base.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_cell;
77205   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanORSelector.__pyx_base.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_point;
77206   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanORSelector.__pyx_base.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_sphere;
77207   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanORSelector.__pyx_base.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_bbox;
77208   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanORSelector.__pyx_base.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_17BooleanORSelector_select_bbox_edge;
77209   __pyx_type_2yt_8geometry_18selection_routines_BooleanORSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_BooleanSelector;
77210   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_BooleanORSelector) < 0) __PYX_ERR(21, 68, __pyx_L1_error)
77211   #if PY_VERSION_HEX < 0x030800B1
77212   __pyx_type_2yt_8geometry_18selection_routines_BooleanORSelector.tp_print = 0;
77213   #endif
77214   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_BooleanORSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_BooleanORSelector.tp_getattro == PyObject_GenericGetAttr)) {
77215     __pyx_type_2yt_8geometry_18selection_routines_BooleanORSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77216   }
77217   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_BooleanORSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanORSelector) < 0) __PYX_ERR(21, 68, __pyx_L1_error)
77218   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_BooleanORSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_BooleanORSelector) < 0) __PYX_ERR(21, 68, __pyx_L1_error)
77219   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_BooleanORSelector) < 0) __PYX_ERR(21, 68, __pyx_L1_error)
77220   __pyx_ptype_2yt_8geometry_18selection_routines_BooleanORSelector = &__pyx_type_2yt_8geometry_18selection_routines_BooleanORSelector;
77221   __pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanNOTSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_BooleanNOTSelector;
77222   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNOTSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanSelector;
77223   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNOTSelector.__pyx_base.__pyx_base.select_grid = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_grid;
77224   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNOTSelector.__pyx_base.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_cell;
77225   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNOTSelector.__pyx_base.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_point;
77226   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNOTSelector.__pyx_base.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_sphere;
77227   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNOTSelector.__pyx_base.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_bbox;
77228   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNOTSelector.__pyx_base.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanNOTSelector_select_bbox_edge;
77229   __pyx_type_2yt_8geometry_18selection_routines_BooleanNOTSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_BooleanSelector;
77230   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_BooleanNOTSelector) < 0) __PYX_ERR(21, 121, __pyx_L1_error)
77231   #if PY_VERSION_HEX < 0x030800B1
77232   __pyx_type_2yt_8geometry_18selection_routines_BooleanNOTSelector.tp_print = 0;
77233   #endif
77234   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_BooleanNOTSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_BooleanNOTSelector.tp_getattro == PyObject_GenericGetAttr)) {
77235     __pyx_type_2yt_8geometry_18selection_routines_BooleanNOTSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77236   }
77237   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_BooleanNOTSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanNOTSelector) < 0) __PYX_ERR(21, 121, __pyx_L1_error)
77238   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_BooleanNOTSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_BooleanNOTSelector) < 0) __PYX_ERR(21, 121, __pyx_L1_error)
77239   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_BooleanNOTSelector) < 0) __PYX_ERR(21, 121, __pyx_L1_error)
77240   __pyx_ptype_2yt_8geometry_18selection_routines_BooleanNOTSelector = &__pyx_type_2yt_8geometry_18selection_routines_BooleanNOTSelector;
77241   __pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanXORSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_BooleanXORSelector;
77242   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanXORSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanSelector;
77243   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanXORSelector.__pyx_base.__pyx_base.select_grid = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_grid;
77244   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanXORSelector.__pyx_base.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_cell;
77245   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanXORSelector.__pyx_base.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_point;
77246   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanXORSelector.__pyx_base.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_sphere;
77247   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanXORSelector.__pyx_base.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_bbox;
77248   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanXORSelector.__pyx_base.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanXORSelector_select_bbox_edge;
77249   __pyx_type_2yt_8geometry_18selection_routines_BooleanXORSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_BooleanSelector;
77250   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_BooleanXORSelector) < 0) __PYX_ERR(21, 159, __pyx_L1_error)
77251   #if PY_VERSION_HEX < 0x030800B1
77252   __pyx_type_2yt_8geometry_18selection_routines_BooleanXORSelector.tp_print = 0;
77253   #endif
77254   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_BooleanXORSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_BooleanXORSelector.tp_getattro == PyObject_GenericGetAttr)) {
77255     __pyx_type_2yt_8geometry_18selection_routines_BooleanXORSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77256   }
77257   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_BooleanXORSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanXORSelector) < 0) __PYX_ERR(21, 159, __pyx_L1_error)
77258   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_BooleanXORSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_BooleanXORSelector) < 0) __PYX_ERR(21, 159, __pyx_L1_error)
77259   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_BooleanXORSelector) < 0) __PYX_ERR(21, 159, __pyx_L1_error)
77260   __pyx_ptype_2yt_8geometry_18selection_routines_BooleanXORSelector = &__pyx_type_2yt_8geometry_18selection_routines_BooleanXORSelector;
77261   __pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanNEGSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_BooleanNEGSelector;
77262   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNEGSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanSelector;
77263   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNEGSelector.__pyx_base.__pyx_base.select_grid = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_grid;
77264   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNEGSelector.__pyx_base.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_cell;
77265   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNEGSelector.__pyx_base.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_point;
77266   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNEGSelector.__pyx_base.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_sphere;
77267   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNEGSelector.__pyx_base.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_bbox;
77268   __pyx_vtable_2yt_8geometry_18selection_routines_BooleanNEGSelector.__pyx_base.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_18BooleanNEGSelector_select_bbox_edge;
77269   __pyx_type_2yt_8geometry_18selection_routines_BooleanNEGSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_BooleanSelector;
77270   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_BooleanNEGSelector) < 0) __PYX_ERR(21, 213, __pyx_L1_error)
77271   #if PY_VERSION_HEX < 0x030800B1
77272   __pyx_type_2yt_8geometry_18selection_routines_BooleanNEGSelector.tp_print = 0;
77273   #endif
77274   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_BooleanNEGSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_BooleanNEGSelector.tp_getattro == PyObject_GenericGetAttr)) {
77275     __pyx_type_2yt_8geometry_18selection_routines_BooleanNEGSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77276   }
77277   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_BooleanNEGSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_BooleanNEGSelector) < 0) __PYX_ERR(21, 213, __pyx_L1_error)
77278   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_BooleanNEGSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_BooleanNEGSelector) < 0) __PYX_ERR(21, 213, __pyx_L1_error)
77279   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_BooleanNEGSelector) < 0) __PYX_ERR(21, 213, __pyx_L1_error)
77280   __pyx_ptype_2yt_8geometry_18selection_routines_BooleanNEGSelector = &__pyx_type_2yt_8geometry_18selection_routines_BooleanNEGSelector;
77281   __pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanSelector;
77282   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_SelectorObject;
77283   __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject;
77284   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanSelector) < 0) __PYX_ERR(21, 266, __pyx_L1_error)
77285   #if PY_VERSION_HEX < 0x030800B1
77286   __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanSelector.tp_print = 0;
77287   #endif
77288   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanSelector.tp_getattro == PyObject_GenericGetAttr)) {
77289     __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77290   }
77291   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanSelector) < 0) __PYX_ERR(21, 266, __pyx_L1_error)
77292   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ChainedBooleanSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanSelector) < 0) __PYX_ERR(21, 266, __pyx_L1_error)
77293   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanSelector) < 0) __PYX_ERR(21, 266, __pyx_L1_error)
77294   __pyx_ptype_2yt_8geometry_18selection_routines_ChainedBooleanSelector = &__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanSelector;
77295   __pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector;
77296   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanSelector;
77297   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.__pyx_base.__pyx_base.select_grid = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_grid;
77298   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.__pyx_base.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_cell;
77299   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.__pyx_base.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_point;
77300   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.__pyx_base.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_sphere;
77301   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.__pyx_base.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_bbox;
77302   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.__pyx_base.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_25ChainedBooleanANDSelector_select_bbox_edge;
77303   __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_ChainedBooleanSelector;
77304   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector) < 0) __PYX_ERR(21, 276, __pyx_L1_error)
77305   #if PY_VERSION_HEX < 0x030800B1
77306   __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.tp_print = 0;
77307   #endif
77308   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.tp_getattro == PyObject_GenericGetAttr)) {
77309     __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77310   }
77311   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector) < 0) __PYX_ERR(21, 276, __pyx_L1_error)
77312   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ChainedBooleanANDSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector) < 0) __PYX_ERR(21, 276, __pyx_L1_error)
77313   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector) < 0) __PYX_ERR(21, 276, __pyx_L1_error)
77314   __pyx_ptype_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector = &__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector;
77315   __pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanORSelector = &__pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanORSelector;
77316   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.__pyx_base = *__pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanSelector;
77317   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.__pyx_base.__pyx_base.select_grid = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_int32_t, struct __pyx_opt_args_2yt_8geometry_18selection_routines_14SelectorObject_select_grid *__pyx_optional_args))__pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_grid;
77318   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.__pyx_base.__pyx_base.select_cell = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_cell;
77319   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.__pyx_base.__pyx_base.select_point = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_point;
77320   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.__pyx_base.__pyx_base.select_sphere = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t))__pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_sphere;
77321   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.__pyx_base.__pyx_base.select_bbox = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_bbox;
77322   __pyx_vtable_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.__pyx_base.__pyx_base.select_bbox_edge = (int (*)(struct __pyx_obj_2yt_8geometry_18selection_routines_SelectorObject *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *))__pyx_f_2yt_8geometry_18selection_routines_24ChainedBooleanORSelector_select_bbox_edge;
77323   __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.tp_base = __pyx_ptype_2yt_8geometry_18selection_routines_ChainedBooleanSelector;
77324   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanORSelector) < 0) __PYX_ERR(21, 359, __pyx_L1_error)
77325   #if PY_VERSION_HEX < 0x030800B1
77326   __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.tp_print = 0;
77327   #endif
77328   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.tp_getattro == PyObject_GenericGetAttr)) {
77329     __pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77330   }
77331   if (__Pyx_SetVtable(__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanORSelector.tp_dict, __pyx_vtabptr_2yt_8geometry_18selection_routines_ChainedBooleanORSelector) < 0) __PYX_ERR(21, 359, __pyx_L1_error)
77332   if (PyObject_SetAttr(__pyx_m, __pyx_n_s_ChainedBooleanORSelector, (PyObject *)&__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanORSelector) < 0) __PYX_ERR(21, 359, __pyx_L1_error)
77333   if (__Pyx_setup_reduce((PyObject*)&__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanORSelector) < 0) __PYX_ERR(21, 359, __pyx_L1_error)
77334   __pyx_ptype_2yt_8geometry_18selection_routines_ChainedBooleanORSelector = &__pyx_type_2yt_8geometry_18selection_routines_ChainedBooleanORSelector;
77335   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct____init__) < 0) __PYX_ERR(3, 5, __pyx_L1_error)
77336   #if PY_VERSION_HEX < 0x030800B1
77337   __pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct____init__.tp_print = 0;
77338   #endif
77339   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct____init__.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct____init__.tp_getattro == PyObject_GenericGetAttr)) {
77340     __pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct____init__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
77341   }
77342   __pyx_ptype_2yt_8geometry_18selection_routines___pyx_scope_struct____init__ = &__pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct____init__;
77343   if (PyType_Ready(&__pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr) < 0) __PYX_ERR(3, 11, __pyx_L1_error)
77344   #if PY_VERSION_HEX < 0x030800B1
77345   __pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr.tp_print = 0;
77346   #endif
77347   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr.tp_dictoffset && __pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
77348     __pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
77349   }
77350   __pyx_ptype_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr = &__pyx_type_2yt_8geometry_18selection_routines___pyx_scope_struct_1_genexpr;
77351   __pyx_vtabptr_array = &__pyx_vtable_array;
77352   __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview;
77353   if (PyType_Ready(&__pyx_type___pyx_array) < 0) __PYX_ERR(5, 105, __pyx_L1_error)
77354   #if PY_VERSION_HEX < 0x030800B1
77355   __pyx_type___pyx_array.tp_print = 0;
77356   #endif
77357   if (__Pyx_SetVtable(__pyx_type___pyx_array.tp_dict, __pyx_vtabptr_array) < 0) __PYX_ERR(5, 105, __pyx_L1_error)
77358   if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_array) < 0) __PYX_ERR(5, 105, __pyx_L1_error)
77359   __pyx_array_type = &__pyx_type___pyx_array;
77360   if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(5, 279, __pyx_L1_error)
77361   #if PY_VERSION_HEX < 0x030800B1
77362   __pyx_type___pyx_MemviewEnum.tp_print = 0;
77363   #endif
77364   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_MemviewEnum.tp_dictoffset && __pyx_type___pyx_MemviewEnum.tp_getattro == PyObject_GenericGetAttr)) {
77365     __pyx_type___pyx_MemviewEnum.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77366   }
77367   if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(5, 279, __pyx_L1_error)
77368   __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum;
77369   __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview;
77370   __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer;
77371   __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice;
77372   __pyx_vtable_memoryview.setitem_slice_assignment = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_slice_assignment;
77373   __pyx_vtable_memoryview.setitem_slice_assign_scalar = (PyObject *(*)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_setitem_slice_assign_scalar;
77374   __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed;
77375   __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object;
77376   __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object;
77377   if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(5, 330, __pyx_L1_error)
77378   #if PY_VERSION_HEX < 0x030800B1
77379   __pyx_type___pyx_memoryview.tp_print = 0;
77380   #endif
77381   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryview.tp_dictoffset && __pyx_type___pyx_memoryview.tp_getattro == PyObject_GenericGetAttr)) {
77382     __pyx_type___pyx_memoryview.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77383   }
77384   if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(5, 330, __pyx_L1_error)
77385   if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(5, 330, __pyx_L1_error)
77386   __pyx_memoryview_type = &__pyx_type___pyx_memoryview;
77387   __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice;
77388   __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview;
77389   __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object;
77390   __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object;
77391   __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type;
77392   if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(5, 961, __pyx_L1_error)
77393   #if PY_VERSION_HEX < 0x030800B1
77394   __pyx_type___pyx_memoryviewslice.tp_print = 0;
77395   #endif
77396   if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryviewslice.tp_dictoffset && __pyx_type___pyx_memoryviewslice.tp_getattro == PyObject_GenericGetAttr)) {
77397     __pyx_type___pyx_memoryviewslice.tp_getattro = __Pyx_PyObject_GenericGetAttr;
77398   }
77399   if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(5, 961, __pyx_L1_error)
77400   if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(5, 961, __pyx_L1_error)
77401   __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice;
77402   __Pyx_RefNannyFinishContext();
77403   return 0;
77404   __pyx_L1_error:;
77405   __Pyx_RefNannyFinishContext();
77406   return -1;
77407 }
77408 
77409 static int __Pyx_modinit_type_import_code(void) {
77410   __Pyx_RefNannyDeclarations
77411   PyObject *__pyx_t_1 = NULL;
77412   __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0);
77413   /*--- Type import code ---*/
77414   __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 9, __pyx_L1_error)
77415   __Pyx_GOTREF(__pyx_t_1);
77416   __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type",
77417   #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
77418   sizeof(PyTypeObject),
77419   #else
77420   sizeof(PyHeapTypeObject),
77421   #endif
77422   __Pyx_ImportType_CheckSize_Warn);
77423    if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(25, 9, __pyx_L1_error)
77424   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77425   __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(22, 206, __pyx_L1_error)
77426   __Pyx_GOTREF(__pyx_t_1);
77427   __pyx_ptype_5numpy_dtype = __Pyx_ImportType(__pyx_t_1, "numpy", "dtype", sizeof(PyArray_Descr), __Pyx_ImportType_CheckSize_Ignore);
77428    if (!__pyx_ptype_5numpy_dtype) __PYX_ERR(22, 206, __pyx_L1_error)
77429   __pyx_ptype_5numpy_flatiter = __Pyx_ImportType(__pyx_t_1, "numpy", "flatiter", sizeof(PyArrayIterObject), __Pyx_ImportType_CheckSize_Warn);
77430    if (!__pyx_ptype_5numpy_flatiter) __PYX_ERR(22, 229, __pyx_L1_error)
77431   __pyx_ptype_5numpy_broadcast = __Pyx_ImportType(__pyx_t_1, "numpy", "broadcast", sizeof(PyArrayMultiIterObject), __Pyx_ImportType_CheckSize_Warn);
77432    if (!__pyx_ptype_5numpy_broadcast) __PYX_ERR(22, 233, __pyx_L1_error)
77433   __pyx_ptype_5numpy_ndarray = __Pyx_ImportType(__pyx_t_1, "numpy", "ndarray", sizeof(PyArrayObject), __Pyx_ImportType_CheckSize_Ignore);
77434    if (!__pyx_ptype_5numpy_ndarray) __PYX_ERR(22, 242, __pyx_L1_error)
77435   __pyx_ptype_5numpy_ufunc = __Pyx_ImportType(__pyx_t_1, "numpy", "ufunc", sizeof(PyUFuncObject), __Pyx_ImportType_CheckSize_Warn);
77436    if (!__pyx_ptype_5numpy_ufunc) __PYX_ERR(22, 918, __pyx_L1_error)
77437   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77438   __pyx_t_1 = PyImport_ImportModule("yt.geometry.oct_visitors"); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 33, __pyx_L1_error)
77439   __Pyx_GOTREF(__pyx_t_1);
77440   __pyx_ptype_2yt_8geometry_12oct_visitors_OctVisitor = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "OctVisitor", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_OctVisitor), __Pyx_ImportType_CheckSize_Warn);
77441    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_OctVisitor) __PYX_ERR(26, 33, __pyx_L1_error)
77442   __pyx_vtabptr_2yt_8geometry_12oct_visitors_OctVisitor = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_OctVisitor*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_OctVisitor->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_OctVisitor)) __PYX_ERR(26, 33, __pyx_L1_error)
77443   __pyx_ptype_2yt_8geometry_12oct_visitors_CountTotalOcts = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "CountTotalOcts", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_CountTotalOcts), __Pyx_ImportType_CheckSize_Warn);
77444    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_CountTotalOcts) __PYX_ERR(26, 59, __pyx_L1_error)
77445   __pyx_vtabptr_2yt_8geometry_12oct_visitors_CountTotalOcts = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CountTotalOcts*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_CountTotalOcts->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_CountTotalOcts)) __PYX_ERR(26, 59, __pyx_L1_error)
77446   __pyx_ptype_2yt_8geometry_12oct_visitors_CountTotalCells = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "CountTotalCells", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_CountTotalCells), __Pyx_ImportType_CheckSize_Warn);
77447    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_CountTotalCells) __PYX_ERR(26, 62, __pyx_L1_error)
77448   __pyx_vtabptr_2yt_8geometry_12oct_visitors_CountTotalCells = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CountTotalCells*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_CountTotalCells->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_CountTotalCells)) __PYX_ERR(26, 62, __pyx_L1_error)
77449   __pyx_ptype_2yt_8geometry_12oct_visitors_MarkOcts = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "MarkOcts", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_MarkOcts), __Pyx_ImportType_CheckSize_Warn);
77450    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_MarkOcts) __PYX_ERR(26, 65, __pyx_L1_error)
77451   __pyx_vtabptr_2yt_8geometry_12oct_visitors_MarkOcts = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_MarkOcts*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_MarkOcts->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_MarkOcts)) __PYX_ERR(26, 65, __pyx_L1_error)
77452   __pyx_ptype_2yt_8geometry_12oct_visitors_MaskOcts = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "MaskOcts", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_MaskOcts), __Pyx_ImportType_CheckSize_Warn);
77453    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_MaskOcts) __PYX_ERR(26, 69, __pyx_L1_error)
77454   __pyx_vtabptr_2yt_8geometry_12oct_visitors_MaskOcts = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_MaskOcts*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_MaskOcts->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_MaskOcts)) __PYX_ERR(26, 69, __pyx_L1_error)
77455   __pyx_ptype_2yt_8geometry_12oct_visitors_IndexOcts = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "IndexOcts", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_IndexOcts), __Pyx_ImportType_CheckSize_Warn);
77456    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_IndexOcts) __PYX_ERR(26, 72, __pyx_L1_error)
77457   __pyx_vtabptr_2yt_8geometry_12oct_visitors_IndexOcts = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_IndexOcts*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_IndexOcts->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_IndexOcts)) __PYX_ERR(26, 72, __pyx_L1_error)
77458   __pyx_ptype_2yt_8geometry_12oct_visitors_MaskedIndexOcts = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "MaskedIndexOcts", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_MaskedIndexOcts), __Pyx_ImportType_CheckSize_Warn);
77459    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_MaskedIndexOcts) __PYX_ERR(26, 75, __pyx_L1_error)
77460   __pyx_vtabptr_2yt_8geometry_12oct_visitors_MaskedIndexOcts = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_MaskedIndexOcts*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_MaskedIndexOcts->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_MaskedIndexOcts)) __PYX_ERR(26, 75, __pyx_L1_error)
77461   __pyx_ptype_2yt_8geometry_12oct_visitors_IndexMaskMapOcts = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "IndexMaskMapOcts", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_IndexMaskMapOcts), __Pyx_ImportType_CheckSize_Warn);
77462    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_IndexMaskMapOcts) __PYX_ERR(26, 79, __pyx_L1_error)
77463   __pyx_vtabptr_2yt_8geometry_12oct_visitors_IndexMaskMapOcts = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_IndexMaskMapOcts*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_IndexMaskMapOcts->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_IndexMaskMapOcts)) __PYX_ERR(26, 79, __pyx_L1_error)
77464   __pyx_ptype_2yt_8geometry_12oct_visitors_ICoordsOcts = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "ICoordsOcts", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_ICoordsOcts), __Pyx_ImportType_CheckSize_Warn);
77465    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_ICoordsOcts) __PYX_ERR(26, 85, __pyx_L1_error)
77466   __pyx_vtabptr_2yt_8geometry_12oct_visitors_ICoordsOcts = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_ICoordsOcts*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_ICoordsOcts->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_ICoordsOcts)) __PYX_ERR(26, 85, __pyx_L1_error)
77467   __pyx_ptype_2yt_8geometry_12oct_visitors_IResOcts = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "IResOcts", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_IResOcts), __Pyx_ImportType_CheckSize_Warn);
77468    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_IResOcts) __PYX_ERR(26, 88, __pyx_L1_error)
77469   __pyx_vtabptr_2yt_8geometry_12oct_visitors_IResOcts = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_IResOcts*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_IResOcts->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_IResOcts)) __PYX_ERR(26, 88, __pyx_L1_error)
77470   __pyx_ptype_2yt_8geometry_12oct_visitors_FCoordsOcts = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "FCoordsOcts", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_FCoordsOcts), __Pyx_ImportType_CheckSize_Warn);
77471    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_FCoordsOcts) __PYX_ERR(26, 91, __pyx_L1_error)
77472   __pyx_vtabptr_2yt_8geometry_12oct_visitors_FCoordsOcts = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_FCoordsOcts*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_FCoordsOcts->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_FCoordsOcts)) __PYX_ERR(26, 91, __pyx_L1_error)
77473   __pyx_ptype_2yt_8geometry_12oct_visitors_FWidthOcts = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "FWidthOcts", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_FWidthOcts), __Pyx_ImportType_CheckSize_Warn);
77474    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_FWidthOcts) __PYX_ERR(26, 94, __pyx_L1_error)
77475   __pyx_vtabptr_2yt_8geometry_12oct_visitors_FWidthOcts = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_FWidthOcts*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_FWidthOcts->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_FWidthOcts)) __PYX_ERR(26, 94, __pyx_L1_error)
77476   __pyx_ptype_2yt_8geometry_12oct_visitors_CopyArrayI64 = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "CopyArrayI64", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_CopyArrayI64), __Pyx_ImportType_CheckSize_Warn);
77477    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_CopyArrayI64) __PYX_ERR(26, 97, __pyx_L1_error)
77478   __pyx_vtabptr_2yt_8geometry_12oct_visitors_CopyArrayI64 = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CopyArrayI64*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_CopyArrayI64->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_CopyArrayI64)) __PYX_ERR(26, 97, __pyx_L1_error)
77479   __pyx_ptype_2yt_8geometry_12oct_visitors_CopyArrayF64 = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "CopyArrayF64", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_CopyArrayF64), __Pyx_ImportType_CheckSize_Warn);
77480    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_CopyArrayF64) __PYX_ERR(26, 101, __pyx_L1_error)
77481   __pyx_vtabptr_2yt_8geometry_12oct_visitors_CopyArrayF64 = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CopyArrayF64*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_CopyArrayF64->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_CopyArrayF64)) __PYX_ERR(26, 101, __pyx_L1_error)
77482   __pyx_ptype_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8 = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "CopyFileIndArrayI8", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8), __Pyx_ImportType_CheckSize_Warn);
77483    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8) __PYX_ERR(26, 105, __pyx_L1_error)
77484   __pyx_vtabptr_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8 = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_CopyFileIndArrayI8)) __PYX_ERR(26, 105, __pyx_L1_error)
77485   __pyx_ptype_2yt_8geometry_12oct_visitors_IdentifyOcts = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "IdentifyOcts", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_IdentifyOcts), __Pyx_ImportType_CheckSize_Warn);
77486    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_IdentifyOcts) __PYX_ERR(26, 110, __pyx_L1_error)
77487   __pyx_vtabptr_2yt_8geometry_12oct_visitors_IdentifyOcts = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_IdentifyOcts*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_IdentifyOcts->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_IdentifyOcts)) __PYX_ERR(26, 110, __pyx_L1_error)
77488   __pyx_ptype_2yt_8geometry_12oct_visitors_AssignDomainInd = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "AssignDomainInd", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_AssignDomainInd), __Pyx_ImportType_CheckSize_Warn);
77489    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_AssignDomainInd) __PYX_ERR(26, 113, __pyx_L1_error)
77490   __pyx_vtabptr_2yt_8geometry_12oct_visitors_AssignDomainInd = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_AssignDomainInd*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_AssignDomainInd->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_AssignDomainInd)) __PYX_ERR(26, 113, __pyx_L1_error)
77491   __pyx_ptype_2yt_8geometry_12oct_visitors_FillFileIndicesO = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "FillFileIndicesO", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_FillFileIndicesO), __Pyx_ImportType_CheckSize_Warn);
77492    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_FillFileIndicesO) __PYX_ERR(26, 116, __pyx_L1_error)
77493   __pyx_vtabptr_2yt_8geometry_12oct_visitors_FillFileIndicesO = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_FillFileIndicesO*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_FillFileIndicesO->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_FillFileIndicesO)) __PYX_ERR(26, 116, __pyx_L1_error)
77494   __pyx_ptype_2yt_8geometry_12oct_visitors_FillFileIndicesR = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "FillFileIndicesR", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_FillFileIndicesR), __Pyx_ImportType_CheckSize_Warn);
77495    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_FillFileIndicesR) __PYX_ERR(26, 121, __pyx_L1_error)
77496   __pyx_vtabptr_2yt_8geometry_12oct_visitors_FillFileIndicesR = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_FillFileIndicesR*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_FillFileIndicesR->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_FillFileIndicesR)) __PYX_ERR(26, 121, __pyx_L1_error)
77497   __pyx_ptype_2yt_8geometry_12oct_visitors_CountByDomain = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "CountByDomain", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_CountByDomain), __Pyx_ImportType_CheckSize_Warn);
77498    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_CountByDomain) __PYX_ERR(26, 126, __pyx_L1_error)
77499   __pyx_vtabptr_2yt_8geometry_12oct_visitors_CountByDomain = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_CountByDomain*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_CountByDomain->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_CountByDomain)) __PYX_ERR(26, 126, __pyx_L1_error)
77500   __pyx_ptype_2yt_8geometry_12oct_visitors_StoreOctree = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "StoreOctree", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_StoreOctree), __Pyx_ImportType_CheckSize_Warn);
77501    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_StoreOctree) __PYX_ERR(26, 129, __pyx_L1_error)
77502   __pyx_vtabptr_2yt_8geometry_12oct_visitors_StoreOctree = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_StoreOctree*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_StoreOctree->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_StoreOctree)) __PYX_ERR(26, 129, __pyx_L1_error)
77503   __pyx_ptype_2yt_8geometry_12oct_visitors_LoadOctree = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "LoadOctree", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_LoadOctree), __Pyx_ImportType_CheckSize_Warn);
77504    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_LoadOctree) __PYX_ERR(26, 132, __pyx_L1_error)
77505   __pyx_vtabptr_2yt_8geometry_12oct_visitors_LoadOctree = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_LoadOctree*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_LoadOctree->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_LoadOctree)) __PYX_ERR(26, 132, __pyx_L1_error)
77506   __pyx_ptype_2yt_8geometry_12oct_visitors_MortonIndexOcts = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "MortonIndexOcts", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_MortonIndexOcts), __Pyx_ImportType_CheckSize_Warn);
77507    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_MortonIndexOcts) __PYX_ERR(26, 138, __pyx_L1_error)
77508   __pyx_vtabptr_2yt_8geometry_12oct_visitors_MortonIndexOcts = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_MortonIndexOcts*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_MortonIndexOcts->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_MortonIndexOcts)) __PYX_ERR(26, 138, __pyx_L1_error)
77509   __pyx_ptype_2yt_8geometry_12oct_visitors_StoreIndex = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "StoreIndex", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_StoreIndex), __Pyx_ImportType_CheckSize_Warn);
77510    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_StoreIndex) __PYX_ERR(26, 149, __pyx_L1_error)
77511   __pyx_vtabptr_2yt_8geometry_12oct_visitors_StoreIndex = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_StoreIndex*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_StoreIndex->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_StoreIndex)) __PYX_ERR(26, 149, __pyx_L1_error)
77512   __pyx_ptype_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "BaseNeighbourVisitor", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor), __Pyx_ImportType_CheckSize_Warn);
77513    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor) __PYX_ERR(26, 153, __pyx_L1_error)
77514   __pyx_vtabptr_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_BaseNeighbourVisitor)) __PYX_ERR(26, 153, __pyx_L1_error)
77515   __pyx_ptype_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "NeighbourCellIndexVisitor", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor), __Pyx_ImportType_CheckSize_Warn);
77516    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor) __PYX_ERR(26, 169, __pyx_L1_error)
77517   __pyx_vtabptr_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_NeighbourCellIndexVisitor)) __PYX_ERR(26, 169, __pyx_L1_error)
77518   __pyx_ptype_2yt_8geometry_12oct_visitors_NeighbourCellVisitor = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_visitors", "NeighbourCellVisitor", sizeof(struct __pyx_obj_2yt_8geometry_12oct_visitors_NeighbourCellVisitor), __Pyx_ImportType_CheckSize_Warn);
77519    if (!__pyx_ptype_2yt_8geometry_12oct_visitors_NeighbourCellVisitor) __PYX_ERR(26, 173, __pyx_L1_error)
77520   __pyx_vtabptr_2yt_8geometry_12oct_visitors_NeighbourCellVisitor = (struct __pyx_vtabstruct_2yt_8geometry_12oct_visitors_NeighbourCellVisitor*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_12oct_visitors_NeighbourCellVisitor->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_12oct_visitors_NeighbourCellVisitor)) __PYX_ERR(26, 173, __pyx_L1_error)
77521   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77522   __pyx_t_1 = PyImport_ImportModule("yt.utilities.lib.allocation_container"); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 20, __pyx_L1_error)
77523   __Pyx_GOTREF(__pyx_t_1);
77524   __pyx_ptype_2yt_9utilities_3lib_20allocation_container_ObjectPool = __Pyx_ImportType(__pyx_t_1, "yt.utilities.lib.allocation_container", "ObjectPool", sizeof(struct __pyx_obj_2yt_9utilities_3lib_20allocation_container_ObjectPool), __Pyx_ImportType_CheckSize_Warn);
77525    if (!__pyx_ptype_2yt_9utilities_3lib_20allocation_container_ObjectPool) __PYX_ERR(27, 20, __pyx_L1_error)
77526   __pyx_vtabptr_2yt_9utilities_3lib_20allocation_container_ObjectPool = (struct __pyx_vtabstruct_2yt_9utilities_3lib_20allocation_container_ObjectPool*)__Pyx_GetVtable(__pyx_ptype_2yt_9utilities_3lib_20allocation_container_ObjectPool->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_9utilities_3lib_20allocation_container_ObjectPool)) __PYX_ERR(27, 20, __pyx_L1_error)
77527   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77528   __pyx_t_1 = PyImport_ImportModule("yt.geometry.oct_container"); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 47, __pyx_L1_error)
77529   __Pyx_GOTREF(__pyx_t_1);
77530   __pyx_ptype_2yt_8geometry_13oct_container_OctObjectPool = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_container", "OctObjectPool", sizeof(struct __pyx_obj_2yt_8geometry_13oct_container_OctObjectPool), __Pyx_ImportType_CheckSize_Warn);
77531    if (!__pyx_ptype_2yt_8geometry_13oct_container_OctObjectPool) __PYX_ERR(28, 47, __pyx_L1_error)
77532   __pyx_vtabptr_2yt_8geometry_13oct_container_OctObjectPool = (struct __pyx_vtabstruct_2yt_8geometry_13oct_container_OctObjectPool*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_13oct_container_OctObjectPool->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_13oct_container_OctObjectPool)) __PYX_ERR(28, 47, __pyx_L1_error)
77533   __pyx_ptype_2yt_8geometry_13oct_container_OctreeContainer = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_container", "OctreeContainer", sizeof(struct __pyx_obj_2yt_8geometry_13oct_container_OctreeContainer), __Pyx_ImportType_CheckSize_Warn);
77534    if (!__pyx_ptype_2yt_8geometry_13oct_container_OctreeContainer) __PYX_ERR(28, 55, __pyx_L1_error)
77535   __pyx_vtabptr_2yt_8geometry_13oct_container_OctreeContainer = (struct __pyx_vtabstruct_2yt_8geometry_13oct_container_OctreeContainer*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_13oct_container_OctreeContainer->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_13oct_container_OctreeContainer)) __PYX_ERR(28, 55, __pyx_L1_error)
77536   __pyx_ptype_2yt_8geometry_13oct_container_SparseOctreeContainer = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_container", "SparseOctreeContainer", sizeof(struct __pyx_obj_2yt_8geometry_13oct_container_SparseOctreeContainer), __Pyx_ImportType_CheckSize_Warn);
77537    if (!__pyx_ptype_2yt_8geometry_13oct_container_SparseOctreeContainer) __PYX_ERR(28, 85, __pyx_L1_error)
77538   __pyx_vtabptr_2yt_8geometry_13oct_container_SparseOctreeContainer = (struct __pyx_vtabstruct_2yt_8geometry_13oct_container_SparseOctreeContainer*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_13oct_container_SparseOctreeContainer->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_13oct_container_SparseOctreeContainer)) __PYX_ERR(28, 85, __pyx_L1_error)
77539   __pyx_ptype_2yt_8geometry_13oct_container_RAMSESOctreeContainer = __Pyx_ImportType(__pyx_t_1, "yt.geometry.oct_container", "RAMSESOctreeContainer", sizeof(struct __pyx_obj_2yt_8geometry_13oct_container_RAMSESOctreeContainer), __Pyx_ImportType_CheckSize_Warn);
77540    if (!__pyx_ptype_2yt_8geometry_13oct_container_RAMSESOctreeContainer) __PYX_ERR(28, 93, __pyx_L1_error)
77541   __pyx_vtabptr_2yt_8geometry_13oct_container_RAMSESOctreeContainer = (struct __pyx_vtabstruct_2yt_8geometry_13oct_container_RAMSESOctreeContainer*)__Pyx_GetVtable(__pyx_ptype_2yt_8geometry_13oct_container_RAMSESOctreeContainer->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_8geometry_13oct_container_RAMSESOctreeContainer)) __PYX_ERR(28, 93, __pyx_L1_error)
77542   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77543   __pyx_t_1 = PyImport_ImportModule("yt.utilities.lib.bitarray"); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 28, __pyx_L1_error)
77544   __Pyx_GOTREF(__pyx_t_1);
77545   __pyx_ptype_2yt_9utilities_3lib_8bitarray_bitarray = __Pyx_ImportType(__pyx_t_1, "yt.utilities.lib.bitarray", "bitarray", sizeof(struct __pyx_obj_2yt_9utilities_3lib_8bitarray_bitarray), __Pyx_ImportType_CheckSize_Warn);
77546    if (!__pyx_ptype_2yt_9utilities_3lib_8bitarray_bitarray) __PYX_ERR(29, 28, __pyx_L1_error)
77547   __pyx_vtabptr_2yt_9utilities_3lib_8bitarray_bitarray = (struct __pyx_vtabstruct_2yt_9utilities_3lib_8bitarray_bitarray*)__Pyx_GetVtable(__pyx_ptype_2yt_9utilities_3lib_8bitarray_bitarray->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_9utilities_3lib_8bitarray_bitarray)) __PYX_ERR(29, 28, __pyx_L1_error)
77548   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77549   __pyx_t_1 = PyImport_ImportModule("yt.utilities.lib.partitioned_grid"); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 18, __pyx_L1_error)
77550   __Pyx_GOTREF(__pyx_t_1);
77551   __pyx_ptype_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid = __Pyx_ImportType(__pyx_t_1, "yt.utilities.lib.partitioned_grid", "PartitionedGrid", sizeof(struct __pyx_obj_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid), __Pyx_ImportType_CheckSize_Warn);
77552    if (!__pyx_ptype_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid) __PYX_ERR(30, 18, __pyx_L1_error)
77553   __pyx_vtabptr_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid = (struct __pyx_vtabstruct_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid*)__Pyx_GetVtable(__pyx_ptype_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_9utilities_3lib_16partitioned_grid_PartitionedGrid)) __PYX_ERR(30, 18, __pyx_L1_error)
77554   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77555   __pyx_t_1 = PyImport_ImportModule("yt.utilities.lib.image_samplers"); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 37, __pyx_L1_error)
77556   __Pyx_GOTREF(__pyx_t_1);
77557   __pyx_ptype_2yt_9utilities_3lib_14image_samplers_ImageSampler = __Pyx_ImportType(__pyx_t_1, "yt.utilities.lib.image_samplers", "ImageSampler", sizeof(struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ImageSampler), __Pyx_ImportType_CheckSize_Warn);
77558    if (!__pyx_ptype_2yt_9utilities_3lib_14image_samplers_ImageSampler) __PYX_ERR(31, 37, __pyx_L1_error)
77559   __pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_ImageSampler = (struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_ImageSampler*)__Pyx_GetVtable(__pyx_ptype_2yt_9utilities_3lib_14image_samplers_ImageSampler->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_ImageSampler)) __PYX_ERR(31, 37, __pyx_L1_error)
77560   __pyx_ptype_2yt_9utilities_3lib_14image_samplers_ProjectionSampler = __Pyx_ImportType(__pyx_t_1, "yt.utilities.lib.image_samplers", "ProjectionSampler", sizeof(struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_ProjectionSampler), __Pyx_ImportType_CheckSize_Warn);
77561    if (!__pyx_ptype_2yt_9utilities_3lib_14image_samplers_ProjectionSampler) __PYX_ERR(31, 71, __pyx_L1_error)
77562   __pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_ProjectionSampler = (struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_ProjectionSampler*)__Pyx_GetVtable(__pyx_ptype_2yt_9utilities_3lib_14image_samplers_ProjectionSampler->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_ProjectionSampler)) __PYX_ERR(31, 71, __pyx_L1_error)
77563   __pyx_ptype_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler = __Pyx_ImportType(__pyx_t_1, "yt.utilities.lib.image_samplers", "InterpolatedProjectionSampler", sizeof(struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler), __Pyx_ImportType_CheckSize_Warn);
77564    if (!__pyx_ptype_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler) __PYX_ERR(31, 74, __pyx_L1_error)
77565   __pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler = (struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler*)__Pyx_GetVtable(__pyx_ptype_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_InterpolatedProjectionSampler)) __PYX_ERR(31, 74, __pyx_L1_error)
77566   __pyx_ptype_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler = __Pyx_ImportType(__pyx_t_1, "yt.utilities.lib.image_samplers", "VolumeRenderSampler", sizeof(struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler), __Pyx_ImportType_CheckSize_Warn);
77567    if (!__pyx_ptype_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler) __PYX_ERR(31, 79, __pyx_L1_error)
77568   __pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler = (struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler*)__Pyx_GetVtable(__pyx_ptype_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_VolumeRenderSampler)) __PYX_ERR(31, 79, __pyx_L1_error)
77569   __pyx_ptype_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler = __Pyx_ImportType(__pyx_t_1, "yt.utilities.lib.image_samplers", "LightSourceRenderSampler", sizeof(struct __pyx_obj_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler), __Pyx_ImportType_CheckSize_Warn);
77570    if (!__pyx_ptype_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler) __PYX_ERR(31, 85, __pyx_L1_error)
77571   __pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler = (struct __pyx_vtabstruct_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler*)__Pyx_GetVtable(__pyx_ptype_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler->tp_dict); if (unlikely(!__pyx_vtabptr_2yt_9utilities_3lib_14image_samplers_LightSourceRenderSampler)) __PYX_ERR(31, 85, __pyx_L1_error)
77572   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77573   __Pyx_RefNannyFinishContext();
77574   return 0;
77575   __pyx_L1_error:;
77576   __Pyx_XDECREF(__pyx_t_1);
77577   __Pyx_RefNannyFinishContext();
77578   return -1;
77579 }
77580 
77581 static int __Pyx_modinit_variable_import_code(void) {
77582   __Pyx_RefNannyDeclarations
77583   PyObject *__pyx_t_1 = NULL;
77584   __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0);
77585   /*--- Variable import code ---*/
77586   __pyx_t_1 = PyImport_ImportModule("yt.geometry.oct_container"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
77587   if (__Pyx_ImportVoidPtr(__pyx_t_1, "ORDER_MAX", (void **)&__pyx_vp_2yt_8geometry_13oct_container_ORDER_MAX, "int") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77588   Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77589   __Pyx_RefNannyFinishContext();
77590   return 0;
77591   __pyx_L1_error:;
77592   __Pyx_XDECREF(__pyx_t_1);
77593   __Pyx_RefNannyFinishContext();
77594   return -1;
77595 }
77596 
77597 static int __Pyx_modinit_function_import_code(void) {
77598   __Pyx_RefNannyDeclarations
77599   PyObject *__pyx_t_1 = NULL;
77600   PyObject *__pyx_t_2 = NULL;
77601   PyObject *__pyx_t_3 = NULL;
77602   PyObject *__pyx_t_4 = NULL;
77603   __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0);
77604   /*--- Function import code ---*/
77605   __pyx_t_1 = PyImport_ImportModule("yt.geometry.grid_visitors"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
77606   if (__Pyx_ImportFunction(__pyx_t_1, "check_child_masked", (void (**)(void))&__pyx_f_2yt_8geometry_13grid_visitors_check_child_masked, "__pyx_t_5numpy_uint8_t (struct __pyx_t_2yt_8geometry_13grid_visitors_GridVisitorData *)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77607   Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77608   __pyx_t_2 = PyImport_ImportModule("yt.utilities.lib.geometry_utils"); if (!__pyx_t_2) __PYX_ERR(0, 1, __pyx_L1_error)
77609   if (__Pyx_ImportFunction(__pyx_t_2, "morton_neighbors_coarse", (void (**)(void))&__pyx_f_2yt_9utilities_3lib_14geometry_utils_morton_neighbors_coarse, "__pyx_t_5numpy_uint32_t (__pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t, int *, __pyx_t_5numpy_uint32_t, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77610   if (__Pyx_ImportFunction(__pyx_t_2, "morton_neighbors_refined", (void (**)(void))&__pyx_f_2yt_9utilities_3lib_14geometry_utils_morton_neighbors_refined, "__pyx_t_5numpy_uint32_t (__pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t, __pyx_t_5numpy_uint64_t, int *, __pyx_t_5numpy_uint32_t, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77611   Py_DECREF(__pyx_t_2); __pyx_t_2 = 0;
77612   __pyx_t_3 = PyImport_ImportModule("yt.utilities.lib.fnv_hash"); if (!__pyx_t_3) __PYX_ERR(0, 1, __pyx_L1_error)
77613   if (__Pyx_ImportFunction(__pyx_t_3, "c_fnv_hash", (void (**)(void))&__pyx_f_2yt_9utilities_3lib_8fnv_hash_c_fnv_hash, "__pyx_t_5numpy_int64_t (__Pyx_memviewslice)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77614   Py_DECREF(__pyx_t_3); __pyx_t_3 = 0;
77615   __pyx_t_4 = PyImport_ImportModule("yt.utilities.lib.grid_traversal"); if (!__pyx_t_4) __PYX_ERR(0, 1, __pyx_L1_error)
77616   if (__Pyx_ImportFunction(__pyx_t_4, "walk_volume", (void (**)(void))&__pyx_f_2yt_9utilities_3lib_14grid_traversal_walk_volume, "int (struct __pyx_t_2yt_9utilities_3lib_16volume_container_VolumeContainer *, __pyx_t_5numpy_float64_t *, __pyx_t_5numpy_float64_t *, __pyx_t_2yt_9utilities_3lib_14grid_traversal_sampler_function *, void *, struct __pyx_opt_args_2yt_9utilities_3lib_14grid_traversal_walk_volume *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77617   Py_DECREF(__pyx_t_4); __pyx_t_4 = 0;
77618   __Pyx_RefNannyFinishContext();
77619   return 0;
77620   __pyx_L1_error:;
77621   __Pyx_XDECREF(__pyx_t_1);
77622   __Pyx_XDECREF(__pyx_t_2);
77623   __Pyx_XDECREF(__pyx_t_3);
77624   __Pyx_XDECREF(__pyx_t_4);
77625   __Pyx_RefNannyFinishContext();
77626   return -1;
77627 }
77628 
77629 
77630 #if PY_MAJOR_VERSION < 3
77631 #ifdef CYTHON_NO_PYINIT_EXPORT
77632 #define __Pyx_PyMODINIT_FUNC void
77633 #else
77634 #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
77635 #endif
77636 #else
77637 #ifdef CYTHON_NO_PYINIT_EXPORT
77638 #define __Pyx_PyMODINIT_FUNC PyObject *
77639 #else
77640 #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
77641 #endif
77642 #endif
77643 
77644 
77645 #if PY_MAJOR_VERSION < 3
77646 __Pyx_PyMODINIT_FUNC initselection_routines(void) CYTHON_SMALL_CODE; /*proto*/
77647 __Pyx_PyMODINIT_FUNC initselection_routines(void)
77648 #else
77649 __Pyx_PyMODINIT_FUNC PyInit_selection_routines(void) CYTHON_SMALL_CODE; /*proto*/
77650 __Pyx_PyMODINIT_FUNC PyInit_selection_routines(void)
77651 #if CYTHON_PEP489_MULTI_PHASE_INIT
77652 {
77653   return PyModuleDef_Init(&__pyx_moduledef);
77654 }
77655 static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) {
77656     #if PY_VERSION_HEX >= 0x030700A1
77657     static PY_INT64_T main_interpreter_id = -1;
77658     PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp);
77659     if (main_interpreter_id == -1) {
77660         main_interpreter_id = current_id;
77661         return (unlikely(current_id == -1)) ? -1 : 0;
77662     } else if (unlikely(main_interpreter_id != current_id))
77663     #else
77664     static PyInterpreterState *main_interpreter = NULL;
77665     PyInterpreterState *current_interpreter = PyThreadState_Get()->interp;
77666     if (!main_interpreter) {
77667         main_interpreter = current_interpreter;
77668     } else if (unlikely(main_interpreter != current_interpreter))
77669     #endif
77670     {
77671         PyErr_SetString(
77672             PyExc_ImportError,
77673             "Interpreter change detected - this module can only be loaded into one interpreter per process.");
77674         return -1;
77675     }
77676     return 0;
77677 }
77678 static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) {
77679     PyObject *value = PyObject_GetAttrString(spec, from_name);
77680     int result = 0;
77681     if (likely(value)) {
77682         if (allow_none || value != Py_None) {
77683             result = PyDict_SetItemString(moddict, to_name, value);
77684         }
77685         Py_DECREF(value);
77686     } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
77687         PyErr_Clear();
77688     } else {
77689         result = -1;
77690     }
77691     return result;
77692 }
77693 static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) {
77694     PyObject *module = NULL, *moddict, *modname;
77695     if (__Pyx_check_single_interpreter())
77696         return NULL;
77697     if (__pyx_m)
77698         return __Pyx_NewRef(__pyx_m);
77699     modname = PyObject_GetAttrString(spec, "name");
77700     if (unlikely(!modname)) goto bad;
77701     module = PyModule_NewObject(modname);
77702     Py_DECREF(modname);
77703     if (unlikely(!module)) goto bad;
77704     moddict = PyModule_GetDict(module);
77705     if (unlikely(!moddict)) goto bad;
77706     if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad;
77707     if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad;
77708     if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad;
77709     if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad;
77710     return module;
77711 bad:
77712     Py_XDECREF(module);
77713     return NULL;
77714 }
77715 
77716 
77717 static CYTHON_SMALL_CODE int __pyx_pymod_exec_selection_routines(PyObject *__pyx_pyinit_module)
77718 #endif
77719 #endif
77720 {
77721   PyObject *__pyx_t_1 = NULL;
77722   PyObject *__pyx_t_2 = NULL;
77723   PyObject *__pyx_t_3 = NULL;
77724   __pyx_t_5numpy_float64_t __pyx_t_4;
77725   PyObject *__pyx_t_5 = NULL;
77726   PyObject *__pyx_t_6 = NULL;
77727   static PyThread_type_lock __pyx_t_7[8];
77728   __Pyx_RefNannyDeclarations
77729   #if CYTHON_PEP489_MULTI_PHASE_INIT
77730   if (__pyx_m) {
77731     if (__pyx_m == __pyx_pyinit_module) return 0;
77732     PyErr_SetString(PyExc_RuntimeError, "Module 'selection_routines' has already been imported. Re-initialisation is not supported.");
77733     return -1;
77734   }
77735   #elif PY_MAJOR_VERSION >= 3
77736   if (__pyx_m) return __Pyx_NewRef(__pyx_m);
77737   #endif
77738   #if CYTHON_REFNANNY
77739 __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
77740 if (!__Pyx_RefNanny) {
77741   PyErr_Clear();
77742   __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
77743   if (!__Pyx_RefNanny)
77744       Py_FatalError("failed to import 'refnanny' module");
77745 }
77746 #endif
77747   __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_selection_routines(void)", 0);
77748   if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77749   #ifdef __Pxy_PyFrame_Initialize_Offsets
77750   __Pxy_PyFrame_Initialize_Offsets();
77751   #endif
77752   __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)
77753   __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
77754   __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
77755   #ifdef __Pyx_CyFunction_USED
77756   if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77757   #endif
77758   #ifdef __Pyx_FusedFunction_USED
77759   if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77760   #endif
77761   #ifdef __Pyx_Coroutine_USED
77762   if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77763   #endif
77764   #ifdef __Pyx_Generator_USED
77765   if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77766   #endif
77767   #ifdef __Pyx_AsyncGen_USED
77768   if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77769   #endif
77770   #ifdef __Pyx_StopAsyncIteration_USED
77771   if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77772   #endif
77773   /*--- Library function declarations ---*/
77774   /*--- Threads initialization code ---*/
77775   #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
77776   #ifdef WITH_THREAD /* Python build with threading support? */
77777   PyEval_InitThreads();
77778   #endif
77779   #endif
77780   /*--- Module creation code ---*/
77781   #if CYTHON_PEP489_MULTI_PHASE_INIT
77782   __pyx_m = __pyx_pyinit_module;
77783   Py_INCREF(__pyx_m);
77784   #else
77785   #if PY_MAJOR_VERSION < 3
77786   __pyx_m = Py_InitModule4("selection_routines", __pyx_methods, __pyx_k_Geometry_selection_routines, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
77787   #else
77788   __pyx_m = PyModule_Create(&__pyx_moduledef);
77789   #endif
77790   if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error)
77791   #endif
77792   __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
77793   Py_INCREF(__pyx_d);
77794   __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error)
77795   Py_INCREF(__pyx_b);
77796   __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
77797   Py_INCREF(__pyx_cython_runtime);
77798   if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
77799   /*--- Initialize various global constants etc. ---*/
77800   if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77801   #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
77802   if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77803   #endif
77804   if (__pyx_module_is_main_yt__geometry__selection_routines) {
77805     if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77806   }
77807   #if PY_MAJOR_VERSION >= 3
77808   {
77809     PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
77810     if (!PyDict_GetItemString(modules, "yt.geometry.selection_routines")) {
77811       if (unlikely(PyDict_SetItemString(modules, "yt.geometry.selection_routines", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
77812     }
77813   }
77814   #endif
77815   /*--- Builtin init code ---*/
77816   if (__Pyx_InitCachedBuiltins() < 0) goto __pyx_L1_error;
77817   /*--- Constants init code ---*/
77818   if (__Pyx_InitCachedConstants() < 0) goto __pyx_L1_error;
77819   /*--- Global type/function init code ---*/
77820   (void)__Pyx_modinit_global_init_code();
77821   (void)__Pyx_modinit_variable_export_code();
77822   (void)__Pyx_modinit_function_export_code();
77823   if (unlikely(__Pyx_modinit_type_init_code() != 0)) goto __pyx_L1_error;
77824   if (unlikely(__Pyx_modinit_type_import_code() != 0)) goto __pyx_L1_error;
77825   if (unlikely(__Pyx_modinit_variable_import_code() != 0)) goto __pyx_L1_error;
77826   if (unlikely(__Pyx_modinit_function_import_code() != 0)) goto __pyx_L1_error;
77827   /*--- Execution code ---*/
77828   #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
77829   if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
77830   #endif
77831 
77832   /* "yt/geometry/selection_routines.pyx":12
77833  *
77834  *
77835  * import numpy as np             # <<<<<<<<<<<<<<
77836  *
77837  * cimport cython
77838  */
77839   __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error)
77840   __Pyx_GOTREF(__pyx_t_1);
77841   if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 12, __pyx_L1_error)
77842   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77843 
77844   /* "yt/geometry/selection_routines.pyx":51
77845  * # use this as an epsilon test for grids aligned with selector
77846  * # define here to avoid the gil later
77847  * cdef np.float64_t grid_eps = np.finfo(np.float64).eps             # <<<<<<<<<<<<<<
77848  * grid_eps = 0.0
77849  *
77850  */
77851   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
77852   __Pyx_GOTREF(__pyx_t_1);
77853   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_finfo); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error)
77854   __Pyx_GOTREF(__pyx_t_2);
77855   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77856   __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
77857   __Pyx_GOTREF(__pyx_t_1);
77858   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float64); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 51, __pyx_L1_error)
77859   __Pyx_GOTREF(__pyx_t_3);
77860   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77861   __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
77862   __Pyx_GOTREF(__pyx_t_1);
77863   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
77864   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
77865   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_eps); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 51, __pyx_L1_error)
77866   __Pyx_GOTREF(__pyx_t_3);
77867   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77868   __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_4 == ((npy_float64)-1)) && PyErr_Occurred())) __PYX_ERR(0, 51, __pyx_L1_error)
77869   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
77870   __pyx_v_2yt_8geometry_18selection_routines_grid_eps = __pyx_t_4;
77871 
77872   /* "yt/geometry/selection_routines.pyx":52
77873  * # define here to avoid the gil later
77874  * cdef np.float64_t grid_eps = np.finfo(np.float64).eps
77875  * grid_eps = 0.0             # <<<<<<<<<<<<<<
77876  *
77877  * cdef inline np.float64_t dot(np.float64_t* v1,
77878  */
77879   __pyx_v_2yt_8geometry_18selection_routines_grid_eps = 0.0;
77880 
77881   /* "yt/geometry/selection_routines.pyx":75
77882  * @cython.wraparound(False)
77883  * @cython.cdivision(True)
77884  * def convert_mask_to_indices(np.ndarray[np.uint8_t, ndim=3, cast=True] mask,             # <<<<<<<<<<<<<<
77885  *             int count, int transpose = 0):
77886  *     cdef int i, j, k, cpos
77887  */
77888   __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_2yt_8geometry_18selection_routines_1convert_mask_to_indices, NULL, __pyx_n_s_yt_geometry_selection_routines); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 75, __pyx_L1_error)
77889   __Pyx_GOTREF(__pyx_t_3);
77890   if (PyDict_SetItem(__pyx_d, __pyx_n_s_convert_mask_to_indices, __pyx_t_3) < 0) __PYX_ERR(0, 75, __pyx_L1_error)
77891   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
77892 
77893   /* "yt/geometry/selection_routines.pyx":114
77894  *     return count
77895  *
77896  * def mask_fill(np.ndarray[np.float64_t, ndim=1] out,             # <<<<<<<<<<<<<<
77897  *               np.int64_t offset,
77898  *               np.ndarray[np.uint8_t, ndim=3, cast=True] mask,
77899  */
77900   __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_2yt_8geometry_18selection_routines_3mask_fill, NULL, __pyx_n_s_yt_geometry_selection_routines); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 114, __pyx_L1_error)
77901   __Pyx_GOTREF(__pyx_t_3);
77902   if (PyDict_SetItem(__pyx_d, __pyx_n_s_mask_fill, __pyx_t_3) < 0) __PYX_ERR(0, 114, __pyx_L1_error)
77903   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
77904 
77905   /* "yt/geometry/selection_routines.pyx":128
77906  * @cython.boundscheck(False)
77907  * @cython.wraparound(False)
77908  * def points_in_cells(             # <<<<<<<<<<<<<<
77909  *         np.float64_t[:] cx,
77910  *         np.float64_t[:] cy,
77911  */
77912   __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_2yt_8geometry_18selection_routines_5points_in_cells, NULL, __pyx_n_s_yt_geometry_selection_routines); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 128, __pyx_L1_error)
77913   __Pyx_GOTREF(__pyx_t_3);
77914   if (PyDict_SetItem(__pyx_d, __pyx_n_s_points_in_cells, __pyx_t_3) < 0) __PYX_ERR(0, 128, __pyx_L1_error)
77915   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
77916 
77917   /* "yt/geometry/_selection_routines/selector_object.pxi":472
77918  *     @cython.wraparound(False)
77919  *     @cython.cdivision(True)
77920  *     def count_points(self, np.ndarray[floating, ndim=1] x,             # <<<<<<<<<<<<<<
77921  *                            np.ndarray[floating, ndim=1] y,
77922  *                            np.ndarray[floating, ndim=1] z,
77923  */
77924   __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 472, __pyx_L1_error)
77925   __Pyx_GOTREF(__pyx_t_3);
77926   __pyx_t_1 = __pyx_FusedFunction_NewEx(&__pyx_fuse_0__pyx_mdef_2yt_8geometry_18selection_routines_14SelectorObject_35count_points, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SelectorObject_count_points, NULL, __pyx_n_s_yt_geometry_selection_routines, __pyx_d, ((PyObject *)__pyx_codeobj__113)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 472, __pyx_L1_error)
77927   __Pyx_GOTREF(__pyx_t_1);
77928   __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_empty_tuple);
77929   if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_float, __pyx_t_1) < 0) __PYX_ERR(1, 472, __pyx_L1_error)
77930   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77931   __pyx_t_1 = __pyx_FusedFunction_NewEx(&__pyx_fuse_1__pyx_mdef_2yt_8geometry_18selection_routines_14SelectorObject_37count_points, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SelectorObject_count_points, NULL, __pyx_n_s_yt_geometry_selection_routines, __pyx_d, ((PyObject *)__pyx_codeobj__113)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 472, __pyx_L1_error)
77932   __Pyx_GOTREF(__pyx_t_1);
77933   __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_empty_tuple);
77934   if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_double, __pyx_t_1) < 0) __PYX_ERR(1, 472, __pyx_L1_error)
77935   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77936   __pyx_t_1 = __pyx_FusedFunction_NewEx(&__pyx_mdef_2yt_8geometry_18selection_routines_14SelectorObject_17count_points, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SelectorObject_count_points, NULL, __pyx_n_s_yt_geometry_selection_routines, __pyx_d, ((PyObject *)__pyx_codeobj__113)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 472, __pyx_L1_error)
77937   __Pyx_GOTREF(__pyx_t_1);
77938   __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_1, __pyx_empty_tuple);
77939   ((__pyx_FusedFunctionObject *) __pyx_t_1)->__signatures__ = __pyx_t_3;
77940   __Pyx_GIVEREF(__pyx_t_3);
77941   if (PyDict_SetItem((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_dict, __pyx_n_s_count_points, __pyx_t_1) < 0) __PYX_ERR(1, 472, __pyx_L1_error)
77942   PyType_Modified(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject);
77943   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
77944 
77945   /* "yt/geometry/_selection_routines/selector_object.pxi":506
77946  *     @cython.wraparound(False)
77947  *     @cython.cdivision(True)
77948  *     def select_points(self,             # <<<<<<<<<<<<<<
77949  *                       np.ndarray[floating, ndim=1] x,
77950  *                       np.ndarray[floating, ndim=1] y,
77951  */
77952   __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 506, __pyx_L1_error)
77953   __Pyx_GOTREF(__pyx_t_2);
77954   __pyx_t_5 = __pyx_FusedFunction_NewEx(&__pyx_fuse_0__pyx_mdef_2yt_8geometry_18selection_routines_14SelectorObject_41select_points, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SelectorObject_select_points, NULL, __pyx_n_s_yt_geometry_selection_routines, __pyx_d, ((PyObject *)__pyx_codeobj__115)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 506, __pyx_L1_error)
77955   __Pyx_GOTREF(__pyx_t_5);
77956   __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_empty_tuple);
77957   if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_float, __pyx_t_5) < 0) __PYX_ERR(1, 506, __pyx_L1_error)
77958   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
77959   __pyx_t_5 = __pyx_FusedFunction_NewEx(&__pyx_fuse_1__pyx_mdef_2yt_8geometry_18selection_routines_14SelectorObject_43select_points, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SelectorObject_select_points, NULL, __pyx_n_s_yt_geometry_selection_routines, __pyx_d, ((PyObject *)__pyx_codeobj__115)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 506, __pyx_L1_error)
77960   __Pyx_GOTREF(__pyx_t_5);
77961   __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_empty_tuple);
77962   if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_double, __pyx_t_5) < 0) __PYX_ERR(1, 506, __pyx_L1_error)
77963   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
77964   __pyx_t_5 = __pyx_FusedFunction_NewEx(&__pyx_mdef_2yt_8geometry_18selection_routines_14SelectorObject_19select_points, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SelectorObject_select_points, NULL, __pyx_n_s_yt_geometry_selection_routines, __pyx_d, ((PyObject *)__pyx_codeobj__115)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 506, __pyx_L1_error)
77965   __Pyx_GOTREF(__pyx_t_5);
77966   __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_empty_tuple);
77967   ((__pyx_FusedFunctionObject *) __pyx_t_5)->__signatures__ = __pyx_t_2;
77968   __Pyx_GIVEREF(__pyx_t_2);
77969   if (PyDict_SetItem((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject->tp_dict, __pyx_n_s_select_points, __pyx_t_5) < 0) __PYX_ERR(1, 506, __pyx_L1_error)
77970   PyType_Modified(__pyx_ptype_2yt_8geometry_18selection_routines_SelectorObject);
77971   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
77972 
77973   /* "yt/geometry/_selection_routines/point_selector.pxi":77
77974  *         return ('p', )
77975  *
77976  * point_selector = PointSelector             # <<<<<<<<<<<<<<
77977  */
77978   if (PyDict_SetItem(__pyx_d, __pyx_n_s_point_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_PointSelector)) < 0) __PYX_ERR(6, 77, __pyx_L1_error)
77979 
77980   /* "yt/geometry/_selection_routines/sphere_selector.pxi":173
77981  *
77982  *
77983  * sphere_selector = SphereSelector             # <<<<<<<<<<<<<<
77984  */
77985   if (PyDict_SetItem(__pyx_d, __pyx_n_s_sphere_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_SphereSelector)) < 0) __PYX_ERR(2, 173, __pyx_L1_error)
77986 
77987   /* "yt/geometry/_selection_routines/region_selector.pxi":211
77988  *                 'is_all_data', 'loose_selection')
77989  *
77990  * region_selector = RegionSelector             # <<<<<<<<<<<<<<
77991  */
77992   if (PyDict_SetItem(__pyx_d, __pyx_n_s_region_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_RegionSelector)) < 0) __PYX_ERR(7, 211, __pyx_L1_error)
77993 
77994   /* "yt/geometry/_selection_routines/cut_region_selector.pxi":40
77995  *         return ("conditionals", t)
77996  *
77997  * cut_region_selector = CutRegionSelector             # <<<<<<<<<<<<<<
77998  */
77999   if (PyDict_SetItem(__pyx_d, __pyx_n_s_cut_region_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_CutRegionSelector)) < 0) __PYX_ERR(3, 40, __pyx_L1_error)
78000 
78001   /* "yt/geometry/_selection_routines/disk_selector.pxi":168
78002  *
78003  *
78004  * disk_selector = DiskSelector             # <<<<<<<<<<<<<<
78005  */
78006   if (PyDict_SetItem(__pyx_d, __pyx_n_s_disk_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_DiskSelector)) < 0) __PYX_ERR(8, 168, __pyx_L1_error)
78007 
78008   /* "yt/geometry/_selection_routines/cutting_plane_selector.pxi":117
78009  *         return ("d", "norm_vec")
78010  *
78011  * cutting_selector = CuttingPlaneSelector             # <<<<<<<<<<<<<<
78012  */
78013   if (PyDict_SetItem(__pyx_d, __pyx_n_s_cutting_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_CuttingPlaneSelector)) < 0) __PYX_ERR(9, 117, __pyx_L1_error)
78014 
78015   /* "yt/geometry/_selection_routines/slice_selector.pxi":122
78016  *         return ("axis", "coord", "ax", "ay", "reduced_dimensionality")
78017  *
78018  * slice_selector = SliceSelector             # <<<<<<<<<<<<<<
78019  */
78020   if (PyDict_SetItem(__pyx_d, __pyx_n_s_slice_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_SliceSelector)) < 0) __PYX_ERR(10, 122, __pyx_L1_error)
78021 
78022   /* "yt/geometry/_selection_routines/ortho_ray_selector.pxi":116
78023  *         return ("px_ax", "py_ax", "px", "py", "axis")
78024  *
78025  * ortho_ray_selector = OrthoRaySelector             # <<<<<<<<<<<<<<
78026  */
78027   if (PyDict_SetItem(__pyx_d, __pyx_n_s_ortho_ray_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_OrthoRaySelector)) < 0) __PYX_ERR(11, 116, __pyx_L1_error)
78028 
78029   /* "yt/geometry/_selection_routines/ray_selector.pxi":289
78030  *         return ("p1", "p2", "vec")
78031  *
78032  * ray_selector = RaySelector             # <<<<<<<<<<<<<<
78033  */
78034   if (PyDict_SetItem(__pyx_d, __pyx_n_s_ray_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_RaySelector)) < 0) __PYX_ERR(12, 289, __pyx_L1_error)
78035 
78036   /* "yt/geometry/_selection_routines/data_collection_selector.pxi":36
78037  *         return (hash(self.obj_ids.tobytes()), self.nids)
78038  *
78039  * data_collection_selector = DataCollectionSelector             # <<<<<<<<<<<<<<
78040  */
78041   if (PyDict_SetItem(__pyx_d, __pyx_n_s_data_collection_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_DataCollectionSelector)) < 0) __PYX_ERR(13, 36, __pyx_L1_error)
78042 
78043   /* "yt/geometry/_selection_routines/ellipsoid_selector.pxi":148
78044  *
78045  *
78046  * ellipsoid_selector = EllipsoidSelector             # <<<<<<<<<<<<<<
78047  */
78048   if (PyDict_SetItem(__pyx_d, __pyx_n_s_ellipsoid_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_EllipsoidSelector)) < 0) __PYX_ERR(14, 148, __pyx_L1_error)
78049 
78050   /* "yt/geometry/_selection_routines/grid_selector.pxi":38
78051  *         return (self.ind,)
78052  *
78053  * grid_selector = GridSelector             # <<<<<<<<<<<<<<
78054  */
78055   if (PyDict_SetItem(__pyx_d, __pyx_n_s_grid_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_GridSelector)) < 0) __PYX_ERR(15, 38, __pyx_L1_error)
78056 
78057   /* "yt/geometry/_selection_routines/octree_subset_selector.pxi":64
78058  *         return (hash(self.base_selector), self.domain_id)
78059  *
78060  * octree_subset_selector = OctreeSubsetSelector             # <<<<<<<<<<<<<<
78061  */
78062   if (PyDict_SetItem(__pyx_d, __pyx_n_s_octree_subset_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_OctreeSubsetSelector)) < 0) __PYX_ERR(16, 64, __pyx_L1_error)
78063 
78064   /* "yt/geometry/_selection_routines/indexed_octree_subset_selector.pxi":73
78065  *         return (hash(self.base_selector), self.min_ind, self.max_ind)
78066  *
78067  * indexed_octree_subset_selector = IndexedOctreeSubsetSelector             # <<<<<<<<<<<<<<
78068  */
78069   if (PyDict_SetItem(__pyx_d, __pyx_n_s_indexed_octree_subset_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_IndexedOctreeSubsetSelector)) < 0) __PYX_ERR(17, 73, __pyx_L1_error)
78070 
78071   /* "yt/geometry/_selection_routines/always_selector.pxi":45
78072  *         return ("always", 1,)
78073  *
78074  * always_selector = AlwaysSelector             # <<<<<<<<<<<<<<
78075  */
78076   if (PyDict_SetItem(__pyx_d, __pyx_n_s_always_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_AlwaysSelector)) < 0) __PYX_ERR(18, 45, __pyx_L1_error)
78077 
78078   /* "yt/geometry/_selection_routines/compose_selector.pxi":68
78079  *         return (hash(self.selector1), hash(self.selector2))
78080  *
78081  * compose_selector = ComposeSelector             # <<<<<<<<<<<<<<
78082  */
78083   if (PyDict_SetItem(__pyx_d, __pyx_n_s_compose_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_ComposeSelector)) < 0) __PYX_ERR(19, 68, __pyx_L1_error)
78084 
78085   /* "yt/geometry/_selection_routines/halo_particles_selector.pxi":14
78086  *         return ("halo_particles", self.halo_id)
78087  *
78088  * halo_particles_selector = HaloParticlesSelector             # <<<<<<<<<<<<<<
78089  */
78090   if (PyDict_SetItem(__pyx_d, __pyx_n_s_halo_particles_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_HaloParticlesSelector)) < 0) __PYX_ERR(20, 14, __pyx_L1_error)
78091 
78092   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":357
78093  *         return v
78094  *
78095  * intersection_selector = ChainedBooleanANDSelector             # <<<<<<<<<<<<<<
78096  *
78097  * cdef class ChainedBooleanORSelector(ChainedBooleanSelector):
78098  */
78099   if (PyDict_SetItem(__pyx_d, __pyx_n_s_intersection_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_ChainedBooleanANDSelector)) < 0) __PYX_ERR(21, 357, __pyx_L1_error)
78100 
78101   /* "yt/geometry/_selection_routines/boolean_selectors.pxi":440
78102  *         return v
78103  *
78104  * union_selector = ChainedBooleanORSelector             # <<<<<<<<<<<<<<
78105  */
78106   if (PyDict_SetItem(__pyx_d, __pyx_n_s_union_selector, ((PyObject *)__pyx_ptype_2yt_8geometry_18selection_routines_ChainedBooleanORSelector)) < 0) __PYX_ERR(21, 440, __pyx_L1_error)
78107 
78108   /* "yt/geometry/selection_routines.pyx":1
78109  * # distutils: include_dirs = LIB_DIR             # <<<<<<<<<<<<<<
78110  * # distutils: libraries = STD_LIBS
78111  * """
78112  */
78113   __pyx_t_6 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1, __pyx_L1_error)
78114   __Pyx_GOTREF(__pyx_t_6);
78115   if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_6) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
78116   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
78117 
78118   /* "View.MemoryView":209
78119  *         info.obj = self
78120  *
78121  *     __pyx_getbuffer = capsule(<void *> &__pyx_array_getbuffer, "getbuffer(obj, view, flags)")             # <<<<<<<<<<<<<<
78122  *
78123  *     def __dealloc__(array self):
78124  */
78125   __pyx_t_6 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 209, __pyx_L1_error)
78126   __Pyx_GOTREF(__pyx_t_6);
78127   if (PyDict_SetItem((PyObject *)__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_6) < 0) __PYX_ERR(5, 209, __pyx_L1_error)
78128   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
78129   PyType_Modified(__pyx_array_type);
78130 
78131   /* "View.MemoryView":286
78132  *         return self.name
78133  *
78134  * cdef generic = Enum("<strided and direct or indirect>")             # <<<<<<<<<<<<<<
78135  * cdef strided = Enum("<strided and direct>") # default
78136  * cdef indirect = Enum("<strided and indirect>")
78137  */
78138   __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__116, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 286, __pyx_L1_error)
78139   __Pyx_GOTREF(__pyx_t_6);
78140   __Pyx_XGOTREF(generic);
78141   __Pyx_DECREF_SET(generic, __pyx_t_6);
78142   __Pyx_GIVEREF(__pyx_t_6);
78143   __pyx_t_6 = 0;
78144 
78145   /* "View.MemoryView":287
78146  *
78147  * cdef generic = Enum("<strided and direct or indirect>")
78148  * cdef strided = Enum("<strided and direct>") # default             # <<<<<<<<<<<<<<
78149  * cdef indirect = Enum("<strided and indirect>")
78150  *
78151  */
78152   __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__117, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 287, __pyx_L1_error)
78153   __Pyx_GOTREF(__pyx_t_6);
78154   __Pyx_XGOTREF(strided);
78155   __Pyx_DECREF_SET(strided, __pyx_t_6);
78156   __Pyx_GIVEREF(__pyx_t_6);
78157   __pyx_t_6 = 0;
78158 
78159   /* "View.MemoryView":288
78160  * cdef generic = Enum("<strided and direct or indirect>")
78161  * cdef strided = Enum("<strided and direct>") # default
78162  * cdef indirect = Enum("<strided and indirect>")             # <<<<<<<<<<<<<<
78163  *
78164  *
78165  */
78166   __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__118, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 288, __pyx_L1_error)
78167   __Pyx_GOTREF(__pyx_t_6);
78168   __Pyx_XGOTREF(indirect);
78169   __Pyx_DECREF_SET(indirect, __pyx_t_6);
78170   __Pyx_GIVEREF(__pyx_t_6);
78171   __pyx_t_6 = 0;
78172 
78173   /* "View.MemoryView":291
78174  *
78175  *
78176  * cdef contiguous = Enum("<contiguous and direct>")             # <<<<<<<<<<<<<<
78177  * cdef indirect_contiguous = Enum("<contiguous and indirect>")
78178  *
78179  */
78180   __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__119, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 291, __pyx_L1_error)
78181   __Pyx_GOTREF(__pyx_t_6);
78182   __Pyx_XGOTREF(contiguous);
78183   __Pyx_DECREF_SET(contiguous, __pyx_t_6);
78184   __Pyx_GIVEREF(__pyx_t_6);
78185   __pyx_t_6 = 0;
78186 
78187   /* "View.MemoryView":292
78188  *
78189  * cdef contiguous = Enum("<contiguous and direct>")
78190  * cdef indirect_contiguous = Enum("<contiguous and indirect>")             # <<<<<<<<<<<<<<
78191  *
78192  *
78193  */
78194   __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__120, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 292, __pyx_L1_error)
78195   __Pyx_GOTREF(__pyx_t_6);
78196   __Pyx_XGOTREF(indirect_contiguous);
78197   __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_6);
78198   __Pyx_GIVEREF(__pyx_t_6);
78199   __pyx_t_6 = 0;
78200 
78201   /* "View.MemoryView":316
78202  *
78203  * DEF THREAD_LOCKS_PREALLOCATED = 8
78204  * cdef int __pyx_memoryview_thread_locks_used = 0             # <<<<<<<<<<<<<<
78205  * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [
78206  *     PyThread_allocate_lock(),
78207  */
78208   __pyx_memoryview_thread_locks_used = 0;
78209 
78210   /* "View.MemoryView":317
78211  * DEF THREAD_LOCKS_PREALLOCATED = 8
78212  * cdef int __pyx_memoryview_thread_locks_used = 0
78213  * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [             # <<<<<<<<<<<<<<
78214  *     PyThread_allocate_lock(),
78215  *     PyThread_allocate_lock(),
78216  */
78217   __pyx_t_7[0] = PyThread_allocate_lock();
78218   __pyx_t_7[1] = PyThread_allocate_lock();
78219   __pyx_t_7[2] = PyThread_allocate_lock();
78220   __pyx_t_7[3] = PyThread_allocate_lock();
78221   __pyx_t_7[4] = PyThread_allocate_lock();
78222   __pyx_t_7[5] = PyThread_allocate_lock();
78223   __pyx_t_7[6] = PyThread_allocate_lock();
78224   __pyx_t_7[7] = PyThread_allocate_lock();
78225   memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_7, sizeof(__pyx_memoryview_thread_locks[0]) * (8));
78226 
78227   /* "View.MemoryView":545
78228  *         info.obj = self
78229  *
78230  *     __pyx_getbuffer = capsule(<void *> &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)")             # <<<<<<<<<<<<<<
78231  *
78232  *
78233  */
78234   __pyx_t_6 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 545, __pyx_L1_error)
78235   __Pyx_GOTREF(__pyx_t_6);
78236   if (PyDict_SetItem((PyObject *)__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_6) < 0) __PYX_ERR(5, 545, __pyx_L1_error)
78237   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
78238   PyType_Modified(__pyx_memoryview_type);
78239 
78240   /* "View.MemoryView":991
78241  *         return self.from_object
78242  *
78243  *     __pyx_getbuffer = capsule(<void *> &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)")             # <<<<<<<<<<<<<<
78244  *
78245  *
78246  */
78247   __pyx_t_6 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 991, __pyx_L1_error)
78248   __Pyx_GOTREF(__pyx_t_6);
78249   if (PyDict_SetItem((PyObject *)__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_6) < 0) __PYX_ERR(5, 991, __pyx_L1_error)
78250   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
78251   PyType_Modified(__pyx_memoryviewslice_type);
78252 
78253   /* "(tree fragment)":1
78254  * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
78255  *     cdef object __pyx_PickleError
78256  *     cdef object __pyx_result
78257  */
78258   __pyx_t_6 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 1, __pyx_L1_error)
78259   __Pyx_GOTREF(__pyx_t_6);
78260   if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_6) < 0) __PYX_ERR(5, 1, __pyx_L1_error)
78261   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
78262 
78263   /* "(tree fragment)":11
78264  *         __pyx_unpickle_Enum__set_state(<Enum> __pyx_result, __pyx_state)
78265  *     return __pyx_result
78266  * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
78267  *     __pyx_result.name = __pyx_state[0]
78268  *     if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
78269  */
78270 
78271   /*--- Wrapped vars code ---*/
78272 
78273   goto __pyx_L0;
78274   __pyx_L1_error:;
78275   __Pyx_XDECREF(__pyx_t_1);
78276   __Pyx_XDECREF(__pyx_t_2);
78277   __Pyx_XDECREF(__pyx_t_3);
78278   __Pyx_XDECREF(__pyx_t_5);
78279   __Pyx_XDECREF(__pyx_t_6);
78280   if (__pyx_m) {
78281     if (__pyx_d) {
78282       __Pyx_AddTraceback("init yt.geometry.selection_routines", __pyx_clineno, __pyx_lineno, __pyx_filename);
78283     }
78284     Py_CLEAR(__pyx_m);
78285   } else if (!PyErr_Occurred()) {
78286     PyErr_SetString(PyExc_ImportError, "init yt.geometry.selection_routines");
78287   }
78288   __pyx_L0:;
78289   __Pyx_RefNannyFinishContext();
78290   #if CYTHON_PEP489_MULTI_PHASE_INIT
78291   return (__pyx_m != NULL) ? 0 : -1;
78292   #elif PY_MAJOR_VERSION >= 3
78293   return __pyx_m;
78294   #else
78295   return;
78296   #endif
78297 }
78298 
78299 /* --- Runtime support code --- */
78300 /* Refnanny */
78301 #if CYTHON_REFNANNY
78302 static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
78303     PyObject *m = NULL, *p = NULL;
78304     void *r = NULL;
78305     m = PyImport_ImportModule(modname);
78306     if (!m) goto end;
78307     p = PyObject_GetAttrString(m, "RefNannyAPI");
78308     if (!p) goto end;
78309     r = PyLong_AsVoidPtr(p);
78310 end:
78311     Py_XDECREF(p);
78312     Py_XDECREF(m);
78313     return (__Pyx_RefNannyAPIStruct *)r;
78314 }
78315 #endif
78316 
78317 /* PyObjectGetAttrStr */
78318 #if CYTHON_USE_TYPE_SLOTS
78319 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
78320     PyTypeObject* tp = Py_TYPE(obj);
78321     if (likely(tp->tp_getattro))
78322         return tp->tp_getattro(obj, attr_name);
78323 #if PY_MAJOR_VERSION < 3
78324     if (likely(tp->tp_getattr))
78325         return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));
78326 #endif
78327     return PyObject_GetAttr(obj, attr_name);
78328 }
78329 #endif
78330 
78331 /* GetBuiltinName */
78332 static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
78333     PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
78334     if (unlikely(!result)) {
78335         PyErr_Format(PyExc_NameError,
78336 #if PY_MAJOR_VERSION >= 3
78337             "name '%U' is not defined", name);
78338 #else
78339             "name '%.200s' is not defined", PyString_AS_STRING(name));
78340 #endif
78341     }
78342     return result;
78343 }
78344 
78345 /* RaiseArgTupleInvalid */
78346 static void __Pyx_RaiseArgtupleInvalid(
78347     const char* func_name,
78348     int exact,
78349     Py_ssize_t num_min,
78350     Py_ssize_t num_max,
78351     Py_ssize_t num_found)
78352 {
78353     Py_ssize_t num_expected;
78354     const char *more_or_less;
78355     if (num_found < num_min) {
78356         num_expected = num_min;
78357         more_or_less = "at least";
78358     } else {
78359         num_expected = num_max;
78360         more_or_less = "at most";
78361     }
78362     if (exact) {
78363         more_or_less = "exactly";
78364     }
78365     PyErr_Format(PyExc_TypeError,
78366                  "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
78367                  func_name, more_or_less, num_expected,
78368                  (num_expected == 1) ? "" : "s", num_found);
78369 }
78370 
78371 /* RaiseDoubleKeywords */
78372 static void __Pyx_RaiseDoubleKeywordsError(
78373     const char* func_name,
78374     PyObject* kw_name)
78375 {
78376     PyErr_Format(PyExc_TypeError,
78377         #if PY_MAJOR_VERSION >= 3
78378         "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
78379         #else
78380         "%s() got multiple values for keyword argument '%s'", func_name,
78381         PyString_AsString(kw_name));
78382         #endif
78383 }
78384 
78385 /* ParseKeywords */
78386 static int __Pyx_ParseOptionalKeywords(
78387     PyObject *kwds,
78388     PyObject **argnames[],
78389     PyObject *kwds2,
78390     PyObject *values[],
78391     Py_ssize_t num_pos_args,
78392     const char* function_name)
78393 {
78394     PyObject *key = 0, *value = 0;
78395     Py_ssize_t pos = 0;
78396     PyObject*** name;
78397     PyObject*** first_kw_arg = argnames + num_pos_args;
78398     while (PyDict_Next(kwds, &pos, &key, &value)) {
78399         name = first_kw_arg;
78400         while (*name && (**name != key)) name++;
78401         if (*name) {
78402             values[name-argnames] = value;
78403             continue;
78404         }
78405         name = first_kw_arg;
78406         #if PY_MAJOR_VERSION < 3
78407         if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) {
78408             while (*name) {
78409                 if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
78410                         && _PyString_Eq(**name, key)) {
78411                     values[name-argnames] = value;
78412                     break;
78413                 }
78414                 name++;
78415             }
78416             if (*name) continue;
78417             else {
78418                 PyObject*** argname = argnames;
78419                 while (argname != first_kw_arg) {
78420                     if ((**argname == key) || (
78421                             (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
78422                              && _PyString_Eq(**argname, key))) {
78423                         goto arg_passed_twice;
78424                     }
78425                     argname++;
78426                 }
78427             }
78428         } else
78429         #endif
78430         if (likely(PyUnicode_Check(key))) {
78431             while (*name) {
78432                 int cmp = (**name == key) ? 0 :
78433                 #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
78434                     (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 :
78435                 #endif
78436                     PyUnicode_Compare(**name, key);
78437                 if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
78438                 if (cmp == 0) {
78439                     values[name-argnames] = value;
78440                     break;
78441                 }
78442                 name++;
78443             }
78444             if (*name) continue;
78445             else {
78446                 PyObject*** argname = argnames;
78447                 while (argname != first_kw_arg) {
78448                     int cmp = (**argname == key) ? 0 :
78449                     #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
78450                         (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 :
78451                     #endif
78452                         PyUnicode_Compare(**argname, key);
78453                     if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
78454                     if (cmp == 0) goto arg_passed_twice;
78455                     argname++;
78456                 }
78457             }
78458         } else
78459             goto invalid_keyword_type;
78460         if (kwds2) {
78461             if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
78462         } else {
78463             goto invalid_keyword;
78464         }
78465     }
78466     return 0;
78467 arg_passed_twice:
78468     __Pyx_RaiseDoubleKeywordsError(function_name, key);
78469     goto bad;
78470 invalid_keyword_type:
78471     PyErr_Format(PyExc_TypeError,
78472         "%.200s() keywords must be strings", function_name);
78473     goto bad;
78474 invalid_keyword:
78475     PyErr_Format(PyExc_TypeError,
78476     #if PY_MAJOR_VERSION < 3
78477         "%.200s() got an unexpected keyword argument '%.200s'",
78478         function_name, PyString_AsString(key));
78479     #else
78480         "%s() got an unexpected keyword argument '%U'",
78481         function_name, key);
78482     #endif
78483 bad:
78484     return -1;
78485 }
78486 
78487 /* ArgTypeTest */
78488 static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact)
78489 {
78490     if (unlikely(!type)) {
78491         PyErr_SetString(PyExc_SystemError, "Missing type object");
78492         return 0;
78493     }
78494     else if (exact) {
78495         #if PY_MAJOR_VERSION == 2
78496         if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
78497         #endif
78498     }
78499     else {
78500         if (likely(__Pyx_TypeCheck(obj, type))) return 1;
78501     }
78502     PyErr_Format(PyExc_TypeError,
78503         "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
78504         name, type->tp_name, Py_TYPE(obj)->tp_name);
78505     return 0;
78506 }
78507 
78508 /* IsLittleEndian */
78509 static CYTHON_INLINE int __Pyx_Is_Little_Endian(void)
78510 {
78511   union {
78512     uint32_t u32;
78513     uint8_t u8[4];
78514   } S;
78515   S.u32 = 0x01020304;
78516   return S.u8[0] == 4;
78517 }
78518 
78519 /* BufferFormatCheck */
78520 static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
78521                               __Pyx_BufFmt_StackElem* stack,
78522                               __Pyx_TypeInfo* type) {
78523   stack[0].field = &ctx->root;
78524   stack[0].parent_offset = 0;
78525   ctx->root.type = type;
78526   ctx->root.name = "buffer dtype";
78527   ctx->root.offset = 0;
78528   ctx->head = stack;
78529   ctx->head->field = &ctx->root;
78530   ctx->fmt_offset = 0;
78531   ctx->head->parent_offset = 0;
78532   ctx->new_packmode = '@';
78533   ctx->enc_packmode = '@';
78534   ctx->new_count = 1;
78535   ctx->enc_count = 0;
78536   ctx->enc_type = 0;
78537   ctx->is_complex = 0;
78538   ctx->is_valid_array = 0;
78539   ctx->struct_alignment = 0;
78540   while (type->typegroup == 'S') {
78541     ++ctx->head;
78542     ctx->head->field = type->fields;
78543     ctx->head->parent_offset = 0;
78544     type = type->fields->type;
78545   }
78546 }
78547 static int __Pyx_BufFmt_ParseNumber(const char** ts) {
78548     int count;
78549     const char* t = *ts;
78550     if (*t < '0' || *t > '9') {
78551       return -1;
78552     } else {
78553         count = *t++ - '0';
78554         while (*t >= '0' && *t <= '9') {
78555             count *= 10;
78556             count += *t++ - '0';
78557         }
78558     }
78559     *ts = t;
78560     return count;
78561 }
78562 static int __Pyx_BufFmt_ExpectNumber(const char **ts) {
78563     int number = __Pyx_BufFmt_ParseNumber(ts);
78564     if (number == -1)
78565         PyErr_Format(PyExc_ValueError,\
78566                      "Does not understand character buffer dtype format string ('%c')", **ts);
78567     return number;
78568 }
78569 static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
78570   PyErr_Format(PyExc_ValueError,
78571                "Unexpected format string character: '%c'", ch);
78572 }
78573 static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) {
78574   switch (ch) {
78575     case 'c': return "'char'";
78576     case 'b': return "'signed char'";
78577     case 'B': return "'unsigned char'";
78578     case 'h': return "'short'";
78579     case 'H': return "'unsigned short'";
78580     case 'i': return "'int'";
78581     case 'I': return "'unsigned int'";
78582     case 'l': return "'long'";
78583     case 'L': return "'unsigned long'";
78584     case 'q': return "'long long'";
78585     case 'Q': return "'unsigned long long'";
78586     case 'f': return (is_complex ? "'complex float'" : "'float'");
78587     case 'd': return (is_complex ? "'complex double'" : "'double'");
78588     case 'g': return (is_complex ? "'complex long double'" : "'long double'");
78589     case 'T': return "a struct";
78590     case 'O': return "Python object";
78591     case 'P': return "a pointer";
78592     case 's': case 'p': return "a string";
78593     case 0: return "end";
78594     default: return "unparseable format string";
78595   }
78596 }
78597 static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) {
78598   switch (ch) {
78599     case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
78600     case 'h': case 'H': return 2;
78601     case 'i': case 'I': case 'l': case 'L': return 4;
78602     case 'q': case 'Q': return 8;
78603     case 'f': return (is_complex ? 8 : 4);
78604     case 'd': return (is_complex ? 16 : 8);
78605     case 'g': {
78606       PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g')..");
78607       return 0;
78608     }
78609     case 'O': case 'P': return sizeof(void*);
78610     default:
78611       __Pyx_BufFmt_RaiseUnexpectedChar(ch);
78612       return 0;
78613     }
78614 }
78615 static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
78616   switch (ch) {
78617     case 'c': case 'b': case 'B': case 's': case 'p': return 1;
78618     case 'h': case 'H': return sizeof(short);
78619     case 'i': case 'I': return sizeof(int);
78620     case 'l': case 'L': return sizeof(long);
78621     #ifdef HAVE_LONG_LONG
78622     case 'q': case 'Q': return sizeof(PY_LONG_LONG);
78623     #endif
78624     case 'f': return sizeof(float) * (is_complex ? 2 : 1);
78625     case 'd': return sizeof(double) * (is_complex ? 2 : 1);
78626     case 'g': return sizeof(long double) * (is_complex ? 2 : 1);
78627     case 'O': case 'P': return sizeof(void*);
78628     default: {
78629       __Pyx_BufFmt_RaiseUnexpectedChar(ch);
78630       return 0;
78631     }
78632   }
78633 }
78634 typedef struct { char c; short x; } __Pyx_st_short;
78635 typedef struct { char c; int x; } __Pyx_st_int;
78636 typedef struct { char c; long x; } __Pyx_st_long;
78637 typedef struct { char c; float x; } __Pyx_st_float;
78638 typedef struct { char c; double x; } __Pyx_st_double;
78639 typedef struct { char c; long double x; } __Pyx_st_longdouble;
78640 typedef struct { char c; void *x; } __Pyx_st_void_p;
78641 #ifdef HAVE_LONG_LONG
78642 typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong;
78643 #endif
78644 static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) {
78645   switch (ch) {
78646     case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
78647     case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short);
78648     case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int);
78649     case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long);
78650 #ifdef HAVE_LONG_LONG
78651     case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG);
78652 #endif
78653     case 'f': return sizeof(__Pyx_st_float) - sizeof(float);
78654     case 'd': return sizeof(__Pyx_st_double) - sizeof(double);
78655     case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double);
78656     case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*);
78657     default:
78658       __Pyx_BufFmt_RaiseUnexpectedChar(ch);
78659       return 0;
78660     }
78661 }
78662 /* These are for computing the padding at the end of the struct to align
78663    on the first member of the struct. This will probably the same as above,
78664    but we don't have any guarantees.
78665  */
78666 typedef struct { short x; char c; } __Pyx_pad_short;
78667 typedef struct { int x; char c; } __Pyx_pad_int;
78668 typedef struct { long x; char c; } __Pyx_pad_long;
78669 typedef struct { float x; char c; } __Pyx_pad_float;
78670 typedef struct { double x; char c; } __Pyx_pad_double;
78671 typedef struct { long double x; char c; } __Pyx_pad_longdouble;
78672 typedef struct { void *x; char c; } __Pyx_pad_void_p;
78673 #ifdef HAVE_LONG_LONG
78674 typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong;
78675 #endif
78676 static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) {
78677   switch (ch) {
78678     case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
78679     case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short);
78680     case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int);
78681     case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long);
78682 #ifdef HAVE_LONG_LONG
78683     case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG);
78684 #endif
78685     case 'f': return sizeof(__Pyx_pad_float) - sizeof(float);
78686     case 'd': return sizeof(__Pyx_pad_double) - sizeof(double);
78687     case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double);
78688     case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*);
78689     default:
78690       __Pyx_BufFmt_RaiseUnexpectedChar(ch);
78691       return 0;
78692     }
78693 }
78694 static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
78695   switch (ch) {
78696     case 'c':
78697         return 'H';
78698     case 'b': case 'h': case 'i':
78699     case 'l': case 'q': case 's': case 'p':
78700         return 'I';
78701     case 'B': case 'H': case 'I': case 'L': case 'Q':
78702         return 'U';
78703     case 'f': case 'd': case 'g':
78704         return (is_complex ? 'C' : 'R');
78705     case 'O':
78706         return 'O';
78707     case 'P':
78708         return 'P';
78709     default: {
78710       __Pyx_BufFmt_RaiseUnexpectedChar(ch);
78711       return 0;
78712     }
78713   }
78714 }
78715 static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) {
78716   if (ctx->head == NULL || ctx->head->field == &ctx->root) {
78717     const char* expected;
78718     const char* quote;
78719     if (ctx->head == NULL) {
78720       expected = "end";
78721       quote = "";
78722     } else {
78723       expected = ctx->head->field->type->name;
78724       quote = "'";
78725     }
78726     PyErr_Format(PyExc_ValueError,
78727                  "Buffer dtype mismatch, expected %s%s%s but got %s",
78728                  quote, expected, quote,
78729                  __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex));
78730   } else {
78731     __Pyx_StructField* field = ctx->head->field;
78732     __Pyx_StructField* parent = (ctx->head - 1)->field;
78733     PyErr_Format(PyExc_ValueError,
78734                  "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'",
78735                  field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex),
78736                  parent->type->name, field->name);
78737   }
78738 }
78739 static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) {
78740   char group;
78741   size_t size, offset, arraysize = 1;
78742   if (ctx->enc_type == 0) return 0;
78743   if (ctx->head->field->type->arraysize[0]) {
78744     int i, ndim = 0;
78745     if (ctx->enc_type == 's' || ctx->enc_type == 'p') {
78746         ctx->is_valid_array = ctx->head->field->type->ndim == 1;
78747         ndim = 1;
78748         if (ctx->enc_count != ctx->head->field->type->arraysize[0]) {
78749             PyErr_Format(PyExc_ValueError,
78750                          "Expected a dimension of size %zu, got %zu",
78751                          ctx->head->field->type->arraysize[0], ctx->enc_count);
78752             return -1;
78753         }
78754     }
78755     if (!ctx->is_valid_array) {
78756       PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d",
78757                    ctx->head->field->type->ndim, ndim);
78758       return -1;
78759     }
78760     for (i = 0; i < ctx->head->field->type->ndim; i++) {
78761       arraysize *= ctx->head->field->type->arraysize[i];
78762     }
78763     ctx->is_valid_array = 0;
78764     ctx->enc_count = 1;
78765   }
78766   group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex);
78767   do {
78768     __Pyx_StructField* field = ctx->head->field;
78769     __Pyx_TypeInfo* type = field->type;
78770     if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') {
78771       size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex);
78772     } else {
78773       size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex);
78774     }
78775     if (ctx->enc_packmode == '@') {
78776       size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex);
78777       size_t align_mod_offset;
78778       if (align_at == 0) return -1;
78779       align_mod_offset = ctx->fmt_offset % align_at;
78780       if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset;
78781       if (ctx->struct_alignment == 0)
78782           ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type,
78783                                                                  ctx->is_complex);
78784     }
78785     if (type->size != size || type->typegroup != group) {
78786       if (type->typegroup == 'C' && type->fields != NULL) {
78787         size_t parent_offset = ctx->head->parent_offset + field->offset;
78788         ++ctx->head;
78789         ctx->head->field = type->fields;
78790         ctx->head->parent_offset = parent_offset;
78791         continue;
78792       }
78793       if ((type->typegroup == 'H' || group == 'H') && type->size == size) {
78794       } else {
78795           __Pyx_BufFmt_RaiseExpected(ctx);
78796           return -1;
78797       }
78798     }
78799     offset = ctx->head->parent_offset + field->offset;
78800     if (ctx->fmt_offset != offset) {
78801       PyErr_Format(PyExc_ValueError,
78802                    "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected",
78803                    (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset);
78804       return -1;
78805     }
78806     ctx->fmt_offset += size;
78807     if (arraysize)
78808       ctx->fmt_offset += (arraysize - 1) * size;
78809     --ctx->enc_count;
78810     while (1) {
78811       if (field == &ctx->root) {
78812         ctx->head = NULL;
78813         if (ctx->enc_count != 0) {
78814           __Pyx_BufFmt_RaiseExpected(ctx);
78815           return -1;
78816         }
78817         break;
78818       }
78819       ctx->head->field = ++field;
78820       if (field->type == NULL) {
78821         --ctx->head;
78822         field = ctx->head->field;
78823         continue;
78824       } else if (field->type->typegroup == 'S') {
78825         size_t parent_offset = ctx->head->parent_offset + field->offset;
78826         if (field->type->fields->type == NULL) continue;
78827         field = field->type->fields;
78828         ++ctx->head;
78829         ctx->head->field = field;
78830         ctx->head->parent_offset = parent_offset;
78831         break;
78832       } else {
78833         break;
78834       }
78835     }
78836   } while (ctx->enc_count);
78837   ctx->enc_type = 0;
78838   ctx->is_complex = 0;
78839   return 0;
78840 }
78841 static PyObject *
78842 __pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp)
78843 {
78844     const char *ts = *tsp;
78845     int i = 0, number;
78846     int ndim = ctx->head->field->type->ndim;
78847 ;
78848     ++ts;
78849     if (ctx->new_count != 1) {
78850         PyErr_SetString(PyExc_ValueError,
78851                         "Cannot handle repeated arrays in format string");
78852         return NULL;
78853     }
78854     if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
78855     while (*ts && *ts != ')') {
78856         switch (*ts) {
78857             case ' ': case '\f': case '\r': case '\n': case '\t': case '\v':  continue;
78858             default:  break;
78859         }
78860         number = __Pyx_BufFmt_ExpectNumber(&ts);
78861         if (number == -1) return NULL;
78862         if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i])
78863             return PyErr_Format(PyExc_ValueError,
78864                         "Expected a dimension of size %zu, got %d",
78865                         ctx->head->field->type->arraysize[i], number);
78866         if (*ts != ',' && *ts != ')')
78867             return PyErr_Format(PyExc_ValueError,
78868                                 "Expected a comma in format string, got '%c'", *ts);
78869         if (*ts == ',') ts++;
78870         i++;
78871     }
78872     if (i != ndim)
78873         return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d",
78874                             ctx->head->field->type->ndim, i);
78875     if (!*ts) {
78876         PyErr_SetString(PyExc_ValueError,
78877                         "Unexpected end of format string, expected ')'");
78878         return NULL;
78879     }
78880     ctx->is_valid_array = 1;
78881     ctx->new_count = 1;
78882     *tsp = ++ts;
78883     return Py_None;
78884 }
78885 static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) {
78886   int got_Z = 0;
78887   while (1) {
78888     switch(*ts) {
78889       case 0:
78890         if (ctx->enc_type != 0 && ctx->head == NULL) {
78891           __Pyx_BufFmt_RaiseExpected(ctx);
78892           return NULL;
78893         }
78894         if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
78895         if (ctx->head != NULL) {
78896           __Pyx_BufFmt_RaiseExpected(ctx);
78897           return NULL;
78898         }
78899         return ts;
78900       case ' ':
78901       case '\r':
78902       case '\n':
78903         ++ts;
78904         break;
78905       case '<':
78906         if (!__Pyx_Is_Little_Endian()) {
78907           PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler");
78908           return NULL;
78909         }
78910         ctx->new_packmode = '=';
78911         ++ts;
78912         break;
78913       case '>':
78914       case '!':
78915         if (__Pyx_Is_Little_Endian()) {
78916           PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler");
78917           return NULL;
78918         }
78919         ctx->new_packmode = '=';
78920         ++ts;
78921         break;
78922       case '=':
78923       case '@':
78924       case '^':
78925         ctx->new_packmode = *ts++;
78926         break;
78927       case 'T':
78928         {
78929           const char* ts_after_sub;
78930           size_t i, struct_count = ctx->new_count;
78931           size_t struct_alignment = ctx->struct_alignment;
78932           ctx->new_count = 1;
78933           ++ts;
78934           if (*ts != '{') {
78935             PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'");
78936             return NULL;
78937           }
78938           if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
78939           ctx->enc_type = 0;
78940           ctx->enc_count = 0;
78941           ctx->struct_alignment = 0;
78942           ++ts;
78943           ts_after_sub = ts;
78944           for (i = 0; i != struct_count; ++i) {
78945             ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts);
78946             if (!ts_after_sub) return NULL;
78947           }
78948           ts = ts_after_sub;
78949           if (struct_alignment) ctx->struct_alignment = struct_alignment;
78950         }
78951         break;
78952       case '}':
78953         {
78954           size_t alignment = ctx->struct_alignment;
78955           ++ts;
78956           if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
78957           ctx->enc_type = 0;
78958           if (alignment && ctx->fmt_offset % alignment) {
78959             ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment);
78960           }
78961         }
78962         return ts;
78963       case 'x':
78964         if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
78965         ctx->fmt_offset += ctx->new_count;
78966         ctx->new_count = 1;
78967         ctx->enc_count = 0;
78968         ctx->enc_type = 0;
78969         ctx->enc_packmode = ctx->new_packmode;
78970         ++ts;
78971         break;
78972       case 'Z':
78973         got_Z = 1;
78974         ++ts;
78975         if (*ts != 'f' && *ts != 'd' && *ts != 'g') {
78976           __Pyx_BufFmt_RaiseUnexpectedChar('Z');
78977           return NULL;
78978         }
78979         CYTHON_FALLTHROUGH;
78980       case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
78981       case 'l': case 'L': case 'q': case 'Q':
78982       case 'f': case 'd': case 'g':
78983       case 'O': case 'p':
78984         if (ctx->enc_type == *ts && got_Z == ctx->is_complex &&
78985             ctx->enc_packmode == ctx->new_packmode) {
78986           ctx->enc_count += ctx->new_count;
78987           ctx->new_count = 1;
78988           got_Z = 0;
78989           ++ts;
78990           break;
78991         }
78992         CYTHON_FALLTHROUGH;
78993       case 's':
78994         if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
78995         ctx->enc_count = ctx->new_count;
78996         ctx->enc_packmode = ctx->new_packmode;
78997         ctx->enc_type = *ts;
78998         ctx->is_complex = got_Z;
78999         ++ts;
79000         ctx->new_count = 1;
79001         got_Z = 0;
79002         break;
79003       case ':':
79004         ++ts;
79005         while(*ts != ':') ++ts;
79006         ++ts;
79007         break;
79008       case '(':
79009         if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL;
79010         break;
79011       default:
79012         {
79013           int number = __Pyx_BufFmt_ExpectNumber(&ts);
79014           if (number == -1) return NULL;
79015           ctx->new_count = (size_t)number;
79016         }
79017     }
79018   }
79019 }
79020 
79021 /* BufferGetAndValidate */
79022   static CYTHON_INLINE void __Pyx_SafeReleaseBuffer(Py_buffer* info) {
79023   if (unlikely(info->buf == NULL)) return;
79024   if (info->suboffsets == __Pyx_minusones) info->suboffsets = NULL;
79025   __Pyx_ReleaseBuffer(info);
79026 }
79027 static void __Pyx_ZeroBuffer(Py_buffer* buf) {
79028   buf->buf = NULL;
79029   buf->obj = NULL;
79030   buf->strides = __Pyx_zeros;
79031   buf->shape = __Pyx_zeros;
79032   buf->suboffsets = __Pyx_minusones;
79033 }
79034 static int __Pyx__GetBufferAndValidate(
79035         Py_buffer* buf, PyObject* obj,  __Pyx_TypeInfo* dtype, int flags,
79036         int nd, int cast, __Pyx_BufFmt_StackElem* stack)
79037 {
79038   buf->buf = NULL;
79039   if (unlikely(__Pyx_GetBuffer(obj, buf, flags) == -1)) {
79040     __Pyx_ZeroBuffer(buf);
79041     return -1;
79042   }
79043   if (unlikely(buf->ndim != nd)) {
79044     PyErr_Format(PyExc_ValueError,
79045                  "Buffer has wrong number of dimensions (expected %d, got %d)",
79046                  nd, buf->ndim);
79047     goto fail;
79048   }
79049   if (!cast) {
79050     __Pyx_BufFmt_Context ctx;
79051     __Pyx_BufFmt_Init(&ctx, stack, dtype);
79052     if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail;
79053   }
79054   if (unlikely((size_t)buf->itemsize != dtype->size)) {
79055     PyErr_Format(PyExc_ValueError,
79056       "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "d byte%s) does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "d byte%s)",
79057       buf->itemsize, (buf->itemsize > 1) ? "s" : "",
79058       dtype->name, (Py_ssize_t)dtype->size, (dtype->size > 1) ? "s" : "");
79059     goto fail;
79060   }
79061   if (buf->suboffsets == NULL) buf->suboffsets = __Pyx_minusones;
79062   return 0;
79063 fail:;
79064   __Pyx_SafeReleaseBuffer(buf);
79065   return -1;
79066 }
79067 
79068 /* PyDictVersioning */
79069   #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
79070 static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) {
79071     PyObject *dict = Py_TYPE(obj)->tp_dict;
79072     return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0;
79073 }
79074 static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) {
79075     PyObject **dictptr = NULL;
79076     Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset;
79077     if (offset) {
79078 #if CYTHON_COMPILING_IN_CPYTHON
79079         dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj);
79080 #else
79081         dictptr = _PyObject_GetDictPtr(obj);
79082 #endif
79083     }
79084     return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0;
79085 }
79086 static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) {
79087     PyObject *dict = Py_TYPE(obj)->tp_dict;
79088     if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict)))
79089         return 0;
79090     return obj_dict_version == __Pyx_get_object_dict_version(obj);
79091 }
79092 #endif
79093 
79094 /* GetModuleGlobalName */
79095   #if CYTHON_USE_DICT_VERSIONS
79096 static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value)
79097 #else
79098 static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)
79099 #endif
79100 {
79101     PyObject *result;
79102 #if !CYTHON_AVOID_BORROWED_REFS
79103 #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1
79104     result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash);
79105     __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
79106     if (likely(result)) {
79107         return __Pyx_NewRef(result);
79108     } else if (unlikely(PyErr_Occurred())) {
79109         return NULL;
79110     }
79111 #else
79112     result = PyDict_GetItem(__pyx_d, name);
79113     __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
79114     if (likely(result)) {
79115         return __Pyx_NewRef(result);
79116     }
79117 #endif
79118 #else
79119     result = PyObject_GetItem(__pyx_d, name);
79120     __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
79121     if (likely(result)) {
79122         return __Pyx_NewRef(result);
79123     }
79124     PyErr_Clear();
79125 #endif
79126     return __Pyx_GetBuiltinName(name);
79127 }
79128 
79129 /* PyObjectCall */
79130   #if CYTHON_COMPILING_IN_CPYTHON
79131 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
79132     PyObject *result;
79133     ternaryfunc call = func->ob_type->tp_call;
79134     if (unlikely(!call))
79135         return PyObject_Call(func, arg, kw);
79136     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
79137         return NULL;
79138     result = (*call)(func, arg, kw);
79139     Py_LeaveRecursiveCall();
79140     if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
79141         PyErr_SetString(
79142             PyExc_SystemError,
79143             "NULL result without error in PyObject_Call");
79144     }
79145     return result;
79146 }
79147 #endif
79148 
79149 /* ExtTypeTest */
79150   static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
79151     if (unlikely(!type)) {
79152         PyErr_SetString(PyExc_SystemError, "Missing type object");
79153         return 0;
79154     }
79155     if (likely(__Pyx_TypeCheck(obj, type)))
79156         return 1;
79157     PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
79158                  Py_TYPE(obj)->tp_name, type->tp_name);
79159     return 0;
79160 }
79161 
79162 /* BufferFallbackError */
79163   static void __Pyx_RaiseBufferFallbackError(void) {
79164   PyErr_SetString(PyExc_ValueError,
79165      "Buffer acquisition failed on assignment; and then reacquiring the old buffer failed too!");
79166 }
79167 
79168 /* PyErrFetchRestore */
79169   #if CYTHON_FAST_THREAD_STATE
79170 static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
79171     PyObject *tmp_type, *tmp_value, *tmp_tb;
79172     tmp_type = tstate->curexc_type;
79173     tmp_value = tstate->curexc_value;
79174     tmp_tb = tstate->curexc_traceback;
79175     tstate->curexc_type = type;
79176     tstate->curexc_value = value;
79177     tstate->curexc_traceback = tb;
79178     Py_XDECREF(tmp_type);
79179     Py_XDECREF(tmp_value);
79180     Py_XDECREF(tmp_tb);
79181 }
79182 static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
79183     *type = tstate->curexc_type;
79184     *value = tstate->curexc_value;
79185     *tb = tstate->curexc_traceback;
79186     tstate->curexc_type = 0;
79187     tstate->curexc_value = 0;
79188     tstate->curexc_traceback = 0;
79189 }
79190 #endif
79191 
79192 /* RaiseException */
79193   #if PY_MAJOR_VERSION < 3
79194 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
79195                         CYTHON_UNUSED PyObject *cause) {
79196     __Pyx_PyThreadState_declare
79197     Py_XINCREF(type);
79198     if (!value || value == Py_None)
79199         value = NULL;
79200     else
79201         Py_INCREF(value);
79202     if (!tb || tb == Py_None)
79203         tb = NULL;
79204     else {
79205         Py_INCREF(tb);
79206         if (!PyTraceBack_Check(tb)) {
79207             PyErr_SetString(PyExc_TypeError,
79208                 "raise: arg 3 must be a traceback or None");
79209             goto raise_error;
79210         }
79211     }
79212     if (PyType_Check(type)) {
79213 #if CYTHON_COMPILING_IN_PYPY
79214         if (!value) {
79215             Py_INCREF(Py_None);
79216             value = Py_None;
79217         }
79218 #endif
79219         PyErr_NormalizeException(&type, &value, &tb);
79220     } else {
79221         if (value) {
79222             PyErr_SetString(PyExc_TypeError,
79223                 "instance exception may not have a separate value");
79224             goto raise_error;
79225         }
79226         value = type;
79227         type = (PyObject*) Py_TYPE(type);
79228         Py_INCREF(type);
79229         if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
79230             PyErr_SetString(PyExc_TypeError,
79231                 "raise: exception class must be a subclass of BaseException");
79232             goto raise_error;
79233         }
79234     }
79235     __Pyx_PyThreadState_assign
79236     __Pyx_ErrRestore(type, value, tb);
79237     return;
79238 raise_error:
79239     Py_XDECREF(value);
79240     Py_XDECREF(type);
79241     Py_XDECREF(tb);
79242     return;
79243 }
79244 #else
79245 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
79246     PyObject* owned_instance = NULL;
79247     if (tb == Py_None) {
79248         tb = 0;
79249     } else if (tb && !PyTraceBack_Check(tb)) {
79250         PyErr_SetString(PyExc_TypeError,
79251             "raise: arg 3 must be a traceback or None");
79252         goto bad;
79253     }
79254     if (value == Py_None)
79255         value = 0;
79256     if (PyExceptionInstance_Check(type)) {
79257         if (value) {
79258             PyErr_SetString(PyExc_TypeError,
79259                 "instance exception may not have a separate value");
79260             goto bad;
79261         }
79262         value = type;
79263         type = (PyObject*) Py_TYPE(value);
79264     } else if (PyExceptionClass_Check(type)) {
79265         PyObject *instance_class = NULL;
79266         if (value && PyExceptionInstance_Check(value)) {
79267             instance_class = (PyObject*) Py_TYPE(value);
79268             if (instance_class != type) {
79269                 int is_subclass = PyObject_IsSubclass(instance_class, type);
79270                 if (!is_subclass) {
79271                     instance_class = NULL;
79272                 } else if (unlikely(is_subclass == -1)) {
79273                     goto bad;
79274                 } else {
79275                     type = instance_class;
79276                 }
79277             }
79278         }
79279         if (!instance_class) {
79280             PyObject *args;
79281             if (!value)
79282                 args = PyTuple_New(0);
79283             else if (PyTuple_Check(value)) {
79284                 Py_INCREF(value);
79285                 args = value;
79286             } else
79287                 args = PyTuple_Pack(1, value);
79288             if (!args)
79289                 goto bad;
79290             owned_instance = PyObject_Call(type, args, NULL);
79291             Py_DECREF(args);
79292             if (!owned_instance)
79293                 goto bad;
79294             value = owned_instance;
79295             if (!PyExceptionInstance_Check(value)) {
79296                 PyErr_Format(PyExc_TypeError,
79297                              "calling %R should have returned an instance of "
79298                              "BaseException, not %R",
79299                              type, Py_TYPE(value));
79300                 goto bad;
79301             }
79302         }
79303     } else {
79304         PyErr_SetString(PyExc_TypeError,
79305             "raise: exception class must be a subclass of BaseException");
79306         goto bad;
79307     }
79308     if (cause) {
79309         PyObject *fixed_cause;
79310         if (cause == Py_None) {
79311             fixed_cause = NULL;
79312         } else if (PyExceptionClass_Check(cause)) {
79313             fixed_cause = PyObject_CallObject(cause, NULL);
79314             if (fixed_cause == NULL)
79315                 goto bad;
79316         } else if (PyExceptionInstance_Check(cause)) {
79317             fixed_cause = cause;
79318             Py_INCREF(fixed_cause);
79319         } else {
79320             PyErr_SetString(PyExc_TypeError,
79321                             "exception causes must derive from "
79322                             "BaseException");
79323             goto bad;
79324         }
79325         PyException_SetCause(value, fixed_cause);
79326     }
79327     PyErr_SetObject(type, value);
79328     if (tb) {
79329 #if CYTHON_COMPILING_IN_PYPY
79330         PyObject *tmp_type, *tmp_value, *tmp_tb;
79331         PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
79332         Py_INCREF(tb);
79333         PyErr_Restore(tmp_type, tmp_value, tb);
79334         Py_XDECREF(tmp_tb);
79335 #else
79336         PyThreadState *tstate = __Pyx_PyThreadState_Current;
79337         PyObject* tmp_tb = tstate->curexc_traceback;
79338         if (tb != tmp_tb) {
79339             Py_INCREF(tb);
79340             tstate->curexc_traceback = tb;
79341             Py_XDECREF(tmp_tb);
79342         }
79343 #endif
79344     }
79345 bad:
79346     Py_XDECREF(owned_instance);
79347     return;
79348 }
79349 #endif
79350 
79351 /* MemviewSliceInit */
79352   static int
79353 __Pyx_init_memviewslice(struct __pyx_memoryview_obj *memview,
79354                         int ndim,
79355                         __Pyx_memviewslice *memviewslice,
79356                         int memview_is_new_reference)
79357 {
79358     __Pyx_RefNannyDeclarations
79359     int i, retval=-1;
79360     Py_buffer *buf = &memview->view;
79361     __Pyx_RefNannySetupContext("init_memviewslice", 0);
79362     if (memviewslice->memview || memviewslice->data) {
79363         PyErr_SetString(PyExc_ValueError,
79364             "memviewslice is already initialized!");
79365         goto fail;
79366     }
79367     if (buf->strides) {
79368         for (i = 0; i < ndim; i++) {
79369             memviewslice->strides[i] = buf->strides[i];
79370         }
79371     } else {
79372         Py_ssize_t stride = buf->itemsize;
79373         for (i = ndim - 1; i >= 0; i--) {
79374             memviewslice->strides[i] = stride;
79375             stride *= buf->shape[i];
79376         }
79377     }
79378     for (i = 0; i < ndim; i++) {
79379         memviewslice->shape[i]   = buf->shape[i];
79380         if (buf->suboffsets) {
79381             memviewslice->suboffsets[i] = buf->suboffsets[i];
79382         } else {
79383             memviewslice->suboffsets[i] = -1;
79384         }
79385     }
79386     memviewslice->memview = memview;
79387     memviewslice->data = (char *)buf->buf;
79388     if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) {
79389         Py_INCREF(memview);
79390     }
79391     retval = 0;
79392     goto no_fail;
79393 fail:
79394     memviewslice->memview = 0;
79395     memviewslice->data = 0;
79396     retval = -1;
79397 no_fail:
79398     __Pyx_RefNannyFinishContext();
79399     return retval;
79400 }
79401 #ifndef Py_NO_RETURN
79402 #define Py_NO_RETURN
79403 #endif
79404 static void __pyx_fatalerror(const char *fmt, ...) Py_NO_RETURN {
79405     va_list vargs;
79406     char msg[200];
79407 #ifdef HAVE_STDARG_PROTOTYPES
79408     va_start(vargs, fmt);
79409 #else
79410     va_start(vargs);
79411 #endif
79412     vsnprintf(msg, 200, fmt, vargs);
79413     va_end(vargs);
79414     Py_FatalError(msg);
79415 }
79416 static CYTHON_INLINE int
79417 __pyx_add_acquisition_count_locked(__pyx_atomic_int *acquisition_count,
79418                                    PyThread_type_lock lock)
79419 {
79420     int result;
79421     PyThread_acquire_lock(lock, 1);
79422     result = (*acquisition_count)++;
79423     PyThread_release_lock(lock);
79424     return result;
79425 }
79426 static CYTHON_INLINE int
79427 __pyx_sub_acquisition_count_locked(__pyx_atomic_int *acquisition_count,
79428                                    PyThread_type_lock lock)
79429 {
79430     int result;
79431     PyThread_acquire_lock(lock, 1);
79432     result = (*acquisition_count)--;
79433     PyThread_release_lock(lock);
79434     return result;
79435 }
79436 static CYTHON_INLINE void
79437 __Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno)
79438 {
79439     int first_time;
79440     struct __pyx_memoryview_obj *memview = memslice->memview;
79441     if (!memview || (PyObject *) memview == Py_None)
79442         return;
79443     if (__pyx_get_slice_count(memview) < 0)
79444         __pyx_fatalerror("Acquisition count is %d (line %d)",
79445                          __pyx_get_slice_count(memview), lineno);
79446     first_time = __pyx_add_acquisition_count(memview) == 0;
79447     if (first_time) {
79448         if (have_gil) {
79449             Py_INCREF((PyObject *) memview);
79450         } else {
79451             PyGILState_STATE _gilstate = PyGILState_Ensure();
79452             Py_INCREF((PyObject *) memview);
79453             PyGILState_Release(_gilstate);
79454         }
79455     }
79456 }
79457 static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice,
79458                                              int have_gil, int lineno) {
79459     int last_time;
79460     struct __pyx_memoryview_obj *memview = memslice->memview;
79461     if (!memview ) {
79462         return;
79463     } else if ((PyObject *) memview == Py_None) {
79464         memslice->memview = NULL;
79465         return;
79466     }
79467     if (__pyx_get_slice_count(memview) <= 0)
79468         __pyx_fatalerror("Acquisition count is %d (line %d)",
79469                          __pyx_get_slice_count(memview), lineno);
79470     last_time = __pyx_sub_acquisition_count(memview) == 1;
79471     memslice->data = NULL;
79472     if (last_time) {
79473         if (have_gil) {
79474             Py_CLEAR(memslice->memview);
79475         } else {
79476             PyGILState_STATE _gilstate = PyGILState_Ensure();
79477             Py_CLEAR(memslice->memview);
79478             PyGILState_Release(_gilstate);
79479         }
79480     } else {
79481         memslice->memview = NULL;
79482     }
79483 }
79484 
79485 /* PyErrExceptionMatches */
79486   #if CYTHON_FAST_THREAD_STATE
79487 static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
79488     Py_ssize_t i, n;
79489     n = PyTuple_GET_SIZE(tuple);
79490 #if PY_MAJOR_VERSION >= 3
79491     for (i=0; i<n; i++) {
79492         if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
79493     }
79494 #endif
79495     for (i=0; i<n; i++) {
79496         if (__Pyx_PyErr_GivenExceptionMatches(exc_type, PyTuple_GET_ITEM(tuple, i))) return 1;
79497     }
79498     return 0;
79499 }
79500 static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) {
79501     PyObject *exc_type = tstate->curexc_type;
79502     if (exc_type == err) return 1;
79503     if (unlikely(!exc_type)) return 0;
79504     if (unlikely(PyTuple_Check(err)))
79505         return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err);
79506     return __Pyx_PyErr_GivenExceptionMatches(exc_type, err);
79507 }
79508 #endif
79509 
79510 /* GetAttr */
79511   static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
79512 #if CYTHON_USE_TYPE_SLOTS
79513 #if PY_MAJOR_VERSION >= 3
79514     if (likely(PyUnicode_Check(n)))
79515 #else
79516     if (likely(PyString_Check(n)))
79517 #endif
79518         return __Pyx_PyObject_GetAttrStr(o, n);
79519 #endif
79520     return PyObject_GetAttr(o, n);
79521 }
79522 
79523 /* GetAttr3 */
79524   static PyObject *__Pyx_GetAttr3Default(PyObject *d) {
79525     __Pyx_PyThreadState_declare
79526     __Pyx_PyThreadState_assign
79527     if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
79528         return NULL;
79529     __Pyx_PyErr_Clear();
79530     Py_INCREF(d);
79531     return d;
79532 }
79533 static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
79534     PyObject *r = __Pyx_GetAttr(o, n);
79535     return (likely(r)) ? r : __Pyx_GetAttr3Default(d);
79536 }
79537 
79538 /* BufferIndexError */
79539   static void __Pyx_RaiseBufferIndexError(int axis) {
79540   PyErr_Format(PyExc_IndexError,
79541      "Out of bounds on buffer access (axis %d)", axis);
79542 }
79543 
79544 /* GetItemInt */
79545   static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
79546     PyObject *r;
79547     if (!j) return NULL;
79548     r = PyObject_GetItem(o, j);
79549     Py_DECREF(j);
79550     return r;
79551 }
79552 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
79553                                                               CYTHON_NCP_UNUSED int wraparound,
79554                                                               CYTHON_NCP_UNUSED int boundscheck) {
79555 #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
79556     Py_ssize_t wrapped_i = i;
79557     if (wraparound & unlikely(i < 0)) {
79558         wrapped_i += PyList_GET_SIZE(o);
79559     }
79560     if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) {
79561         PyObject *r = PyList_GET_ITEM(o, wrapped_i);
79562         Py_INCREF(r);
79563         return r;
79564     }
79565     return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
79566 #else
79567     return PySequence_GetItem(o, i);
79568 #endif
79569 }
79570 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
79571                                                               CYTHON_NCP_UNUSED int wraparound,
79572                                                               CYTHON_NCP_UNUSED int boundscheck) {
79573 #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
79574     Py_ssize_t wrapped_i = i;
79575     if (wraparound & unlikely(i < 0)) {
79576         wrapped_i += PyTuple_GET_SIZE(o);
79577     }
79578     if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) {
79579         PyObject *r = PyTuple_GET_ITEM(o, wrapped_i);
79580         Py_INCREF(r);
79581         return r;
79582     }
79583     return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
79584 #else
79585     return PySequence_GetItem(o, i);
79586 #endif
79587 }
79588 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
79589                                                      CYTHON_NCP_UNUSED int wraparound,
79590                                                      CYTHON_NCP_UNUSED int boundscheck) {
79591 #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
79592     if (is_list || PyList_CheckExact(o)) {
79593         Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
79594         if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) {
79595             PyObject *r = PyList_GET_ITEM(o, n);
79596             Py_INCREF(r);
79597             return r;
79598         }
79599     }
79600     else if (PyTuple_CheckExact(o)) {
79601         Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
79602         if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) {
79603             PyObject *r = PyTuple_GET_ITEM(o, n);
79604             Py_INCREF(r);
79605             return r;
79606         }
79607     } else {
79608         PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
79609         if (likely(m && m->sq_item)) {
79610             if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
79611                 Py_ssize_t l = m->sq_length(o);
79612                 if (likely(l >= 0)) {
79613                     i += l;
79614                 } else {
79615                     if (!PyErr_ExceptionMatches(PyExc_OverflowError))
79616                         return NULL;
79617                     PyErr_Clear();
79618                 }
79619             }
79620             return m->sq_item(o, i);
79621         }
79622     }
79623 #else
79624     if (is_list || PySequence_Check(o)) {
79625         return PySequence_GetItem(o, i);
79626     }
79627 #endif
79628     return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
79629 }
79630 
79631 /* PyCFunctionFastCall */
79632   #if CYTHON_FAST_PYCCALL
79633 static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) {
79634     PyCFunctionObject *func = (PyCFunctionObject*)func_obj;
79635     PyCFunction meth = PyCFunction_GET_FUNCTION(func);
79636     PyObject *self = PyCFunction_GET_SELF(func);
79637     int flags = PyCFunction_GET_FLAGS(func);
79638     assert(PyCFunction_Check(func));
79639     assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)));
79640     assert(nargs >= 0);
79641     assert(nargs == 0 || args != NULL);
79642     /* _PyCFunction_FastCallDict() must not be called with an exception set,
79643        because it may clear it (directly or indirectly) and so the
79644        caller loses its exception */
79645     assert(!PyErr_Occurred());
79646     if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) {
79647         return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL);
79648     } else {
79649         return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs);
79650     }
79651 }
79652 #endif
79653 
79654 /* PyFunctionFastCall */
79655   #if CYTHON_FAST_PYCALL
79656 static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na,
79657                                                PyObject *globals) {
79658     PyFrameObject *f;
79659     PyThreadState *tstate = __Pyx_PyThreadState_Current;
79660     PyObject **fastlocals;
79661     Py_ssize_t i;
79662     PyObject *result;
79663     assert(globals != NULL);
79664     /* XXX Perhaps we should create a specialized
79665        PyFrame_New() that doesn't take locals, but does
79666        take builtins without sanity checking them.
79667        */
79668     assert(tstate != NULL);
79669     f = PyFrame_New(tstate, co, globals, NULL);
79670     if (f == NULL) {
79671         return NULL;
79672     }
79673     fastlocals = __Pyx_PyFrame_GetLocalsplus(f);
79674     for (i = 0; i < na; i++) {
79675         Py_INCREF(*args);
79676         fastlocals[i] = *args++;
79677     }
79678     result = PyEval_EvalFrameEx(f,0);
79679     ++tstate->recursion_depth;
79680     Py_DECREF(f);
79681     --tstate->recursion_depth;
79682     return result;
79683 }
79684 #if 1 || PY_VERSION_HEX < 0x030600B1
79685 static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) {
79686     PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
79687     PyObject *globals = PyFunction_GET_GLOBALS(func);
79688     PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
79689     PyObject *closure;
79690 #if PY_MAJOR_VERSION >= 3
79691     PyObject *kwdefs;
79692 #endif
79693     PyObject *kwtuple, **k;
79694     PyObject **d;
79695     Py_ssize_t nd;
79696     Py_ssize_t nk;
79697     PyObject *result;
79698     assert(kwargs == NULL || PyDict_Check(kwargs));
79699     nk = kwargs ? PyDict_Size(kwargs) : 0;
79700     if (Py_EnterRecursiveCall((char*)" while calling a Python object")) {
79701         return NULL;
79702     }
79703     if (
79704 #if PY_MAJOR_VERSION >= 3
79705             co->co_kwonlyargcount == 0 &&
79706 #endif
79707             likely(kwargs == NULL || nk == 0) &&
79708             co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
79709         if (argdefs == NULL && co->co_argcount == nargs) {
79710             result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals);
79711             goto done;
79712         }
79713         else if (nargs == 0 && argdefs != NULL
79714                  && co->co_argcount == Py_SIZE(argdefs)) {
79715             /* function called with no arguments, but all parameters have
79716                a default value: use default values as arguments .*/
79717             args = &PyTuple_GET_ITEM(argdefs, 0);
79718             result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals);
79719             goto done;
79720         }
79721     }
79722     if (kwargs != NULL) {
79723         Py_ssize_t pos, i;
79724         kwtuple = PyTuple_New(2 * nk);
79725         if (kwtuple == NULL) {
79726             result = NULL;
79727             goto done;
79728         }
79729         k = &PyTuple_GET_ITEM(kwtuple, 0);
79730         pos = i = 0;
79731         while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
79732             Py_INCREF(k[i]);
79733             Py_INCREF(k[i+1]);
79734             i += 2;
79735         }
79736         nk = i / 2;
79737     }
79738     else {
79739         kwtuple = NULL;
79740         k = NULL;
79741     }
79742     closure = PyFunction_GET_CLOSURE(func);
79743 #if PY_MAJOR_VERSION >= 3
79744     kwdefs = PyFunction_GET_KW_DEFAULTS(func);
79745 #endif
79746     if (argdefs != NULL) {
79747         d = &PyTuple_GET_ITEM(argdefs, 0);
79748         nd = Py_SIZE(argdefs);
79749     }
79750     else {
79751         d = NULL;
79752         nd = 0;
79753     }
79754 #if PY_MAJOR_VERSION >= 3
79755     result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL,
79756                                args, (int)nargs,
79757                                k, (int)nk,
79758                                d, (int)nd, kwdefs, closure);
79759 #else
79760     result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL,
79761                                args, (int)nargs,
79762                                k, (int)nk,
79763                                d, (int)nd, closure);
79764 #endif
79765     Py_XDECREF(kwtuple);
79766 done:
79767     Py_LeaveRecursiveCall();
79768     return result;
79769 }
79770 #endif
79771 #endif
79772 
79773 /* PyObjectCall2Args */
79774   static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) {
79775     PyObject *args, *result = NULL;
79776     #if CYTHON_FAST_PYCALL
79777     if (PyFunction_Check(function)) {
79778         PyObject *args[2] = {arg1, arg2};
79779         return __Pyx_PyFunction_FastCall(function, args, 2);
79780     }
79781     #endif
79782     #if CYTHON_FAST_PYCCALL
79783     if (__Pyx_PyFastCFunction_Check(function)) {
79784         PyObject *args[2] = {arg1, arg2};
79785         return __Pyx_PyCFunction_FastCall(function, args, 2);
79786     }
79787     #endif
79788     args = PyTuple_New(2);
79789     if (unlikely(!args)) goto done;
79790     Py_INCREF(arg1);
79791     PyTuple_SET_ITEM(args, 0, arg1);
79792     Py_INCREF(arg2);
79793     PyTuple_SET_ITEM(args, 1, arg2);
79794     Py_INCREF(function);
79795     result = __Pyx_PyObject_Call(function, args, NULL);
79796     Py_DECREF(args);
79797     Py_DECREF(function);
79798 done:
79799     return result;
79800 }
79801 
79802 /* PyObjectCallMethO */
79803   #if CYTHON_COMPILING_IN_CPYTHON
79804 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
79805     PyObject *self, *result;
79806     PyCFunction cfunc;
79807     cfunc = PyCFunction_GET_FUNCTION(func);
79808     self = PyCFunction_GET_SELF(func);
79809     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
79810         return NULL;
79811     result = cfunc(self, arg);
79812     Py_LeaveRecursiveCall();
79813     if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
79814         PyErr_SetString(
79815             PyExc_SystemError,
79816             "NULL result without error in PyObject_Call");
79817     }
79818     return result;
79819 }
79820 #endif
79821 
79822 /* PyObjectCallOneArg */
79823   #if CYTHON_COMPILING_IN_CPYTHON
79824 static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
79825     PyObject *result;
79826     PyObject *args = PyTuple_New(1);
79827     if (unlikely(!args)) return NULL;
79828     Py_INCREF(arg);
79829     PyTuple_SET_ITEM(args, 0, arg);
79830     result = __Pyx_PyObject_Call(func, args, NULL);
79831     Py_DECREF(args);
79832     return result;
79833 }
79834 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
79835 #if CYTHON_FAST_PYCALL
79836     if (PyFunction_Check(func)) {
79837         return __Pyx_PyFunction_FastCall(func, &arg, 1);
79838     }
79839 #endif
79840     if (likely(PyCFunction_Check(func))) {
79841         if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
79842             return __Pyx_PyObject_CallMethO(func, arg);
79843 #if CYTHON_FAST_PYCCALL
79844         } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) {
79845             return __Pyx_PyCFunction_FastCall(func, &arg, 1);
79846 #endif
79847         }
79848     }
79849     return __Pyx__PyObject_CallOneArg(func, arg);
79850 }
79851 #else
79852 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
79853     PyObject *result;
79854     PyObject *args = PyTuple_Pack(1, arg);
79855     if (unlikely(!args)) return NULL;
79856     result = __Pyx_PyObject_Call(func, args, NULL);
79857     Py_DECREF(args);
79858     return result;
79859 }
79860 #endif
79861 
79862 /* WriteUnraisableException */
79863   static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
79864                                   CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
79865                                   int full_traceback, CYTHON_UNUSED int nogil) {
79866     PyObject *old_exc, *old_val, *old_tb;
79867     PyObject *ctx;
79868     __Pyx_PyThreadState_declare
79869 #ifdef WITH_THREAD
79870     PyGILState_STATE state;
79871     if (nogil)
79872         state = PyGILState_Ensure();
79873 #ifdef _MSC_VER
79874     else state = (PyGILState_STATE)-1;
79875 #endif
79876 #endif
79877     __Pyx_PyThreadState_assign
79878     __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
79879     if (full_traceback) {
79880         Py_XINCREF(old_exc);
79881         Py_XINCREF(old_val);
79882         Py_XINCREF(old_tb);
79883         __Pyx_ErrRestore(old_exc, old_val, old_tb);
79884         PyErr_PrintEx(1);
79885     }
79886     #if PY_MAJOR_VERSION < 3
79887     ctx = PyString_FromString(name);
79888     #else
79889     ctx = PyUnicode_FromString(name);
79890     #endif
79891     __Pyx_ErrRestore(old_exc, old_val, old_tb);
79892     if (!ctx) {
79893         PyErr_WriteUnraisable(Py_None);
79894     } else {
79895         PyErr_WriteUnraisable(ctx);
79896         Py_DECREF(ctx);
79897     }
79898 #ifdef WITH_THREAD
79899     if (nogil)
79900         PyGILState_Release(state);
79901 #endif
79902 }
79903 
79904 /* DictGetItem */
79905   #if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
79906 static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
79907     PyObject *value;
79908     value = PyDict_GetItemWithError(d, key);
79909     if (unlikely(!value)) {
79910         if (!PyErr_Occurred()) {
79911             if (unlikely(PyTuple_Check(key))) {
79912                 PyObject* args = PyTuple_Pack(1, key);
79913                 if (likely(args)) {
79914                     PyErr_SetObject(PyExc_KeyError, args);
79915                     Py_DECREF(args);
79916                 }
79917             } else {
79918                 PyErr_SetObject(PyExc_KeyError, key);
79919             }
79920         }
79921         return NULL;
79922     }
79923     Py_INCREF(value);
79924     return value;
79925 }
79926 #endif
79927 
79928 /* UnicodeAsUCS4 */
79929   static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject* x) {
79930    Py_ssize_t length;
79931    #if CYTHON_PEP393_ENABLED
79932    length = PyUnicode_GET_LENGTH(x);
79933    if (likely(length == 1)) {
79934        return PyUnicode_READ_CHAR(x, 0);
79935    }
79936    #else
79937    length = PyUnicode_GET_SIZE(x);
79938    if (likely(length == 1)) {
79939        return PyUnicode_AS_UNICODE(x)[0];
79940    }
79941    #if Py_UNICODE_SIZE == 2
79942    else if (PyUnicode_GET_SIZE(x) == 2) {
79943        Py_UCS4 high_val = PyUnicode_AS_UNICODE(x)[0];
79944        if (high_val >= 0xD800 && high_val <= 0xDBFF) {
79945            Py_UCS4 low_val = PyUnicode_AS_UNICODE(x)[1];
79946            if (low_val >= 0xDC00 && low_val <= 0xDFFF) {
79947                return 0x10000 + (((high_val & ((1<<10)-1)) << 10) | (low_val & ((1<<10)-1)));
79948            }
79949        }
79950    }
79951    #endif
79952    #endif
79953    PyErr_Format(PyExc_ValueError,
79954                 "only single character unicode strings can be converted to Py_UCS4, "
79955                 "got length %" CYTHON_FORMAT_SSIZE_T "d", length);
79956    return (Py_UCS4)-1;
79957 }
79958 
79959 /* object_ord */
79960   static long __Pyx__PyObject_Ord(PyObject* c) {
79961     Py_ssize_t size;
79962     if (PyBytes_Check(c)) {
79963         size = PyBytes_GET_SIZE(c);
79964         if (likely(size == 1)) {
79965             return (unsigned char) PyBytes_AS_STRING(c)[0];
79966         }
79967 #if PY_MAJOR_VERSION < 3
79968     } else if (PyUnicode_Check(c)) {
79969         return (long)__Pyx_PyUnicode_AsPy_UCS4(c);
79970 #endif
79971 #if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
79972     } else if (PyByteArray_Check(c)) {
79973         size = PyByteArray_GET_SIZE(c);
79974         if (likely(size == 1)) {
79975             return (unsigned char) PyByteArray_AS_STRING(c)[0];
79976         }
79977 #endif
79978     } else {
79979         PyErr_Format(PyExc_TypeError,
79980             "ord() expected string of length 1, but %.200s found", c->ob_type->tp_name);
79981         return (long)(Py_UCS4)-1;
79982     }
79983     PyErr_Format(PyExc_TypeError,
79984         "ord() expected a character, but string of length %zd found", size);
79985     return (long)(Py_UCS4)-1;
79986 }
79987 
79988 /* SetItemInt */
79989   static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
79990     int r;
79991     if (!j) return -1;
79992     r = PyObject_SetItem(o, j, v);
79993     Py_DECREF(j);
79994     return r;
79995 }
79996 static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v, int is_list,
79997                                                CYTHON_NCP_UNUSED int wraparound, CYTHON_NCP_UNUSED int boundscheck) {
79998 #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
79999     if (is_list || PyList_CheckExact(o)) {
80000         Py_ssize_t n = (!wraparound) ? i : ((likely(i >= 0)) ? i : i + PyList_GET_SIZE(o));
80001         if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o)))) {
80002             PyObject* old = PyList_GET_ITEM(o, n);
80003             Py_INCREF(v);
80004             PyList_SET_ITEM(o, n, v);
80005             Py_DECREF(old);
80006             return 1;
80007         }
80008     } else {
80009         PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
80010         if (likely(m && m->sq_ass_item)) {
80011             if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
80012                 Py_ssize_t l = m->sq_length(o);
80013                 if (likely(l >= 0)) {
80014                     i += l;
80015                 } else {
80016                     if (!PyErr_ExceptionMatches(PyExc_OverflowError))
80017                         return -1;
80018                     PyErr_Clear();
80019                 }
80020             }
80021             return m->sq_ass_item(o, i, v);
80022         }
80023     }
80024 #else
80025 #if CYTHON_COMPILING_IN_PYPY
80026     if (is_list || (PySequence_Check(o) && !PyDict_Check(o)))
80027 #else
80028     if (is_list || PySequence_Check(o))
80029 #endif
80030     {
80031         return PySequence_SetItem(o, i, v);
80032     }
80033 #endif
80034     return __Pyx_SetItemInt_Generic(o, PyInt_FromSsize_t(i), v);
80035 }
80036 
80037 /* IterFinish */
80038   static CYTHON_INLINE int __Pyx_IterFinish(void) {
80039 #if CYTHON_FAST_THREAD_STATE
80040     PyThreadState *tstate = __Pyx_PyThreadState_Current;
80041     PyObject* exc_type = tstate->curexc_type;
80042     if (unlikely(exc_type)) {
80043         if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) {
80044             PyObject *exc_value, *exc_tb;
80045             exc_value = tstate->curexc_value;
80046             exc_tb = tstate->curexc_traceback;
80047             tstate->curexc_type = 0;
80048             tstate->curexc_value = 0;
80049             tstate->curexc_traceback = 0;
80050             Py_DECREF(exc_type);
80051             Py_XDECREF(exc_value);
80052             Py_XDECREF(exc_tb);
80053             return 0;
80054         } else {
80055             return -1;
80056         }
80057     }
80058     return 0;
80059 #else
80060     if (unlikely(PyErr_Occurred())) {
80061         if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
80062             PyErr_Clear();
80063             return 0;
80064         } else {
80065             return -1;
80066         }
80067     }
80068     return 0;
80069 #endif
80070 }
80071 
80072 /* PyObjectCallNoArg */
80073   #if CYTHON_COMPILING_IN_CPYTHON
80074 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
80075 #if CYTHON_FAST_PYCALL
80076     if (PyFunction_Check(func)) {
80077         return __Pyx_PyFunction_FastCall(func, NULL, 0);
80078     }
80079 #endif
80080 #ifdef __Pyx_CyFunction_USED
80081     if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func)))
80082 #else
80083     if (likely(PyCFunction_Check(func)))
80084 #endif
80085     {
80086         if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) {
80087             return __Pyx_PyObject_CallMethO(func, NULL);
80088         }
80089     }
80090     return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL);
80091 }
80092 #endif
80093 
80094 /* PyObjectGetMethod */
80095   static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) {
80096     PyObject *attr;
80097 #if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP
80098     PyTypeObject *tp = Py_TYPE(obj);
80099     PyObject *descr;
80100     descrgetfunc f = NULL;
80101     PyObject **dictptr, *dict;
80102     int meth_found = 0;
80103     assert (*method == NULL);
80104     if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) {
80105         attr = __Pyx_PyObject_GetAttrStr(obj, name);
80106         goto try_unpack;
80107     }
80108     if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) {
80109         return 0;
80110     }
80111     descr = _PyType_Lookup(tp, name);
80112     if (likely(descr != NULL)) {
80113         Py_INCREF(descr);
80114 #if PY_MAJOR_VERSION >= 3
80115         #ifdef __Pyx_CyFunction_USED
80116         if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr)))
80117         #else
80118         if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type)))
80119         #endif
80120 #else
80121         #ifdef __Pyx_CyFunction_USED
80122         if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr)))
80123         #else
80124         if (likely(PyFunction_Check(descr)))
80125         #endif
80126 #endif
80127         {
80128             meth_found = 1;
80129         } else {
80130             f = Py_TYPE(descr)->tp_descr_get;
80131             if (f != NULL && PyDescr_IsData(descr)) {
80132                 attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
80133                 Py_DECREF(descr);
80134                 goto try_unpack;
80135             }
80136         }
80137     }
80138     dictptr = _PyObject_GetDictPtr(obj);
80139     if (dictptr != NULL && (dict = *dictptr) != NULL) {
80140         Py_INCREF(dict);
80141         attr = __Pyx_PyDict_GetItemStr(dict, name);
80142         if (attr != NULL) {
80143             Py_INCREF(attr);
80144             Py_DECREF(dict);
80145             Py_XDECREF(descr);
80146             goto try_unpack;
80147         }
80148         Py_DECREF(dict);
80149     }
80150     if (meth_found) {
80151         *method = descr;
80152         return 1;
80153     }
80154     if (f != NULL) {
80155         attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
80156         Py_DECREF(descr);
80157         goto try_unpack;
80158     }
80159     if (descr != NULL) {
80160         *method = descr;
80161         return 0;
80162     }
80163     PyErr_Format(PyExc_AttributeError,
80164 #if PY_MAJOR_VERSION >= 3
80165                  "'%.50s' object has no attribute '%U'",
80166                  tp->tp_name, name);
80167 #else
80168                  "'%.50s' object has no attribute '%.400s'",
80169                  tp->tp_name, PyString_AS_STRING(name));
80170 #endif
80171     return 0;
80172 #else
80173     attr = __Pyx_PyObject_GetAttrStr(obj, name);
80174     goto try_unpack;
80175 #endif
80176 try_unpack:
80177 #if CYTHON_UNPACK_METHODS
80178     if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) {
80179         PyObject *function = PyMethod_GET_FUNCTION(attr);
80180         Py_INCREF(function);
80181         Py_DECREF(attr);
80182         *method = function;
80183         return 1;
80184     }
80185 #endif
80186     *method = attr;
80187     return 0;
80188 }
80189 
80190 /* PyObjectCallMethod0 */
80191   static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
80192     PyObject *method = NULL, *result = NULL;
80193     int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
80194     if (likely(is_method)) {
80195         result = __Pyx_PyObject_CallOneArg(method, obj);
80196         Py_DECREF(method);
80197         return result;
80198     }
80199     if (unlikely(!method)) goto bad;
80200     result = __Pyx_PyObject_CallNoArg(method);
80201     Py_DECREF(method);
80202 bad:
80203     return result;
80204 }
80205 
80206 /* RaiseNeedMoreValuesToUnpack */
80207   static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
80208     PyErr_Format(PyExc_ValueError,
80209                  "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
80210                  index, (index == 1) ? "" : "s");
80211 }
80212 
80213 /* RaiseTooManyValuesToUnpack */
80214   static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
80215     PyErr_Format(PyExc_ValueError,
80216                  "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
80217 }
80218 
80219 /* UnpackItemEndCheck */
80220   static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
80221     if (unlikely(retval)) {
80222         Py_DECREF(retval);
80223         __Pyx_RaiseTooManyValuesError(expected);
80224         return -1;
80225     } else {
80226         return __Pyx_IterFinish();
80227     }
80228     return 0;
80229 }
80230 
80231 /* RaiseNoneIterError */
80232   static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
80233     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
80234 }
80235 
80236 /* UnpackTupleError */
80237   static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) {
80238     if (t == Py_None) {
80239       __Pyx_RaiseNoneNotIterableError();
80240     } else if (PyTuple_GET_SIZE(t) < index) {
80241       __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t));
80242     } else {
80243       __Pyx_RaiseTooManyValuesError(index);
80244     }
80245 }
80246 
80247 /* UnpackTuple2 */
80248   static CYTHON_INLINE int __Pyx_unpack_tuple2_exact(
80249         PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) {
80250     PyObject *value1 = NULL, *value2 = NULL;
80251 #if CYTHON_COMPILING_IN_PYPY
80252     value1 = PySequence_ITEM(tuple, 0);  if (unlikely(!value1)) goto bad;
80253     value2 = PySequence_ITEM(tuple, 1);  if (unlikely(!value2)) goto bad;
80254 #else
80255     value1 = PyTuple_GET_ITEM(tuple, 0);  Py_INCREF(value1);
80256     value2 = PyTuple_GET_ITEM(tuple, 1);  Py_INCREF(value2);
80257 #endif
80258     if (decref_tuple) {
80259         Py_DECREF(tuple);
80260     }
80261     *pvalue1 = value1;
80262     *pvalue2 = value2;
80263     return 0;
80264 #if CYTHON_COMPILING_IN_PYPY
80265 bad:
80266     Py_XDECREF(value1);
80267     Py_XDECREF(value2);
80268     if (decref_tuple) { Py_XDECREF(tuple); }
80269     return -1;
80270 #endif
80271 }
80272 static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2,
80273                                        int has_known_size, int decref_tuple) {
80274     Py_ssize_t index;
80275     PyObject *value1 = NULL, *value2 = NULL, *iter = NULL;
80276     iternextfunc iternext;
80277     iter = PyObject_GetIter(tuple);
80278     if (unlikely(!iter)) goto bad;
80279     if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; }
80280     iternext = Py_TYPE(iter)->tp_iternext;
80281     value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; }
80282     value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; }
80283     if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad;
80284     Py_DECREF(iter);
80285     *pvalue1 = value1;
80286     *pvalue2 = value2;
80287     return 0;
80288 unpacking_failed:
80289     if (!has_known_size && __Pyx_IterFinish() == 0)
80290         __Pyx_RaiseNeedMoreValuesError(index);
80291 bad:
80292     Py_XDECREF(iter);
80293     Py_XDECREF(value1);
80294     Py_XDECREF(value2);
80295     if (decref_tuple) { Py_XDECREF(tuple); }
80296     return -1;
80297 }
80298 
80299 /* dict_iter */
80300   static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name,
80301                                                    Py_ssize_t* p_orig_length, int* p_source_is_dict) {
80302     is_dict = is_dict || likely(PyDict_CheckExact(iterable));
80303     *p_source_is_dict = is_dict;
80304     if (is_dict) {
80305 #if !CYTHON_COMPILING_IN_PYPY
80306         *p_orig_length = PyDict_Size(iterable);
80307         Py_INCREF(iterable);
80308         return iterable;
80309 #elif PY_MAJOR_VERSION >= 3
80310         static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL;
80311         PyObject **pp = NULL;
80312         if (method_name) {
80313             const char *name = PyUnicode_AsUTF8(method_name);
80314             if (strcmp(name, "iteritems") == 0) pp = &py_items;
80315             else if (strcmp(name, "iterkeys") == 0) pp = &py_keys;
80316             else if (strcmp(name, "itervalues") == 0) pp = &py_values;
80317             if (pp) {
80318                 if (!*pp) {
80319                     *pp = PyUnicode_FromString(name + 4);
80320                     if (!*pp)
80321                         return NULL;
80322                 }
80323                 method_name = *pp;
80324             }
80325         }
80326 #endif
80327     }
80328     *p_orig_length = 0;
80329     if (method_name) {
80330         PyObject* iter;
80331         iterable = __Pyx_PyObject_CallMethod0(iterable, method_name);
80332         if (!iterable)
80333             return NULL;
80334 #if !CYTHON_COMPILING_IN_PYPY
80335         if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable))
80336             return iterable;
80337 #endif
80338         iter = PyObject_GetIter(iterable);
80339         Py_DECREF(iterable);
80340         return iter;
80341     }
80342     return PyObject_GetIter(iterable);
80343 }
80344 static CYTHON_INLINE int __Pyx_dict_iter_next(
80345         PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos,
80346         PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) {
80347     PyObject* next_item;
80348 #if !CYTHON_COMPILING_IN_PYPY
80349     if (source_is_dict) {
80350         PyObject *key, *value;
80351         if (unlikely(orig_length != PyDict_Size(iter_obj))) {
80352             PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration");
80353             return -1;
80354         }
80355         if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) {
80356             return 0;
80357         }
80358         if (pitem) {
80359             PyObject* tuple = PyTuple_New(2);
80360             if (unlikely(!tuple)) {
80361                 return -1;
80362             }
80363             Py_INCREF(key);
80364             Py_INCREF(value);
80365             PyTuple_SET_ITEM(tuple, 0, key);
80366             PyTuple_SET_ITEM(tuple, 1, value);
80367             *pitem = tuple;
80368         } else {
80369             if (pkey) {
80370                 Py_INCREF(key);
80371                 *pkey = key;
80372             }
80373             if (pvalue) {
80374                 Py_INCREF(value);
80375                 *pvalue = value;
80376             }
80377         }
80378         return 1;
80379     } else if (PyTuple_CheckExact(iter_obj)) {
80380         Py_ssize_t pos = *ppos;
80381         if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0;
80382         *ppos = pos + 1;
80383         next_item = PyTuple_GET_ITEM(iter_obj, pos);
80384         Py_INCREF(next_item);
80385     } else if (PyList_CheckExact(iter_obj)) {
80386         Py_ssize_t pos = *ppos;
80387         if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0;
80388         *ppos = pos + 1;
80389         next_item = PyList_GET_ITEM(iter_obj, pos);
80390         Py_INCREF(next_item);
80391     } else
80392 #endif
80393     {
80394         next_item = PyIter_Next(iter_obj);
80395         if (unlikely(!next_item)) {
80396             return __Pyx_IterFinish();
80397         }
80398     }
80399     if (pitem) {
80400         *pitem = next_item;
80401     } else if (pkey && pvalue) {
80402         if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1))
80403             return -1;
80404     } else if (pkey) {
80405         *pkey = next_item;
80406     } else {
80407         *pvalue = next_item;
80408     }
80409     return 1;
80410 }
80411 
80412 /* UnpackUnboundCMethod */
80413   static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) {
80414     PyObject *method;
80415     method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name);
80416     if (unlikely(!method))
80417         return -1;
80418     target->method = method;
80419 #if CYTHON_COMPILING_IN_CPYTHON
80420     #if PY_MAJOR_VERSION >= 3
80421     if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type)))
80422     #endif
80423     {
80424         PyMethodDescrObject *descr = (PyMethodDescrObject*) method;
80425         target->func = descr->d_method->ml_meth;
80426         target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS);
80427     }
80428 #endif
80429     return 0;
80430 }
80431 
80432 /* CallUnboundCMethod1 */
80433   #if CYTHON_COMPILING_IN_CPYTHON
80434 static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg) {
80435     if (likely(cfunc->func)) {
80436         int flag = cfunc->flag;
80437         if (flag == METH_O) {
80438             return (*(cfunc->func))(self, arg);
80439         } else if (PY_VERSION_HEX >= 0x030600B1 && flag == METH_FASTCALL) {
80440             if (PY_VERSION_HEX >= 0x030700A0) {
80441                 return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1);
80442             } else {
80443                 return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
80444             }
80445         } else if (PY_VERSION_HEX >= 0x030700A0 && flag == (METH_FASTCALL | METH_KEYWORDS)) {
80446             return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
80447         }
80448     }
80449     return __Pyx__CallUnboundCMethod1(cfunc, self, arg);
80450 }
80451 #endif
80452 static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg){
80453     PyObject *args, *result = NULL;
80454     if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
80455 #if CYTHON_COMPILING_IN_CPYTHON
80456     if (cfunc->func && (cfunc->flag & METH_VARARGS)) {
80457         args = PyTuple_New(1);
80458         if (unlikely(!args)) goto bad;
80459         Py_INCREF(arg);
80460         PyTuple_SET_ITEM(args, 0, arg);
80461         if (cfunc->flag & METH_KEYWORDS)
80462             result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL);
80463         else
80464             result = (*cfunc->func)(self, args);
80465     } else {
80466         args = PyTuple_New(2);
80467         if (unlikely(!args)) goto bad;
80468         Py_INCREF(self);
80469         PyTuple_SET_ITEM(args, 0, self);
80470         Py_INCREF(arg);
80471         PyTuple_SET_ITEM(args, 1, arg);
80472         result = __Pyx_PyObject_Call(cfunc->method, args, NULL);
80473     }
80474 #else
80475     args = PyTuple_Pack(2, self, arg);
80476     if (unlikely(!args)) goto bad;
80477     result = __Pyx_PyObject_Call(cfunc->method, args, NULL);
80478 #endif
80479 bad:
80480     Py_XDECREF(args);
80481     return result;
80482 }
80483 
80484 /* None */
80485   static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname) {
80486     PyErr_Format(PyExc_NameError, "free variable '%s' referenced before assignment in enclosing scope", varname);
80487 }
80488 
80489 /* ObjectGetItem */
80490   #if CYTHON_USE_TYPE_SLOTS
80491 static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
80492     PyObject *runerr;
80493     Py_ssize_t key_value;
80494     PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
80495     if (unlikely(!(m && m->sq_item))) {
80496         PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name);
80497         return NULL;
80498     }
80499     key_value = __Pyx_PyIndex_AsSsize_t(index);
80500     if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) {
80501         return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1);
80502     }
80503     if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) {
80504         PyErr_Clear();
80505         PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name);
80506     }
80507     return NULL;
80508 }
80509 static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) {
80510     PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping;
80511     if (likely(m && m->mp_subscript)) {
80512         return m->mp_subscript(obj, key);
80513     }
80514     return __Pyx_PyObject_GetIndex(obj, key);
80515 }
80516 #endif
80517 
80518 /* pyfrozenset_new */
80519   static CYTHON_INLINE PyObject* __Pyx_PyFrozenSet_New(PyObject* it) {
80520     if (it) {
80521         PyObject* result;
80522 #if CYTHON_COMPILING_IN_PYPY
80523         PyObject* args;
80524         args = PyTuple_Pack(1, it);
80525         if (unlikely(!args))
80526             return NULL;
80527         result = PyObject_Call((PyObject*)&PyFrozenSet_Type, args, NULL);
80528         Py_DECREF(args);
80529         return result;
80530 #else
80531         if (PyFrozenSet_CheckExact(it)) {
80532             Py_INCREF(it);
80533             return it;
80534         }
80535         result = PyFrozenSet_New(it);
80536         if (unlikely(!result))
80537             return NULL;
80538         if (likely(PySet_GET_SIZE(result)))
80539             return result;
80540         Py_DECREF(result);
80541 #endif
80542     }
80543 #if CYTHON_USE_TYPE_SLOTS
80544     return PyFrozenSet_Type.tp_new(&PyFrozenSet_Type, __pyx_empty_tuple, NULL);
80545 #else
80546     return PyObject_Call((PyObject*)&PyFrozenSet_Type, __pyx_empty_tuple, NULL);
80547 #endif
80548 }
80549 
80550 /* PySetContains */
80551   static int __Pyx_PySet_ContainsUnhashable(PyObject *set, PyObject *key) {
80552     int result = -1;
80553     if (PySet_Check(key) && PyErr_ExceptionMatches(PyExc_TypeError)) {
80554         PyObject *tmpkey;
80555         PyErr_Clear();
80556         tmpkey = __Pyx_PyFrozenSet_New(key);
80557         if (tmpkey != NULL) {
80558             result = PySet_Contains(set, tmpkey);
80559             Py_DECREF(tmpkey);
80560         }
80561     }
80562     return result;
80563 }
80564 static CYTHON_INLINE int __Pyx_PySet_ContainsTF(PyObject* key, PyObject* set, int eq) {
80565     int result = PySet_Contains(set, key);
80566     if (unlikely(result < 0)) {
80567         result = __Pyx_PySet_ContainsUnhashable(set, key);
80568     }
80569     return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
80570 }
80571 
80572 /* PyIntBinop */
80573   #if !CYTHON_COMPILING_IN_PYPY
80574 static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) {
80575     (void)inplace;
80576     (void)zerodivision_check;
80577     #if PY_MAJOR_VERSION < 3
80578     if (likely(PyInt_CheckExact(op1))) {
80579         const long b = intval;
80580         long x;
80581         long a = PyInt_AS_LONG(op1);
80582             x = (long)((unsigned long)a + b);
80583             if (likely((x^a) >= 0 || (x^b) >= 0))
80584                 return PyInt_FromLong(x);
80585             return PyLong_Type.tp_as_number->nb_add(op1, op2);
80586     }
80587     #endif
80588     #if CYTHON_USE_PYLONG_INTERNALS
80589     if (likely(PyLong_CheckExact(op1))) {
80590         const long b = intval;
80591         long a, x;
80592 #ifdef HAVE_LONG_LONG
80593         const PY_LONG_LONG llb = intval;
80594         PY_LONG_LONG lla, llx;
80595 #endif
80596         const digit* digits = ((PyLongObject*)op1)->ob_digit;
80597         const Py_ssize_t size = Py_SIZE(op1);
80598         if (likely(__Pyx_sst_abs(size) <= 1)) {
80599             a = likely(size) ? digits[0] : 0;
80600             if (size == -1) a = -a;
80601         } else {
80602             switch (size) {
80603                 case -2:
80604                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
80605                         a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80606                         break;
80607 #ifdef HAVE_LONG_LONG
80608                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
80609                         lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
80610                         goto long_long;
80611 #endif
80612                     }
80613                     CYTHON_FALLTHROUGH;
80614                 case 2:
80615                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
80616                         a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80617                         break;
80618 #ifdef HAVE_LONG_LONG
80619                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
80620                         lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
80621                         goto long_long;
80622 #endif
80623                     }
80624                     CYTHON_FALLTHROUGH;
80625                 case -3:
80626                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
80627                         a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80628                         break;
80629 #ifdef HAVE_LONG_LONG
80630                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
80631                         lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
80632                         goto long_long;
80633 #endif
80634                     }
80635                     CYTHON_FALLTHROUGH;
80636                 case 3:
80637                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
80638                         a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80639                         break;
80640 #ifdef HAVE_LONG_LONG
80641                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
80642                         lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
80643                         goto long_long;
80644 #endif
80645                     }
80646                     CYTHON_FALLTHROUGH;
80647                 case -4:
80648                     if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
80649                         a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80650                         break;
80651 #ifdef HAVE_LONG_LONG
80652                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
80653                         lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
80654                         goto long_long;
80655 #endif
80656                     }
80657                     CYTHON_FALLTHROUGH;
80658                 case 4:
80659                     if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
80660                         a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80661                         break;
80662 #ifdef HAVE_LONG_LONG
80663                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
80664                         lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
80665                         goto long_long;
80666 #endif
80667                     }
80668                     CYTHON_FALLTHROUGH;
80669                 default: return PyLong_Type.tp_as_number->nb_add(op1, op2);
80670             }
80671         }
80672                 x = a + b;
80673             return PyLong_FromLong(x);
80674 #ifdef HAVE_LONG_LONG
80675         long_long:
80676                 llx = lla + llb;
80677             return PyLong_FromLongLong(llx);
80678 #endif
80679 
80680 
80681     }
80682     #endif
80683     if (PyFloat_CheckExact(op1)) {
80684         const long b = intval;
80685         double a = PyFloat_AS_DOUBLE(op1);
80686             double result;
80687             PyFPE_START_PROTECT("add", return NULL)
80688             result = ((double)a) + (double)b;
80689             PyFPE_END_PROTECT(result)
80690             return PyFloat_FromDouble(result);
80691     }
80692     return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2);
80693 }
80694 #endif
80695 
80696 /* None */
80697   static CYTHON_INLINE long __Pyx_mod_long(long a, long b) {
80698     long r = a % b;
80699     r += ((r != 0) & ((r ^ b) < 0)) * b;
80700     return r;
80701 }
80702 
80703 /* PyIntBinop */
80704   #if !CYTHON_COMPILING_IN_PYPY
80705 static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) {
80706     (void)inplace;
80707     (void)zerodivision_check;
80708     #if PY_MAJOR_VERSION < 3
80709     if (likely(PyInt_CheckExact(op1))) {
80710         const long b = intval;
80711         long x;
80712         long a = PyInt_AS_LONG(op1);
80713             x = (long)((unsigned long)a - b);
80714             if (likely((x^a) >= 0 || (x^~b) >= 0))
80715                 return PyInt_FromLong(x);
80716             return PyLong_Type.tp_as_number->nb_subtract(op1, op2);
80717     }
80718     #endif
80719     #if CYTHON_USE_PYLONG_INTERNALS
80720     if (likely(PyLong_CheckExact(op1))) {
80721         const long b = intval;
80722         long a, x;
80723 #ifdef HAVE_LONG_LONG
80724         const PY_LONG_LONG llb = intval;
80725         PY_LONG_LONG lla, llx;
80726 #endif
80727         const digit* digits = ((PyLongObject*)op1)->ob_digit;
80728         const Py_ssize_t size = Py_SIZE(op1);
80729         if (likely(__Pyx_sst_abs(size) <= 1)) {
80730             a = likely(size) ? digits[0] : 0;
80731             if (size == -1) a = -a;
80732         } else {
80733             switch (size) {
80734                 case -2:
80735                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
80736                         a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80737                         break;
80738 #ifdef HAVE_LONG_LONG
80739                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
80740                         lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
80741                         goto long_long;
80742 #endif
80743                     }
80744                     CYTHON_FALLTHROUGH;
80745                 case 2:
80746                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
80747                         a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80748                         break;
80749 #ifdef HAVE_LONG_LONG
80750                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
80751                         lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
80752                         goto long_long;
80753 #endif
80754                     }
80755                     CYTHON_FALLTHROUGH;
80756                 case -3:
80757                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
80758                         a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80759                         break;
80760 #ifdef HAVE_LONG_LONG
80761                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
80762                         lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
80763                         goto long_long;
80764 #endif
80765                     }
80766                     CYTHON_FALLTHROUGH;
80767                 case 3:
80768                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
80769                         a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80770                         break;
80771 #ifdef HAVE_LONG_LONG
80772                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
80773                         lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
80774                         goto long_long;
80775 #endif
80776                     }
80777                     CYTHON_FALLTHROUGH;
80778                 case -4:
80779                     if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
80780                         a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80781                         break;
80782 #ifdef HAVE_LONG_LONG
80783                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
80784                         lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
80785                         goto long_long;
80786 #endif
80787                     }
80788                     CYTHON_FALLTHROUGH;
80789                 case 4:
80790                     if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
80791                         a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80792                         break;
80793 #ifdef HAVE_LONG_LONG
80794                     } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
80795                         lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
80796                         goto long_long;
80797 #endif
80798                     }
80799                     CYTHON_FALLTHROUGH;
80800                 default: return PyLong_Type.tp_as_number->nb_subtract(op1, op2);
80801             }
80802         }
80803                 x = a - b;
80804             return PyLong_FromLong(x);
80805 #ifdef HAVE_LONG_LONG
80806         long_long:
80807                 llx = lla - llb;
80808             return PyLong_FromLongLong(llx);
80809 #endif
80810 
80811 
80812     }
80813     #endif
80814     if (PyFloat_CheckExact(op1)) {
80815         const long b = intval;
80816         double a = PyFloat_AS_DOUBLE(op1);
80817             double result;
80818             PyFPE_START_PROTECT("subtract", return NULL)
80819             result = ((double)a) - (double)b;
80820             PyFPE_END_PROTECT(result)
80821             return PyFloat_FromDouble(result);
80822     }
80823     return (inplace ? PyNumber_InPlaceSubtract : PyNumber_Subtract)(op1, op2);
80824 }
80825 #endif
80826 
80827 /* PyFloatBinop */
80828   #if !CYTHON_COMPILING_IN_PYPY
80829 #define __Pyx_PyFloat_DivideCObj_ZeroDivisionError(operand) if (unlikely(zerodivision_check && ((operand) == 0))) {\
80830     PyErr_SetString(PyExc_ZeroDivisionError, "float division by zero");\
80831     return NULL;\
80832 }
80833 static PyObject* __Pyx_PyFloat_DivideCObj(PyObject *op1, PyObject *op2, double floatval, int inplace, int zerodivision_check) {
80834     const double a = floatval;
80835     double b, result;
80836     (void)inplace;
80837     (void)zerodivision_check;
80838     if (likely(PyFloat_CheckExact(op2))) {
80839         b = PyFloat_AS_DOUBLE(op2);
80840         __Pyx_PyFloat_DivideCObj_ZeroDivisionError(b)
80841     } else
80842     #if PY_MAJOR_VERSION < 3
80843     if (likely(PyInt_CheckExact(op2))) {
80844         b = (double) PyInt_AS_LONG(op2);
80845         __Pyx_PyFloat_DivideCObj_ZeroDivisionError(b)
80846     } else
80847     #endif
80848     if (likely(PyLong_CheckExact(op2))) {
80849         #if CYTHON_USE_PYLONG_INTERNALS
80850         const digit* digits = ((PyLongObject*)op2)->ob_digit;
80851         const Py_ssize_t size = Py_SIZE(op2);
80852         switch (size) {
80853             case  0: __Pyx_PyFloat_DivideCObj_ZeroDivisionError(0) break;
80854             case -1: b = -(double) digits[0]; break;
80855             case  1: b = (double) digits[0]; break;
80856             case -2:
80857             case 2:
80858                 if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (1 * PyLong_SHIFT < 53))) {
80859                     b = (double) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80860                     if ((8 * sizeof(unsigned long) < 53) || (2 * PyLong_SHIFT < 53) || (b < (double) ((PY_LONG_LONG)1 << 53))) {
80861                         if (size == -2)
80862                             b = -b;
80863                         break;
80864                     }
80865                 }
80866                 CYTHON_FALLTHROUGH;
80867             case -3:
80868             case 3:
80869                 if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (2 * PyLong_SHIFT < 53))) {
80870                     b = (double) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80871                     if ((8 * sizeof(unsigned long) < 53) || (3 * PyLong_SHIFT < 53) || (b < (double) ((PY_LONG_LONG)1 << 53))) {
80872                         if (size == -3)
80873                             b = -b;
80874                         break;
80875                     }
80876                 }
80877                 CYTHON_FALLTHROUGH;
80878             case -4:
80879             case 4:
80880                 if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (3 * PyLong_SHIFT < 53))) {
80881                     b = (double) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
80882                     if ((8 * sizeof(unsigned long) < 53) || (4 * PyLong_SHIFT < 53) || (b < (double) ((PY_LONG_LONG)1 << 53))) {
80883                         if (size == -4)
80884                             b = -b;
80885                         break;
80886                     }
80887                 }
80888                 CYTHON_FALLTHROUGH;
80889             default:
80890         #else
80891         {
80892         #endif
80893             b = PyLong_AsDouble(op2);
80894             if (unlikely(b == -1.0 && PyErr_Occurred())) return NULL;
80895             __Pyx_PyFloat_DivideCObj_ZeroDivisionError(b)
80896         }
80897     } else {
80898         return (inplace ? __Pyx_PyNumber_InPlaceDivide(op1, op2) : __Pyx_PyNumber_Divide(op1, op2));
80899     }
80900         __Pyx_PyFloat_DivideCObj_ZeroDivisionError(b)
80901         PyFPE_START_PROTECT("divide", return NULL)
80902         result = a / b;
80903         PyFPE_END_PROTECT(result)
80904         return PyFloat_FromDouble(result);
80905 }
80906 #endif
80907 
80908 /* HasAttr */
80909     static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
80910     PyObject *r;
80911     if (unlikely(!__Pyx_PyBaseString_Check(n))) {
80912         PyErr_SetString(PyExc_TypeError,
80913                         "hasattr(): attribute name must be string");
80914         return -1;
80915     }
80916     r = __Pyx_GetAttr(o, n);
80917     if (unlikely(!r)) {
80918         PyErr_Clear();
80919         return 0;
80920     } else {
80921         Py_DECREF(r);
80922         return 1;
80923     }
80924 }
80925 
80926 /* GetTopmostException */
80927     #if CYTHON_USE_EXC_INFO_STACK
80928 static _PyErr_StackItem *
80929 __Pyx_PyErr_GetTopmostException(PyThreadState *tstate)
80930 {
80931     _PyErr_StackItem *exc_info = tstate->exc_info;
80932     while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) &&
80933            exc_info->previous_item != NULL)
80934     {
80935         exc_info = exc_info->previous_item;
80936     }
80937     return exc_info;
80938 }
80939 #endif
80940 
80941 /* SaveResetException */
80942     #if CYTHON_FAST_THREAD_STATE
80943 static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
80944     #if CYTHON_USE_EXC_INFO_STACK
80945     _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
80946     *type = exc_info->exc_type;
80947     *value = exc_info->exc_value;
80948     *tb = exc_info->exc_traceback;
80949     #else
80950     *type = tstate->exc_type;
80951     *value = tstate->exc_value;
80952     *tb = tstate->exc_traceback;
80953     #endif
80954     Py_XINCREF(*type);
80955     Py_XINCREF(*value);
80956     Py_XINCREF(*tb);
80957 }
80958 static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
80959     PyObject *tmp_type, *tmp_value, *tmp_tb;
80960     #if CYTHON_USE_EXC_INFO_STACK
80961     _PyErr_StackItem *exc_info = tstate->exc_info;
80962     tmp_type = exc_info->exc_type;
80963     tmp_value = exc_info->exc_value;
80964     tmp_tb = exc_info->exc_traceback;
80965     exc_info->exc_type = type;
80966     exc_info->exc_value = value;
80967     exc_info->exc_traceback = tb;
80968     #else
80969     tmp_type = tstate->exc_type;
80970     tmp_value = tstate->exc_value;
80971     tmp_tb = tstate->exc_traceback;
80972     tstate->exc_type = type;
80973     tstate->exc_value = value;
80974     tstate->exc_traceback = tb;
80975     #endif
80976     Py_XDECREF(tmp_type);
80977     Py_XDECREF(tmp_value);
80978     Py_XDECREF(tmp_tb);
80979 }
80980 #endif
80981 
80982 /* GetException */
80983     #if CYTHON_FAST_THREAD_STATE
80984 static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb)
80985 #else
80986 static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
80987 #endif
80988 {
80989     PyObject *local_type, *local_value, *local_tb;
80990 #if CYTHON_FAST_THREAD_STATE
80991     PyObject *tmp_type, *tmp_value, *tmp_tb;
80992     local_type = tstate->curexc_type;
80993     local_value = tstate->curexc_value;
80994     local_tb = tstate->curexc_traceback;
80995     tstate->curexc_type = 0;
80996     tstate->curexc_value = 0;
80997     tstate->curexc_traceback = 0;
80998 #else
80999     PyErr_Fetch(&local_type, &local_value, &local_tb);
81000 #endif
81001     PyErr_NormalizeException(&local_type, &local_value, &local_tb);
81002 #if CYTHON_FAST_THREAD_STATE
81003     if (unlikely(tstate->curexc_type))
81004 #else
81005     if (unlikely(PyErr_Occurred()))
81006 #endif
81007         goto bad;
81008     #if PY_MAJOR_VERSION >= 3
81009     if (local_tb) {
81010         if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
81011             goto bad;
81012     }
81013     #endif
81014     Py_XINCREF(local_tb);
81015     Py_XINCREF(local_type);
81016     Py_XINCREF(local_value);
81017     *type = local_type;
81018     *value = local_value;
81019     *tb = local_tb;
81020 #if CYTHON_FAST_THREAD_STATE
81021     #if CYTHON_USE_EXC_INFO_STACK
81022     {
81023         _PyErr_StackItem *exc_info = tstate->exc_info;
81024         tmp_type = exc_info->exc_type;
81025         tmp_value = exc_info->exc_value;
81026         tmp_tb = exc_info->exc_traceback;
81027         exc_info->exc_type = local_type;
81028         exc_info->exc_value = local_value;
81029         exc_info->exc_traceback = local_tb;
81030     }
81031     #else
81032     tmp_type = tstate->exc_type;
81033     tmp_value = tstate->exc_value;
81034     tmp_tb = tstate->exc_traceback;
81035     tstate->exc_type = local_type;
81036     tstate->exc_value = local_value;
81037     tstate->exc_traceback = local_tb;
81038     #endif
81039     Py_XDECREF(tmp_type);
81040     Py_XDECREF(tmp_value);
81041     Py_XDECREF(tmp_tb);
81042 #else
81043     PyErr_SetExcInfo(local_type, local_value, local_tb);
81044 #endif
81045     return 0;
81046 bad:
81047     *type = 0;
81048     *value = 0;
81049     *tb = 0;
81050     Py_XDECREF(local_type);
81051     Py_XDECREF(local_value);
81052     Py_XDECREF(local_tb);
81053     return -1;
81054 }
81055 
81056 /* BytesEquals */
81057     static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
81058 #if CYTHON_COMPILING_IN_PYPY
81059     return PyObject_RichCompareBool(s1, s2, equals);
81060 #else
81061     if (s1 == s2) {
81062         return (equals == Py_EQ);
81063     } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
81064         const char *ps1, *ps2;
81065         Py_ssize_t length = PyBytes_GET_SIZE(s1);
81066         if (length != PyBytes_GET_SIZE(s2))
81067             return (equals == Py_NE);
81068         ps1 = PyBytes_AS_STRING(s1);
81069         ps2 = PyBytes_AS_STRING(s2);
81070         if (ps1[0] != ps2[0]) {
81071             return (equals == Py_NE);
81072         } else if (length == 1) {
81073             return (equals == Py_EQ);
81074         } else {
81075             int result;
81076 #if CYTHON_USE_UNICODE_INTERNALS
81077             Py_hash_t hash1, hash2;
81078             hash1 = ((PyBytesObject*)s1)->ob_shash;
81079             hash2 = ((PyBytesObject*)s2)->ob_shash;
81080             if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
81081                 return (equals == Py_NE);
81082             }
81083 #endif
81084             result = memcmp(ps1, ps2, (size_t)length);
81085             return (equals == Py_EQ) ? (result == 0) : (result != 0);
81086         }
81087     } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
81088         return (equals == Py_NE);
81089     } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
81090         return (equals == Py_NE);
81091     } else {
81092         int result;
81093         PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
81094         if (!py_result)
81095             return -1;
81096         result = __Pyx_PyObject_IsTrue(py_result);
81097         Py_DECREF(py_result);
81098         return result;
81099     }
81100 #endif
81101 }
81102 
81103 /* UnicodeEquals */
81104     static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
81105 #if CYTHON_COMPILING_IN_PYPY
81106     return PyObject_RichCompareBool(s1, s2, equals);
81107 #else
81108 #if PY_MAJOR_VERSION < 3
81109     PyObject* owned_ref = NULL;
81110 #endif
81111     int s1_is_unicode, s2_is_unicode;
81112     if (s1 == s2) {
81113         goto return_eq;
81114     }
81115     s1_is_unicode = PyUnicode_CheckExact(s1);
81116     s2_is_unicode = PyUnicode_CheckExact(s2);
81117 #if PY_MAJOR_VERSION < 3
81118     if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) {
81119         owned_ref = PyUnicode_FromObject(s2);
81120         if (unlikely(!owned_ref))
81121             return -1;
81122         s2 = owned_ref;
81123         s2_is_unicode = 1;
81124     } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) {
81125         owned_ref = PyUnicode_FromObject(s1);
81126         if (unlikely(!owned_ref))
81127             return -1;
81128         s1 = owned_ref;
81129         s1_is_unicode = 1;
81130     } else if (((!s2_is_unicode) & (!s1_is_unicode))) {
81131         return __Pyx_PyBytes_Equals(s1, s2, equals);
81132     }
81133 #endif
81134     if (s1_is_unicode & s2_is_unicode) {
81135         Py_ssize_t length;
81136         int kind;
81137         void *data1, *data2;
81138         if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0))
81139             return -1;
81140         length = __Pyx_PyUnicode_GET_LENGTH(s1);
81141         if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) {
81142             goto return_ne;
81143         }
81144 #if CYTHON_USE_UNICODE_INTERNALS
81145         {
81146             Py_hash_t hash1, hash2;
81147         #if CYTHON_PEP393_ENABLED
81148             hash1 = ((PyASCIIObject*)s1)->hash;
81149             hash2 = ((PyASCIIObject*)s2)->hash;
81150         #else
81151             hash1 = ((PyUnicodeObject*)s1)->hash;
81152             hash2 = ((PyUnicodeObject*)s2)->hash;
81153         #endif
81154             if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
81155                 goto return_ne;
81156             }
81157         }
81158 #endif
81159         kind = __Pyx_PyUnicode_KIND(s1);
81160         if (kind != __Pyx_PyUnicode_KIND(s2)) {
81161             goto return_ne;
81162         }
81163         data1 = __Pyx_PyUnicode_DATA(s1);
81164         data2 = __Pyx_PyUnicode_DATA(s2);
81165         if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) {
81166             goto return_ne;
81167         } else if (length == 1) {
81168             goto return_eq;
81169         } else {
81170             int result = memcmp(data1, data2, (size_t)(length * kind));
81171             #if PY_MAJOR_VERSION < 3
81172             Py_XDECREF(owned_ref);
81173             #endif
81174             return (equals == Py_EQ) ? (result == 0) : (result != 0);
81175         }
81176     } else if ((s1 == Py_None) & s2_is_unicode) {
81177         goto return_ne;
81178     } else if ((s2 == Py_None) & s1_is_unicode) {
81179         goto return_ne;
81180     } else {
81181         int result;
81182         PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
81183         #if PY_MAJOR_VERSION < 3
81184         Py_XDECREF(owned_ref);
81185         #endif
81186         if (!py_result)
81187             return -1;
81188         result = __Pyx_PyObject_IsTrue(py_result);
81189         Py_DECREF(py_result);
81190         return result;
81191     }
81192 return_eq:
81193     #if PY_MAJOR_VERSION < 3
81194     Py_XDECREF(owned_ref);
81195     #endif
81196     return (equals == Py_EQ);
81197 return_ne:
81198     #if PY_MAJOR_VERSION < 3
81199     Py_XDECREF(owned_ref);
81200     #endif
81201     return (equals == Py_NE);
81202 #endif
81203 }
81204 
81205 /* None */
81206     static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) {
81207     Py_ssize_t q = a / b;
81208     Py_ssize_t r = a - q*b;
81209     q -= ((r != 0) & ((r ^ b) < 0));
81210     return q;
81211 }
81212 
81213 /* decode_c_string */
81214     static CYTHON_INLINE PyObject* __Pyx_decode_c_string(
81215          const char* cstring, Py_ssize_t start, Py_ssize_t stop,
81216          const char* encoding, const char* errors,
81217          PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
81218     Py_ssize_t length;
81219     if (unlikely((start < 0) | (stop < 0))) {
81220         size_t slen = strlen(cstring);
81221         if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) {
81222             PyErr_SetString(PyExc_OverflowError,
81223                             "c-string too long to convert to Python");
81224             return NULL;
81225         }
81226         length = (Py_ssize_t) slen;
81227         if (start < 0) {
81228             start += length;
81229             if (start < 0)
81230                 start = 0;
81231         }
81232         if (stop < 0)
81233             stop += length;
81234     }
81235     length = stop - start;
81236     if (unlikely(length <= 0))
81237         return PyUnicode_FromUnicode(NULL, 0);
81238     cstring += start;
81239     if (decode_func) {
81240         return decode_func(cstring, length, errors);
81241     } else {
81242         return PyUnicode_Decode(cstring, length, encoding, errors);
81243     }
81244 }
81245 
81246 /* SwapException */
81247     #if CYTHON_FAST_THREAD_STATE
81248 static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
81249     PyObject *tmp_type, *tmp_value, *tmp_tb;
81250     #if CYTHON_USE_EXC_INFO_STACK
81251     _PyErr_StackItem *exc_info = tstate->exc_info;
81252     tmp_type = exc_info->exc_type;
81253     tmp_value = exc_info->exc_value;
81254     tmp_tb = exc_info->exc_traceback;
81255     exc_info->exc_type = *type;
81256     exc_info->exc_value = *value;
81257     exc_info->exc_traceback = *tb;
81258     #else
81259     tmp_type = tstate->exc_type;
81260     tmp_value = tstate->exc_value;
81261     tmp_tb = tstate->exc_traceback;
81262     tstate->exc_type = *type;
81263     tstate->exc_value = *value;
81264     tstate->exc_traceback = *tb;
81265     #endif
81266     *type = tmp_type;
81267     *value = tmp_value;
81268     *tb = tmp_tb;
81269 }
81270 #else
81271 static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
81272     PyObject *tmp_type, *tmp_value, *tmp_tb;
81273     PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
81274     PyErr_SetExcInfo(*type, *value, *tb);
81275     *type = tmp_type;
81276     *value = tmp_value;
81277     *tb = tmp_tb;
81278 }
81279 #endif
81280 
81281 /* Import */
81282     static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
81283     PyObject *empty_list = 0;
81284     PyObject *module = 0;
81285     PyObject *global_dict = 0;
81286     PyObject *empty_dict = 0;
81287     PyObject *list;
81288     #if PY_MAJOR_VERSION < 3
81289     PyObject *py_import;
81290     py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
81291     if (!py_import)
81292         goto bad;
81293     #endif
81294     if (from_list)
81295         list = from_list;
81296     else {
81297         empty_list = PyList_New(0);
81298         if (!empty_list)
81299             goto bad;
81300         list = empty_list;
81301     }
81302     global_dict = PyModule_GetDict(__pyx_m);
81303     if (!global_dict)
81304         goto bad;
81305     empty_dict = PyDict_New();
81306     if (!empty_dict)
81307         goto bad;
81308     {
81309         #if PY_MAJOR_VERSION >= 3
81310         if (level == -1) {
81311             if (strchr(__Pyx_MODULE_NAME, '.')) {
81312                 module = PyImport_ImportModuleLevelObject(
81313                     name, global_dict, empty_dict, list, 1);
81314                 if (!module) {
81315                     if (!PyErr_ExceptionMatches(PyExc_ImportError))
81316                         goto bad;
81317                     PyErr_Clear();
81318                 }
81319             }
81320             level = 0;
81321         }
81322         #endif
81323         if (!module) {
81324             #if PY_MAJOR_VERSION < 3
81325             PyObject *py_level = PyInt_FromLong(level);
81326             if (!py_level)
81327                 goto bad;
81328             module = PyObject_CallFunctionObjArgs(py_import,
81329                 name, global_dict, empty_dict, list, py_level, (PyObject *)NULL);
81330             Py_DECREF(py_level);
81331             #else
81332             module = PyImport_ImportModuleLevelObject(
81333                 name, global_dict, empty_dict, list, level);
81334             #endif
81335         }
81336     }
81337 bad:
81338     #if PY_MAJOR_VERSION < 3
81339     Py_XDECREF(py_import);
81340     #endif
81341     Py_XDECREF(empty_list);
81342     Py_XDECREF(empty_dict);
81343     return module;
81344 }
81345 
81346 /* FastTypeChecks */
81347     #if CYTHON_COMPILING_IN_CPYTHON
81348 static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
81349     while (a) {
81350         a = a->tp_base;
81351         if (a == b)
81352             return 1;
81353     }
81354     return b == &PyBaseObject_Type;
81355 }
81356 static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
81357     PyObject *mro;
81358     if (a == b) return 1;
81359     mro = a->tp_mro;
81360     if (likely(mro)) {
81361         Py_ssize_t i, n;
81362         n = PyTuple_GET_SIZE(mro);
81363         for (i = 0; i < n; i++) {
81364             if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
81365                 return 1;
81366         }
81367         return 0;
81368     }
81369     return __Pyx_InBases(a, b);
81370 }
81371 #if PY_MAJOR_VERSION == 2
81372 static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) {
81373     PyObject *exception, *value, *tb;
81374     int res;
81375     __Pyx_PyThreadState_declare
81376     __Pyx_PyThreadState_assign
81377     __Pyx_ErrFetch(&exception, &value, &tb);
81378     res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0;
81379     if (unlikely(res == -1)) {
81380         PyErr_WriteUnraisable(err);
81381         res = 0;
81382     }
81383     if (!res) {
81384         res = PyObject_IsSubclass(err, exc_type2);
81385         if (unlikely(res == -1)) {
81386             PyErr_WriteUnraisable(err);
81387             res = 0;
81388         }
81389     }
81390     __Pyx_ErrRestore(exception, value, tb);
81391     return res;
81392 }
81393 #else
81394 static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
81395     int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0;
81396     if (!res) {
81397         res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
81398     }
81399     return res;
81400 }
81401 #endif
81402 static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
81403     Py_ssize_t i, n;
81404     assert(PyExceptionClass_Check(exc_type));
81405     n = PyTuple_GET_SIZE(tuple);
81406 #if PY_MAJOR_VERSION >= 3
81407     for (i=0; i<n; i++) {
81408         if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
81409     }
81410 #endif
81411     for (i=0; i<n; i++) {
81412         PyObject *t = PyTuple_GET_ITEM(tuple, i);
81413         #if PY_MAJOR_VERSION < 3
81414         if (likely(exc_type == t)) return 1;
81415         #endif
81416         if (likely(PyExceptionClass_Check(t))) {
81417             if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1;
81418         } else {
81419         }
81420     }
81421     return 0;
81422 }
81423 static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {
81424     if (likely(err == exc_type)) return 1;
81425     if (likely(PyExceptionClass_Check(err))) {
81426         if (likely(PyExceptionClass_Check(exc_type))) {
81427             return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);
81428         } else if (likely(PyTuple_Check(exc_type))) {
81429             return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type);
81430         } else {
81431         }
81432     }
81433     return PyErr_GivenExceptionMatches(err, exc_type);
81434 }
81435 static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {
81436     assert(PyExceptionClass_Check(exc_type1));
81437     assert(PyExceptionClass_Check(exc_type2));
81438     if (likely(err == exc_type1 || err == exc_type2)) return 1;
81439     if (likely(PyExceptionClass_Check(err))) {
81440         return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);
81441     }
81442     return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));
81443 }
81444 #endif
81445 
81446 /* None */
81447     static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) {
81448     PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname);
81449 }
81450 
81451 /* None */
81452     static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
81453     long q = a / b;
81454     long r = a - q*b;
81455     q -= ((r != 0) & ((r ^ b) < 0));
81456     return q;
81457 }
81458 
81459 /* ImportFrom */
81460     static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
81461     PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
81462     if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
81463         PyErr_Format(PyExc_ImportError,
81464         #if PY_MAJOR_VERSION < 3
81465             "cannot import name %.230s", PyString_AS_STRING(name));
81466         #else
81467             "cannot import name %S", name);
81468         #endif
81469     }
81470     return value;
81471 }
81472 
81473 /* CallNextTpTraverse */
81474     static int __Pyx_call_next_tp_traverse(PyObject* obj, visitproc v, void *a, traverseproc current_tp_traverse) {
81475     PyTypeObject* type = Py_TYPE(obj);
81476     while (type && type->tp_traverse != current_tp_traverse)
81477         type = type->tp_base;
81478     while (type && type->tp_traverse == current_tp_traverse)
81479         type = type->tp_base;
81480     if (type && type->tp_traverse)
81481         return type->tp_traverse(obj, v, a);
81482     return 0;
81483 }
81484 
81485 /* CallNextTpClear */
81486     static void __Pyx_call_next_tp_clear(PyObject* obj, inquiry current_tp_clear) {
81487     PyTypeObject* type = Py_TYPE(obj);
81488     while (type && type->tp_clear != current_tp_clear)
81489         type = type->tp_base;
81490     while (type && type->tp_clear == current_tp_clear)
81491         type = type->tp_base;
81492     if (type && type->tp_clear)
81493         type->tp_clear(obj);
81494 }
81495 
81496 /* PyObject_GenericGetAttrNoDict */
81497     #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
81498 static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) {
81499     PyErr_Format(PyExc_AttributeError,
81500 #if PY_MAJOR_VERSION >= 3
81501                  "'%.50s' object has no attribute '%U'",
81502                  tp->tp_name, attr_name);
81503 #else
81504                  "'%.50s' object has no attribute '%.400s'",
81505                  tp->tp_name, PyString_AS_STRING(attr_name));
81506 #endif
81507     return NULL;
81508 }
81509 static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) {
81510     PyObject *descr;
81511     PyTypeObject *tp = Py_TYPE(obj);
81512     if (unlikely(!PyString_Check(attr_name))) {
81513         return PyObject_GenericGetAttr(obj, attr_name);
81514     }
81515     assert(!tp->tp_dictoffset);
81516     descr = _PyType_Lookup(tp, attr_name);
81517     if (unlikely(!descr)) {
81518         return __Pyx_RaiseGenericGetAttributeError(tp, attr_name);
81519     }
81520     Py_INCREF(descr);
81521     #if PY_MAJOR_VERSION < 3
81522     if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS)))
81523     #endif
81524     {
81525         descrgetfunc f = Py_TYPE(descr)->tp_descr_get;
81526         if (unlikely(f)) {
81527             PyObject *res = f(descr, obj, (PyObject *)tp);
81528             Py_DECREF(descr);
81529             return res;
81530         }
81531     }
81532     return descr;
81533 }
81534 #endif
81535 
81536 /* PyObject_GenericGetAttr */
81537     #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
81538 static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) {
81539     if (unlikely(Py_TYPE(obj)->tp_dictoffset)) {
81540         return PyObject_GenericGetAttr(obj, attr_name);
81541     }
81542     return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name);
81543 }
81544 #endif
81545 
81546 /* SetVTable */
81547     static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
81548 #if PY_VERSION_HEX >= 0x02070000
81549     PyObject *ob = PyCapsule_New(vtable, 0, 0);
81550 #else
81551     PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
81552 #endif
81553     if (!ob)
81554         goto bad;
81555     if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
81556         goto bad;
81557     Py_DECREF(ob);
81558     return 0;
81559 bad:
81560     Py_XDECREF(ob);
81561     return -1;
81562 }
81563 
81564 /* SetupReduce */
81565     static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) {
81566   int ret;
81567   PyObject *name_attr;
81568   name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name_2);
81569   if (likely(name_attr)) {
81570       ret = PyObject_RichCompareBool(name_attr, name, Py_EQ);
81571   } else {
81572       ret = -1;
81573   }
81574   if (unlikely(ret < 0)) {
81575       PyErr_Clear();
81576       ret = 0;
81577   }
81578   Py_XDECREF(name_attr);
81579   return ret;
81580 }
81581 static int __Pyx_setup_reduce(PyObject* type_obj) {
81582     int ret = 0;
81583     PyObject *object_reduce = NULL;
81584     PyObject *object_reduce_ex = NULL;
81585     PyObject *reduce = NULL;
81586     PyObject *reduce_ex = NULL;
81587     PyObject *reduce_cython = NULL;
81588     PyObject *setstate = NULL;
81589     PyObject *setstate_cython = NULL;
81590 #if CYTHON_USE_PYTYPE_LOOKUP
81591     if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto GOOD;
81592 #else
81593     if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto GOOD;
81594 #endif
81595 #if CYTHON_USE_PYTYPE_LOOKUP
81596     object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
81597 #else
81598     object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto BAD;
81599 #endif
81600     reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto BAD;
81601     if (reduce_ex == object_reduce_ex) {
81602 #if CYTHON_USE_PYTYPE_LOOKUP
81603         object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
81604 #else
81605         object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto BAD;
81606 #endif
81607         reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto BAD;
81608         if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) {
81609             reduce_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_cython); if (unlikely(!reduce_cython)) goto BAD;
81610             ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto BAD;
81611             ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto BAD;
81612             setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate);
81613             if (!setstate) PyErr_Clear();
81614             if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) {
81615                 setstate_cython = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate_cython); if (unlikely(!setstate_cython)) goto BAD;
81616                 ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto BAD;
81617                 ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto BAD;
81618             }
81619             PyType_Modified((PyTypeObject*)type_obj);
81620         }
81621     }
81622     goto GOOD;
81623 BAD:
81624     if (!PyErr_Occurred())
81625         PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name);
81626     ret = -1;
81627 GOOD:
81628 #if !CYTHON_USE_PYTYPE_LOOKUP
81629     Py_XDECREF(object_reduce);
81630     Py_XDECREF(object_reduce_ex);
81631 #endif
81632     Py_XDECREF(reduce);
81633     Py_XDECREF(reduce_ex);
81634     Py_XDECREF(reduce_cython);
81635     Py_XDECREF(setstate);
81636     Py_XDECREF(setstate_cython);
81637     return ret;
81638 }
81639 
81640 /* TypeImport */
81641     #ifndef __PYX_HAVE_RT_ImportType
81642 #define __PYX_HAVE_RT_ImportType
81643 static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name,
81644     size_t size, enum __Pyx_ImportType_CheckSize check_size)
81645 {
81646     PyObject *result = 0;
81647     char warning[200];
81648     Py_ssize_t basicsize;
81649 #ifdef Py_LIMITED_API
81650     PyObject *py_basicsize;
81651 #endif
81652     result = PyObject_GetAttrString(module, class_name);
81653     if (!result)
81654         goto bad;
81655     if (!PyType_Check(result)) {
81656         PyErr_Format(PyExc_TypeError,
81657             "%.200s.%.200s is not a type object",
81658             module_name, class_name);
81659         goto bad;
81660     }
81661 #ifndef Py_LIMITED_API
81662     basicsize = ((PyTypeObject *)result)->tp_basicsize;
81663 #else
81664     py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
81665     if (!py_basicsize)
81666         goto bad;
81667     basicsize = PyLong_AsSsize_t(py_basicsize);
81668     Py_DECREF(py_basicsize);
81669     py_basicsize = 0;
81670     if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
81671         goto bad;
81672 #endif
81673     if ((size_t)basicsize < size) {
81674         PyErr_Format(PyExc_ValueError,
81675             "%.200s.%.200s size changed, may indicate binary incompatibility. "
81676             "Expected %zd from C header, got %zd from PyObject",
81677             module_name, class_name, size, basicsize);
81678         goto bad;
81679     }
81680     if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) {
81681         PyErr_Format(PyExc_ValueError,
81682             "%.200s.%.200s size changed, may indicate binary incompatibility. "
81683             "Expected %zd from C header, got %zd from PyObject",
81684             module_name, class_name, size, basicsize);
81685         goto bad;
81686     }
81687     else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) {
81688         PyOS_snprintf(warning, sizeof(warning),
81689             "%s.%s size changed, may indicate binary incompatibility. "
81690             "Expected %zd from C header, got %zd from PyObject",
81691             module_name, class_name, size, basicsize);
81692         if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
81693     }
81694     return (PyTypeObject *)result;
81695 bad:
81696     Py_XDECREF(result);
81697     return NULL;
81698 }
81699 #endif
81700 
81701 /* GetVTable */
81702     static void* __Pyx_GetVtable(PyObject *dict) {
81703     void* ptr;
81704     PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable);
81705     if (!ob)
81706         goto bad;
81707 #if PY_VERSION_HEX >= 0x02070000
81708     ptr = PyCapsule_GetPointer(ob, 0);
81709 #else
81710     ptr = PyCObject_AsVoidPtr(ob);
81711 #endif
81712     if (!ptr && !PyErr_Occurred())
81713         PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
81714     Py_DECREF(ob);
81715     return ptr;
81716 bad:
81717     Py_XDECREF(ob);
81718     return NULL;
81719 }
81720 
81721 /* FetchCommonType */
81722     static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
81723     PyObject* fake_module;
81724     PyTypeObject* cached_type = NULL;
81725     fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI);
81726     if (!fake_module) return NULL;
81727     Py_INCREF(fake_module);
81728     cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name);
81729     if (cached_type) {
81730         if (!PyType_Check((PyObject*)cached_type)) {
81731             PyErr_Format(PyExc_TypeError,
81732                 "Shared Cython type %.200s is not a type object",
81733                 type->tp_name);
81734             goto bad;
81735         }
81736         if (cached_type->tp_basicsize != type->tp_basicsize) {
81737             PyErr_Format(PyExc_TypeError,
81738                 "Shared Cython type %.200s has the wrong size, try recompiling",
81739                 type->tp_name);
81740             goto bad;
81741         }
81742     } else {
81743         if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
81744         PyErr_Clear();
81745         if (PyType_Ready(type) < 0) goto bad;
81746         if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0)
81747             goto bad;
81748         Py_INCREF(type);
81749         cached_type = type;
81750     }
81751 done:
81752     Py_DECREF(fake_module);
81753     return cached_type;
81754 bad:
81755     Py_XDECREF(cached_type);
81756     cached_type = NULL;
81757     goto done;
81758 }
81759 
81760 /* CythonFunction */
81761     #include <structmember.h>
81762 static PyObject *
81763 __Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure)
81764 {
81765     if (unlikely(op->func_doc == NULL)) {
81766         if (op->func.m_ml->ml_doc) {
81767 #if PY_MAJOR_VERSION >= 3
81768             op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc);
81769 #else
81770             op->func_doc = PyString_FromString(op->func.m_ml->ml_doc);
81771 #endif
81772             if (unlikely(op->func_doc == NULL))
81773                 return NULL;
81774         } else {
81775             Py_INCREF(Py_None);
81776             return Py_None;
81777         }
81778     }
81779     Py_INCREF(op->func_doc);
81780     return op->func_doc;
81781 }
81782 static int
81783 __Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
81784 {
81785     PyObject *tmp = op->func_doc;
81786     if (value == NULL) {
81787         value = Py_None;
81788     }
81789     Py_INCREF(value);
81790     op->func_doc = value;
81791     Py_XDECREF(tmp);
81792     return 0;
81793 }
81794 static PyObject *
81795 __Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
81796 {
81797     if (unlikely(op->func_name == NULL)) {
81798 #if PY_MAJOR_VERSION >= 3
81799         op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name);
81800 #else
81801         op->func_name = PyString_InternFromString(op->func.m_ml->ml_name);
81802 #endif
81803         if (unlikely(op->func_name == NULL))
81804             return NULL;
81805     }
81806     Py_INCREF(op->func_name);
81807     return op->func_name;
81808 }
81809 static int
81810 __Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
81811 {
81812     PyObject *tmp;
81813 #if PY_MAJOR_VERSION >= 3
81814     if (unlikely(value == NULL || !PyUnicode_Check(value)))
81815 #else
81816     if (unlikely(value == NULL || !PyString_Check(value)))
81817 #endif
81818     {
81819         PyErr_SetString(PyExc_TypeError,
81820                         "__name__ must be set to a string object");
81821         return -1;
81822     }
81823     tmp = op->func_name;
81824     Py_INCREF(value);
81825     op->func_name = value;
81826     Py_XDECREF(tmp);
81827     return 0;
81828 }
81829 static PyObject *
81830 __Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
81831 {
81832     Py_INCREF(op->func_qualname);
81833     return op->func_qualname;
81834 }
81835 static int
81836 __Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
81837 {
81838     PyObject *tmp;
81839 #if PY_MAJOR_VERSION >= 3
81840     if (unlikely(value == NULL || !PyUnicode_Check(value)))
81841 #else
81842     if (unlikely(value == NULL || !PyString_Check(value)))
81843 #endif
81844     {
81845         PyErr_SetString(PyExc_TypeError,
81846                         "__qualname__ must be set to a string object");
81847         return -1;
81848     }
81849     tmp = op->func_qualname;
81850     Py_INCREF(value);
81851     op->func_qualname = value;
81852     Py_XDECREF(tmp);
81853     return 0;
81854 }
81855 static PyObject *
81856 __Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure)
81857 {
81858     PyObject *self;
81859     self = m->func_closure;
81860     if (self == NULL)
81861         self = Py_None;
81862     Py_INCREF(self);
81863     return self;
81864 }
81865 static PyObject *
81866 __Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
81867 {
81868     if (unlikely(op->func_dict == NULL)) {
81869         op->func_dict = PyDict_New();
81870         if (unlikely(op->func_dict == NULL))
81871             return NULL;
81872     }
81873     Py_INCREF(op->func_dict);
81874     return op->func_dict;
81875 }
81876 static int
81877 __Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context)
81878 {
81879     PyObject *tmp;
81880     if (unlikely(value == NULL)) {
81881         PyErr_SetString(PyExc_TypeError,
81882                "function's dictionary may not be deleted");
81883         return -1;
81884     }
81885     if (unlikely(!PyDict_Check(value))) {
81886         PyErr_SetString(PyExc_TypeError,
81887                "setting function's dictionary to a non-dict");
81888         return -1;
81889     }
81890     tmp = op->func_dict;
81891     Py_INCREF(value);
81892     op->func_dict = value;
81893     Py_XDECREF(tmp);
81894     return 0;
81895 }
81896 static PyObject *
81897 __Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
81898 {
81899     Py_INCREF(op->func_globals);
81900     return op->func_globals;
81901 }
81902 static PyObject *
81903 __Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
81904 {
81905     Py_INCREF(Py_None);
81906     return Py_None;
81907 }
81908 static PyObject *
81909 __Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context)
81910 {
81911     PyObject* result = (op->func_code) ? op->func_code : Py_None;
81912     Py_INCREF(result);
81913     return result;
81914 }
81915 static int
81916 __Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
81917     int result = 0;
81918     PyObject *res = op->defaults_getter((PyObject *) op);
81919     if (unlikely(!res))
81920         return -1;
81921     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
81922     op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
81923     Py_INCREF(op->defaults_tuple);
81924     op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
81925     Py_INCREF(op->defaults_kwdict);
81926     #else
81927     op->defaults_tuple = PySequence_ITEM(res, 0);
81928     if (unlikely(!op->defaults_tuple)) result = -1;
81929     else {
81930         op->defaults_kwdict = PySequence_ITEM(res, 1);
81931         if (unlikely(!op->defaults_kwdict)) result = -1;
81932     }
81933     #endif
81934     Py_DECREF(res);
81935     return result;
81936 }
81937 static int
81938 __Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
81939     PyObject* tmp;
81940     if (!value) {
81941         value = Py_None;
81942     } else if (value != Py_None && !PyTuple_Check(value)) {
81943         PyErr_SetString(PyExc_TypeError,
81944                         "__defaults__ must be set to a tuple object");
81945         return -1;
81946     }
81947     Py_INCREF(value);
81948     tmp = op->defaults_tuple;
81949     op->defaults_tuple = value;
81950     Py_XDECREF(tmp);
81951     return 0;
81952 }
81953 static PyObject *
81954 __Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
81955     PyObject* result = op->defaults_tuple;
81956     if (unlikely(!result)) {
81957         if (op->defaults_getter) {
81958             if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
81959             result = op->defaults_tuple;
81960         } else {
81961             result = Py_None;
81962         }
81963     }
81964     Py_INCREF(result);
81965     return result;
81966 }
81967 static int
81968 __Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
81969     PyObject* tmp;
81970     if (!value) {
81971         value = Py_None;
81972     } else if (value != Py_None && !PyDict_Check(value)) {
81973         PyErr_SetString(PyExc_TypeError,
81974                         "__kwdefaults__ must be set to a dict object");
81975         return -1;
81976     }
81977     Py_INCREF(value);
81978     tmp = op->defaults_kwdict;
81979     op->defaults_kwdict = value;
81980     Py_XDECREF(tmp);
81981     return 0;
81982 }
81983 static PyObject *
81984 __Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
81985     PyObject* result = op->defaults_kwdict;
81986     if (unlikely(!result)) {
81987         if (op->defaults_getter) {
81988             if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
81989             result = op->defaults_kwdict;
81990         } else {
81991             result = Py_None;
81992         }
81993     }
81994     Py_INCREF(result);
81995     return result;
81996 }
81997 static int
81998 __Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) {
81999     PyObject* tmp;
82000     if (!value || value == Py_None) {
82001         value = NULL;
82002     } else if (!PyDict_Check(value)) {
82003         PyErr_SetString(PyExc_TypeError,
82004                         "__annotations__ must be set to a dict object");
82005         return -1;
82006     }
82007     Py_XINCREF(value);
82008     tmp = op->func_annotations;
82009     op->func_annotations = value;
82010     Py_XDECREF(tmp);
82011     return 0;
82012 }
82013 static PyObject *
82014 __Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) {
82015     PyObject* result = op->func_annotations;
82016     if (unlikely(!result)) {
82017         result = PyDict_New();
82018         if (unlikely(!result)) return NULL;
82019         op->func_annotations = result;
82020     }
82021     Py_INCREF(result);
82022     return result;
82023 }
82024 static PyGetSetDef __pyx_CyFunction_getsets[] = {
82025     {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
82026     {(char *) "__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
82027     {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
82028     {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
82029     {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
82030     {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0},
82031     {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
82032     {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
82033     {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
82034     {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
82035     {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
82036     {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
82037     {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
82038     {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
82039     {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
82040     {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
82041     {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
82042     {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
82043     {0, 0, 0, 0, 0}
82044 };
82045 static PyMemberDef __pyx_CyFunction_members[] = {
82046     {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), PY_WRITE_RESTRICTED, 0},
82047     {0, 0, 0,  0, 0}
82048 };
82049 static PyObject *
82050 __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
82051 {
82052 #if PY_MAJOR_VERSION >= 3
82053     return PyUnicode_FromString(m->func.m_ml->ml_name);
82054 #else
82055     return PyString_FromString(m->func.m_ml->ml_name);
82056 #endif
82057 }
82058 static PyMethodDef __pyx_CyFunction_methods[] = {
82059     {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
82060     {0, 0, 0, 0}
82061 };
82062 #if PY_VERSION_HEX < 0x030500A0
82063 #define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist)
82064 #else
82065 #define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist)
82066 #endif
82067 static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname,
82068                                       PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
82069     __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type);
82070     if (op == NULL)
82071         return NULL;
82072     op->flags = flags;
82073     __Pyx_CyFunction_weakreflist(op) = NULL;
82074     op->func.m_ml = ml;
82075     op->func.m_self = (PyObject *) op;
82076     Py_XINCREF(closure);
82077     op->func_closure = closure;
82078     Py_XINCREF(module);
82079     op->func.m_module = module;
82080     op->func_dict = NULL;
82081     op->func_name = NULL;
82082     Py_INCREF(qualname);
82083     op->func_qualname = qualname;
82084     op->func_doc = NULL;
82085     op->func_classobj = NULL;
82086     op->func_globals = globals;
82087     Py_INCREF(op->func_globals);
82088     Py_XINCREF(code);
82089     op->func_code = code;
82090     op->defaults_pyobjects = 0;
82091     op->defaults = NULL;
82092     op->defaults_tuple = NULL;
82093     op->defaults_kwdict = NULL;
82094     op->defaults_getter = NULL;
82095     op->func_annotations = NULL;
82096     PyObject_GC_Track(op);
82097     return (PyObject *) op;
82098 }
82099 static int
82100 __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
82101 {
82102     Py_CLEAR(m->func_closure);
82103     Py_CLEAR(m->func.m_module);
82104     Py_CLEAR(m->func_dict);
82105     Py_CLEAR(m->func_name);
82106     Py_CLEAR(m->func_qualname);
82107     Py_CLEAR(m->func_doc);
82108     Py_CLEAR(m->func_globals);
82109     Py_CLEAR(m->func_code);
82110     Py_CLEAR(m->func_classobj);
82111     Py_CLEAR(m->defaults_tuple);
82112     Py_CLEAR(m->defaults_kwdict);
82113     Py_CLEAR(m->func_annotations);
82114     if (m->defaults) {
82115         PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
82116         int i;
82117         for (i = 0; i < m->defaults_pyobjects; i++)
82118             Py_XDECREF(pydefaults[i]);
82119         PyObject_Free(m->defaults);
82120         m->defaults = NULL;
82121     }
82122     return 0;
82123 }
82124 static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m)
82125 {
82126     if (__Pyx_CyFunction_weakreflist(m) != NULL)
82127         PyObject_ClearWeakRefs((PyObject *) m);
82128     __Pyx_CyFunction_clear(m);
82129     PyObject_GC_Del(m);
82130 }
82131 static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
82132 {
82133     PyObject_GC_UnTrack(m);
82134     __Pyx__CyFunction_dealloc(m);
82135 }
82136 static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
82137 {
82138     Py_VISIT(m->func_closure);
82139     Py_VISIT(m->func.m_module);
82140     Py_VISIT(m->func_dict);
82141     Py_VISIT(m->func_name);
82142     Py_VISIT(m->func_qualname);
82143     Py_VISIT(m->func_doc);
82144     Py_VISIT(m->func_globals);
82145     Py_VISIT(m->func_code);
82146     Py_VISIT(m->func_classobj);
82147     Py_VISIT(m->defaults_tuple);
82148     Py_VISIT(m->defaults_kwdict);
82149     if (m->defaults) {
82150         PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
82151         int i;
82152         for (i = 0; i < m->defaults_pyobjects; i++)
82153             Py_VISIT(pydefaults[i]);
82154     }
82155     return 0;
82156 }
82157 static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
82158 {
82159     __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
82160     if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
82161         Py_INCREF(func);
82162         return func;
82163     }
82164     if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
82165         if (type == NULL)
82166             type = (PyObject *)(Py_TYPE(obj));
82167         return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type)));
82168     }
82169     if (obj == Py_None)
82170         obj = NULL;
82171     return __Pyx_PyMethod_New(func, obj, type);
82172 }
82173 static PyObject*
82174 __Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
82175 {
82176 #if PY_MAJOR_VERSION >= 3
82177     return PyUnicode_FromFormat("<cyfunction %U at %p>",
82178                                 op->func_qualname, (void *)op);
82179 #else
82180     return PyString_FromFormat("<cyfunction %s at %p>",
82181                                PyString_AsString(op->func_qualname), (void *)op);
82182 #endif
82183 }
82184 static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) {
82185     PyCFunctionObject* f = (PyCFunctionObject*)func;
82186     PyCFunction meth = f->m_ml->ml_meth;
82187     Py_ssize_t size;
82188     switch (f->m_ml->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) {
82189     case METH_VARARGS:
82190         if (likely(kw == NULL || PyDict_Size(kw) == 0))
82191             return (*meth)(self, arg);
82192         break;
82193     case METH_VARARGS | METH_KEYWORDS:
82194         return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw);
82195     case METH_NOARGS:
82196         if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
82197             size = PyTuple_GET_SIZE(arg);
82198             if (likely(size == 0))
82199                 return (*meth)(self, NULL);
82200             PyErr_Format(PyExc_TypeError,
82201                 "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)",
82202                 f->m_ml->ml_name, size);
82203             return NULL;
82204         }
82205         break;
82206     case METH_O:
82207         if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
82208             size = PyTuple_GET_SIZE(arg);
82209             if (likely(size == 1)) {
82210                 PyObject *result, *arg0;
82211                 #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
82212                 arg0 = PyTuple_GET_ITEM(arg, 0);
82213                 #else
82214                 arg0 = PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL;
82215                 #endif
82216                 result = (*meth)(self, arg0);
82217                 #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
82218                 Py_DECREF(arg0);
82219                 #endif
82220                 return result;
82221             }
82222             PyErr_Format(PyExc_TypeError,
82223                 "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)",
82224                 f->m_ml->ml_name, size);
82225             return NULL;
82226         }
82227         break;
82228     default:
82229         PyErr_SetString(PyExc_SystemError, "Bad call flags in "
82230                         "__Pyx_CyFunction_Call. METH_OLDARGS is no "
82231                         "longer supported!");
82232         return NULL;
82233     }
82234     PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
82235                  f->m_ml->ml_name);
82236     return NULL;
82237 }
82238 static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
82239     return __Pyx_CyFunction_CallMethod(func, ((PyCFunctionObject*)func)->m_self, arg, kw);
82240 }
82241 static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) {
82242     PyObject *result;
82243     __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
82244     if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
82245         Py_ssize_t argc;
82246         PyObject *new_args;
82247         PyObject *self;
82248         argc = PyTuple_GET_SIZE(args);
82249         new_args = PyTuple_GetSlice(args, 1, argc);
82250         if (unlikely(!new_args))
82251             return NULL;
82252         self = PyTuple_GetItem(args, 0);
82253         if (unlikely(!self)) {
82254             Py_DECREF(new_args);
82255             return NULL;
82256         }
82257         result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
82258         Py_DECREF(new_args);
82259     } else {
82260         result = __Pyx_CyFunction_Call(func, args, kw);
82261     }
82262     return result;
82263 }
82264 static PyTypeObject __pyx_CyFunctionType_type = {
82265     PyVarObject_HEAD_INIT(0, 0)
82266     "cython_function_or_method",
82267     sizeof(__pyx_CyFunctionObject),
82268     0,
82269     (destructor) __Pyx_CyFunction_dealloc,
82270     0,
82271     0,
82272     0,
82273 #if PY_MAJOR_VERSION < 3
82274     0,
82275 #else
82276     0,
82277 #endif
82278     (reprfunc) __Pyx_CyFunction_repr,
82279     0,
82280     0,
82281     0,
82282     0,
82283     __Pyx_CyFunction_CallAsMethod,
82284     0,
82285     0,
82286     0,
82287     0,
82288     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
82289     0,
82290     (traverseproc) __Pyx_CyFunction_traverse,
82291     (inquiry) __Pyx_CyFunction_clear,
82292     0,
82293 #if PY_VERSION_HEX < 0x030500A0
82294     offsetof(__pyx_CyFunctionObject, func_weakreflist),
82295 #else
82296     offsetof(PyCFunctionObject, m_weakreflist),
82297 #endif
82298     0,
82299     0,
82300     __pyx_CyFunction_methods,
82301     __pyx_CyFunction_members,
82302     __pyx_CyFunction_getsets,
82303     0,
82304     0,
82305     __Pyx_CyFunction_descr_get,
82306     0,
82307     offsetof(__pyx_CyFunctionObject, func_dict),
82308     0,
82309     0,
82310     0,
82311     0,
82312     0,
82313     0,
82314     0,
82315     0,
82316     0,
82317     0,
82318     0,
82319     0,
82320 #if PY_VERSION_HEX >= 0x030400a1
82321     0,
82322 #endif
82323 #if PY_VERSION_HEX >= 0x030800b1
82324     0,
82325 #endif
82326 };
82327 static int __pyx_CyFunction_init(void) {
82328     __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
82329     if (unlikely(__pyx_CyFunctionType == NULL)) {
82330         return -1;
82331     }
82332     return 0;
82333 }
82334 static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) {
82335     __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
82336     m->defaults = PyObject_Malloc(size);
82337     if (unlikely(!m->defaults))
82338         return PyErr_NoMemory();
82339     memset(m->defaults, 0, size);
82340     m->defaults_pyobjects = pyobjects;
82341     return m->defaults;
82342 }
82343 static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) {
82344     __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
82345     m->defaults_tuple = tuple;
82346     Py_INCREF(tuple);
82347 }
82348 static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) {
82349     __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
82350     m->defaults_kwdict = dict;
82351     Py_INCREF(dict);
82352 }
82353 static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) {
82354     __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
82355     m->func_annotations = dict;
82356     Py_INCREF(dict);
82357 }
82358 
82359 /* FusedFunction */
82360     static PyObject *
82361 __pyx_FusedFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags,
82362                         PyObject *qualname, PyObject *self,
82363                         PyObject *module, PyObject *globals,
82364                         PyObject *code)
82365 {
82366     __pyx_FusedFunctionObject *fusedfunc =
82367         (__pyx_FusedFunctionObject *) __Pyx_CyFunction_New(type, ml, flags, qualname,
82368                                                            self, module, globals, code);
82369     if (!fusedfunc)
82370         return NULL;
82371     fusedfunc->__signatures__ = NULL;
82372     fusedfunc->type = NULL;
82373     fusedfunc->self = NULL;
82374     return (PyObject *) fusedfunc;
82375 }
82376 static void
82377 __pyx_FusedFunction_dealloc(__pyx_FusedFunctionObject *self)
82378 {
82379     PyObject_GC_UnTrack(self);
82380     Py_CLEAR(self->self);
82381     Py_CLEAR(self->type);
82382     Py_CLEAR(self->__signatures__);
82383     __Pyx__CyFunction_dealloc((__pyx_CyFunctionObject *) self);
82384 }
82385 static int
82386 __pyx_FusedFunction_traverse(__pyx_FusedFunctionObject *self,
82387                              visitproc visit,
82388                              void *arg)
82389 {
82390     Py_VISIT(self->self);
82391     Py_VISIT(self->type);
82392     Py_VISIT(self->__signatures__);
82393     return __Pyx_CyFunction_traverse((__pyx_CyFunctionObject *) self, visit, arg);
82394 }
82395 static int
82396 __pyx_FusedFunction_clear(__pyx_FusedFunctionObject *self)
82397 {
82398     Py_CLEAR(self->self);
82399     Py_CLEAR(self->type);
82400     Py_CLEAR(self->__signatures__);
82401     return __Pyx_CyFunction_clear((__pyx_CyFunctionObject *) self);
82402 }
82403 static PyObject *
82404 __pyx_FusedFunction_descr_get(PyObject *self, PyObject *obj, PyObject *type)
82405 {
82406     __pyx_FusedFunctionObject *func, *meth;
82407     func = (__pyx_FusedFunctionObject *) self;
82408     if (func->self || func->func.flags & __Pyx_CYFUNCTION_STATICMETHOD) {
82409         Py_INCREF(self);
82410         return self;
82411     }
82412     if (obj == Py_None)
82413         obj = NULL;
82414     meth = (__pyx_FusedFunctionObject *) __pyx_FusedFunction_NewEx(
82415                     ((PyCFunctionObject *) func)->m_ml,
82416                     ((__pyx_CyFunctionObject *) func)->flags,
82417                     ((__pyx_CyFunctionObject *) func)->func_qualname,
82418                     ((__pyx_CyFunctionObject *) func)->func_closure,
82419                     ((PyCFunctionObject *) func)->m_module,
82420                     ((__pyx_CyFunctionObject *) func)->func_globals,
82421                     ((__pyx_CyFunctionObject *) func)->func_code);
82422     if (!meth)
82423         return NULL;
82424     Py_XINCREF(func->func.func_classobj);
82425     meth->func.func_classobj = func->func.func_classobj;
82426     Py_XINCREF(func->__signatures__);
82427     meth->__signatures__ = func->__signatures__;
82428     Py_XINCREF(type);
82429     meth->type = type;
82430     Py_XINCREF(func->func.defaults_tuple);
82431     meth->func.defaults_tuple = func->func.defaults_tuple;
82432     if (func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD)
82433         obj = type;
82434     Py_XINCREF(obj);
82435     meth->self = obj;
82436     return (PyObject *) meth;
82437 }
82438 static PyObject *
82439 _obj_to_str(PyObject *obj)
82440 {
82441     if (PyType_Check(obj))
82442         return PyObject_GetAttr(obj, __pyx_n_s_name_2);
82443     else
82444         return PyObject_Str(obj);
82445 }
82446 static PyObject *
82447 __pyx_FusedFunction_getitem(__pyx_FusedFunctionObject *self, PyObject *idx)
82448 {
82449     PyObject *signature = NULL;
82450     PyObject *unbound_result_func;
82451     PyObject *result_func = NULL;
82452     if (self->__signatures__ == NULL) {
82453         PyErr_SetString(PyExc_TypeError, "Function is not fused");
82454         return NULL;
82455     }
82456     if (PyTuple_Check(idx)) {
82457         PyObject *list = PyList_New(0);
82458         Py_ssize_t n = PyTuple_GET_SIZE(idx);
82459         PyObject *string = NULL;
82460         PyObject *sep = NULL;
82461         int i;
82462         if (!list)
82463             return NULL;
82464         for (i = 0; i < n; i++) {
82465 #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
82466             PyObject *item = PyTuple_GET_ITEM(idx, i);
82467 #else
82468             PyObject *item = PySequence_ITEM(idx, i);
82469 #endif
82470             string = _obj_to_str(item);
82471 #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
82472             Py_DECREF(item);
82473 #endif
82474             if (!string || PyList_Append(list, string) < 0)
82475                 goto __pyx_err;
82476             Py_DECREF(string);
82477         }
82478         sep = PyUnicode_FromString("|");
82479         if (sep)
82480             signature = PyUnicode_Join(sep, list);
82481 __pyx_err:
82482 ;
82483         Py_DECREF(list);
82484         Py_XDECREF(sep);
82485     } else {
82486         signature = _obj_to_str(idx);
82487     }
82488     if (!signature)
82489         return NULL;
82490     unbound_result_func = PyObject_GetItem(self->__signatures__, signature);
82491     if (unbound_result_func) {
82492         if (self->self || self->type) {
82493             __pyx_FusedFunctionObject *unbound = (__pyx_FusedFunctionObject *) unbound_result_func;
82494             Py_CLEAR(unbound->func.func_classobj);
82495             Py_XINCREF(self->func.func_classobj);
82496             unbound->func.func_classobj = self->func.func_classobj;
82497             result_func = __pyx_FusedFunction_descr_get(unbound_result_func,
82498                                                         self->self, self->type);
82499         } else {
82500             result_func = unbound_result_func;
82501             Py_INCREF(result_func);
82502         }
82503     }
82504     Py_DECREF(signature);
82505     Py_XDECREF(unbound_result_func);
82506     return result_func;
82507 }
82508 static PyObject *
82509 __pyx_FusedFunction_callfunction(PyObject *func, PyObject *args, PyObject *kw)
82510 {
82511      __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
82512     int static_specialized = (cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD &&
82513                               !((__pyx_FusedFunctionObject *) func)->__signatures__);
82514     if (cyfunc->flags & __Pyx_CYFUNCTION_CCLASS && !static_specialized) {
82515         return __Pyx_CyFunction_CallAsMethod(func, args, kw);
82516     } else {
82517         return __Pyx_CyFunction_Call(func, args, kw);
82518     }
82519 }
82520 static PyObject *
82521 __pyx_FusedFunction_call(PyObject *func, PyObject *args, PyObject *kw)
82522 {
82523     __pyx_FusedFunctionObject *binding_func = (__pyx_FusedFunctionObject *) func;
82524     Py_ssize_t argc = PyTuple_GET_SIZE(args);
82525     PyObject *new_args = NULL;
82526     __pyx_FusedFunctionObject *new_func = NULL;
82527     PyObject *result = NULL;
82528     PyObject *self = NULL;
82529     int is_staticmethod = binding_func->func.flags & __Pyx_CYFUNCTION_STATICMETHOD;
82530     int is_classmethod = binding_func->func.flags & __Pyx_CYFUNCTION_CLASSMETHOD;
82531     if (binding_func->self) {
82532         Py_ssize_t i;
82533         new_args = PyTuple_New(argc + 1);
82534         if (!new_args)
82535             return NULL;
82536         self = binding_func->self;
82537 #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
82538         Py_INCREF(self);
82539 #endif
82540         Py_INCREF(self);
82541         PyTuple_SET_ITEM(new_args, 0, self);
82542         for (i = 0; i < argc; i++) {
82543 #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
82544             PyObject *item = PyTuple_GET_ITEM(args, i);
82545             Py_INCREF(item);
82546 #else
82547             PyObject *item = PySequence_ITEM(args, i);  if (unlikely(!item)) goto bad;
82548 #endif
82549             PyTuple_SET_ITEM(new_args, i + 1, item);
82550         }
82551         args = new_args;
82552     } else if (binding_func->type) {
82553         if (argc < 1) {
82554             PyErr_SetString(PyExc_TypeError, "Need at least one argument, 0 given.");
82555             return NULL;
82556         }
82557 #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
82558         self = PyTuple_GET_ITEM(args, 0);
82559 #else
82560         self = PySequence_ITEM(args, 0);  if (unlikely(!self)) return NULL;
82561 #endif
82562     }
82563     if (self && !is_classmethod && !is_staticmethod) {
82564         int is_instance = PyObject_IsInstance(self, binding_func->type);
82565         if (unlikely(!is_instance)) {
82566             PyErr_Format(PyExc_TypeError,
82567                          "First argument should be of type %.200s, got %.200s.",
82568                          ((PyTypeObject *) binding_func->type)->tp_name,
82569                          self->ob_type->tp_name);
82570             goto bad;
82571         } else if (unlikely(is_instance == -1)) {
82572             goto bad;
82573         }
82574     }
82575 #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
82576     Py_XDECREF(self);
82577     self = NULL;
82578 #endif
82579     if (binding_func->__signatures__) {
82580         PyObject *tup;
82581         if (is_staticmethod && binding_func->func.flags & __Pyx_CYFUNCTION_CCLASS) {
82582             tup = PyTuple_Pack(3, args,
82583                                kw == NULL ? Py_None : kw,
82584                                binding_func->func.defaults_tuple);
82585             if (unlikely(!tup)) goto bad;
82586             new_func = (__pyx_FusedFunctionObject *) __Pyx_CyFunction_CallMethod(
82587                 func, binding_func->__signatures__, tup, NULL);
82588         } else {
82589             tup = PyTuple_Pack(4, binding_func->__signatures__, args,
82590                                kw == NULL ? Py_None : kw,
82591                                binding_func->func.defaults_tuple);
82592             if (unlikely(!tup)) goto bad;
82593             new_func = (__pyx_FusedFunctionObject *) __pyx_FusedFunction_callfunction(func, tup, NULL);
82594         }
82595         Py_DECREF(tup);
82596         if (unlikely(!new_func))
82597             goto bad;
82598         Py_XINCREF(binding_func->func.func_classobj);
82599         Py_CLEAR(new_func->func.func_classobj);
82600         new_func->func.func_classobj = binding_func->func.func_classobj;
82601         func = (PyObject *) new_func;
82602     }
82603     result = __pyx_FusedFunction_callfunction(func, args, kw);
82604 bad:
82605 #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
82606     Py_XDECREF(self);
82607 #endif
82608     Py_XDECREF(new_args);
82609     Py_XDECREF((PyObject *) new_func);
82610     return result;
82611 }
82612 static PyMemberDef __pyx_FusedFunction_members[] = {
82613     {(char *) "__signatures__",
82614      T_OBJECT,
82615      offsetof(__pyx_FusedFunctionObject, __signatures__),
82616      READONLY,
82617      0},
82618     {0, 0, 0, 0, 0},
82619 };
82620 static PyMappingMethods __pyx_FusedFunction_mapping_methods = {
82621     0,
82622     (binaryfunc) __pyx_FusedFunction_getitem,
82623     0,
82624 };
82625 static PyTypeObject __pyx_FusedFunctionType_type = {
82626     PyVarObject_HEAD_INIT(0, 0)
82627     "fused_cython_function",
82628     sizeof(__pyx_FusedFunctionObject),
82629     0,
82630     (destructor) __pyx_FusedFunction_dealloc,
82631     0,
82632     0,
82633     0,
82634 #if PY_MAJOR_VERSION < 3
82635     0,
82636 #else
82637     0,
82638 #endif
82639     0,
82640     0,
82641     0,
82642     &__pyx_FusedFunction_mapping_methods,
82643     0,
82644     (ternaryfunc) __pyx_FusedFunction_call,
82645     0,
82646     0,
82647     0,
82648     0,
82649     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
82650     0,
82651     (traverseproc) __pyx_FusedFunction_traverse,
82652     (inquiry) __pyx_FusedFunction_clear,
82653     0,
82654     0,
82655     0,
82656     0,
82657     0,
82658     __pyx_FusedFunction_members,
82659     __pyx_CyFunction_getsets,
82660     &__pyx_CyFunctionType_type,
82661     0,
82662     __pyx_FusedFunction_descr_get,
82663     0,
82664     0,
82665     0,
82666     0,
82667     0,
82668     0,
82669     0,
82670     0,
82671     0,
82672     0,
82673     0,
82674     0,
82675     0,
82676     0,
82677 #if PY_VERSION_HEX >= 0x030400a1
82678     0,
82679 #endif
82680 #if PY_VERSION_HEX >= 0x030800b1
82681     0,
82682 #endif
82683 };
82684 static int __pyx_FusedFunction_init(void) {
82685     __pyx_FusedFunctionType = __Pyx_FetchCommonType(&__pyx_FusedFunctionType_type);
82686     if (__pyx_FusedFunctionType == NULL) {
82687         return -1;
82688     }
82689     return 0;
82690 }
82691 
82692 /* CLineInTraceback */
82693     #ifndef CYTHON_CLINE_IN_TRACEBACK
82694 static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) {
82695     PyObject *use_cline;
82696     PyObject *ptype, *pvalue, *ptraceback;
82697 #if CYTHON_COMPILING_IN_CPYTHON
82698     PyObject **cython_runtime_dict;
82699 #endif
82700     if (unlikely(!__pyx_cython_runtime)) {
82701         return c_line;
82702     }
82703     __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
82704 #if CYTHON_COMPILING_IN_CPYTHON
82705     cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime);
82706     if (likely(cython_runtime_dict)) {
82707         __PYX_PY_DICT_LOOKUP_IF_MODIFIED(
82708             use_cline, *cython_runtime_dict,
82709             __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback))
82710     } else
82711 #endif
82712     {
82713       PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback);
82714       if (use_cline_obj) {
82715         use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True;
82716         Py_DECREF(use_cline_obj);
82717       } else {
82718         PyErr_Clear();
82719         use_cline = NULL;
82720       }
82721     }
82722     if (!use_cline) {
82723         c_line = 0;
82724         PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
82725     }
82726     else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
82727         c_line = 0;
82728     }
82729     __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
82730     return c_line;
82731 }
82732 #endif
82733 
82734 /* CodeObjectCache */
82735     static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
82736     int start = 0, mid = 0, end = count - 1;
82737     if (end >= 0 && code_line > entries[end].code_line) {
82738         return count;
82739     }
82740     while (start < end) {
82741         mid = start + (end - start) / 2;
82742         if (code_line < entries[mid].code_line) {
82743             end = mid;
82744         } else if (code_line > entries[mid].code_line) {
82745              start = mid + 1;
82746         } else {
82747             return mid;
82748         }
82749     }
82750     if (code_line <= entries[mid].code_line) {
82751         return mid;
82752     } else {
82753         return mid + 1;
82754     }
82755 }
82756 static PyCodeObject *__pyx_find_code_object(int code_line) {
82757     PyCodeObject* code_object;
82758     int pos;
82759     if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
82760         return NULL;
82761     }
82762     pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
82763     if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
82764         return NULL;
82765     }
82766     code_object = __pyx_code_cache.entries[pos].code_object;
82767     Py_INCREF(code_object);
82768     return code_object;
82769 }
82770 static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
82771     int pos, i;
82772     __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
82773     if (unlikely(!code_line)) {
82774         return;
82775     }
82776     if (unlikely(!entries)) {
82777         entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
82778         if (likely(entries)) {
82779             __pyx_code_cache.entries = entries;
82780             __pyx_code_cache.max_count = 64;
82781             __pyx_code_cache.count = 1;
82782             entries[0].code_line = code_line;
82783             entries[0].code_object = code_object;
82784             Py_INCREF(code_object);
82785         }
82786         return;
82787     }
82788     pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
82789     if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
82790         PyCodeObject* tmp = entries[pos].code_object;
82791         entries[pos].code_object = code_object;
82792         Py_DECREF(tmp);
82793         return;
82794     }
82795     if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
82796         int new_max = __pyx_code_cache.max_count + 64;
82797         entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
82798             __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry));
82799         if (unlikely(!entries)) {
82800             return;
82801         }
82802         __pyx_code_cache.entries = entries;
82803         __pyx_code_cache.max_count = new_max;
82804     }
82805     for (i=__pyx_code_cache.count; i>pos; i--) {
82806         entries[i] = entries[i-1];
82807     }
82808     entries[pos].code_line = code_line;
82809     entries[pos].code_object = code_object;
82810     __pyx_code_cache.count++;
82811     Py_INCREF(code_object);
82812 }
82813 
82814 /* AddTraceback */
82815     #include "compile.h"
82816 #include "frameobject.h"
82817 #include "traceback.h"
82818 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
82819             const char *funcname, int c_line,
82820             int py_line, const char *filename) {
82821     PyCodeObject *py_code = 0;
82822     PyObject *py_srcfile = 0;
82823     PyObject *py_funcname = 0;
82824     #if PY_MAJOR_VERSION < 3
82825     py_srcfile = PyString_FromString(filename);
82826     #else
82827     py_srcfile = PyUnicode_FromString(filename);
82828     #endif
82829     if (!py_srcfile) goto bad;
82830     if (c_line) {
82831         #if PY_MAJOR_VERSION < 3
82832         py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
82833         #else
82834         py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
82835         #endif
82836     }
82837     else {
82838         #if PY_MAJOR_VERSION < 3
82839         py_funcname = PyString_FromString(funcname);
82840         #else
82841         py_funcname = PyUnicode_FromString(funcname);
82842         #endif
82843     }
82844     if (!py_funcname) goto bad;
82845     py_code = __Pyx_PyCode_New(
82846         0,
82847         0,
82848         0,
82849         0,
82850         0,
82851         __pyx_empty_bytes, /*PyObject *code,*/
82852         __pyx_empty_tuple, /*PyObject *consts,*/
82853         __pyx_empty_tuple, /*PyObject *names,*/
82854         __pyx_empty_tuple, /*PyObject *varnames,*/
82855         __pyx_empty_tuple, /*PyObject *freevars,*/
82856         __pyx_empty_tuple, /*PyObject *cellvars,*/
82857         py_srcfile,   /*PyObject *filename,*/
82858         py_funcname,  /*PyObject *name,*/
82859         py_line,
82860         __pyx_empty_bytes  /*PyObject *lnotab*/
82861     );
82862     Py_DECREF(py_srcfile);
82863     Py_DECREF(py_funcname);
82864     return py_code;
82865 bad:
82866     Py_XDECREF(py_srcfile);
82867     Py_XDECREF(py_funcname);
82868     return NULL;
82869 }
82870 static void __Pyx_AddTraceback(const char *funcname, int c_line,
82871                                int py_line, const char *filename) {
82872     PyCodeObject *py_code = 0;
82873     PyFrameObject *py_frame = 0;
82874     PyThreadState *tstate = __Pyx_PyThreadState_Current;
82875     if (c_line) {
82876         c_line = __Pyx_CLineForTraceback(tstate, c_line);
82877     }
82878     py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
82879     if (!py_code) {
82880         py_code = __Pyx_CreateCodeObjectForTraceback(
82881             funcname, c_line, py_line, filename);
82882         if (!py_code) goto bad;
82883         __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
82884     }
82885     py_frame = PyFrame_New(
82886         tstate,            /*PyThreadState *tstate,*/
82887         py_code,           /*PyCodeObject *code,*/
82888         __pyx_d,    /*PyObject *globals,*/
82889         0                  /*PyObject *locals*/
82890     );
82891     if (!py_frame) goto bad;
82892     __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
82893     PyTraceBack_Here(py_frame);
82894 bad:
82895     Py_XDECREF(py_code);
82896     Py_XDECREF(py_frame);
82897 }
82898 
82899 #if PY_MAJOR_VERSION < 3
82900 static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
82901     if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags);
82902         if (__Pyx_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) return __pyx_pw_5numpy_7ndarray_1__getbuffer__(obj, view, flags);
82903         if (__Pyx_TypeCheck(obj, __pyx_array_type)) return __pyx_array_getbuffer(obj, view, flags);
82904         if (__Pyx_TypeCheck(obj, __pyx_memoryview_type)) return __pyx_memoryview_getbuffer(obj, view, flags);
82905     PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_name);
82906     return -1;
82907 }
82908 static void __Pyx_ReleaseBuffer(Py_buffer *view) {
82909     PyObject *obj = view->obj;
82910     if (!obj) return;
82911     if (PyObject_CheckBuffer(obj)) {
82912         PyBuffer_Release(view);
82913         return;
82914     }
82915     if ((0)) {}
82916         else if (__Pyx_TypeCheck(obj, __pyx_ptype_5numpy_ndarray)) __pyx_pw_5numpy_7ndarray_3__releasebuffer__(obj, view);
82917     view->obj = NULL;
82918     Py_DECREF(obj);
82919 }
82920 #endif
82921 
82922 
82923     /* MemviewSliceIsContig */
82924     static int
82925 __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim)
82926 {
82927     int i, index, step, start;
82928     Py_ssize_t itemsize = mvs.memview->view.itemsize;
82929     if (order == 'F') {
82930         step = 1;
82931         start = 0;
82932     } else {
82933         step = -1;
82934         start = ndim - 1;
82935     }
82936     for (i = 0; i < ndim; i++) {
82937         index = start + step * i;
82938         if (mvs.suboffsets[index] >= 0 || mvs.strides[index] != itemsize)
82939             return 0;
82940         itemsize *= mvs.shape[index];
82941     }
82942     return 1;
82943 }
82944 
82945 /* OverlappingSlices */
82946     static void
82947 __pyx_get_array_memory_extents(__Pyx_memviewslice *slice,
82948                                void **out_start, void **out_end,
82949                                int ndim, size_t itemsize)
82950 {
82951     char *start, *end;
82952     int i;
82953     start = end = slice->data;
82954     for (i = 0; i < ndim; i++) {
82955         Py_ssize_t stride = slice->strides[i];
82956         Py_ssize_t extent = slice->shape[i];
82957         if (extent == 0) {
82958             *out_start = *out_end = start;
82959             return;
82960         } else {
82961             if (stride > 0)
82962                 end += stride * (extent - 1);
82963             else
82964                 start += stride * (extent - 1);
82965         }
82966     }
82967     *out_start = start;
82968     *out_end = end + itemsize;
82969 }
82970 static int
82971 __pyx_slices_overlap(__Pyx_memviewslice *slice1,
82972                      __Pyx_memviewslice *slice2,
82973                      int ndim, size_t itemsize)
82974 {
82975     void *start1, *end1, *start2, *end2;
82976     __pyx_get_array_memory_extents(slice1, &start1, &end1, ndim, itemsize);
82977     __pyx_get_array_memory_extents(slice2, &start2, &end2, ndim, itemsize);
82978     return (start1 < end2) && (start2 < end1);
82979 }
82980 
82981 /* Capsule */
82982     static CYTHON_INLINE PyObject *
82983 __pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig)
82984 {
82985     PyObject *cobj;
82986 #if PY_VERSION_HEX >= 0x02070000
82987     cobj = PyCapsule_New(p, sig, NULL);
82988 #else
82989     cobj = PyCObject_FromVoidPtr(p, NULL);
82990 #endif
82991     return cobj;
82992 }
82993 
82994 /* TypeInfoCompare */
82995     static int
82996 __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b)
82997 {
82998     int i;
82999     if (!a || !b)
83000         return 0;
83001     if (a == b)
83002         return 1;
83003     if (a->size != b->size || a->typegroup != b->typegroup ||
83004             a->is_unsigned != b->is_unsigned || a->ndim != b->ndim) {
83005         if (a->typegroup == 'H' || b->typegroup == 'H') {
83006             return a->size == b->size;
83007         } else {
83008             return 0;
83009         }
83010     }
83011     if (a->ndim) {
83012         for (i = 0; i < a->ndim; i++)
83013             if (a->arraysize[i] != b->arraysize[i])
83014                 return 0;
83015     }
83016     if (a->typegroup == 'S') {
83017         if (a->flags != b->flags)
83018             return 0;
83019         if (a->fields || b->fields) {
83020             if (!(a->fields && b->fields))
83021                 return 0;
83022             for (i = 0; a->fields[i].type && b->fields[i].type; i++) {
83023                 __Pyx_StructField *field_a = a->fields + i;
83024                 __Pyx_StructField *field_b = b->fields + i;
83025                 if (field_a->offset != field_b->offset ||
83026                     !__pyx_typeinfo_cmp(field_a->type, field_b->type))
83027                     return 0;
83028             }
83029             return !a->fields[i].type && !b->fields[i].type;
83030         }
83031     }
83032     return 1;
83033 }
83034 
83035 /* MemviewSliceValidateAndInit */
83036     static int
83037 __pyx_check_strides(Py_buffer *buf, int dim, int ndim, int spec)
83038 {
83039     if (buf->shape[dim] <= 1)
83040         return 1;
83041     if (buf->strides) {
83042         if (spec & __Pyx_MEMVIEW_CONTIG) {
83043             if (spec & (__Pyx_MEMVIEW_PTR|__Pyx_MEMVIEW_FULL)) {
83044                 if (buf->strides[dim] != sizeof(void *)) {
83045                     PyErr_Format(PyExc_ValueError,
83046                                  "Buffer is not indirectly contiguous "
83047                                  "in dimension %d.", dim);
83048                     goto fail;
83049                 }
83050             } else if (buf->strides[dim] != buf->itemsize) {
83051                 PyErr_SetString(PyExc_ValueError,
83052                                 "Buffer and memoryview are not contiguous "
83053                                 "in the same dimension.");
83054                 goto fail;
83055             }
83056         }
83057         if (spec & __Pyx_MEMVIEW_FOLLOW) {
83058             Py_ssize_t stride = buf->strides[dim];
83059             if (stride < 0)
83060                 stride = -stride;
83061             if (stride < buf->itemsize) {
83062                 PyErr_SetString(PyExc_ValueError,
83063                                 "Buffer and memoryview are not contiguous "
83064                                 "in the same dimension.");
83065                 goto fail;
83066             }
83067         }
83068     } else {
83069         if (spec & __Pyx_MEMVIEW_CONTIG && dim != ndim - 1) {
83070             PyErr_Format(PyExc_ValueError,
83071                          "C-contiguous buffer is not contiguous in "
83072                          "dimension %d", dim);
83073             goto fail;
83074         } else if (spec & (__Pyx_MEMVIEW_PTR)) {
83075             PyErr_Format(PyExc_ValueError,
83076                          "C-contiguous buffer is not indirect in "
83077                          "dimension %d", dim);
83078             goto fail;
83079         } else if (buf->suboffsets) {
83080             PyErr_SetString(PyExc_ValueError,
83081                             "Buffer exposes suboffsets but no strides");
83082             goto fail;
83083         }
83084     }
83085     return 1;
83086 fail:
83087     return 0;
83088 }
83089 static int
83090 __pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec)
83091 {
83092     if (spec & __Pyx_MEMVIEW_DIRECT) {
83093         if (buf->suboffsets && buf->suboffsets[dim] >= 0) {
83094             PyErr_Format(PyExc_ValueError,
83095                          "Buffer not compatible with direct access "
83096                          "in dimension %d.", dim);
83097             goto fail;
83098         }
83099     }
83100     if (spec & __Pyx_MEMVIEW_PTR) {
83101         if (!buf->suboffsets || (buf->suboffsets[dim] < 0)) {
83102             PyErr_Format(PyExc_ValueError,
83103                          "Buffer is not indirectly accessible "
83104                          "in dimension %d.", dim);
83105             goto fail;
83106         }
83107     }
83108     return 1;
83109 fail:
83110     return 0;
83111 }
83112 static int
83113 __pyx_verify_contig(Py_buffer *buf, int ndim, int c_or_f_flag)
83114 {
83115     int i;
83116     if (c_or_f_flag & __Pyx_IS_F_CONTIG) {
83117         Py_ssize_t stride = 1;
83118         for (i = 0; i < ndim; i++) {
83119             if (stride * buf->itemsize != buf->strides[i] &&
83120                     buf->shape[i] > 1)
83121             {
83122                 PyErr_SetString(PyExc_ValueError,
83123                     "Buffer not fortran contiguous.");
83124                 goto fail;
83125             }
83126             stride = stride * buf->shape[i];
83127         }
83128     } else if (c_or_f_flag & __Pyx_IS_C_CONTIG) {
83129         Py_ssize_t stride = 1;
83130         for (i = ndim - 1; i >- 1; i--) {
83131             if (stride * buf->itemsize != buf->strides[i] &&
83132                     buf->shape[i] > 1) {
83133                 PyErr_SetString(PyExc_ValueError,
83134                     "Buffer not C contiguous.");
83135                 goto fail;
83136             }
83137             stride = stride * buf->shape[i];
83138         }
83139     }
83140     return 1;
83141 fail:
83142     return 0;
83143 }
83144 static int __Pyx_ValidateAndInit_memviewslice(
83145                 int *axes_specs,
83146                 int c_or_f_flag,
83147                 int buf_flags,
83148                 int ndim,
83149                 __Pyx_TypeInfo *dtype,
83150                 __Pyx_BufFmt_StackElem stack[],
83151                 __Pyx_memviewslice *memviewslice,
83152                 PyObject *original_obj)
83153 {
83154     struct __pyx_memoryview_obj *memview, *new_memview;
83155     __Pyx_RefNannyDeclarations
83156     Py_buffer *buf;
83157     int i, spec = 0, retval = -1;
83158     __Pyx_BufFmt_Context ctx;
83159     int from_memoryview = __pyx_memoryview_check(original_obj);
83160     __Pyx_RefNannySetupContext("ValidateAndInit_memviewslice", 0);
83161     if (from_memoryview && __pyx_typeinfo_cmp(dtype, ((struct __pyx_memoryview_obj *)
83162                                                             original_obj)->typeinfo)) {
83163         memview = (struct __pyx_memoryview_obj *) original_obj;
83164         new_memview = NULL;
83165     } else {
83166         memview = (struct __pyx_memoryview_obj *) __pyx_memoryview_new(
83167                                             original_obj, buf_flags, 0, dtype);
83168         new_memview = memview;
83169         if (unlikely(!memview))
83170             goto fail;
83171     }
83172     buf = &memview->view;
83173     if (buf->ndim != ndim) {
83174         PyErr_Format(PyExc_ValueError,
83175                 "Buffer has wrong number of dimensions (expected %d, got %d)",
83176                 ndim, buf->ndim);
83177         goto fail;
83178     }
83179     if (new_memview) {
83180         __Pyx_BufFmt_Init(&ctx, stack, dtype);
83181         if (!__Pyx_BufFmt_CheckString(&ctx, buf->format)) goto fail;
83182     }
83183     if ((unsigned) buf->itemsize != dtype->size) {
83184         PyErr_Format(PyExc_ValueError,
83185                      "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "u byte%s) "
83186                      "does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "u byte%s)",
83187                      buf->itemsize,
83188                      (buf->itemsize > 1) ? "s" : "",
83189                      dtype->name,
83190                      dtype->size,
83191                      (dtype->size > 1) ? "s" : "");
83192         goto fail;
83193     }
83194     for (i = 0; i < ndim; i++) {
83195         spec = axes_specs[i];
83196         if (!__pyx_check_strides(buf, i, ndim, spec))
83197             goto fail;
83198         if (!__pyx_check_suboffsets(buf, i, ndim, spec))
83199             goto fail;
83200     }
83201     if (buf->strides && !__pyx_verify_contig(buf, ndim, c_or_f_flag))
83202         goto fail;
83203     if (unlikely(__Pyx_init_memviewslice(memview, ndim, memviewslice,
83204                                          new_memview != NULL) == -1)) {
83205         goto fail;
83206     }
83207     retval = 0;
83208     goto no_fail;
83209 fail:
83210     Py_XDECREF(new_memview);
83211     retval = -1;
83212 no_fail:
83213     __Pyx_RefNannyFinishContext();
83214     return retval;
83215 }
83216 
83217 /* ObjectToMemviewSlice */
83218     static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_float(PyObject *obj, int writable_flag) {
83219     __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
83220     __Pyx_BufFmt_StackElem stack[1];
83221     int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
83222     int retcode;
83223     if (obj == Py_None) {
83224         result.memview = (struct __pyx_memoryview_obj *) Py_None;
83225         return result;
83226     }
83227     retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
83228                                                  PyBUF_RECORDS_RO | writable_flag, 1,
83229                                                  &__Pyx_TypeInfo_float, stack,
83230                                                  &result, obj);
83231     if (unlikely(retcode == -1))
83232         goto __pyx_fail;
83233     return result;
83234 __pyx_fail:
83235     result.memview = NULL;
83236     result.data = NULL;
83237     return result;
83238 }
83239 
83240 /* ObjectToMemviewSlice */
83241     static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_double(PyObject *obj, int writable_flag) {
83242     __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
83243     __Pyx_BufFmt_StackElem stack[1];
83244     int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
83245     int retcode;
83246     if (obj == Py_None) {
83247         result.memview = (struct __pyx_memoryview_obj *) Py_None;
83248         return result;
83249     }
83250     retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
83251                                                  PyBUF_RECORDS_RO | writable_flag, 1,
83252                                                  &__Pyx_TypeInfo_double, stack,
83253                                                  &result, obj);
83254     if (unlikely(retcode == -1))
83255         goto __pyx_fail;
83256     return result;
83257 __pyx_fail:
83258     result.memview = NULL;
83259     result.data = NULL;
83260     return result;
83261 }
83262 
83263 /* CIntFromPyVerify */
83264     #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
83265     __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
83266 #define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
83267     __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
83268 #define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
83269     {\
83270         func_type value = func_value;\
83271         if (sizeof(target_type) < sizeof(func_type)) {\
83272             if (unlikely(value != (func_type) (target_type) value)) {\
83273                 func_type zero = 0;\
83274                 if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
83275                     return (target_type) -1;\
83276                 if (is_unsigned && unlikely(value < zero))\
83277                     goto raise_neg_overflow;\
83278                 else\
83279                     goto raise_overflow;\
83280             }\
83281         }\
83282         return (target_type) value;\
83283     }
83284 
83285 /* ObjectToMemviewSlice */
83286     static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_nn___pyx_t_5numpy_float64_t(PyObject *obj, int writable_flag) {
83287     __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
83288     __Pyx_BufFmt_StackElem stack[1];
83289     int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
83290     int retcode;
83291     if (obj == Py_None) {
83292         result.memview = (struct __pyx_memoryview_obj *) Py_None;
83293         return result;
83294     }
83295     retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
83296                                                  PyBUF_RECORDS_RO | writable_flag, 1,
83297                                                  &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, stack,
83298                                                  &result, obj);
83299     if (unlikely(retcode == -1))
83300         goto __pyx_fail;
83301     return result;
83302 __pyx_fail:
83303     result.memview = NULL;
83304     result.data = NULL;
83305     return result;
83306 }
83307 
83308 /* CIntToPy */
83309     static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
83310     const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
83311     const int is_unsigned = neg_one > const_zero;
83312     if (is_unsigned) {
83313         if (sizeof(int) < sizeof(long)) {
83314             return PyInt_FromLong((long) value);
83315         } else if (sizeof(int) <= sizeof(unsigned long)) {
83316             return PyLong_FromUnsignedLong((unsigned long) value);
83317 #ifdef HAVE_LONG_LONG
83318         } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
83319             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
83320 #endif
83321         }
83322     } else {
83323         if (sizeof(int) <= sizeof(long)) {
83324             return PyInt_FromLong((long) value);
83325 #ifdef HAVE_LONG_LONG
83326         } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
83327             return PyLong_FromLongLong((PY_LONG_LONG) value);
83328 #endif
83329         }
83330     }
83331     {
83332         int one = 1; int little = (int)*(unsigned char *)&one;
83333         unsigned char *bytes = (unsigned char *)&value;
83334         return _PyLong_FromByteArray(bytes, sizeof(int),
83335                                      little, !is_unsigned);
83336     }
83337 }
83338 
83339 /* CIntToPy */
83340     static CYTHON_INLINE PyObject* __Pyx_PyInt_From_Py_intptr_t(Py_intptr_t value) {
83341     const Py_intptr_t neg_one = (Py_intptr_t) ((Py_intptr_t) 0 - (Py_intptr_t) 1), const_zero = (Py_intptr_t) 0;
83342     const int is_unsigned = neg_one > const_zero;
83343     if (is_unsigned) {
83344         if (sizeof(Py_intptr_t) < sizeof(long)) {
83345             return PyInt_FromLong((long) value);
83346         } else if (sizeof(Py_intptr_t) <= sizeof(unsigned long)) {
83347             return PyLong_FromUnsignedLong((unsigned long) value);
83348 #ifdef HAVE_LONG_LONG
83349         } else if (sizeof(Py_intptr_t) <= sizeof(unsigned PY_LONG_LONG)) {
83350             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
83351 #endif
83352         }
83353     } else {
83354         if (sizeof(Py_intptr_t) <= sizeof(long)) {
83355             return PyInt_FromLong((long) value);
83356 #ifdef HAVE_LONG_LONG
83357         } else if (sizeof(Py_intptr_t) <= sizeof(PY_LONG_LONG)) {
83358             return PyLong_FromLongLong((PY_LONG_LONG) value);
83359 #endif
83360         }
83361     }
83362     {
83363         int one = 1; int little = (int)*(unsigned char *)&one;
83364         unsigned char *bytes = (unsigned char *)&value;
83365         return _PyLong_FromByteArray(bytes, sizeof(Py_intptr_t),
83366                                      little, !is_unsigned);
83367     }
83368 }
83369 
83370 /* CIntToPy */
83371     static CYTHON_INLINE PyObject* __Pyx_PyInt_From_npy_int64(npy_int64 value) {
83372     const npy_int64 neg_one = (npy_int64) ((npy_int64) 0 - (npy_int64) 1), const_zero = (npy_int64) 0;
83373     const int is_unsigned = neg_one > const_zero;
83374     if (is_unsigned) {
83375         if (sizeof(npy_int64) < sizeof(long)) {
83376             return PyInt_FromLong((long) value);
83377         } else if (sizeof(npy_int64) <= sizeof(unsigned long)) {
83378             return PyLong_FromUnsignedLong((unsigned long) value);
83379 #ifdef HAVE_LONG_LONG
83380         } else if (sizeof(npy_int64) <= sizeof(unsigned PY_LONG_LONG)) {
83381             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
83382 #endif
83383         }
83384     } else {
83385         if (sizeof(npy_int64) <= sizeof(long)) {
83386             return PyInt_FromLong((long) value);
83387 #ifdef HAVE_LONG_LONG
83388         } else if (sizeof(npy_int64) <= sizeof(PY_LONG_LONG)) {
83389             return PyLong_FromLongLong((PY_LONG_LONG) value);
83390 #endif
83391         }
83392     }
83393     {
83394         int one = 1; int little = (int)*(unsigned char *)&one;
83395         unsigned char *bytes = (unsigned char *)&value;
83396         return _PyLong_FromByteArray(bytes, sizeof(npy_int64),
83397                                      little, !is_unsigned);
83398     }
83399 }
83400 
83401 /* MemviewDtypeToObject */
83402     static CYTHON_INLINE PyObject *__pyx_memview_get_nn___pyx_t_5numpy_float64_t(const char *itemp) {
83403     return (PyObject *) PyFloat_FromDouble(*(__pyx_t_5numpy_float64_t *) itemp);
83404 }
83405 static CYTHON_INLINE int __pyx_memview_set_nn___pyx_t_5numpy_float64_t(const char *itemp, PyObject *obj) {
83406     __pyx_t_5numpy_float64_t value = __pyx_PyFloat_AsDouble(obj);
83407     if ((value == ((npy_float64)-1)) && PyErr_Occurred())
83408         return 0;
83409     *(__pyx_t_5numpy_float64_t *) itemp = value;
83410     return 1;
83411 }
83412 
83413 /* CIntToPy */
83414     static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
83415     const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
83416     const int is_unsigned = neg_one > const_zero;
83417     if (is_unsigned) {
83418         if (sizeof(long) < sizeof(long)) {
83419             return PyInt_FromLong((long) value);
83420         } else if (sizeof(long) <= sizeof(unsigned long)) {
83421             return PyLong_FromUnsignedLong((unsigned long) value);
83422 #ifdef HAVE_LONG_LONG
83423         } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
83424             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
83425 #endif
83426         }
83427     } else {
83428         if (sizeof(long) <= sizeof(long)) {
83429             return PyInt_FromLong((long) value);
83430 #ifdef HAVE_LONG_LONG
83431         } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
83432             return PyLong_FromLongLong((PY_LONG_LONG) value);
83433 #endif
83434         }
83435     }
83436     {
83437         int one = 1; int little = (int)*(unsigned char *)&one;
83438         unsigned char *bytes = (unsigned char *)&value;
83439         return _PyLong_FromByteArray(bytes, sizeof(long),
83440                                      little, !is_unsigned);
83441     }
83442 }
83443 
83444 /* CIntToPy */
83445     static CYTHON_INLINE PyObject* __Pyx_PyInt_From_npy_uint64(npy_uint64 value) {
83446     const npy_uint64 neg_one = (npy_uint64) ((npy_uint64) 0 - (npy_uint64) 1), const_zero = (npy_uint64) 0;
83447     const int is_unsigned = neg_one > const_zero;
83448     if (is_unsigned) {
83449         if (sizeof(npy_uint64) < sizeof(long)) {
83450             return PyInt_FromLong((long) value);
83451         } else if (sizeof(npy_uint64) <= sizeof(unsigned long)) {
83452             return PyLong_FromUnsignedLong((unsigned long) value);
83453 #ifdef HAVE_LONG_LONG
83454         } else if (sizeof(npy_uint64) <= sizeof(unsigned PY_LONG_LONG)) {
83455             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
83456 #endif
83457         }
83458     } else {
83459         if (sizeof(npy_uint64) <= sizeof(long)) {
83460             return PyInt_FromLong((long) value);
83461 #ifdef HAVE_LONG_LONG
83462         } else if (sizeof(npy_uint64) <= sizeof(PY_LONG_LONG)) {
83463             return PyLong_FromLongLong((PY_LONG_LONG) value);
83464 #endif
83465         }
83466     }
83467     {
83468         int one = 1; int little = (int)*(unsigned char *)&one;
83469         unsigned char *bytes = (unsigned char *)&value;
83470         return _PyLong_FromByteArray(bytes, sizeof(npy_uint64),
83471                                      little, !is_unsigned);
83472     }
83473 }
83474 
83475 /* CIntToPy */
83476     static CYTHON_INLINE PyObject* __Pyx_PyInt_From_npy_int32(npy_int32 value) {
83477     const npy_int32 neg_one = (npy_int32) ((npy_int32) 0 - (npy_int32) 1), const_zero = (npy_int32) 0;
83478     const int is_unsigned = neg_one > const_zero;
83479     if (is_unsigned) {
83480         if (sizeof(npy_int32) < sizeof(long)) {
83481             return PyInt_FromLong((long) value);
83482         } else if (sizeof(npy_int32) <= sizeof(unsigned long)) {
83483             return PyLong_FromUnsignedLong((unsigned long) value);
83484 #ifdef HAVE_LONG_LONG
83485         } else if (sizeof(npy_int32) <= sizeof(unsigned PY_LONG_LONG)) {
83486             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
83487 #endif
83488         }
83489     } else {
83490         if (sizeof(npy_int32) <= sizeof(long)) {
83491             return PyInt_FromLong((long) value);
83492 #ifdef HAVE_LONG_LONG
83493         } else if (sizeof(npy_int32) <= sizeof(PY_LONG_LONG)) {
83494             return PyLong_FromLongLong((PY_LONG_LONG) value);
83495 #endif
83496         }
83497     }
83498     {
83499         int one = 1; int little = (int)*(unsigned char *)&one;
83500         unsigned char *bytes = (unsigned char *)&value;
83501         return _PyLong_FromByteArray(bytes, sizeof(npy_int32),
83502                                      little, !is_unsigned);
83503     }
83504 }
83505 
83506 /* CIntToPy */
83507     static CYTHON_INLINE PyObject* __Pyx_PyInt_From_npy_uint8(npy_uint8 value) {
83508     const npy_uint8 neg_one = (npy_uint8) ((npy_uint8) 0 - (npy_uint8) 1), const_zero = (npy_uint8) 0;
83509     const int is_unsigned = neg_one > const_zero;
83510     if (is_unsigned) {
83511         if (sizeof(npy_uint8) < sizeof(long)) {
83512             return PyInt_FromLong((long) value);
83513         } else if (sizeof(npy_uint8) <= sizeof(unsigned long)) {
83514             return PyLong_FromUnsignedLong((unsigned long) value);
83515 #ifdef HAVE_LONG_LONG
83516         } else if (sizeof(npy_uint8) <= sizeof(unsigned PY_LONG_LONG)) {
83517             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
83518 #endif
83519         }
83520     } else {
83521         if (sizeof(npy_uint8) <= sizeof(long)) {
83522             return PyInt_FromLong((long) value);
83523 #ifdef HAVE_LONG_LONG
83524         } else if (sizeof(npy_uint8) <= sizeof(PY_LONG_LONG)) {
83525             return PyLong_FromLongLong((PY_LONG_LONG) value);
83526 #endif
83527         }
83528     }
83529     {
83530         int one = 1; int little = (int)*(unsigned char *)&one;
83531         unsigned char *bytes = (unsigned char *)&value;
83532         return _PyLong_FromByteArray(bytes, sizeof(npy_uint8),
83533                                      little, !is_unsigned);
83534     }
83535 }
83536 
83537 /* Print */
83538     #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
83539 static PyObject *__Pyx_GetStdout(void) {
83540     PyObject *f = PySys_GetObject((char *)"stdout");
83541     if (!f) {
83542         PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
83543     }
83544     return f;
83545 }
83546 static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) {
83547     int i;
83548     if (!f) {
83549         if (!(f = __Pyx_GetStdout()))
83550             return -1;
83551     }
83552     Py_INCREF(f);
83553     for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) {
83554         PyObject* v;
83555         if (PyFile_SoftSpace(f, 1)) {
83556             if (PyFile_WriteString(" ", f) < 0)
83557                 goto error;
83558         }
83559         v = PyTuple_GET_ITEM(arg_tuple, i);
83560         if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0)
83561             goto error;
83562         if (PyString_Check(v)) {
83563             char *s = PyString_AsString(v);
83564             Py_ssize_t len = PyString_Size(v);
83565             if (len > 0) {
83566                 switch (s[len-1]) {
83567                     case ' ': break;
83568                     case '\f': case '\r': case '\n': case '\t': case '\v':
83569                         PyFile_SoftSpace(f, 0);
83570                         break;
83571                     default:  break;
83572                 }
83573             }
83574         }
83575     }
83576     if (newline) {
83577         if (PyFile_WriteString("\n", f) < 0)
83578             goto error;
83579         PyFile_SoftSpace(f, 0);
83580     }
83581     Py_DECREF(f);
83582     return 0;
83583 error:
83584     Py_DECREF(f);
83585     return -1;
83586 }
83587 #else
83588 static int __Pyx_Print(PyObject* stream, PyObject *arg_tuple, int newline) {
83589     PyObject* kwargs = 0;
83590     PyObject* result = 0;
83591     PyObject* end_string;
83592     if (unlikely(!__pyx_print)) {
83593         __pyx_print = PyObject_GetAttr(__pyx_b, __pyx_n_s_print);
83594         if (!__pyx_print)
83595             return -1;
83596     }
83597     if (stream) {
83598         kwargs = PyDict_New();
83599         if (unlikely(!kwargs))
83600             return -1;
83601         if (unlikely(PyDict_SetItem(kwargs, __pyx_n_s_file, stream) < 0))
83602             goto bad;
83603         if (!newline) {
83604             end_string = PyUnicode_FromStringAndSize(" ", 1);
83605             if (unlikely(!end_string))
83606                 goto bad;
83607             if (PyDict_SetItem(kwargs, __pyx_n_s_end, end_string) < 0) {
83608                 Py_DECREF(end_string);
83609                 goto bad;
83610             }
83611             Py_DECREF(end_string);
83612         }
83613     } else if (!newline) {
83614         if (unlikely(!__pyx_print_kwargs)) {
83615             __pyx_print_kwargs = PyDict_New();
83616             if (unlikely(!__pyx_print_kwargs))
83617                 return -1;
83618             end_string = PyUnicode_FromStringAndSize(" ", 1);
83619             if (unlikely(!end_string))
83620                 return -1;
83621             if (PyDict_SetItem(__pyx_print_kwargs, __pyx_n_s_end, end_string) < 0) {
83622                 Py_DECREF(end_string);
83623                 return -1;
83624             }
83625             Py_DECREF(end_string);
83626         }
83627         kwargs = __pyx_print_kwargs;
83628     }
83629     result = PyObject_Call(__pyx_print, arg_tuple, kwargs);
83630     if (unlikely(kwargs) && (kwargs != __pyx_print_kwargs))
83631         Py_DECREF(kwargs);
83632     if (!result)
83633         return -1;
83634     Py_DECREF(result);
83635     return 0;
83636 bad:
83637     if (kwargs != __pyx_print_kwargs)
83638         Py_XDECREF(kwargs);
83639     return -1;
83640 }
83641 #endif
83642 
83643 /* Declarations */
83644     #if CYTHON_CCOMPLEX
83645   #ifdef __cplusplus
83646     static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
83647       return ::std::complex< float >(x, y);
83648     }
83649   #else
83650     static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
83651       return x + y*(__pyx_t_float_complex)_Complex_I;
83652     }
83653   #endif
83654 #else
83655     static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
83656       __pyx_t_float_complex z;
83657       z.real = x;
83658       z.imag = y;
83659       return z;
83660     }
83661 #endif
83662 
83663 /* Arithmetic */
83664     #if CYTHON_CCOMPLEX
83665 #else
83666     static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
83667        return (a.real == b.real) && (a.imag == b.imag);
83668     }
83669     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
83670         __pyx_t_float_complex z;
83671         z.real = a.real + b.real;
83672         z.imag = a.imag + b.imag;
83673         return z;
83674     }
83675     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
83676         __pyx_t_float_complex z;
83677         z.real = a.real - b.real;
83678         z.imag = a.imag - b.imag;
83679         return z;
83680     }
83681     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
83682         __pyx_t_float_complex z;
83683         z.real = a.real * b.real - a.imag * b.imag;
83684         z.imag = a.real * b.imag + a.imag * b.real;
83685         return z;
83686     }
83687     #if 1
83688     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
83689         if (b.imag == 0) {
83690             return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real);
83691         } else if (fabsf(b.real) >= fabsf(b.imag)) {
83692             if (b.real == 0 && b.imag == 0) {
83693                 return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.imag);
83694             } else {
83695                 float r = b.imag / b.real;
83696                 float s = (float)(1.0) / (b.real + b.imag * r);
83697                 return __pyx_t_float_complex_from_parts(
83698                     (a.real + a.imag * r) * s, (a.imag - a.real * r) * s);
83699             }
83700         } else {
83701             float r = b.real / b.imag;
83702             float s = (float)(1.0) / (b.imag + b.real * r);
83703             return __pyx_t_float_complex_from_parts(
83704                 (a.real * r + a.imag) * s, (a.imag * r - a.real) * s);
83705         }
83706     }
83707     #else
83708     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
83709         if (b.imag == 0) {
83710             return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real);
83711         } else {
83712             float denom = b.real * b.real + b.imag * b.imag;
83713             return __pyx_t_float_complex_from_parts(
83714                 (a.real * b.real + a.imag * b.imag) / denom,
83715                 (a.imag * b.real - a.real * b.imag) / denom);
83716         }
83717     }
83718     #endif
83719     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex a) {
83720         __pyx_t_float_complex z;
83721         z.real = -a.real;
83722         z.imag = -a.imag;
83723         return z;
83724     }
83725     static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) {
83726        return (a.real == 0) && (a.imag == 0);
83727     }
83728     static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex a) {
83729         __pyx_t_float_complex z;
83730         z.real =  a.real;
83731         z.imag = -a.imag;
83732         return z;
83733     }
83734     #if 1
83735         static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) {
83736           #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
83737             return sqrtf(z.real*z.real + z.imag*z.imag);
83738           #else
83739             return hypotf(z.real, z.imag);
83740           #endif
83741         }
83742         static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
83743             __pyx_t_float_complex z;
83744             float r, lnr, theta, z_r, z_theta;
83745             if (b.imag == 0 && b.real == (int)b.real) {
83746                 if (b.real < 0) {
83747                     float denom = a.real * a.real + a.imag * a.imag;
83748                     a.real = a.real / denom;
83749                     a.imag = -a.imag / denom;
83750                     b.real = -b.real;
83751                 }
83752                 switch ((int)b.real) {
83753                     case 0:
83754                         z.real = 1;
83755                         z.imag = 0;
83756                         return z;
83757                     case 1:
83758                         return a;
83759                     case 2:
83760                         z = __Pyx_c_prod_float(a, a);
83761                         return __Pyx_c_prod_float(a, a);
83762                     case 3:
83763                         z = __Pyx_c_prod_float(a, a);
83764                         return __Pyx_c_prod_float(z, a);
83765                     case 4:
83766                         z = __Pyx_c_prod_float(a, a);
83767                         return __Pyx_c_prod_float(z, z);
83768                 }
83769             }
83770             if (a.imag == 0) {
83771                 if (a.real == 0) {
83772                     return a;
83773                 } else if (b.imag == 0) {
83774                     z.real = powf(a.real, b.real);
83775                     z.imag = 0;
83776                     return z;
83777                 } else if (a.real > 0) {
83778                     r = a.real;
83779                     theta = 0;
83780                 } else {
83781                     r = -a.real;
83782                     theta = atan2f(0.0, -1.0);
83783                 }
83784             } else {
83785                 r = __Pyx_c_abs_float(a);
83786                 theta = atan2f(a.imag, a.real);
83787             }
83788             lnr = logf(r);
83789             z_r = expf(lnr * b.real - theta * b.imag);
83790             z_theta = theta * b.real + lnr * b.imag;
83791             z.real = z_r * cosf(z_theta);
83792             z.imag = z_r * sinf(z_theta);
83793             return z;
83794         }
83795     #endif
83796 #endif
83797 
83798 /* Declarations */
83799     #if CYTHON_CCOMPLEX
83800   #ifdef __cplusplus
83801     static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
83802       return ::std::complex< double >(x, y);
83803     }
83804   #else
83805     static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
83806       return x + y*(__pyx_t_double_complex)_Complex_I;
83807     }
83808   #endif
83809 #else
83810     static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
83811       __pyx_t_double_complex z;
83812       z.real = x;
83813       z.imag = y;
83814       return z;
83815     }
83816 #endif
83817 
83818 /* Arithmetic */
83819     #if CYTHON_CCOMPLEX
83820 #else
83821     static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
83822        return (a.real == b.real) && (a.imag == b.imag);
83823     }
83824     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
83825         __pyx_t_double_complex z;
83826         z.real = a.real + b.real;
83827         z.imag = a.imag + b.imag;
83828         return z;
83829     }
83830     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
83831         __pyx_t_double_complex z;
83832         z.real = a.real - b.real;
83833         z.imag = a.imag - b.imag;
83834         return z;
83835     }
83836     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
83837         __pyx_t_double_complex z;
83838         z.real = a.real * b.real - a.imag * b.imag;
83839         z.imag = a.real * b.imag + a.imag * b.real;
83840         return z;
83841     }
83842     #if 1
83843     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
83844         if (b.imag == 0) {
83845             return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real);
83846         } else if (fabs(b.real) >= fabs(b.imag)) {
83847             if (b.real == 0 && b.imag == 0) {
83848                 return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag);
83849             } else {
83850                 double r = b.imag / b.real;
83851                 double s = (double)(1.0) / (b.real + b.imag * r);
83852                 return __pyx_t_double_complex_from_parts(
83853                     (a.real + a.imag * r) * s, (a.imag - a.real * r) * s);
83854             }
83855         } else {
83856             double r = b.real / b.imag;
83857             double s = (double)(1.0) / (b.imag + b.real * r);
83858             return __pyx_t_double_complex_from_parts(
83859                 (a.real * r + a.imag) * s, (a.imag * r - a.real) * s);
83860         }
83861     }
83862     #else
83863     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
83864         if (b.imag == 0) {
83865             return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real);
83866         } else {
83867             double denom = b.real * b.real + b.imag * b.imag;
83868             return __pyx_t_double_complex_from_parts(
83869                 (a.real * b.real + a.imag * b.imag) / denom,
83870                 (a.imag * b.real - a.real * b.imag) / denom);
83871         }
83872     }
83873     #endif
83874     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex a) {
83875         __pyx_t_double_complex z;
83876         z.real = -a.real;
83877         z.imag = -a.imag;
83878         return z;
83879     }
83880     static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex a) {
83881        return (a.real == 0) && (a.imag == 0);
83882     }
83883     static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex a) {
83884         __pyx_t_double_complex z;
83885         z.real =  a.real;
83886         z.imag = -a.imag;
83887         return z;
83888     }
83889     #if 1
83890         static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex z) {
83891           #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
83892             return sqrt(z.real*z.real + z.imag*z.imag);
83893           #else
83894             return hypot(z.real, z.imag);
83895           #endif
83896         }
83897         static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
83898             __pyx_t_double_complex z;
83899             double r, lnr, theta, z_r, z_theta;
83900             if (b.imag == 0 && b.real == (int)b.real) {
83901                 if (b.real < 0) {
83902                     double denom = a.real * a.real + a.imag * a.imag;
83903                     a.real = a.real / denom;
83904                     a.imag = -a.imag / denom;
83905                     b.real = -b.real;
83906                 }
83907                 switch ((int)b.real) {
83908                     case 0:
83909                         z.real = 1;
83910                         z.imag = 0;
83911                         return z;
83912                     case 1:
83913                         return a;
83914                     case 2:
83915                         z = __Pyx_c_prod_double(a, a);
83916                         return __Pyx_c_prod_double(a, a);
83917                     case 3:
83918                         z = __Pyx_c_prod_double(a, a);
83919                         return __Pyx_c_prod_double(z, a);
83920                     case 4:
83921                         z = __Pyx_c_prod_double(a, a);
83922                         return __Pyx_c_prod_double(z, z);
83923                 }
83924             }
83925             if (a.imag == 0) {
83926                 if (a.real == 0) {
83927                     return a;
83928                 } else if (b.imag == 0) {
83929                     z.real = pow(a.real, b.real);
83930                     z.imag = 0;
83931                     return z;
83932                 } else if (a.real > 0) {
83933                     r = a.real;
83934                     theta = 0;
83935                 } else {
83936                     r = -a.real;
83937                     theta = atan2(0.0, -1.0);
83938                 }
83939             } else {
83940                 r = __Pyx_c_abs_double(a);
83941                 theta = atan2(a.imag, a.real);
83942             }
83943             lnr = log(r);
83944             z_r = exp(lnr * b.real - theta * b.imag);
83945             z_theta = theta * b.real + lnr * b.imag;
83946             z.real = z_r * cos(z_theta);
83947             z.imag = z_r * sin(z_theta);
83948             return z;
83949         }
83950     #endif
83951 #endif
83952 
83953 /* CIntToPy */
83954     static CYTHON_INLINE PyObject* __Pyx_PyInt_From_enum__NPY_TYPES(enum NPY_TYPES value) {
83955     const enum NPY_TYPES neg_one = (enum NPY_TYPES) ((enum NPY_TYPES) 0 - (enum NPY_TYPES) 1), const_zero = (enum NPY_TYPES) 0;
83956     const int is_unsigned = neg_one > const_zero;
83957     if (is_unsigned) {
83958         if (sizeof(enum NPY_TYPES) < sizeof(long)) {
83959             return PyInt_FromLong((long) value);
83960         } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned long)) {
83961             return PyLong_FromUnsignedLong((unsigned long) value);
83962 #ifdef HAVE_LONG_LONG
83963         } else if (sizeof(enum NPY_TYPES) <= sizeof(unsigned PY_LONG_LONG)) {
83964             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
83965 #endif
83966         }
83967     } else {
83968         if (sizeof(enum NPY_TYPES) <= sizeof(long)) {
83969             return PyInt_FromLong((long) value);
83970 #ifdef HAVE_LONG_LONG
83971         } else if (sizeof(enum NPY_TYPES) <= sizeof(PY_LONG_LONG)) {
83972             return PyLong_FromLongLong((PY_LONG_LONG) value);
83973 #endif
83974         }
83975     }
83976     {
83977         int one = 1; int little = (int)*(unsigned char *)&one;
83978         unsigned char *bytes = (unsigned char *)&value;
83979         return _PyLong_FromByteArray(bytes, sizeof(enum NPY_TYPES),
83980                                      little, !is_unsigned);
83981     }
83982 }
83983 
83984 /* MemviewSliceCopyTemplate */
83985     static __Pyx_memviewslice
83986 __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs,
83987                                  const char *mode, int ndim,
83988                                  size_t sizeof_dtype, int contig_flag,
83989                                  int dtype_is_object)
83990 {
83991     __Pyx_RefNannyDeclarations
83992     int i;
83993     __Pyx_memviewslice new_mvs = { 0, 0, { 0 }, { 0 }, { 0 } };
83994     struct __pyx_memoryview_obj *from_memview = from_mvs->memview;
83995     Py_buffer *buf = &from_memview->view;
83996     PyObject *shape_tuple = NULL;
83997     PyObject *temp_int = NULL;
83998     struct __pyx_array_obj *array_obj = NULL;
83999     struct __pyx_memoryview_obj *memview_obj = NULL;
84000     __Pyx_RefNannySetupContext("__pyx_memoryview_copy_new_contig", 0);
84001     for (i = 0; i < ndim; i++) {
84002         if (from_mvs->suboffsets[i] >= 0) {
84003             PyErr_Format(PyExc_ValueError, "Cannot copy memoryview slice with "
84004                                            "indirect dimensions (axis %d)", i);
84005             goto fail;
84006         }
84007     }
84008     shape_tuple = PyTuple_New(ndim);
84009     if (unlikely(!shape_tuple)) {
84010         goto fail;
84011     }
84012     __Pyx_GOTREF(shape_tuple);
84013     for(i = 0; i < ndim; i++) {
84014         temp_int = PyInt_FromSsize_t(from_mvs->shape[i]);
84015         if(unlikely(!temp_int)) {
84016             goto fail;
84017         } else {
84018             PyTuple_SET_ITEM(shape_tuple, i, temp_int);
84019             temp_int = NULL;
84020         }
84021     }
84022     array_obj = __pyx_array_new(shape_tuple, sizeof_dtype, buf->format, (char *) mode, NULL);
84023     if (unlikely(!array_obj)) {
84024         goto fail;
84025     }
84026     __Pyx_GOTREF(array_obj);
84027     memview_obj = (struct __pyx_memoryview_obj *) __pyx_memoryview_new(
84028                                     (PyObject *) array_obj, contig_flag,
84029                                     dtype_is_object,
84030                                     from_mvs->memview->typeinfo);
84031     if (unlikely(!memview_obj))
84032         goto fail;
84033     if (unlikely(__Pyx_init_memviewslice(memview_obj, ndim, &new_mvs, 1) < 0))
84034         goto fail;
84035     if (unlikely(__pyx_memoryview_copy_contents(*from_mvs, new_mvs, ndim, ndim,
84036                                                 dtype_is_object) < 0))
84037         goto fail;
84038     goto no_fail;
84039 fail:
84040     __Pyx_XDECREF(new_mvs.memview);
84041     new_mvs.memview = NULL;
84042     new_mvs.data = NULL;
84043 no_fail:
84044     __Pyx_XDECREF(shape_tuple);
84045     __Pyx_XDECREF(temp_int);
84046     __Pyx_XDECREF(array_obj);
84047     __Pyx_RefNannyFinishContext();
84048     return new_mvs;
84049 }
84050 
84051 /* CIntFromPy */
84052     static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
84053     const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
84054     const int is_unsigned = neg_one > const_zero;
84055 #if PY_MAJOR_VERSION < 3
84056     if (likely(PyInt_Check(x))) {
84057         if (sizeof(int) < sizeof(long)) {
84058             __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x))
84059         } else {
84060             long val = PyInt_AS_LONG(x);
84061             if (is_unsigned && unlikely(val < 0)) {
84062                 goto raise_neg_overflow;
84063             }
84064             return (int) val;
84065         }
84066     } else
84067 #endif
84068     if (likely(PyLong_Check(x))) {
84069         if (is_unsigned) {
84070 #if CYTHON_USE_PYLONG_INTERNALS
84071             const digit* digits = ((PyLongObject*)x)->ob_digit;
84072             switch (Py_SIZE(x)) {
84073                 case  0: return (int) 0;
84074                 case  1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0])
84075                 case 2:
84076                     if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
84077                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84078                             __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84079                         } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) {
84080                             return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
84081                         }
84082                     }
84083                     break;
84084                 case 3:
84085                     if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
84086                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84087                             __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84088                         } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) {
84089                             return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
84090                         }
84091                     }
84092                     break;
84093                 case 4:
84094                     if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
84095                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84096                             __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84097                         } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) {
84098                             return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
84099                         }
84100                     }
84101                     break;
84102             }
84103 #endif
84104 #if CYTHON_COMPILING_IN_CPYTHON
84105             if (unlikely(Py_SIZE(x) < 0)) {
84106                 goto raise_neg_overflow;
84107             }
84108 #else
84109             {
84110                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
84111                 if (unlikely(result < 0))
84112                     return (int) -1;
84113                 if (unlikely(result == 1))
84114                     goto raise_neg_overflow;
84115             }
84116 #endif
84117             if (sizeof(int) <= sizeof(unsigned long)) {
84118                 __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
84119 #ifdef HAVE_LONG_LONG
84120             } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
84121                 __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
84122 #endif
84123             }
84124         } else {
84125 #if CYTHON_USE_PYLONG_INTERNALS
84126             const digit* digits = ((PyLongObject*)x)->ob_digit;
84127             switch (Py_SIZE(x)) {
84128                 case  0: return (int) 0;
84129                 case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0]))
84130                 case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +digits[0])
84131                 case -2:
84132                     if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) {
84133                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84134                             __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84135                         } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
84136                             return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
84137                         }
84138                     }
84139                     break;
84140                 case 2:
84141                     if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
84142                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84143                             __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84144                         } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
84145                             return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
84146                         }
84147                     }
84148                     break;
84149                 case -3:
84150                     if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
84151                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84152                             __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84153                         } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
84154                             return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
84155                         }
84156                     }
84157                     break;
84158                 case 3:
84159                     if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
84160                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84161                             __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84162                         } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
84163                             return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
84164                         }
84165                     }
84166                     break;
84167                 case -4:
84168                     if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
84169                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84170                             __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84171                         } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
84172                             return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
84173                         }
84174                     }
84175                     break;
84176                 case 4:
84177                     if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
84178                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84179                             __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84180                         } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
84181                             return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
84182                         }
84183                     }
84184                     break;
84185             }
84186 #endif
84187             if (sizeof(int) <= sizeof(long)) {
84188                 __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
84189 #ifdef HAVE_LONG_LONG
84190             } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
84191                 __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
84192 #endif
84193             }
84194         }
84195         {
84196 #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
84197             PyErr_SetString(PyExc_RuntimeError,
84198                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
84199 #else
84200             int val;
84201             PyObject *v = __Pyx_PyNumber_IntOrLong(x);
84202  #if PY_MAJOR_VERSION < 3
84203             if (likely(v) && !PyLong_Check(v)) {
84204                 PyObject *tmp = v;
84205                 v = PyNumber_Long(tmp);
84206                 Py_DECREF(tmp);
84207             }
84208  #endif
84209             if (likely(v)) {
84210                 int one = 1; int is_little = (int)*(unsigned char *)&one;
84211                 unsigned char *bytes = (unsigned char *)&val;
84212                 int ret = _PyLong_AsByteArray((PyLongObject *)v,
84213                                               bytes, sizeof(val),
84214                                               is_little, !is_unsigned);
84215                 Py_DECREF(v);
84216                 if (likely(!ret))
84217                     return val;
84218             }
84219 #endif
84220             return (int) -1;
84221         }
84222     } else {
84223         int val;
84224         PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
84225         if (!tmp) return (int) -1;
84226         val = __Pyx_PyInt_As_int(tmp);
84227         Py_DECREF(tmp);
84228         return val;
84229     }
84230 raise_overflow:
84231     PyErr_SetString(PyExc_OverflowError,
84232         "value too large to convert to int");
84233     return (int) -1;
84234 raise_neg_overflow:
84235     PyErr_SetString(PyExc_OverflowError,
84236         "can't convert negative value to int");
84237     return (int) -1;
84238 }
84239 
84240 /* CIntFromPy */
84241     static CYTHON_INLINE npy_int64 __Pyx_PyInt_As_npy_int64(PyObject *x) {
84242     const npy_int64 neg_one = (npy_int64) ((npy_int64) 0 - (npy_int64) 1), const_zero = (npy_int64) 0;
84243     const int is_unsigned = neg_one > const_zero;
84244 #if PY_MAJOR_VERSION < 3
84245     if (likely(PyInt_Check(x))) {
84246         if (sizeof(npy_int64) < sizeof(long)) {
84247             __PYX_VERIFY_RETURN_INT(npy_int64, long, PyInt_AS_LONG(x))
84248         } else {
84249             long val = PyInt_AS_LONG(x);
84250             if (is_unsigned && unlikely(val < 0)) {
84251                 goto raise_neg_overflow;
84252             }
84253             return (npy_int64) val;
84254         }
84255     } else
84256 #endif
84257     if (likely(PyLong_Check(x))) {
84258         if (is_unsigned) {
84259 #if CYTHON_USE_PYLONG_INTERNALS
84260             const digit* digits = ((PyLongObject*)x)->ob_digit;
84261             switch (Py_SIZE(x)) {
84262                 case  0: return (npy_int64) 0;
84263                 case  1: __PYX_VERIFY_RETURN_INT(npy_int64, digit, digits[0])
84264                 case 2:
84265                     if (8 * sizeof(npy_int64) > 1 * PyLong_SHIFT) {
84266                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84267                             __PYX_VERIFY_RETURN_INT(npy_int64, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84268                         } else if (8 * sizeof(npy_int64) >= 2 * PyLong_SHIFT) {
84269                             return (npy_int64) (((((npy_int64)digits[1]) << PyLong_SHIFT) | (npy_int64)digits[0]));
84270                         }
84271                     }
84272                     break;
84273                 case 3:
84274                     if (8 * sizeof(npy_int64) > 2 * PyLong_SHIFT) {
84275                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84276                             __PYX_VERIFY_RETURN_INT(npy_int64, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84277                         } else if (8 * sizeof(npy_int64) >= 3 * PyLong_SHIFT) {
84278                             return (npy_int64) (((((((npy_int64)digits[2]) << PyLong_SHIFT) | (npy_int64)digits[1]) << PyLong_SHIFT) | (npy_int64)digits[0]));
84279                         }
84280                     }
84281                     break;
84282                 case 4:
84283                     if (8 * sizeof(npy_int64) > 3 * PyLong_SHIFT) {
84284                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84285                             __PYX_VERIFY_RETURN_INT(npy_int64, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84286                         } else if (8 * sizeof(npy_int64) >= 4 * PyLong_SHIFT) {
84287                             return (npy_int64) (((((((((npy_int64)digits[3]) << PyLong_SHIFT) | (npy_int64)digits[2]) << PyLong_SHIFT) | (npy_int64)digits[1]) << PyLong_SHIFT) | (npy_int64)digits[0]));
84288                         }
84289                     }
84290                     break;
84291             }
84292 #endif
84293 #if CYTHON_COMPILING_IN_CPYTHON
84294             if (unlikely(Py_SIZE(x) < 0)) {
84295                 goto raise_neg_overflow;
84296             }
84297 #else
84298             {
84299                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
84300                 if (unlikely(result < 0))
84301                     return (npy_int64) -1;
84302                 if (unlikely(result == 1))
84303                     goto raise_neg_overflow;
84304             }
84305 #endif
84306             if (sizeof(npy_int64) <= sizeof(unsigned long)) {
84307                 __PYX_VERIFY_RETURN_INT_EXC(npy_int64, unsigned long, PyLong_AsUnsignedLong(x))
84308 #ifdef HAVE_LONG_LONG
84309             } else if (sizeof(npy_int64) <= sizeof(unsigned PY_LONG_LONG)) {
84310                 __PYX_VERIFY_RETURN_INT_EXC(npy_int64, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
84311 #endif
84312             }
84313         } else {
84314 #if CYTHON_USE_PYLONG_INTERNALS
84315             const digit* digits = ((PyLongObject*)x)->ob_digit;
84316             switch (Py_SIZE(x)) {
84317                 case  0: return (npy_int64) 0;
84318                 case -1: __PYX_VERIFY_RETURN_INT(npy_int64, sdigit, (sdigit) (-(sdigit)digits[0]))
84319                 case  1: __PYX_VERIFY_RETURN_INT(npy_int64,  digit, +digits[0])
84320                 case -2:
84321                     if (8 * sizeof(npy_int64) - 1 > 1 * PyLong_SHIFT) {
84322                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84323                             __PYX_VERIFY_RETURN_INT(npy_int64, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84324                         } else if (8 * sizeof(npy_int64) - 1 > 2 * PyLong_SHIFT) {
84325                             return (npy_int64) (((npy_int64)-1)*(((((npy_int64)digits[1]) << PyLong_SHIFT) | (npy_int64)digits[0])));
84326                         }
84327                     }
84328                     break;
84329                 case 2:
84330                     if (8 * sizeof(npy_int64) > 1 * PyLong_SHIFT) {
84331                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84332                             __PYX_VERIFY_RETURN_INT(npy_int64, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84333                         } else if (8 * sizeof(npy_int64) - 1 > 2 * PyLong_SHIFT) {
84334                             return (npy_int64) ((((((npy_int64)digits[1]) << PyLong_SHIFT) | (npy_int64)digits[0])));
84335                         }
84336                     }
84337                     break;
84338                 case -3:
84339                     if (8 * sizeof(npy_int64) - 1 > 2 * PyLong_SHIFT) {
84340                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84341                             __PYX_VERIFY_RETURN_INT(npy_int64, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84342                         } else if (8 * sizeof(npy_int64) - 1 > 3 * PyLong_SHIFT) {
84343                             return (npy_int64) (((npy_int64)-1)*(((((((npy_int64)digits[2]) << PyLong_SHIFT) | (npy_int64)digits[1]) << PyLong_SHIFT) | (npy_int64)digits[0])));
84344                         }
84345                     }
84346                     break;
84347                 case 3:
84348                     if (8 * sizeof(npy_int64) > 2 * PyLong_SHIFT) {
84349                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84350                             __PYX_VERIFY_RETURN_INT(npy_int64, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84351                         } else if (8 * sizeof(npy_int64) - 1 > 3 * PyLong_SHIFT) {
84352                             return (npy_int64) ((((((((npy_int64)digits[2]) << PyLong_SHIFT) | (npy_int64)digits[1]) << PyLong_SHIFT) | (npy_int64)digits[0])));
84353                         }
84354                     }
84355                     break;
84356                 case -4:
84357                     if (8 * sizeof(npy_int64) - 1 > 3 * PyLong_SHIFT) {
84358                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84359                             __PYX_VERIFY_RETURN_INT(npy_int64, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84360                         } else if (8 * sizeof(npy_int64) - 1 > 4 * PyLong_SHIFT) {
84361                             return (npy_int64) (((npy_int64)-1)*(((((((((npy_int64)digits[3]) << PyLong_SHIFT) | (npy_int64)digits[2]) << PyLong_SHIFT) | (npy_int64)digits[1]) << PyLong_SHIFT) | (npy_int64)digits[0])));
84362                         }
84363                     }
84364                     break;
84365                 case 4:
84366                     if (8 * sizeof(npy_int64) > 3 * PyLong_SHIFT) {
84367                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84368                             __PYX_VERIFY_RETURN_INT(npy_int64, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84369                         } else if (8 * sizeof(npy_int64) - 1 > 4 * PyLong_SHIFT) {
84370                             return (npy_int64) ((((((((((npy_int64)digits[3]) << PyLong_SHIFT) | (npy_int64)digits[2]) << PyLong_SHIFT) | (npy_int64)digits[1]) << PyLong_SHIFT) | (npy_int64)digits[0])));
84371                         }
84372                     }
84373                     break;
84374             }
84375 #endif
84376             if (sizeof(npy_int64) <= sizeof(long)) {
84377                 __PYX_VERIFY_RETURN_INT_EXC(npy_int64, long, PyLong_AsLong(x))
84378 #ifdef HAVE_LONG_LONG
84379             } else if (sizeof(npy_int64) <= sizeof(PY_LONG_LONG)) {
84380                 __PYX_VERIFY_RETURN_INT_EXC(npy_int64, PY_LONG_LONG, PyLong_AsLongLong(x))
84381 #endif
84382             }
84383         }
84384         {
84385 #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
84386             PyErr_SetString(PyExc_RuntimeError,
84387                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
84388 #else
84389             npy_int64 val;
84390             PyObject *v = __Pyx_PyNumber_IntOrLong(x);
84391  #if PY_MAJOR_VERSION < 3
84392             if (likely(v) && !PyLong_Check(v)) {
84393                 PyObject *tmp = v;
84394                 v = PyNumber_Long(tmp);
84395                 Py_DECREF(tmp);
84396             }
84397  #endif
84398             if (likely(v)) {
84399                 int one = 1; int is_little = (int)*(unsigned char *)&one;
84400                 unsigned char *bytes = (unsigned char *)&val;
84401                 int ret = _PyLong_AsByteArray((PyLongObject *)v,
84402                                               bytes, sizeof(val),
84403                                               is_little, !is_unsigned);
84404                 Py_DECREF(v);
84405                 if (likely(!ret))
84406                     return val;
84407             }
84408 #endif
84409             return (npy_int64) -1;
84410         }
84411     } else {
84412         npy_int64 val;
84413         PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
84414         if (!tmp) return (npy_int64) -1;
84415         val = __Pyx_PyInt_As_npy_int64(tmp);
84416         Py_DECREF(tmp);
84417         return val;
84418     }
84419 raise_overflow:
84420     PyErr_SetString(PyExc_OverflowError,
84421         "value too large to convert to npy_int64");
84422     return (npy_int64) -1;
84423 raise_neg_overflow:
84424     PyErr_SetString(PyExc_OverflowError,
84425         "can't convert negative value to npy_int64");
84426     return (npy_int64) -1;
84427 }
84428 
84429 /* CIntFromPy */
84430     static CYTHON_INLINE npy_int32 __Pyx_PyInt_As_npy_int32(PyObject *x) {
84431     const npy_int32 neg_one = (npy_int32) ((npy_int32) 0 - (npy_int32) 1), const_zero = (npy_int32) 0;
84432     const int is_unsigned = neg_one > const_zero;
84433 #if PY_MAJOR_VERSION < 3
84434     if (likely(PyInt_Check(x))) {
84435         if (sizeof(npy_int32) < sizeof(long)) {
84436             __PYX_VERIFY_RETURN_INT(npy_int32, long, PyInt_AS_LONG(x))
84437         } else {
84438             long val = PyInt_AS_LONG(x);
84439             if (is_unsigned && unlikely(val < 0)) {
84440                 goto raise_neg_overflow;
84441             }
84442             return (npy_int32) val;
84443         }
84444     } else
84445 #endif
84446     if (likely(PyLong_Check(x))) {
84447         if (is_unsigned) {
84448 #if CYTHON_USE_PYLONG_INTERNALS
84449             const digit* digits = ((PyLongObject*)x)->ob_digit;
84450             switch (Py_SIZE(x)) {
84451                 case  0: return (npy_int32) 0;
84452                 case  1: __PYX_VERIFY_RETURN_INT(npy_int32, digit, digits[0])
84453                 case 2:
84454                     if (8 * sizeof(npy_int32) > 1 * PyLong_SHIFT) {
84455                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84456                             __PYX_VERIFY_RETURN_INT(npy_int32, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84457                         } else if (8 * sizeof(npy_int32) >= 2 * PyLong_SHIFT) {
84458                             return (npy_int32) (((((npy_int32)digits[1]) << PyLong_SHIFT) | (npy_int32)digits[0]));
84459                         }
84460                     }
84461                     break;
84462                 case 3:
84463                     if (8 * sizeof(npy_int32) > 2 * PyLong_SHIFT) {
84464                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84465                             __PYX_VERIFY_RETURN_INT(npy_int32, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84466                         } else if (8 * sizeof(npy_int32) >= 3 * PyLong_SHIFT) {
84467                             return (npy_int32) (((((((npy_int32)digits[2]) << PyLong_SHIFT) | (npy_int32)digits[1]) << PyLong_SHIFT) | (npy_int32)digits[0]));
84468                         }
84469                     }
84470                     break;
84471                 case 4:
84472                     if (8 * sizeof(npy_int32) > 3 * PyLong_SHIFT) {
84473                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84474                             __PYX_VERIFY_RETURN_INT(npy_int32, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84475                         } else if (8 * sizeof(npy_int32) >= 4 * PyLong_SHIFT) {
84476                             return (npy_int32) (((((((((npy_int32)digits[3]) << PyLong_SHIFT) | (npy_int32)digits[2]) << PyLong_SHIFT) | (npy_int32)digits[1]) << PyLong_SHIFT) | (npy_int32)digits[0]));
84477                         }
84478                     }
84479                     break;
84480             }
84481 #endif
84482 #if CYTHON_COMPILING_IN_CPYTHON
84483             if (unlikely(Py_SIZE(x) < 0)) {
84484                 goto raise_neg_overflow;
84485             }
84486 #else
84487             {
84488                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
84489                 if (unlikely(result < 0))
84490                     return (npy_int32) -1;
84491                 if (unlikely(result == 1))
84492                     goto raise_neg_overflow;
84493             }
84494 #endif
84495             if (sizeof(npy_int32) <= sizeof(unsigned long)) {
84496                 __PYX_VERIFY_RETURN_INT_EXC(npy_int32, unsigned long, PyLong_AsUnsignedLong(x))
84497 #ifdef HAVE_LONG_LONG
84498             } else if (sizeof(npy_int32) <= sizeof(unsigned PY_LONG_LONG)) {
84499                 __PYX_VERIFY_RETURN_INT_EXC(npy_int32, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
84500 #endif
84501             }
84502         } else {
84503 #if CYTHON_USE_PYLONG_INTERNALS
84504             const digit* digits = ((PyLongObject*)x)->ob_digit;
84505             switch (Py_SIZE(x)) {
84506                 case  0: return (npy_int32) 0;
84507                 case -1: __PYX_VERIFY_RETURN_INT(npy_int32, sdigit, (sdigit) (-(sdigit)digits[0]))
84508                 case  1: __PYX_VERIFY_RETURN_INT(npy_int32,  digit, +digits[0])
84509                 case -2:
84510                     if (8 * sizeof(npy_int32) - 1 > 1 * PyLong_SHIFT) {
84511                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84512                             __PYX_VERIFY_RETURN_INT(npy_int32, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84513                         } else if (8 * sizeof(npy_int32) - 1 > 2 * PyLong_SHIFT) {
84514                             return (npy_int32) (((npy_int32)-1)*(((((npy_int32)digits[1]) << PyLong_SHIFT) | (npy_int32)digits[0])));
84515                         }
84516                     }
84517                     break;
84518                 case 2:
84519                     if (8 * sizeof(npy_int32) > 1 * PyLong_SHIFT) {
84520                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84521                             __PYX_VERIFY_RETURN_INT(npy_int32, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84522                         } else if (8 * sizeof(npy_int32) - 1 > 2 * PyLong_SHIFT) {
84523                             return (npy_int32) ((((((npy_int32)digits[1]) << PyLong_SHIFT) | (npy_int32)digits[0])));
84524                         }
84525                     }
84526                     break;
84527                 case -3:
84528                     if (8 * sizeof(npy_int32) - 1 > 2 * PyLong_SHIFT) {
84529                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84530                             __PYX_VERIFY_RETURN_INT(npy_int32, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84531                         } else if (8 * sizeof(npy_int32) - 1 > 3 * PyLong_SHIFT) {
84532                             return (npy_int32) (((npy_int32)-1)*(((((((npy_int32)digits[2]) << PyLong_SHIFT) | (npy_int32)digits[1]) << PyLong_SHIFT) | (npy_int32)digits[0])));
84533                         }
84534                     }
84535                     break;
84536                 case 3:
84537                     if (8 * sizeof(npy_int32) > 2 * PyLong_SHIFT) {
84538                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84539                             __PYX_VERIFY_RETURN_INT(npy_int32, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84540                         } else if (8 * sizeof(npy_int32) - 1 > 3 * PyLong_SHIFT) {
84541                             return (npy_int32) ((((((((npy_int32)digits[2]) << PyLong_SHIFT) | (npy_int32)digits[1]) << PyLong_SHIFT) | (npy_int32)digits[0])));
84542                         }
84543                     }
84544                     break;
84545                 case -4:
84546                     if (8 * sizeof(npy_int32) - 1 > 3 * PyLong_SHIFT) {
84547                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84548                             __PYX_VERIFY_RETURN_INT(npy_int32, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84549                         } else if (8 * sizeof(npy_int32) - 1 > 4 * PyLong_SHIFT) {
84550                             return (npy_int32) (((npy_int32)-1)*(((((((((npy_int32)digits[3]) << PyLong_SHIFT) | (npy_int32)digits[2]) << PyLong_SHIFT) | (npy_int32)digits[1]) << PyLong_SHIFT) | (npy_int32)digits[0])));
84551                         }
84552                     }
84553                     break;
84554                 case 4:
84555                     if (8 * sizeof(npy_int32) > 3 * PyLong_SHIFT) {
84556                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84557                             __PYX_VERIFY_RETURN_INT(npy_int32, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84558                         } else if (8 * sizeof(npy_int32) - 1 > 4 * PyLong_SHIFT) {
84559                             return (npy_int32) ((((((((((npy_int32)digits[3]) << PyLong_SHIFT) | (npy_int32)digits[2]) << PyLong_SHIFT) | (npy_int32)digits[1]) << PyLong_SHIFT) | (npy_int32)digits[0])));
84560                         }
84561                     }
84562                     break;
84563             }
84564 #endif
84565             if (sizeof(npy_int32) <= sizeof(long)) {
84566                 __PYX_VERIFY_RETURN_INT_EXC(npy_int32, long, PyLong_AsLong(x))
84567 #ifdef HAVE_LONG_LONG
84568             } else if (sizeof(npy_int32) <= sizeof(PY_LONG_LONG)) {
84569                 __PYX_VERIFY_RETURN_INT_EXC(npy_int32, PY_LONG_LONG, PyLong_AsLongLong(x))
84570 #endif
84571             }
84572         }
84573         {
84574 #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
84575             PyErr_SetString(PyExc_RuntimeError,
84576                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
84577 #else
84578             npy_int32 val;
84579             PyObject *v = __Pyx_PyNumber_IntOrLong(x);
84580  #if PY_MAJOR_VERSION < 3
84581             if (likely(v) && !PyLong_Check(v)) {
84582                 PyObject *tmp = v;
84583                 v = PyNumber_Long(tmp);
84584                 Py_DECREF(tmp);
84585             }
84586  #endif
84587             if (likely(v)) {
84588                 int one = 1; int is_little = (int)*(unsigned char *)&one;
84589                 unsigned char *bytes = (unsigned char *)&val;
84590                 int ret = _PyLong_AsByteArray((PyLongObject *)v,
84591                                               bytes, sizeof(val),
84592                                               is_little, !is_unsigned);
84593                 Py_DECREF(v);
84594                 if (likely(!ret))
84595                     return val;
84596             }
84597 #endif
84598             return (npy_int32) -1;
84599         }
84600     } else {
84601         npy_int32 val;
84602         PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
84603         if (!tmp) return (npy_int32) -1;
84604         val = __Pyx_PyInt_As_npy_int32(tmp);
84605         Py_DECREF(tmp);
84606         return val;
84607     }
84608 raise_overflow:
84609     PyErr_SetString(PyExc_OverflowError,
84610         "value too large to convert to npy_int32");
84611     return (npy_int32) -1;
84612 raise_neg_overflow:
84613     PyErr_SetString(PyExc_OverflowError,
84614         "can't convert negative value to npy_int32");
84615     return (npy_int32) -1;
84616 }
84617 
84618 /* CIntFromPy */
84619     static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
84620     const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
84621     const int is_unsigned = neg_one > const_zero;
84622 #if PY_MAJOR_VERSION < 3
84623     if (likely(PyInt_Check(x))) {
84624         if (sizeof(long) < sizeof(long)) {
84625             __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x))
84626         } else {
84627             long val = PyInt_AS_LONG(x);
84628             if (is_unsigned && unlikely(val < 0)) {
84629                 goto raise_neg_overflow;
84630             }
84631             return (long) val;
84632         }
84633     } else
84634 #endif
84635     if (likely(PyLong_Check(x))) {
84636         if (is_unsigned) {
84637 #if CYTHON_USE_PYLONG_INTERNALS
84638             const digit* digits = ((PyLongObject*)x)->ob_digit;
84639             switch (Py_SIZE(x)) {
84640                 case  0: return (long) 0;
84641                 case  1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0])
84642                 case 2:
84643                     if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
84644                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84645                             __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84646                         } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) {
84647                             return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
84648                         }
84649                     }
84650                     break;
84651                 case 3:
84652                     if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
84653                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84654                             __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84655                         } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) {
84656                             return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
84657                         }
84658                     }
84659                     break;
84660                 case 4:
84661                     if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
84662                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84663                             __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84664                         } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) {
84665                             return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
84666                         }
84667                     }
84668                     break;
84669             }
84670 #endif
84671 #if CYTHON_COMPILING_IN_CPYTHON
84672             if (unlikely(Py_SIZE(x) < 0)) {
84673                 goto raise_neg_overflow;
84674             }
84675 #else
84676             {
84677                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
84678                 if (unlikely(result < 0))
84679                     return (long) -1;
84680                 if (unlikely(result == 1))
84681                     goto raise_neg_overflow;
84682             }
84683 #endif
84684             if (sizeof(long) <= sizeof(unsigned long)) {
84685                 __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
84686 #ifdef HAVE_LONG_LONG
84687             } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
84688                 __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
84689 #endif
84690             }
84691         } else {
84692 #if CYTHON_USE_PYLONG_INTERNALS
84693             const digit* digits = ((PyLongObject*)x)->ob_digit;
84694             switch (Py_SIZE(x)) {
84695                 case  0: return (long) 0;
84696                 case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0]))
84697                 case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +digits[0])
84698                 case -2:
84699                     if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) {
84700                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84701                             __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84702                         } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
84703                             return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
84704                         }
84705                     }
84706                     break;
84707                 case 2:
84708                     if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
84709                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84710                             __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84711                         } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
84712                             return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
84713                         }
84714                     }
84715                     break;
84716                 case -3:
84717                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
84718                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84719                             __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84720                         } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
84721                             return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
84722                         }
84723                     }
84724                     break;
84725                 case 3:
84726                     if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
84727                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84728                             __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84729                         } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
84730                             return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
84731                         }
84732                     }
84733                     break;
84734                 case -4:
84735                     if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
84736                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84737                             __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84738                         } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
84739                             return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
84740                         }
84741                     }
84742                     break;
84743                 case 4:
84744                     if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
84745                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84746                             __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84747                         } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
84748                             return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
84749                         }
84750                     }
84751                     break;
84752             }
84753 #endif
84754             if (sizeof(long) <= sizeof(long)) {
84755                 __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
84756 #ifdef HAVE_LONG_LONG
84757             } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
84758                 __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
84759 #endif
84760             }
84761         }
84762         {
84763 #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
84764             PyErr_SetString(PyExc_RuntimeError,
84765                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
84766 #else
84767             long val;
84768             PyObject *v = __Pyx_PyNumber_IntOrLong(x);
84769  #if PY_MAJOR_VERSION < 3
84770             if (likely(v) && !PyLong_Check(v)) {
84771                 PyObject *tmp = v;
84772                 v = PyNumber_Long(tmp);
84773                 Py_DECREF(tmp);
84774             }
84775  #endif
84776             if (likely(v)) {
84777                 int one = 1; int is_little = (int)*(unsigned char *)&one;
84778                 unsigned char *bytes = (unsigned char *)&val;
84779                 int ret = _PyLong_AsByteArray((PyLongObject *)v,
84780                                               bytes, sizeof(val),
84781                                               is_little, !is_unsigned);
84782                 Py_DECREF(v);
84783                 if (likely(!ret))
84784                     return val;
84785             }
84786 #endif
84787             return (long) -1;
84788         }
84789     } else {
84790         long val;
84791         PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
84792         if (!tmp) return (long) -1;
84793         val = __Pyx_PyInt_As_long(tmp);
84794         Py_DECREF(tmp);
84795         return val;
84796     }
84797 raise_overflow:
84798     PyErr_SetString(PyExc_OverflowError,
84799         "value too large to convert to long");
84800     return (long) -1;
84801 raise_neg_overflow:
84802     PyErr_SetString(PyExc_OverflowError,
84803         "can't convert negative value to long");
84804     return (long) -1;
84805 }
84806 
84807 /* CIntFromPy */
84808     static CYTHON_INLINE npy_uint64 __Pyx_PyInt_As_npy_uint64(PyObject *x) {
84809     const npy_uint64 neg_one = (npy_uint64) ((npy_uint64) 0 - (npy_uint64) 1), const_zero = (npy_uint64) 0;
84810     const int is_unsigned = neg_one > const_zero;
84811 #if PY_MAJOR_VERSION < 3
84812     if (likely(PyInt_Check(x))) {
84813         if (sizeof(npy_uint64) < sizeof(long)) {
84814             __PYX_VERIFY_RETURN_INT(npy_uint64, long, PyInt_AS_LONG(x))
84815         } else {
84816             long val = PyInt_AS_LONG(x);
84817             if (is_unsigned && unlikely(val < 0)) {
84818                 goto raise_neg_overflow;
84819             }
84820             return (npy_uint64) val;
84821         }
84822     } else
84823 #endif
84824     if (likely(PyLong_Check(x))) {
84825         if (is_unsigned) {
84826 #if CYTHON_USE_PYLONG_INTERNALS
84827             const digit* digits = ((PyLongObject*)x)->ob_digit;
84828             switch (Py_SIZE(x)) {
84829                 case  0: return (npy_uint64) 0;
84830                 case  1: __PYX_VERIFY_RETURN_INT(npy_uint64, digit, digits[0])
84831                 case 2:
84832                     if (8 * sizeof(npy_uint64) > 1 * PyLong_SHIFT) {
84833                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84834                             __PYX_VERIFY_RETURN_INT(npy_uint64, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84835                         } else if (8 * sizeof(npy_uint64) >= 2 * PyLong_SHIFT) {
84836                             return (npy_uint64) (((((npy_uint64)digits[1]) << PyLong_SHIFT) | (npy_uint64)digits[0]));
84837                         }
84838                     }
84839                     break;
84840                 case 3:
84841                     if (8 * sizeof(npy_uint64) > 2 * PyLong_SHIFT) {
84842                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84843                             __PYX_VERIFY_RETURN_INT(npy_uint64, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84844                         } else if (8 * sizeof(npy_uint64) >= 3 * PyLong_SHIFT) {
84845                             return (npy_uint64) (((((((npy_uint64)digits[2]) << PyLong_SHIFT) | (npy_uint64)digits[1]) << PyLong_SHIFT) | (npy_uint64)digits[0]));
84846                         }
84847                     }
84848                     break;
84849                 case 4:
84850                     if (8 * sizeof(npy_uint64) > 3 * PyLong_SHIFT) {
84851                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84852                             __PYX_VERIFY_RETURN_INT(npy_uint64, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84853                         } else if (8 * sizeof(npy_uint64) >= 4 * PyLong_SHIFT) {
84854                             return (npy_uint64) (((((((((npy_uint64)digits[3]) << PyLong_SHIFT) | (npy_uint64)digits[2]) << PyLong_SHIFT) | (npy_uint64)digits[1]) << PyLong_SHIFT) | (npy_uint64)digits[0]));
84855                         }
84856                     }
84857                     break;
84858             }
84859 #endif
84860 #if CYTHON_COMPILING_IN_CPYTHON
84861             if (unlikely(Py_SIZE(x) < 0)) {
84862                 goto raise_neg_overflow;
84863             }
84864 #else
84865             {
84866                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
84867                 if (unlikely(result < 0))
84868                     return (npy_uint64) -1;
84869                 if (unlikely(result == 1))
84870                     goto raise_neg_overflow;
84871             }
84872 #endif
84873             if (sizeof(npy_uint64) <= sizeof(unsigned long)) {
84874                 __PYX_VERIFY_RETURN_INT_EXC(npy_uint64, unsigned long, PyLong_AsUnsignedLong(x))
84875 #ifdef HAVE_LONG_LONG
84876             } else if (sizeof(npy_uint64) <= sizeof(unsigned PY_LONG_LONG)) {
84877                 __PYX_VERIFY_RETURN_INT_EXC(npy_uint64, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
84878 #endif
84879             }
84880         } else {
84881 #if CYTHON_USE_PYLONG_INTERNALS
84882             const digit* digits = ((PyLongObject*)x)->ob_digit;
84883             switch (Py_SIZE(x)) {
84884                 case  0: return (npy_uint64) 0;
84885                 case -1: __PYX_VERIFY_RETURN_INT(npy_uint64, sdigit, (sdigit) (-(sdigit)digits[0]))
84886                 case  1: __PYX_VERIFY_RETURN_INT(npy_uint64,  digit, +digits[0])
84887                 case -2:
84888                     if (8 * sizeof(npy_uint64) - 1 > 1 * PyLong_SHIFT) {
84889                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84890                             __PYX_VERIFY_RETURN_INT(npy_uint64, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84891                         } else if (8 * sizeof(npy_uint64) - 1 > 2 * PyLong_SHIFT) {
84892                             return (npy_uint64) (((npy_uint64)-1)*(((((npy_uint64)digits[1]) << PyLong_SHIFT) | (npy_uint64)digits[0])));
84893                         }
84894                     }
84895                     break;
84896                 case 2:
84897                     if (8 * sizeof(npy_uint64) > 1 * PyLong_SHIFT) {
84898                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
84899                             __PYX_VERIFY_RETURN_INT(npy_uint64, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84900                         } else if (8 * sizeof(npy_uint64) - 1 > 2 * PyLong_SHIFT) {
84901                             return (npy_uint64) ((((((npy_uint64)digits[1]) << PyLong_SHIFT) | (npy_uint64)digits[0])));
84902                         }
84903                     }
84904                     break;
84905                 case -3:
84906                     if (8 * sizeof(npy_uint64) - 1 > 2 * PyLong_SHIFT) {
84907                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84908                             __PYX_VERIFY_RETURN_INT(npy_uint64, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84909                         } else if (8 * sizeof(npy_uint64) - 1 > 3 * PyLong_SHIFT) {
84910                             return (npy_uint64) (((npy_uint64)-1)*(((((((npy_uint64)digits[2]) << PyLong_SHIFT) | (npy_uint64)digits[1]) << PyLong_SHIFT) | (npy_uint64)digits[0])));
84911                         }
84912                     }
84913                     break;
84914                 case 3:
84915                     if (8 * sizeof(npy_uint64) > 2 * PyLong_SHIFT) {
84916                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
84917                             __PYX_VERIFY_RETURN_INT(npy_uint64, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84918                         } else if (8 * sizeof(npy_uint64) - 1 > 3 * PyLong_SHIFT) {
84919                             return (npy_uint64) ((((((((npy_uint64)digits[2]) << PyLong_SHIFT) | (npy_uint64)digits[1]) << PyLong_SHIFT) | (npy_uint64)digits[0])));
84920                         }
84921                     }
84922                     break;
84923                 case -4:
84924                     if (8 * sizeof(npy_uint64) - 1 > 3 * PyLong_SHIFT) {
84925                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84926                             __PYX_VERIFY_RETURN_INT(npy_uint64, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84927                         } else if (8 * sizeof(npy_uint64) - 1 > 4 * PyLong_SHIFT) {
84928                             return (npy_uint64) (((npy_uint64)-1)*(((((((((npy_uint64)digits[3]) << PyLong_SHIFT) | (npy_uint64)digits[2]) << PyLong_SHIFT) | (npy_uint64)digits[1]) << PyLong_SHIFT) | (npy_uint64)digits[0])));
84929                         }
84930                     }
84931                     break;
84932                 case 4:
84933                     if (8 * sizeof(npy_uint64) > 3 * PyLong_SHIFT) {
84934                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
84935                             __PYX_VERIFY_RETURN_INT(npy_uint64, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
84936                         } else if (8 * sizeof(npy_uint64) - 1 > 4 * PyLong_SHIFT) {
84937                             return (npy_uint64) ((((((((((npy_uint64)digits[3]) << PyLong_SHIFT) | (npy_uint64)digits[2]) << PyLong_SHIFT) | (npy_uint64)digits[1]) << PyLong_SHIFT) | (npy_uint64)digits[0])));
84938                         }
84939                     }
84940                     break;
84941             }
84942 #endif
84943             if (sizeof(npy_uint64) <= sizeof(long)) {
84944                 __PYX_VERIFY_RETURN_INT_EXC(npy_uint64, long, PyLong_AsLong(x))
84945 #ifdef HAVE_LONG_LONG
84946             } else if (sizeof(npy_uint64) <= sizeof(PY_LONG_LONG)) {
84947                 __PYX_VERIFY_RETURN_INT_EXC(npy_uint64, PY_LONG_LONG, PyLong_AsLongLong(x))
84948 #endif
84949             }
84950         }
84951         {
84952 #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
84953             PyErr_SetString(PyExc_RuntimeError,
84954                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
84955 #else
84956             npy_uint64 val;
84957             PyObject *v = __Pyx_PyNumber_IntOrLong(x);
84958  #if PY_MAJOR_VERSION < 3
84959             if (likely(v) && !PyLong_Check(v)) {
84960                 PyObject *tmp = v;
84961                 v = PyNumber_Long(tmp);
84962                 Py_DECREF(tmp);
84963             }
84964  #endif
84965             if (likely(v)) {
84966                 int one = 1; int is_little = (int)*(unsigned char *)&one;
84967                 unsigned char *bytes = (unsigned char *)&val;
84968                 int ret = _PyLong_AsByteArray((PyLongObject *)v,
84969                                               bytes, sizeof(val),
84970                                               is_little, !is_unsigned);
84971                 Py_DECREF(v);
84972                 if (likely(!ret))
84973                     return val;
84974             }
84975 #endif
84976             return (npy_uint64) -1;
84977         }
84978     } else {
84979         npy_uint64 val;
84980         PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
84981         if (!tmp) return (npy_uint64) -1;
84982         val = __Pyx_PyInt_As_npy_uint64(tmp);
84983         Py_DECREF(tmp);
84984         return val;
84985     }
84986 raise_overflow:
84987     PyErr_SetString(PyExc_OverflowError,
84988         "value too large to convert to npy_uint64");
84989     return (npy_uint64) -1;
84990 raise_neg_overflow:
84991     PyErr_SetString(PyExc_OverflowError,
84992         "can't convert negative value to npy_uint64");
84993     return (npy_uint64) -1;
84994 }
84995 
84996 /* CIntFromPy */
84997     static CYTHON_INLINE npy_uint8 __Pyx_PyInt_As_npy_uint8(PyObject *x) {
84998     const npy_uint8 neg_one = (npy_uint8) ((npy_uint8) 0 - (npy_uint8) 1), const_zero = (npy_uint8) 0;
84999     const int is_unsigned = neg_one > const_zero;
85000 #if PY_MAJOR_VERSION < 3
85001     if (likely(PyInt_Check(x))) {
85002         if (sizeof(npy_uint8) < sizeof(long)) {
85003             __PYX_VERIFY_RETURN_INT(npy_uint8, long, PyInt_AS_LONG(x))
85004         } else {
85005             long val = PyInt_AS_LONG(x);
85006             if (is_unsigned && unlikely(val < 0)) {
85007                 goto raise_neg_overflow;
85008             }
85009             return (npy_uint8) val;
85010         }
85011     } else
85012 #endif
85013     if (likely(PyLong_Check(x))) {
85014         if (is_unsigned) {
85015 #if CYTHON_USE_PYLONG_INTERNALS
85016             const digit* digits = ((PyLongObject*)x)->ob_digit;
85017             switch (Py_SIZE(x)) {
85018                 case  0: return (npy_uint8) 0;
85019                 case  1: __PYX_VERIFY_RETURN_INT(npy_uint8, digit, digits[0])
85020                 case 2:
85021                     if (8 * sizeof(npy_uint8) > 1 * PyLong_SHIFT) {
85022                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85023                             __PYX_VERIFY_RETURN_INT(npy_uint8, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85024                         } else if (8 * sizeof(npy_uint8) >= 2 * PyLong_SHIFT) {
85025                             return (npy_uint8) (((((npy_uint8)digits[1]) << PyLong_SHIFT) | (npy_uint8)digits[0]));
85026                         }
85027                     }
85028                     break;
85029                 case 3:
85030                     if (8 * sizeof(npy_uint8) > 2 * PyLong_SHIFT) {
85031                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85032                             __PYX_VERIFY_RETURN_INT(npy_uint8, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85033                         } else if (8 * sizeof(npy_uint8) >= 3 * PyLong_SHIFT) {
85034                             return (npy_uint8) (((((((npy_uint8)digits[2]) << PyLong_SHIFT) | (npy_uint8)digits[1]) << PyLong_SHIFT) | (npy_uint8)digits[0]));
85035                         }
85036                     }
85037                     break;
85038                 case 4:
85039                     if (8 * sizeof(npy_uint8) > 3 * PyLong_SHIFT) {
85040                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85041                             __PYX_VERIFY_RETURN_INT(npy_uint8, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85042                         } else if (8 * sizeof(npy_uint8) >= 4 * PyLong_SHIFT) {
85043                             return (npy_uint8) (((((((((npy_uint8)digits[3]) << PyLong_SHIFT) | (npy_uint8)digits[2]) << PyLong_SHIFT) | (npy_uint8)digits[1]) << PyLong_SHIFT) | (npy_uint8)digits[0]));
85044                         }
85045                     }
85046                     break;
85047             }
85048 #endif
85049 #if CYTHON_COMPILING_IN_CPYTHON
85050             if (unlikely(Py_SIZE(x) < 0)) {
85051                 goto raise_neg_overflow;
85052             }
85053 #else
85054             {
85055                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
85056                 if (unlikely(result < 0))
85057                     return (npy_uint8) -1;
85058                 if (unlikely(result == 1))
85059                     goto raise_neg_overflow;
85060             }
85061 #endif
85062             if (sizeof(npy_uint8) <= sizeof(unsigned long)) {
85063                 __PYX_VERIFY_RETURN_INT_EXC(npy_uint8, unsigned long, PyLong_AsUnsignedLong(x))
85064 #ifdef HAVE_LONG_LONG
85065             } else if (sizeof(npy_uint8) <= sizeof(unsigned PY_LONG_LONG)) {
85066                 __PYX_VERIFY_RETURN_INT_EXC(npy_uint8, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
85067 #endif
85068             }
85069         } else {
85070 #if CYTHON_USE_PYLONG_INTERNALS
85071             const digit* digits = ((PyLongObject*)x)->ob_digit;
85072             switch (Py_SIZE(x)) {
85073                 case  0: return (npy_uint8) 0;
85074                 case -1: __PYX_VERIFY_RETURN_INT(npy_uint8, sdigit, (sdigit) (-(sdigit)digits[0]))
85075                 case  1: __PYX_VERIFY_RETURN_INT(npy_uint8,  digit, +digits[0])
85076                 case -2:
85077                     if (8 * sizeof(npy_uint8) - 1 > 1 * PyLong_SHIFT) {
85078                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85079                             __PYX_VERIFY_RETURN_INT(npy_uint8, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85080                         } else if (8 * sizeof(npy_uint8) - 1 > 2 * PyLong_SHIFT) {
85081                             return (npy_uint8) (((npy_uint8)-1)*(((((npy_uint8)digits[1]) << PyLong_SHIFT) | (npy_uint8)digits[0])));
85082                         }
85083                     }
85084                     break;
85085                 case 2:
85086                     if (8 * sizeof(npy_uint8) > 1 * PyLong_SHIFT) {
85087                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85088                             __PYX_VERIFY_RETURN_INT(npy_uint8, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85089                         } else if (8 * sizeof(npy_uint8) - 1 > 2 * PyLong_SHIFT) {
85090                             return (npy_uint8) ((((((npy_uint8)digits[1]) << PyLong_SHIFT) | (npy_uint8)digits[0])));
85091                         }
85092                     }
85093                     break;
85094                 case -3:
85095                     if (8 * sizeof(npy_uint8) - 1 > 2 * PyLong_SHIFT) {
85096                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85097                             __PYX_VERIFY_RETURN_INT(npy_uint8, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85098                         } else if (8 * sizeof(npy_uint8) - 1 > 3 * PyLong_SHIFT) {
85099                             return (npy_uint8) (((npy_uint8)-1)*(((((((npy_uint8)digits[2]) << PyLong_SHIFT) | (npy_uint8)digits[1]) << PyLong_SHIFT) | (npy_uint8)digits[0])));
85100                         }
85101                     }
85102                     break;
85103                 case 3:
85104                     if (8 * sizeof(npy_uint8) > 2 * PyLong_SHIFT) {
85105                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85106                             __PYX_VERIFY_RETURN_INT(npy_uint8, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85107                         } else if (8 * sizeof(npy_uint8) - 1 > 3 * PyLong_SHIFT) {
85108                             return (npy_uint8) ((((((((npy_uint8)digits[2]) << PyLong_SHIFT) | (npy_uint8)digits[1]) << PyLong_SHIFT) | (npy_uint8)digits[0])));
85109                         }
85110                     }
85111                     break;
85112                 case -4:
85113                     if (8 * sizeof(npy_uint8) - 1 > 3 * PyLong_SHIFT) {
85114                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85115                             __PYX_VERIFY_RETURN_INT(npy_uint8, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85116                         } else if (8 * sizeof(npy_uint8) - 1 > 4 * PyLong_SHIFT) {
85117                             return (npy_uint8) (((npy_uint8)-1)*(((((((((npy_uint8)digits[3]) << PyLong_SHIFT) | (npy_uint8)digits[2]) << PyLong_SHIFT) | (npy_uint8)digits[1]) << PyLong_SHIFT) | (npy_uint8)digits[0])));
85118                         }
85119                     }
85120                     break;
85121                 case 4:
85122                     if (8 * sizeof(npy_uint8) > 3 * PyLong_SHIFT) {
85123                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85124                             __PYX_VERIFY_RETURN_INT(npy_uint8, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85125                         } else if (8 * sizeof(npy_uint8) - 1 > 4 * PyLong_SHIFT) {
85126                             return (npy_uint8) ((((((((((npy_uint8)digits[3]) << PyLong_SHIFT) | (npy_uint8)digits[2]) << PyLong_SHIFT) | (npy_uint8)digits[1]) << PyLong_SHIFT) | (npy_uint8)digits[0])));
85127                         }
85128                     }
85129                     break;
85130             }
85131 #endif
85132             if (sizeof(npy_uint8) <= sizeof(long)) {
85133                 __PYX_VERIFY_RETURN_INT_EXC(npy_uint8, long, PyLong_AsLong(x))
85134 #ifdef HAVE_LONG_LONG
85135             } else if (sizeof(npy_uint8) <= sizeof(PY_LONG_LONG)) {
85136                 __PYX_VERIFY_RETURN_INT_EXC(npy_uint8, PY_LONG_LONG, PyLong_AsLongLong(x))
85137 #endif
85138             }
85139         }
85140         {
85141 #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
85142             PyErr_SetString(PyExc_RuntimeError,
85143                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
85144 #else
85145             npy_uint8 val;
85146             PyObject *v = __Pyx_PyNumber_IntOrLong(x);
85147  #if PY_MAJOR_VERSION < 3
85148             if (likely(v) && !PyLong_Check(v)) {
85149                 PyObject *tmp = v;
85150                 v = PyNumber_Long(tmp);
85151                 Py_DECREF(tmp);
85152             }
85153  #endif
85154             if (likely(v)) {
85155                 int one = 1; int is_little = (int)*(unsigned char *)&one;
85156                 unsigned char *bytes = (unsigned char *)&val;
85157                 int ret = _PyLong_AsByteArray((PyLongObject *)v,
85158                                               bytes, sizeof(val),
85159                                               is_little, !is_unsigned);
85160                 Py_DECREF(v);
85161                 if (likely(!ret))
85162                     return val;
85163             }
85164 #endif
85165             return (npy_uint8) -1;
85166         }
85167     } else {
85168         npy_uint8 val;
85169         PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
85170         if (!tmp) return (npy_uint8) -1;
85171         val = __Pyx_PyInt_As_npy_uint8(tmp);
85172         Py_DECREF(tmp);
85173         return val;
85174     }
85175 raise_overflow:
85176     PyErr_SetString(PyExc_OverflowError,
85177         "value too large to convert to npy_uint8");
85178     return (npy_uint8) -1;
85179 raise_neg_overflow:
85180     PyErr_SetString(PyExc_OverflowError,
85181         "can't convert negative value to npy_uint8");
85182     return (npy_uint8) -1;
85183 }
85184 
85185 /* CIntFromPy */
85186     static CYTHON_INLINE Py_intptr_t __Pyx_PyInt_As_Py_intptr_t(PyObject *x) {
85187     const Py_intptr_t neg_one = (Py_intptr_t) ((Py_intptr_t) 0 - (Py_intptr_t) 1), const_zero = (Py_intptr_t) 0;
85188     const int is_unsigned = neg_one > const_zero;
85189 #if PY_MAJOR_VERSION < 3
85190     if (likely(PyInt_Check(x))) {
85191         if (sizeof(Py_intptr_t) < sizeof(long)) {
85192             __PYX_VERIFY_RETURN_INT(Py_intptr_t, long, PyInt_AS_LONG(x))
85193         } else {
85194             long val = PyInt_AS_LONG(x);
85195             if (is_unsigned && unlikely(val < 0)) {
85196                 goto raise_neg_overflow;
85197             }
85198             return (Py_intptr_t) val;
85199         }
85200     } else
85201 #endif
85202     if (likely(PyLong_Check(x))) {
85203         if (is_unsigned) {
85204 #if CYTHON_USE_PYLONG_INTERNALS
85205             const digit* digits = ((PyLongObject*)x)->ob_digit;
85206             switch (Py_SIZE(x)) {
85207                 case  0: return (Py_intptr_t) 0;
85208                 case  1: __PYX_VERIFY_RETURN_INT(Py_intptr_t, digit, digits[0])
85209                 case 2:
85210                     if (8 * sizeof(Py_intptr_t) > 1 * PyLong_SHIFT) {
85211                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85212                             __PYX_VERIFY_RETURN_INT(Py_intptr_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85213                         } else if (8 * sizeof(Py_intptr_t) >= 2 * PyLong_SHIFT) {
85214                             return (Py_intptr_t) (((((Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0]));
85215                         }
85216                     }
85217                     break;
85218                 case 3:
85219                     if (8 * sizeof(Py_intptr_t) > 2 * PyLong_SHIFT) {
85220                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85221                             __PYX_VERIFY_RETURN_INT(Py_intptr_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85222                         } else if (8 * sizeof(Py_intptr_t) >= 3 * PyLong_SHIFT) {
85223                             return (Py_intptr_t) (((((((Py_intptr_t)digits[2]) << PyLong_SHIFT) | (Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0]));
85224                         }
85225                     }
85226                     break;
85227                 case 4:
85228                     if (8 * sizeof(Py_intptr_t) > 3 * PyLong_SHIFT) {
85229                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85230                             __PYX_VERIFY_RETURN_INT(Py_intptr_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85231                         } else if (8 * sizeof(Py_intptr_t) >= 4 * PyLong_SHIFT) {
85232                             return (Py_intptr_t) (((((((((Py_intptr_t)digits[3]) << PyLong_SHIFT) | (Py_intptr_t)digits[2]) << PyLong_SHIFT) | (Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0]));
85233                         }
85234                     }
85235                     break;
85236             }
85237 #endif
85238 #if CYTHON_COMPILING_IN_CPYTHON
85239             if (unlikely(Py_SIZE(x) < 0)) {
85240                 goto raise_neg_overflow;
85241             }
85242 #else
85243             {
85244                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
85245                 if (unlikely(result < 0))
85246                     return (Py_intptr_t) -1;
85247                 if (unlikely(result == 1))
85248                     goto raise_neg_overflow;
85249             }
85250 #endif
85251             if (sizeof(Py_intptr_t) <= sizeof(unsigned long)) {
85252                 __PYX_VERIFY_RETURN_INT_EXC(Py_intptr_t, unsigned long, PyLong_AsUnsignedLong(x))
85253 #ifdef HAVE_LONG_LONG
85254             } else if (sizeof(Py_intptr_t) <= sizeof(unsigned PY_LONG_LONG)) {
85255                 __PYX_VERIFY_RETURN_INT_EXC(Py_intptr_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
85256 #endif
85257             }
85258         } else {
85259 #if CYTHON_USE_PYLONG_INTERNALS
85260             const digit* digits = ((PyLongObject*)x)->ob_digit;
85261             switch (Py_SIZE(x)) {
85262                 case  0: return (Py_intptr_t) 0;
85263                 case -1: __PYX_VERIFY_RETURN_INT(Py_intptr_t, sdigit, (sdigit) (-(sdigit)digits[0]))
85264                 case  1: __PYX_VERIFY_RETURN_INT(Py_intptr_t,  digit, +digits[0])
85265                 case -2:
85266                     if (8 * sizeof(Py_intptr_t) - 1 > 1 * PyLong_SHIFT) {
85267                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85268                             __PYX_VERIFY_RETURN_INT(Py_intptr_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85269                         } else if (8 * sizeof(Py_intptr_t) - 1 > 2 * PyLong_SHIFT) {
85270                             return (Py_intptr_t) (((Py_intptr_t)-1)*(((((Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0])));
85271                         }
85272                     }
85273                     break;
85274                 case 2:
85275                     if (8 * sizeof(Py_intptr_t) > 1 * PyLong_SHIFT) {
85276                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85277                             __PYX_VERIFY_RETURN_INT(Py_intptr_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85278                         } else if (8 * sizeof(Py_intptr_t) - 1 > 2 * PyLong_SHIFT) {
85279                             return (Py_intptr_t) ((((((Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0])));
85280                         }
85281                     }
85282                     break;
85283                 case -3:
85284                     if (8 * sizeof(Py_intptr_t) - 1 > 2 * PyLong_SHIFT) {
85285                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85286                             __PYX_VERIFY_RETURN_INT(Py_intptr_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85287                         } else if (8 * sizeof(Py_intptr_t) - 1 > 3 * PyLong_SHIFT) {
85288                             return (Py_intptr_t) (((Py_intptr_t)-1)*(((((((Py_intptr_t)digits[2]) << PyLong_SHIFT) | (Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0])));
85289                         }
85290                     }
85291                     break;
85292                 case 3:
85293                     if (8 * sizeof(Py_intptr_t) > 2 * PyLong_SHIFT) {
85294                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85295                             __PYX_VERIFY_RETURN_INT(Py_intptr_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85296                         } else if (8 * sizeof(Py_intptr_t) - 1 > 3 * PyLong_SHIFT) {
85297                             return (Py_intptr_t) ((((((((Py_intptr_t)digits[2]) << PyLong_SHIFT) | (Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0])));
85298                         }
85299                     }
85300                     break;
85301                 case -4:
85302                     if (8 * sizeof(Py_intptr_t) - 1 > 3 * PyLong_SHIFT) {
85303                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85304                             __PYX_VERIFY_RETURN_INT(Py_intptr_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85305                         } else if (8 * sizeof(Py_intptr_t) - 1 > 4 * PyLong_SHIFT) {
85306                             return (Py_intptr_t) (((Py_intptr_t)-1)*(((((((((Py_intptr_t)digits[3]) << PyLong_SHIFT) | (Py_intptr_t)digits[2]) << PyLong_SHIFT) | (Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0])));
85307                         }
85308                     }
85309                     break;
85310                 case 4:
85311                     if (8 * sizeof(Py_intptr_t) > 3 * PyLong_SHIFT) {
85312                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85313                             __PYX_VERIFY_RETURN_INT(Py_intptr_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85314                         } else if (8 * sizeof(Py_intptr_t) - 1 > 4 * PyLong_SHIFT) {
85315                             return (Py_intptr_t) ((((((((((Py_intptr_t)digits[3]) << PyLong_SHIFT) | (Py_intptr_t)digits[2]) << PyLong_SHIFT) | (Py_intptr_t)digits[1]) << PyLong_SHIFT) | (Py_intptr_t)digits[0])));
85316                         }
85317                     }
85318                     break;
85319             }
85320 #endif
85321             if (sizeof(Py_intptr_t) <= sizeof(long)) {
85322                 __PYX_VERIFY_RETURN_INT_EXC(Py_intptr_t, long, PyLong_AsLong(x))
85323 #ifdef HAVE_LONG_LONG
85324             } else if (sizeof(Py_intptr_t) <= sizeof(PY_LONG_LONG)) {
85325                 __PYX_VERIFY_RETURN_INT_EXC(Py_intptr_t, PY_LONG_LONG, PyLong_AsLongLong(x))
85326 #endif
85327             }
85328         }
85329         {
85330 #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
85331             PyErr_SetString(PyExc_RuntimeError,
85332                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
85333 #else
85334             Py_intptr_t val;
85335             PyObject *v = __Pyx_PyNumber_IntOrLong(x);
85336  #if PY_MAJOR_VERSION < 3
85337             if (likely(v) && !PyLong_Check(v)) {
85338                 PyObject *tmp = v;
85339                 v = PyNumber_Long(tmp);
85340                 Py_DECREF(tmp);
85341             }
85342  #endif
85343             if (likely(v)) {
85344                 int one = 1; int is_little = (int)*(unsigned char *)&one;
85345                 unsigned char *bytes = (unsigned char *)&val;
85346                 int ret = _PyLong_AsByteArray((PyLongObject *)v,
85347                                               bytes, sizeof(val),
85348                                               is_little, !is_unsigned);
85349                 Py_DECREF(v);
85350                 if (likely(!ret))
85351                     return val;
85352             }
85353 #endif
85354             return (Py_intptr_t) -1;
85355         }
85356     } else {
85357         Py_intptr_t val;
85358         PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
85359         if (!tmp) return (Py_intptr_t) -1;
85360         val = __Pyx_PyInt_As_Py_intptr_t(tmp);
85361         Py_DECREF(tmp);
85362         return val;
85363     }
85364 raise_overflow:
85365     PyErr_SetString(PyExc_OverflowError,
85366         "value too large to convert to Py_intptr_t");
85367     return (Py_intptr_t) -1;
85368 raise_neg_overflow:
85369     PyErr_SetString(PyExc_OverflowError,
85370         "can't convert negative value to Py_intptr_t");
85371     return (Py_intptr_t) -1;
85372 }
85373 
85374 /* BytesContains */
85375     static CYTHON_INLINE int __Pyx_BytesContains(PyObject* bytes, char character) {
85376     const Py_ssize_t length = PyBytes_GET_SIZE(bytes);
85377     char* char_start = PyBytes_AS_STRING(bytes);
85378     return memchr(char_start, (unsigned char)character, (size_t)length) != NULL;
85379 }
85380 
85381 /* CIntFromPy */
85382     static CYTHON_INLINE npy_uint32 __Pyx_PyInt_As_npy_uint32(PyObject *x) {
85383     const npy_uint32 neg_one = (npy_uint32) ((npy_uint32) 0 - (npy_uint32) 1), const_zero = (npy_uint32) 0;
85384     const int is_unsigned = neg_one > const_zero;
85385 #if PY_MAJOR_VERSION < 3
85386     if (likely(PyInt_Check(x))) {
85387         if (sizeof(npy_uint32) < sizeof(long)) {
85388             __PYX_VERIFY_RETURN_INT(npy_uint32, long, PyInt_AS_LONG(x))
85389         } else {
85390             long val = PyInt_AS_LONG(x);
85391             if (is_unsigned && unlikely(val < 0)) {
85392                 goto raise_neg_overflow;
85393             }
85394             return (npy_uint32) val;
85395         }
85396     } else
85397 #endif
85398     if (likely(PyLong_Check(x))) {
85399         if (is_unsigned) {
85400 #if CYTHON_USE_PYLONG_INTERNALS
85401             const digit* digits = ((PyLongObject*)x)->ob_digit;
85402             switch (Py_SIZE(x)) {
85403                 case  0: return (npy_uint32) 0;
85404                 case  1: __PYX_VERIFY_RETURN_INT(npy_uint32, digit, digits[0])
85405                 case 2:
85406                     if (8 * sizeof(npy_uint32) > 1 * PyLong_SHIFT) {
85407                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85408                             __PYX_VERIFY_RETURN_INT(npy_uint32, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85409                         } else if (8 * sizeof(npy_uint32) >= 2 * PyLong_SHIFT) {
85410                             return (npy_uint32) (((((npy_uint32)digits[1]) << PyLong_SHIFT) | (npy_uint32)digits[0]));
85411                         }
85412                     }
85413                     break;
85414                 case 3:
85415                     if (8 * sizeof(npy_uint32) > 2 * PyLong_SHIFT) {
85416                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85417                             __PYX_VERIFY_RETURN_INT(npy_uint32, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85418                         } else if (8 * sizeof(npy_uint32) >= 3 * PyLong_SHIFT) {
85419                             return (npy_uint32) (((((((npy_uint32)digits[2]) << PyLong_SHIFT) | (npy_uint32)digits[1]) << PyLong_SHIFT) | (npy_uint32)digits[0]));
85420                         }
85421                     }
85422                     break;
85423                 case 4:
85424                     if (8 * sizeof(npy_uint32) > 3 * PyLong_SHIFT) {
85425                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85426                             __PYX_VERIFY_RETURN_INT(npy_uint32, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85427                         } else if (8 * sizeof(npy_uint32) >= 4 * PyLong_SHIFT) {
85428                             return (npy_uint32) (((((((((npy_uint32)digits[3]) << PyLong_SHIFT) | (npy_uint32)digits[2]) << PyLong_SHIFT) | (npy_uint32)digits[1]) << PyLong_SHIFT) | (npy_uint32)digits[0]));
85429                         }
85430                     }
85431                     break;
85432             }
85433 #endif
85434 #if CYTHON_COMPILING_IN_CPYTHON
85435             if (unlikely(Py_SIZE(x) < 0)) {
85436                 goto raise_neg_overflow;
85437             }
85438 #else
85439             {
85440                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
85441                 if (unlikely(result < 0))
85442                     return (npy_uint32) -1;
85443                 if (unlikely(result == 1))
85444                     goto raise_neg_overflow;
85445             }
85446 #endif
85447             if (sizeof(npy_uint32) <= sizeof(unsigned long)) {
85448                 __PYX_VERIFY_RETURN_INT_EXC(npy_uint32, unsigned long, PyLong_AsUnsignedLong(x))
85449 #ifdef HAVE_LONG_LONG
85450             } else if (sizeof(npy_uint32) <= sizeof(unsigned PY_LONG_LONG)) {
85451                 __PYX_VERIFY_RETURN_INT_EXC(npy_uint32, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
85452 #endif
85453             }
85454         } else {
85455 #if CYTHON_USE_PYLONG_INTERNALS
85456             const digit* digits = ((PyLongObject*)x)->ob_digit;
85457             switch (Py_SIZE(x)) {
85458                 case  0: return (npy_uint32) 0;
85459                 case -1: __PYX_VERIFY_RETURN_INT(npy_uint32, sdigit, (sdigit) (-(sdigit)digits[0]))
85460                 case  1: __PYX_VERIFY_RETURN_INT(npy_uint32,  digit, +digits[0])
85461                 case -2:
85462                     if (8 * sizeof(npy_uint32) - 1 > 1 * PyLong_SHIFT) {
85463                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85464                             __PYX_VERIFY_RETURN_INT(npy_uint32, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85465                         } else if (8 * sizeof(npy_uint32) - 1 > 2 * PyLong_SHIFT) {
85466                             return (npy_uint32) (((npy_uint32)-1)*(((((npy_uint32)digits[1]) << PyLong_SHIFT) | (npy_uint32)digits[0])));
85467                         }
85468                     }
85469                     break;
85470                 case 2:
85471                     if (8 * sizeof(npy_uint32) > 1 * PyLong_SHIFT) {
85472                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85473                             __PYX_VERIFY_RETURN_INT(npy_uint32, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85474                         } else if (8 * sizeof(npy_uint32) - 1 > 2 * PyLong_SHIFT) {
85475                             return (npy_uint32) ((((((npy_uint32)digits[1]) << PyLong_SHIFT) | (npy_uint32)digits[0])));
85476                         }
85477                     }
85478                     break;
85479                 case -3:
85480                     if (8 * sizeof(npy_uint32) - 1 > 2 * PyLong_SHIFT) {
85481                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85482                             __PYX_VERIFY_RETURN_INT(npy_uint32, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85483                         } else if (8 * sizeof(npy_uint32) - 1 > 3 * PyLong_SHIFT) {
85484                             return (npy_uint32) (((npy_uint32)-1)*(((((((npy_uint32)digits[2]) << PyLong_SHIFT) | (npy_uint32)digits[1]) << PyLong_SHIFT) | (npy_uint32)digits[0])));
85485                         }
85486                     }
85487                     break;
85488                 case 3:
85489                     if (8 * sizeof(npy_uint32) > 2 * PyLong_SHIFT) {
85490                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85491                             __PYX_VERIFY_RETURN_INT(npy_uint32, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85492                         } else if (8 * sizeof(npy_uint32) - 1 > 3 * PyLong_SHIFT) {
85493                             return (npy_uint32) ((((((((npy_uint32)digits[2]) << PyLong_SHIFT) | (npy_uint32)digits[1]) << PyLong_SHIFT) | (npy_uint32)digits[0])));
85494                         }
85495                     }
85496                     break;
85497                 case -4:
85498                     if (8 * sizeof(npy_uint32) - 1 > 3 * PyLong_SHIFT) {
85499                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85500                             __PYX_VERIFY_RETURN_INT(npy_uint32, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85501                         } else if (8 * sizeof(npy_uint32) - 1 > 4 * PyLong_SHIFT) {
85502                             return (npy_uint32) (((npy_uint32)-1)*(((((((((npy_uint32)digits[3]) << PyLong_SHIFT) | (npy_uint32)digits[2]) << PyLong_SHIFT) | (npy_uint32)digits[1]) << PyLong_SHIFT) | (npy_uint32)digits[0])));
85503                         }
85504                     }
85505                     break;
85506                 case 4:
85507                     if (8 * sizeof(npy_uint32) > 3 * PyLong_SHIFT) {
85508                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85509                             __PYX_VERIFY_RETURN_INT(npy_uint32, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85510                         } else if (8 * sizeof(npy_uint32) - 1 > 4 * PyLong_SHIFT) {
85511                             return (npy_uint32) ((((((((((npy_uint32)digits[3]) << PyLong_SHIFT) | (npy_uint32)digits[2]) << PyLong_SHIFT) | (npy_uint32)digits[1]) << PyLong_SHIFT) | (npy_uint32)digits[0])));
85512                         }
85513                     }
85514                     break;
85515             }
85516 #endif
85517             if (sizeof(npy_uint32) <= sizeof(long)) {
85518                 __PYX_VERIFY_RETURN_INT_EXC(npy_uint32, long, PyLong_AsLong(x))
85519 #ifdef HAVE_LONG_LONG
85520             } else if (sizeof(npy_uint32) <= sizeof(PY_LONG_LONG)) {
85521                 __PYX_VERIFY_RETURN_INT_EXC(npy_uint32, PY_LONG_LONG, PyLong_AsLongLong(x))
85522 #endif
85523             }
85524         }
85525         {
85526 #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
85527             PyErr_SetString(PyExc_RuntimeError,
85528                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
85529 #else
85530             npy_uint32 val;
85531             PyObject *v = __Pyx_PyNumber_IntOrLong(x);
85532  #if PY_MAJOR_VERSION < 3
85533             if (likely(v) && !PyLong_Check(v)) {
85534                 PyObject *tmp = v;
85535                 v = PyNumber_Long(tmp);
85536                 Py_DECREF(tmp);
85537             }
85538  #endif
85539             if (likely(v)) {
85540                 int one = 1; int is_little = (int)*(unsigned char *)&one;
85541                 unsigned char *bytes = (unsigned char *)&val;
85542                 int ret = _PyLong_AsByteArray((PyLongObject *)v,
85543                                               bytes, sizeof(val),
85544                                               is_little, !is_unsigned);
85545                 Py_DECREF(v);
85546                 if (likely(!ret))
85547                     return val;
85548             }
85549 #endif
85550             return (npy_uint32) -1;
85551         }
85552     } else {
85553         npy_uint32 val;
85554         PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
85555         if (!tmp) return (npy_uint32) -1;
85556         val = __Pyx_PyInt_As_npy_uint32(tmp);
85557         Py_DECREF(tmp);
85558         return val;
85559     }
85560 raise_overflow:
85561     PyErr_SetString(PyExc_OverflowError,
85562         "value too large to convert to npy_uint32");
85563     return (npy_uint32) -1;
85564 raise_neg_overflow:
85565     PyErr_SetString(PyExc_OverflowError,
85566         "can't convert negative value to npy_uint32");
85567     return (npy_uint32) -1;
85568 }
85569 
85570 /* PrintOne */
85571     #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION < 3
85572 static int __Pyx_PrintOne(PyObject* f, PyObject *o) {
85573     if (!f) {
85574         if (!(f = __Pyx_GetStdout()))
85575             return -1;
85576     }
85577     Py_INCREF(f);
85578     if (PyFile_SoftSpace(f, 0)) {
85579         if (PyFile_WriteString(" ", f) < 0)
85580             goto error;
85581     }
85582     if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0)
85583         goto error;
85584     if (PyFile_WriteString("\n", f) < 0)
85585         goto error;
85586     Py_DECREF(f);
85587     return 0;
85588 error:
85589     Py_DECREF(f);
85590     return -1;
85591     /* the line below is just to avoid C compiler
85592      * warnings about unused functions */
85593     return __Pyx_Print(f, NULL, 0);
85594 }
85595 #else
85596 static int __Pyx_PrintOne(PyObject* stream, PyObject *o) {
85597     int res;
85598     PyObject* arg_tuple = PyTuple_Pack(1, o);
85599     if (unlikely(!arg_tuple))
85600         return -1;
85601     res = __Pyx_Print(stream, arg_tuple, 1);
85602     Py_DECREF(arg_tuple);
85603     return res;
85604 }
85605 #endif
85606 
85607 /* ImportNumPyArray */
85608     static PyObject* __Pyx__ImportNumPyArray(void) {
85609     PyObject *numpy_module, *ndarray_object = NULL;
85610     numpy_module = __Pyx_Import(__pyx_n_s_numpy, NULL, 0);
85611     if (likely(numpy_module)) {
85612         ndarray_object = PyObject_GetAttrString(numpy_module, "ndarray");
85613         Py_DECREF(numpy_module);
85614     }
85615     if (unlikely(!ndarray_object)) {
85616         PyErr_Clear();
85617     }
85618     if (unlikely(!ndarray_object || !PyObject_TypeCheck(ndarray_object, &PyType_Type))) {
85619         Py_XDECREF(ndarray_object);
85620         Py_INCREF(Py_None);
85621         ndarray_object = Py_None;
85622     }
85623     return ndarray_object;
85624 }
85625 static CYTHON_INLINE PyObject* __Pyx_ImportNumPyArrayTypeIfAvailable(void) {
85626     if (unlikely(!__pyx_numpy_ndarray)) {
85627         __pyx_numpy_ndarray = __Pyx__ImportNumPyArray();
85628     }
85629     Py_INCREF(__pyx_numpy_ndarray);
85630     return __pyx_numpy_ndarray;
85631 }
85632 
85633 /* CIntFromPy */
85634     static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
85635     const size_t neg_one = (size_t) ((size_t) 0 - (size_t) 1), const_zero = (size_t) 0;
85636     const int is_unsigned = neg_one > const_zero;
85637 #if PY_MAJOR_VERSION < 3
85638     if (likely(PyInt_Check(x))) {
85639         if (sizeof(size_t) < sizeof(long)) {
85640             __PYX_VERIFY_RETURN_INT(size_t, long, PyInt_AS_LONG(x))
85641         } else {
85642             long val = PyInt_AS_LONG(x);
85643             if (is_unsigned && unlikely(val < 0)) {
85644                 goto raise_neg_overflow;
85645             }
85646             return (size_t) val;
85647         }
85648     } else
85649 #endif
85650     if (likely(PyLong_Check(x))) {
85651         if (is_unsigned) {
85652 #if CYTHON_USE_PYLONG_INTERNALS
85653             const digit* digits = ((PyLongObject*)x)->ob_digit;
85654             switch (Py_SIZE(x)) {
85655                 case  0: return (size_t) 0;
85656                 case  1: __PYX_VERIFY_RETURN_INT(size_t, digit, digits[0])
85657                 case 2:
85658                     if (8 * sizeof(size_t) > 1 * PyLong_SHIFT) {
85659                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85660                             __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85661                         } else if (8 * sizeof(size_t) >= 2 * PyLong_SHIFT) {
85662                             return (size_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
85663                         }
85664                     }
85665                     break;
85666                 case 3:
85667                     if (8 * sizeof(size_t) > 2 * PyLong_SHIFT) {
85668                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85669                             __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85670                         } else if (8 * sizeof(size_t) >= 3 * PyLong_SHIFT) {
85671                             return (size_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
85672                         }
85673                     }
85674                     break;
85675                 case 4:
85676                     if (8 * sizeof(size_t) > 3 * PyLong_SHIFT) {
85677                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85678                             __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85679                         } else if (8 * sizeof(size_t) >= 4 * PyLong_SHIFT) {
85680                             return (size_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
85681                         }
85682                     }
85683                     break;
85684             }
85685 #endif
85686 #if CYTHON_COMPILING_IN_CPYTHON
85687             if (unlikely(Py_SIZE(x) < 0)) {
85688                 goto raise_neg_overflow;
85689             }
85690 #else
85691             {
85692                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
85693                 if (unlikely(result < 0))
85694                     return (size_t) -1;
85695                 if (unlikely(result == 1))
85696                     goto raise_neg_overflow;
85697             }
85698 #endif
85699             if (sizeof(size_t) <= sizeof(unsigned long)) {
85700                 __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned long, PyLong_AsUnsignedLong(x))
85701 #ifdef HAVE_LONG_LONG
85702             } else if (sizeof(size_t) <= sizeof(unsigned PY_LONG_LONG)) {
85703                 __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
85704 #endif
85705             }
85706         } else {
85707 #if CYTHON_USE_PYLONG_INTERNALS
85708             const digit* digits = ((PyLongObject*)x)->ob_digit;
85709             switch (Py_SIZE(x)) {
85710                 case  0: return (size_t) 0;
85711                 case -1: __PYX_VERIFY_RETURN_INT(size_t, sdigit, (sdigit) (-(sdigit)digits[0]))
85712                 case  1: __PYX_VERIFY_RETURN_INT(size_t,  digit, +digits[0])
85713                 case -2:
85714                     if (8 * sizeof(size_t) - 1 > 1 * PyLong_SHIFT) {
85715                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85716                             __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85717                         } else if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) {
85718                             return (size_t) (((size_t)-1)*(((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
85719                         }
85720                     }
85721                     break;
85722                 case 2:
85723                     if (8 * sizeof(size_t) > 1 * PyLong_SHIFT) {
85724                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85725                             __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85726                         } else if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) {
85727                             return (size_t) ((((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
85728                         }
85729                     }
85730                     break;
85731                 case -3:
85732                     if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) {
85733                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85734                             __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85735                         } else if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) {
85736                             return (size_t) (((size_t)-1)*(((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
85737                         }
85738                     }
85739                     break;
85740                 case 3:
85741                     if (8 * sizeof(size_t) > 2 * PyLong_SHIFT) {
85742                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85743                             __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85744                         } else if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) {
85745                             return (size_t) ((((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
85746                         }
85747                     }
85748                     break;
85749                 case -4:
85750                     if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) {
85751                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85752                             __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85753                         } else if (8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT) {
85754                             return (size_t) (((size_t)-1)*(((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
85755                         }
85756                     }
85757                     break;
85758                 case 4:
85759                     if (8 * sizeof(size_t) > 3 * PyLong_SHIFT) {
85760                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85761                             __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85762                         } else if (8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT) {
85763                             return (size_t) ((((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
85764                         }
85765                     }
85766                     break;
85767             }
85768 #endif
85769             if (sizeof(size_t) <= sizeof(long)) {
85770                 __PYX_VERIFY_RETURN_INT_EXC(size_t, long, PyLong_AsLong(x))
85771 #ifdef HAVE_LONG_LONG
85772             } else if (sizeof(size_t) <= sizeof(PY_LONG_LONG)) {
85773                 __PYX_VERIFY_RETURN_INT_EXC(size_t, PY_LONG_LONG, PyLong_AsLongLong(x))
85774 #endif
85775             }
85776         }
85777         {
85778 #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
85779             PyErr_SetString(PyExc_RuntimeError,
85780                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
85781 #else
85782             size_t val;
85783             PyObject *v = __Pyx_PyNumber_IntOrLong(x);
85784  #if PY_MAJOR_VERSION < 3
85785             if (likely(v) && !PyLong_Check(v)) {
85786                 PyObject *tmp = v;
85787                 v = PyNumber_Long(tmp);
85788                 Py_DECREF(tmp);
85789             }
85790  #endif
85791             if (likely(v)) {
85792                 int one = 1; int is_little = (int)*(unsigned char *)&one;
85793                 unsigned char *bytes = (unsigned char *)&val;
85794                 int ret = _PyLong_AsByteArray((PyLongObject *)v,
85795                                               bytes, sizeof(val),
85796                                               is_little, !is_unsigned);
85797                 Py_DECREF(v);
85798                 if (likely(!ret))
85799                     return val;
85800             }
85801 #endif
85802             return (size_t) -1;
85803         }
85804     } else {
85805         size_t val;
85806         PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
85807         if (!tmp) return (size_t) -1;
85808         val = __Pyx_PyInt_As_size_t(tmp);
85809         Py_DECREF(tmp);
85810         return val;
85811     }
85812 raise_overflow:
85813     PyErr_SetString(PyExc_OverflowError,
85814         "value too large to convert to size_t");
85815     return (size_t) -1;
85816 raise_neg_overflow:
85817     PyErr_SetString(PyExc_OverflowError,
85818         "can't convert negative value to size_t");
85819     return (size_t) -1;
85820 }
85821 
85822 /* CIntFromPy */
85823     static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) {
85824     const char neg_one = (char) ((char) 0 - (char) 1), const_zero = (char) 0;
85825     const int is_unsigned = neg_one > const_zero;
85826 #if PY_MAJOR_VERSION < 3
85827     if (likely(PyInt_Check(x))) {
85828         if (sizeof(char) < sizeof(long)) {
85829             __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x))
85830         } else {
85831             long val = PyInt_AS_LONG(x);
85832             if (is_unsigned && unlikely(val < 0)) {
85833                 goto raise_neg_overflow;
85834             }
85835             return (char) val;
85836         }
85837     } else
85838 #endif
85839     if (likely(PyLong_Check(x))) {
85840         if (is_unsigned) {
85841 #if CYTHON_USE_PYLONG_INTERNALS
85842             const digit* digits = ((PyLongObject*)x)->ob_digit;
85843             switch (Py_SIZE(x)) {
85844                 case  0: return (char) 0;
85845                 case  1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0])
85846                 case 2:
85847                     if (8 * sizeof(char) > 1 * PyLong_SHIFT) {
85848                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85849                             __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85850                         } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) {
85851                             return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
85852                         }
85853                     }
85854                     break;
85855                 case 3:
85856                     if (8 * sizeof(char) > 2 * PyLong_SHIFT) {
85857                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85858                             __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85859                         } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) {
85860                             return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
85861                         }
85862                     }
85863                     break;
85864                 case 4:
85865                     if (8 * sizeof(char) > 3 * PyLong_SHIFT) {
85866                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85867                             __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85868                         } else if (8 * sizeof(char) >= 4 * PyLong_SHIFT) {
85869                             return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
85870                         }
85871                     }
85872                     break;
85873             }
85874 #endif
85875 #if CYTHON_COMPILING_IN_CPYTHON
85876             if (unlikely(Py_SIZE(x) < 0)) {
85877                 goto raise_neg_overflow;
85878             }
85879 #else
85880             {
85881                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
85882                 if (unlikely(result < 0))
85883                     return (char) -1;
85884                 if (unlikely(result == 1))
85885                     goto raise_neg_overflow;
85886             }
85887 #endif
85888             if (sizeof(char) <= sizeof(unsigned long)) {
85889                 __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
85890 #ifdef HAVE_LONG_LONG
85891             } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) {
85892                 __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
85893 #endif
85894             }
85895         } else {
85896 #if CYTHON_USE_PYLONG_INTERNALS
85897             const digit* digits = ((PyLongObject*)x)->ob_digit;
85898             switch (Py_SIZE(x)) {
85899                 case  0: return (char) 0;
85900                 case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0]))
85901                 case  1: __PYX_VERIFY_RETURN_INT(char,  digit, +digits[0])
85902                 case -2:
85903                     if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) {
85904                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85905                             __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85906                         } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) {
85907                             return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
85908                         }
85909                     }
85910                     break;
85911                 case 2:
85912                     if (8 * sizeof(char) > 1 * PyLong_SHIFT) {
85913                         if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
85914                             __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85915                         } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) {
85916                             return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
85917                         }
85918                     }
85919                     break;
85920                 case -3:
85921                     if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) {
85922                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85923                             __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85924                         } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) {
85925                             return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
85926                         }
85927                     }
85928                     break;
85929                 case 3:
85930                     if (8 * sizeof(char) > 2 * PyLong_SHIFT) {
85931                         if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
85932                             __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85933                         } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) {
85934                             return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
85935                         }
85936                     }
85937                     break;
85938                 case -4:
85939                     if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) {
85940                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85941                             __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85942                         } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) {
85943                             return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
85944                         }
85945                     }
85946                     break;
85947                 case 4:
85948                     if (8 * sizeof(char) > 3 * PyLong_SHIFT) {
85949                         if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
85950                             __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
85951                         } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) {
85952                             return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
85953                         }
85954                     }
85955                     break;
85956             }
85957 #endif
85958             if (sizeof(char) <= sizeof(long)) {
85959                 __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
85960 #ifdef HAVE_LONG_LONG
85961             } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) {
85962                 __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
85963 #endif
85964             }
85965         }
85966         {
85967 #if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
85968             PyErr_SetString(PyExc_RuntimeError,
85969                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
85970 #else
85971             char val;
85972             PyObject *v = __Pyx_PyNumber_IntOrLong(x);
85973  #if PY_MAJOR_VERSION < 3
85974             if (likely(v) && !PyLong_Check(v)) {
85975                 PyObject *tmp = v;
85976                 v = PyNumber_Long(tmp);
85977                 Py_DECREF(tmp);
85978             }
85979  #endif
85980             if (likely(v)) {
85981                 int one = 1; int is_little = (int)*(unsigned char *)&one;
85982                 unsigned char *bytes = (unsigned char *)&val;
85983                 int ret = _PyLong_AsByteArray((PyLongObject *)v,
85984                                               bytes, sizeof(val),
85985                                               is_little, !is_unsigned);
85986                 Py_DECREF(v);
85987                 if (likely(!ret))
85988                     return val;
85989             }
85990 #endif
85991             return (char) -1;
85992         }
85993     } else {
85994         char val;
85995         PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
85996         if (!tmp) return (char) -1;
85997         val = __Pyx_PyInt_As_char(tmp);
85998         Py_DECREF(tmp);
85999         return val;
86000     }
86001 raise_overflow:
86002     PyErr_SetString(PyExc_OverflowError,
86003         "value too large to convert to char");
86004     return (char) -1;
86005 raise_neg_overflow:
86006     PyErr_SetString(PyExc_OverflowError,
86007         "can't convert negative value to char");
86008     return (char) -1;
86009 }
86010 
86011 /* ObjectToMemviewSlice */
86012     static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_unsigned_char(PyObject *obj, int writable_flag) {
86013     __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
86014     __Pyx_BufFmt_StackElem stack[1];
86015     int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) };
86016     int retcode;
86017     if (obj == Py_None) {
86018         result.memview = (struct __pyx_memoryview_obj *) Py_None;
86019         return result;
86020     }
86021     retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0,
86022                                                  PyBUF_RECORDS_RO | writable_flag, 1,
86023                                                  &__Pyx_TypeInfo_unsigned_char, stack,
86024                                                  &result, obj);
86025     if (unlikely(retcode == -1))
86026         goto __pyx_fail;
86027     return result;
86028 __pyx_fail:
86029     result.memview = NULL;
86030     result.data = NULL;
86031     return result;
86032 }
86033 
86034 /* PyObjectCallMethod1 */
86035     static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) {
86036     PyObject *result = __Pyx_PyObject_CallOneArg(method, arg);
86037     Py_DECREF(method);
86038     return result;
86039 }
86040 static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) {
86041     PyObject *method = NULL, *result;
86042     int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
86043     if (likely(is_method)) {
86044         result = __Pyx_PyObject_Call2Args(method, obj, arg);
86045         Py_DECREF(method);
86046         return result;
86047     }
86048     if (unlikely(!method)) return NULL;
86049     return __Pyx__PyObject_CallMethod1(method, arg);
86050 }
86051 
86052 /* CoroutineBase */
86053     #include <structmember.h>
86054 #include <frameobject.h>
86055 #define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom)
86056 static int __Pyx_PyGen__FetchStopIterationValue(CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject **pvalue) {
86057     PyObject *et, *ev, *tb;
86058     PyObject *value = NULL;
86059     __Pyx_ErrFetch(&et, &ev, &tb);
86060     if (!et) {
86061         Py_XDECREF(tb);
86062         Py_XDECREF(ev);
86063         Py_INCREF(Py_None);
86064         *pvalue = Py_None;
86065         return 0;
86066     }
86067     if (likely(et == PyExc_StopIteration)) {
86068         if (!ev) {
86069             Py_INCREF(Py_None);
86070             value = Py_None;
86071         }
86072 #if PY_VERSION_HEX >= 0x030300A0
86073         else if (Py_TYPE(ev) == (PyTypeObject*)PyExc_StopIteration) {
86074             value = ((PyStopIterationObject *)ev)->value;
86075             Py_INCREF(value);
86076             Py_DECREF(ev);
86077         }
86078 #endif
86079         else if (unlikely(PyTuple_Check(ev))) {
86080             if (PyTuple_GET_SIZE(ev) >= 1) {
86081 #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
86082                 value = PyTuple_GET_ITEM(ev, 0);
86083                 Py_INCREF(value);
86084 #else
86085                 value = PySequence_ITEM(ev, 0);
86086 #endif
86087             } else {
86088                 Py_INCREF(Py_None);
86089                 value = Py_None;
86090             }
86091             Py_DECREF(ev);
86092         }
86093         else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) {
86094             value = ev;
86095         }
86096         if (likely(value)) {
86097             Py_XDECREF(tb);
86098             Py_DECREF(et);
86099             *pvalue = value;
86100             return 0;
86101         }
86102     } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) {
86103         __Pyx_ErrRestore(et, ev, tb);
86104         return -1;
86105     }
86106     PyErr_NormalizeException(&et, &ev, &tb);
86107     if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) {
86108         __Pyx_ErrRestore(et, ev, tb);
86109         return -1;
86110     }
86111     Py_XDECREF(tb);
86112     Py_DECREF(et);
86113 #if PY_VERSION_HEX >= 0x030300A0
86114     value = ((PyStopIterationObject *)ev)->value;
86115     Py_INCREF(value);
86116     Py_DECREF(ev);
86117 #else
86118     {
86119         PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args);
86120         Py_DECREF(ev);
86121         if (likely(args)) {
86122             value = PySequence_GetItem(args, 0);
86123             Py_DECREF(args);
86124         }
86125         if (unlikely(!value)) {
86126             __Pyx_ErrRestore(NULL, NULL, NULL);
86127             Py_INCREF(Py_None);
86128             value = Py_None;
86129         }
86130     }
86131 #endif
86132     *pvalue = value;
86133     return 0;
86134 }
86135 static CYTHON_INLINE
86136 void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) {
86137     PyObject *t, *v, *tb;
86138     t = exc_state->exc_type;
86139     v = exc_state->exc_value;
86140     tb = exc_state->exc_traceback;
86141     exc_state->exc_type = NULL;
86142     exc_state->exc_value = NULL;
86143     exc_state->exc_traceback = NULL;
86144     Py_XDECREF(t);
86145     Py_XDECREF(v);
86146     Py_XDECREF(tb);
86147 }
86148 #define __Pyx_Coroutine_AlreadyRunningError(gen)  (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL)
86149 static void __Pyx__Coroutine_AlreadyRunningError(CYTHON_UNUSED __pyx_CoroutineObject *gen) {
86150     const char *msg;
86151     if ((0)) {
86152     #ifdef __Pyx_Coroutine_USED
86153     } else if (__Pyx_Coroutine_Check((PyObject*)gen)) {
86154         msg = "coroutine already executing";
86155     #endif
86156     #ifdef __Pyx_AsyncGen_USED
86157     } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) {
86158         msg = "async generator already executing";
86159     #endif
86160     } else {
86161         msg = "generator already executing";
86162     }
86163     PyErr_SetString(PyExc_ValueError, msg);
86164 }
86165 #define __Pyx_Coroutine_NotStartedError(gen)  (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL)
86166 static void __Pyx__Coroutine_NotStartedError(CYTHON_UNUSED PyObject *gen) {
86167     const char *msg;
86168     if ((0)) {
86169     #ifdef __Pyx_Coroutine_USED
86170     } else if (__Pyx_Coroutine_Check(gen)) {
86171         msg = "can't send non-None value to a just-started coroutine";
86172     #endif
86173     #ifdef __Pyx_AsyncGen_USED
86174     } else if (__Pyx_AsyncGen_CheckExact(gen)) {
86175         msg = "can't send non-None value to a just-started async generator";
86176     #endif
86177     } else {
86178         msg = "can't send non-None value to a just-started generator";
86179     }
86180     PyErr_SetString(PyExc_TypeError, msg);
86181 }
86182 #define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing)  (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL)
86183 static void __Pyx__Coroutine_AlreadyTerminatedError(CYTHON_UNUSED PyObject *gen, PyObject *value, CYTHON_UNUSED int closing) {
86184     #ifdef __Pyx_Coroutine_USED
86185     if (!closing && __Pyx_Coroutine_Check(gen)) {
86186         PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine");
86187     } else
86188     #endif
86189     if (value) {
86190         #ifdef __Pyx_AsyncGen_USED
86191         if (__Pyx_AsyncGen_CheckExact(gen))
86192             PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration);
86193         else
86194         #endif
86195         PyErr_SetNone(PyExc_StopIteration);
86196     }
86197 }
86198 static
86199 PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) {
86200     __Pyx_PyThreadState_declare
86201     PyThreadState *tstate;
86202     __Pyx_ExcInfoStruct *exc_state;
86203     PyObject *retval;
86204     assert(!self->is_running);
86205     if (unlikely(self->resume_label == 0)) {
86206         if (unlikely(value && value != Py_None)) {
86207             return __Pyx_Coroutine_NotStartedError((PyObject*)self);
86208         }
86209     }
86210     if (unlikely(self->resume_label == -1)) {
86211         return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing);
86212     }
86213 #if CYTHON_FAST_THREAD_STATE
86214     __Pyx_PyThreadState_assign
86215     tstate = __pyx_tstate;
86216 #else
86217     tstate = __Pyx_PyThreadState_Current;
86218 #endif
86219     exc_state = &self->gi_exc_state;
86220     if (exc_state->exc_type) {
86221         #if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_PYSTON
86222         #else
86223         if (exc_state->exc_traceback) {
86224             PyTracebackObject *tb = (PyTracebackObject *) exc_state->exc_traceback;
86225             PyFrameObject *f = tb->tb_frame;
86226             Py_XINCREF(tstate->frame);
86227             assert(f->f_back == NULL);
86228             f->f_back = tstate->frame;
86229         }
86230         #endif
86231     }
86232 #if CYTHON_USE_EXC_INFO_STACK
86233     exc_state->previous_item = tstate->exc_info;
86234     tstate->exc_info = exc_state;
86235 #else
86236     if (exc_state->exc_type) {
86237         __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback);
86238     } else {
86239         __Pyx_Coroutine_ExceptionClear(exc_state);
86240         __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback);
86241     }
86242 #endif
86243     self->is_running = 1;
86244     retval = self->body((PyObject *) self, tstate, value);
86245     self->is_running = 0;
86246 #if CYTHON_USE_EXC_INFO_STACK
86247     exc_state = &self->gi_exc_state;
86248     tstate->exc_info = exc_state->previous_item;
86249     exc_state->previous_item = NULL;
86250     __Pyx_Coroutine_ResetFrameBackpointer(exc_state);
86251 #endif
86252     return retval;
86253 }
86254 static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) {
86255     PyObject *exc_tb = exc_state->exc_traceback;
86256     if (likely(exc_tb)) {
86257 #if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_PYSTON
86258 #else
86259         PyTracebackObject *tb = (PyTracebackObject *) exc_tb;
86260         PyFrameObject *f = tb->tb_frame;
86261         Py_CLEAR(f->f_back);
86262 #endif
86263     }
86264 }
86265 static CYTHON_INLINE
86266 PyObject *__Pyx_Coroutine_MethodReturn(CYTHON_UNUSED PyObject* gen, PyObject *retval) {
86267     if (unlikely(!retval)) {
86268         __Pyx_PyThreadState_declare
86269         __Pyx_PyThreadState_assign
86270         if (!__Pyx_PyErr_Occurred()) {
86271             PyObject *exc = PyExc_StopIteration;
86272             #ifdef __Pyx_AsyncGen_USED
86273             if (__Pyx_AsyncGen_CheckExact(gen))
86274                 exc = __Pyx_PyExc_StopAsyncIteration;
86275             #endif
86276             __Pyx_PyErr_SetNone(exc);
86277         }
86278     }
86279     return retval;
86280 }
86281 static CYTHON_INLINE
86282 PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) {
86283     PyObject *ret;
86284     PyObject *val = NULL;
86285     __Pyx_Coroutine_Undelegate(gen);
86286     __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val);
86287     ret = __Pyx_Coroutine_SendEx(gen, val, 0);
86288     Py_XDECREF(val);
86289     return ret;
86290 }
86291 static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) {
86292     PyObject *retval;
86293     __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
86294     PyObject *yf = gen->yieldfrom;
86295     if (unlikely(gen->is_running))
86296         return __Pyx_Coroutine_AlreadyRunningError(gen);
86297     if (yf) {
86298         PyObject *ret;
86299         gen->is_running = 1;
86300         #ifdef __Pyx_Generator_USED
86301         if (__Pyx_Generator_CheckExact(yf)) {
86302             ret = __Pyx_Coroutine_Send(yf, value);
86303         } else
86304         #endif
86305         #ifdef __Pyx_Coroutine_USED
86306         if (__Pyx_Coroutine_Check(yf)) {
86307             ret = __Pyx_Coroutine_Send(yf, value);
86308         } else
86309         #endif
86310         #ifdef __Pyx_AsyncGen_USED
86311         if (__pyx_PyAsyncGenASend_CheckExact(yf)) {
86312             ret = __Pyx_async_gen_asend_send(yf, value);
86313         } else
86314         #endif
86315         #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3)
86316         if (PyGen_CheckExact(yf)) {
86317             ret = _PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value);
86318         } else
86319         #endif
86320         #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3)
86321         if (PyCoro_CheckExact(yf)) {
86322             ret = _PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value);
86323         } else
86324         #endif
86325         {
86326             if (value == Py_None)
86327                 ret = Py_TYPE(yf)->tp_iternext(yf);
86328             else
86329                 ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value);
86330         }
86331         gen->is_running = 0;
86332         if (likely(ret)) {
86333             return ret;
86334         }
86335         retval = __Pyx_Coroutine_FinishDelegation(gen);
86336     } else {
86337         retval = __Pyx_Coroutine_SendEx(gen, value, 0);
86338     }
86339     return __Pyx_Coroutine_MethodReturn(self, retval);
86340 }
86341 static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) {
86342     PyObject *retval = NULL;
86343     int err = 0;
86344     #ifdef __Pyx_Generator_USED
86345     if (__Pyx_Generator_CheckExact(yf)) {
86346         retval = __Pyx_Coroutine_Close(yf);
86347         if (!retval)
86348             return -1;
86349     } else
86350     #endif
86351     #ifdef __Pyx_Coroutine_USED
86352     if (__Pyx_Coroutine_Check(yf)) {
86353         retval = __Pyx_Coroutine_Close(yf);
86354         if (!retval)
86355             return -1;
86356     } else
86357     if (__Pyx_CoroutineAwait_CheckExact(yf)) {
86358         retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL);
86359         if (!retval)
86360             return -1;
86361     } else
86362     #endif
86363     #ifdef __Pyx_AsyncGen_USED
86364     if (__pyx_PyAsyncGenASend_CheckExact(yf)) {
86365         retval = __Pyx_async_gen_asend_close(yf, NULL);
86366     } else
86367     if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) {
86368         retval = __Pyx_async_gen_athrow_close(yf, NULL);
86369     } else
86370     #endif
86371     {
86372         PyObject *meth;
86373         gen->is_running = 1;
86374         meth = __Pyx_PyObject_GetAttrStr(yf, __pyx_n_s_close);
86375         if (unlikely(!meth)) {
86376             if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
86377                 PyErr_WriteUnraisable(yf);
86378             }
86379             PyErr_Clear();
86380         } else {
86381             retval = PyObject_CallFunction(meth, NULL);
86382             Py_DECREF(meth);
86383             if (!retval)
86384                 err = -1;
86385         }
86386         gen->is_running = 0;
86387     }
86388     Py_XDECREF(retval);
86389     return err;
86390 }
86391 static PyObject *__Pyx_Generator_Next(PyObject *self) {
86392     __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
86393     PyObject *yf = gen->yieldfrom;
86394     if (unlikely(gen->is_running))
86395         return __Pyx_Coroutine_AlreadyRunningError(gen);
86396     if (yf) {
86397         PyObject *ret;
86398         gen->is_running = 1;
86399         #ifdef __Pyx_Generator_USED
86400         if (__Pyx_Generator_CheckExact(yf)) {
86401             ret = __Pyx_Generator_Next(yf);
86402         } else
86403         #endif
86404         #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3)
86405         if (PyGen_CheckExact(yf)) {
86406             ret = _PyGen_Send((PyGenObject*)yf, NULL);
86407         } else
86408         #endif
86409         #ifdef __Pyx_Coroutine_USED
86410         if (__Pyx_Coroutine_Check(yf)) {
86411             ret = __Pyx_Coroutine_Send(yf, Py_None);
86412         } else
86413         #endif
86414             ret = Py_TYPE(yf)->tp_iternext(yf);
86415         gen->is_running = 0;
86416         if (likely(ret)) {
86417             return ret;
86418         }
86419         return __Pyx_Coroutine_FinishDelegation(gen);
86420     }
86421     return __Pyx_Coroutine_SendEx(gen, Py_None, 0);
86422 }
86423 static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, CYTHON_UNUSED PyObject *arg) {
86424     return __Pyx_Coroutine_Close(self);
86425 }
86426 static PyObject *__Pyx_Coroutine_Close(PyObject *self) {
86427     __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
86428     PyObject *retval, *raised_exception;
86429     PyObject *yf = gen->yieldfrom;
86430     int err = 0;
86431     if (unlikely(gen->is_running))
86432         return __Pyx_Coroutine_AlreadyRunningError(gen);
86433     if (yf) {
86434         Py_INCREF(yf);
86435         err = __Pyx_Coroutine_CloseIter(gen, yf);
86436         __Pyx_Coroutine_Undelegate(gen);
86437         Py_DECREF(yf);
86438     }
86439     if (err == 0)
86440         PyErr_SetNone(PyExc_GeneratorExit);
86441     retval = __Pyx_Coroutine_SendEx(gen, NULL, 1);
86442     if (unlikely(retval)) {
86443         const char *msg;
86444         Py_DECREF(retval);
86445         if ((0)) {
86446         #ifdef __Pyx_Coroutine_USED
86447         } else if (__Pyx_Coroutine_Check(self)) {
86448             msg = "coroutine ignored GeneratorExit";
86449         #endif
86450         #ifdef __Pyx_AsyncGen_USED
86451         } else if (__Pyx_AsyncGen_CheckExact(self)) {
86452 #if PY_VERSION_HEX < 0x03060000
86453             msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)";
86454 #else
86455             msg = "async generator ignored GeneratorExit";
86456 #endif
86457         #endif
86458         } else {
86459             msg = "generator ignored GeneratorExit";
86460         }
86461         PyErr_SetString(PyExc_RuntimeError, msg);
86462         return NULL;
86463     }
86464     raised_exception = PyErr_Occurred();
86465     if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) {
86466         if (raised_exception) PyErr_Clear();
86467         Py_INCREF(Py_None);
86468         return Py_None;
86469     }
86470     return NULL;
86471 }
86472 static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb,
86473                                         PyObject *args, int close_on_genexit) {
86474     __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
86475     PyObject *yf = gen->yieldfrom;
86476     if (unlikely(gen->is_running))
86477         return __Pyx_Coroutine_AlreadyRunningError(gen);
86478     if (yf) {
86479         PyObject *ret;
86480         Py_INCREF(yf);
86481         if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) {
86482             int err = __Pyx_Coroutine_CloseIter(gen, yf);
86483             Py_DECREF(yf);
86484             __Pyx_Coroutine_Undelegate(gen);
86485             if (err < 0)
86486                 return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0));
86487             goto throw_here;
86488         }
86489         gen->is_running = 1;
86490         if (0
86491         #ifdef __Pyx_Generator_USED
86492             || __Pyx_Generator_CheckExact(yf)
86493         #endif
86494         #ifdef __Pyx_Coroutine_USED
86495             || __Pyx_Coroutine_Check(yf)
86496         #endif
86497             ) {
86498             ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit);
86499         #ifdef __Pyx_Coroutine_USED
86500         } else if (__Pyx_CoroutineAwait_CheckExact(yf)) {
86501             ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit);
86502         #endif
86503         } else {
86504             PyObject *meth = __Pyx_PyObject_GetAttrStr(yf, __pyx_n_s_throw);
86505             if (unlikely(!meth)) {
86506                 Py_DECREF(yf);
86507                 if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
86508                     gen->is_running = 0;
86509                     return NULL;
86510                 }
86511                 PyErr_Clear();
86512                 __Pyx_Coroutine_Undelegate(gen);
86513                 gen->is_running = 0;
86514                 goto throw_here;
86515             }
86516             if (likely(args)) {
86517                 ret = PyObject_CallObject(meth, args);
86518             } else {
86519                 ret = PyObject_CallFunctionObjArgs(meth, typ, val, tb, NULL);
86520             }
86521             Py_DECREF(meth);
86522         }
86523         gen->is_running = 0;
86524         Py_DECREF(yf);
86525         if (!ret) {
86526             ret = __Pyx_Coroutine_FinishDelegation(gen);
86527         }
86528         return __Pyx_Coroutine_MethodReturn(self, ret);
86529     }
86530 throw_here:
86531     __Pyx_Raise(typ, val, tb, NULL);
86532     return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0));
86533 }
86534 static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) {
86535     PyObject *typ;
86536     PyObject *val = NULL;
86537     PyObject *tb = NULL;
86538     if (!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))
86539         return NULL;
86540     return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1);
86541 }
86542 static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) {
86543     Py_VISIT(exc_state->exc_type);
86544     Py_VISIT(exc_state->exc_value);
86545     Py_VISIT(exc_state->exc_traceback);
86546     return 0;
86547 }
86548 static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) {
86549     Py_VISIT(gen->closure);
86550     Py_VISIT(gen->classobj);
86551     Py_VISIT(gen->yieldfrom);
86552     return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg);
86553 }
86554 static int __Pyx_Coroutine_clear(PyObject *self) {
86555     __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
86556     Py_CLEAR(gen->closure);
86557     Py_CLEAR(gen->classobj);
86558     Py_CLEAR(gen->yieldfrom);
86559     __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state);
86560 #ifdef __Pyx_AsyncGen_USED
86561     if (__Pyx_AsyncGen_CheckExact(self)) {
86562         Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer);
86563     }
86564 #endif
86565     Py_CLEAR(gen->gi_code);
86566     Py_CLEAR(gen->gi_name);
86567     Py_CLEAR(gen->gi_qualname);
86568     Py_CLEAR(gen->gi_modulename);
86569     return 0;
86570 }
86571 static void __Pyx_Coroutine_dealloc(PyObject *self) {
86572     __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
86573     PyObject_GC_UnTrack(gen);
86574     if (gen->gi_weakreflist != NULL)
86575         PyObject_ClearWeakRefs(self);
86576     if (gen->resume_label >= 0) {
86577         PyObject_GC_Track(self);
86578 #if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE
86579         if (PyObject_CallFinalizerFromDealloc(self))
86580 #else
86581         Py_TYPE(gen)->tp_del(self);
86582         if (self->ob_refcnt > 0)
86583 #endif
86584         {
86585             return;
86586         }
86587         PyObject_GC_UnTrack(self);
86588     }
86589 #ifdef __Pyx_AsyncGen_USED
86590     if (__Pyx_AsyncGen_CheckExact(self)) {
86591         /* We have to handle this case for asynchronous generators
86592            right here, because this code has to be between UNTRACK
86593            and GC_Del. */
86594         Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer);
86595     }
86596 #endif
86597     __Pyx_Coroutine_clear(self);
86598     PyObject_GC_Del(gen);
86599 }
86600 static void __Pyx_Coroutine_del(PyObject *self) {
86601     PyObject *error_type, *error_value, *error_traceback;
86602     __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
86603     __Pyx_PyThreadState_declare
86604     if (gen->resume_label < 0) {
86605         return;
86606     }
86607 #if !CYTHON_USE_TP_FINALIZE
86608     assert(self->ob_refcnt == 0);
86609     self->ob_refcnt = 1;
86610 #endif
86611     __Pyx_PyThreadState_assign
86612     __Pyx_ErrFetch(&error_type, &error_value, &error_traceback);
86613 #ifdef __Pyx_AsyncGen_USED
86614     if (__Pyx_AsyncGen_CheckExact(self)) {
86615         __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self;
86616         PyObject *finalizer = agen->ag_finalizer;
86617         if (finalizer && !agen->ag_closed) {
86618             PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self);
86619             if (unlikely(!res)) {
86620                 PyErr_WriteUnraisable(self);
86621             } else {
86622                 Py_DECREF(res);
86623             }
86624             __Pyx_ErrRestore(error_type, error_value, error_traceback);
86625             return;
86626         }
86627     }
86628 #endif
86629     if (unlikely(gen->resume_label == 0 && !error_value)) {
86630 #ifdef __Pyx_Coroutine_USED
86631 #ifdef __Pyx_Generator_USED
86632     if (!__Pyx_Generator_CheckExact(self))
86633 #endif
86634         {
86635         PyObject_GC_UnTrack(self);
86636 #if PY_MAJOR_VERSION >= 3  || defined(PyErr_WarnFormat)
86637         if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0))
86638             PyErr_WriteUnraisable(self);
86639 #else
86640         {PyObject *msg;
86641         char *cmsg;
86642         #if CYTHON_COMPILING_IN_PYPY
86643         msg = NULL;
86644         cmsg = (char*) "coroutine was never awaited";
86645         #else
86646         char *cname;
86647         PyObject *qualname;
86648         qualname = gen->gi_qualname;
86649         cname = PyString_AS_STRING(qualname);
86650         msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname);
86651         if (unlikely(!msg)) {
86652             PyErr_Clear();
86653             cmsg = (char*) "coroutine was never awaited";
86654         } else {
86655             cmsg = PyString_AS_STRING(msg);
86656         }
86657         #endif
86658         if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0))
86659             PyErr_WriteUnraisable(self);
86660         Py_XDECREF(msg);}
86661 #endif
86662         PyObject_GC_Track(self);
86663         }
86664 #endif
86665     } else {
86666         PyObject *res = __Pyx_Coroutine_Close(self);
86667         if (unlikely(!res)) {
86668             if (PyErr_Occurred())
86669                 PyErr_WriteUnraisable(self);
86670         } else {
86671             Py_DECREF(res);
86672         }
86673     }
86674     __Pyx_ErrRestore(error_type, error_value, error_traceback);
86675 #if !CYTHON_USE_TP_FINALIZE
86676     assert(self->ob_refcnt > 0);
86677     if (--self->ob_refcnt == 0) {
86678         return;
86679     }
86680     {
86681         Py_ssize_t refcnt = self->ob_refcnt;
86682         _Py_NewReference(self);
86683         self->ob_refcnt = refcnt;
86684     }
86685 #if CYTHON_COMPILING_IN_CPYTHON
86686     assert(PyType_IS_GC(self->ob_type) &&
86687            _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED);
86688     _Py_DEC_REFTOTAL;
86689 #endif
86690 #ifdef COUNT_ALLOCS
86691     --Py_TYPE(self)->tp_frees;
86692     --Py_TYPE(self)->tp_allocs;
86693 #endif
86694 #endif
86695 }
86696 static PyObject *
86697 __Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context)
86698 {
86699     PyObject *name = self->gi_name;
86700     if (unlikely(!name)) name = Py_None;
86701     Py_INCREF(name);
86702     return name;
86703 }
86704 static int
86705 __Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, CYTHON_UNUSED void *context)
86706 {
86707     PyObject *tmp;
86708 #if PY_MAJOR_VERSION >= 3
86709     if (unlikely(value == NULL || !PyUnicode_Check(value)))
86710 #else
86711     if (unlikely(value == NULL || !PyString_Check(value)))
86712 #endif
86713     {
86714         PyErr_SetString(PyExc_TypeError,
86715                         "__name__ must be set to a string object");
86716         return -1;
86717     }
86718     tmp = self->gi_name;
86719     Py_INCREF(value);
86720     self->gi_name = value;
86721     Py_XDECREF(tmp);
86722     return 0;
86723 }
86724 static PyObject *
86725 __Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context)
86726 {
86727     PyObject *name = self->gi_qualname;
86728     if (unlikely(!name)) name = Py_None;
86729     Py_INCREF(name);
86730     return name;
86731 }
86732 static int
86733 __Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, CYTHON_UNUSED void *context)
86734 {
86735     PyObject *tmp;
86736 #if PY_MAJOR_VERSION >= 3
86737     if (unlikely(value == NULL || !PyUnicode_Check(value)))
86738 #else
86739     if (unlikely(value == NULL || !PyString_Check(value)))
86740 #endif
86741     {
86742         PyErr_SetString(PyExc_TypeError,
86743                         "__qualname__ must be set to a string object");
86744         return -1;
86745     }
86746     tmp = self->gi_qualname;
86747     Py_INCREF(value);
86748     self->gi_qualname = value;
86749     Py_XDECREF(tmp);
86750     return 0;
86751 }
86752 static __pyx_CoroutineObject *__Pyx__Coroutine_New(
86753             PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
86754             PyObject *name, PyObject *qualname, PyObject *module_name) {
86755     __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type);
86756     if (unlikely(!gen))
86757         return NULL;
86758     return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name);
86759 }
86760 static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
86761             __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
86762             PyObject *name, PyObject *qualname, PyObject *module_name) {
86763     gen->body = body;
86764     gen->closure = closure;
86765     Py_XINCREF(closure);
86766     gen->is_running = 0;
86767     gen->resume_label = 0;
86768     gen->classobj = NULL;
86769     gen->yieldfrom = NULL;
86770     gen->gi_exc_state.exc_type = NULL;
86771     gen->gi_exc_state.exc_value = NULL;
86772     gen->gi_exc_state.exc_traceback = NULL;
86773 #if CYTHON_USE_EXC_INFO_STACK
86774     gen->gi_exc_state.previous_item = NULL;
86775 #endif
86776     gen->gi_weakreflist = NULL;
86777     Py_XINCREF(qualname);
86778     gen->gi_qualname = qualname;
86779     Py_XINCREF(name);
86780     gen->gi_name = name;
86781     Py_XINCREF(module_name);
86782     gen->gi_modulename = module_name;
86783     Py_XINCREF(code);
86784     gen->gi_code = code;
86785     PyObject_GC_Track(gen);
86786     return gen;
86787 }
86788 
86789 /* PatchModuleWithCoroutine */
86790     static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) {
86791 #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
86792     int result;
86793     PyObject *globals, *result_obj;
86794     globals = PyDict_New();  if (unlikely(!globals)) goto ignore;
86795     result = PyDict_SetItemString(globals, "_cython_coroutine_type",
86796     #ifdef __Pyx_Coroutine_USED
86797         (PyObject*)__pyx_CoroutineType);
86798     #else
86799         Py_None);
86800     #endif
86801     if (unlikely(result < 0)) goto ignore;
86802     result = PyDict_SetItemString(globals, "_cython_generator_type",
86803     #ifdef __Pyx_Generator_USED
86804         (PyObject*)__pyx_GeneratorType);
86805     #else
86806         Py_None);
86807     #endif
86808     if (unlikely(result < 0)) goto ignore;
86809     if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore;
86810     if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore;
86811     result_obj = PyRun_String(py_code, Py_file_input, globals, globals);
86812     if (unlikely(!result_obj)) goto ignore;
86813     Py_DECREF(result_obj);
86814     Py_DECREF(globals);
86815     return module;
86816 ignore:
86817     Py_XDECREF(globals);
86818     PyErr_WriteUnraisable(module);
86819     if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) {
86820         Py_DECREF(module);
86821         module = NULL;
86822     }
86823 #else
86824     py_code++;
86825 #endif
86826     return module;
86827 }
86828 
86829 /* PatchGeneratorABC */
86830     #ifndef CYTHON_REGISTER_ABCS
86831 #define CYTHON_REGISTER_ABCS 1
86832 #endif
86833 #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
86834 static PyObject* __Pyx_patch_abc_module(PyObject *module);
86835 static PyObject* __Pyx_patch_abc_module(PyObject *module) {
86836     module = __Pyx_Coroutine_patch_module(
86837         module, ""
86838 "if _cython_generator_type is not None:\n"
86839 "    try: Generator = _module.Generator\n"
86840 "    except AttributeError: pass\n"
86841 "    else: Generator.register(_cython_generator_type)\n"
86842 "if _cython_coroutine_type is not None:\n"
86843 "    try: Coroutine = _module.Coroutine\n"
86844 "    except AttributeError: pass\n"
86845 "    else: Coroutine.register(_cython_coroutine_type)\n"
86846     );
86847     return module;
86848 }
86849 #endif
86850 static int __Pyx_patch_abc(void) {
86851 #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
86852     static int abc_patched = 0;
86853     if (CYTHON_REGISTER_ABCS && !abc_patched) {
86854         PyObject *module;
86855         module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections");
86856         if (!module) {
86857             PyErr_WriteUnraisable(NULL);
86858             if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning,
86859                     ((PY_MAJOR_VERSION >= 3) ?
86860                         "Cython module failed to register with collections.abc module" :
86861                         "Cython module failed to register with collections module"), 1) < 0)) {
86862                 return -1;
86863             }
86864         } else {
86865             module = __Pyx_patch_abc_module(module);
86866             abc_patched = 1;
86867             if (unlikely(!module))
86868                 return -1;
86869             Py_DECREF(module);
86870         }
86871         module = PyImport_ImportModule("backports_abc");
86872         if (module) {
86873             module = __Pyx_patch_abc_module(module);
86874             Py_XDECREF(module);
86875         }
86876         if (!module) {
86877             PyErr_Clear();
86878         }
86879     }
86880 #else
86881     if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL);
86882 #endif
86883     return 0;
86884 }
86885 
86886 /* Generator */
86887     static PyMethodDef __pyx_Generator_methods[] = {
86888     {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O,
86889      (char*) PyDoc_STR("send(arg) -> send 'arg' into generator,\nreturn next yielded value or raise StopIteration.")},
86890     {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS,
86891      (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in generator,\nreturn next yielded value or raise StopIteration.")},
86892     {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS,
86893      (char*) PyDoc_STR("close() -> raise GeneratorExit inside generator.")},
86894     {0, 0, 0, 0}
86895 };
86896 static PyMemberDef __pyx_Generator_memberlist[] = {
86897     {(char *) "gi_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL},
86898     {(char*) "gi_yieldfrom", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY,
86899      (char*) PyDoc_STR("object being iterated by 'yield from', or None")},
86900     {(char*) "gi_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL},
86901     {0, 0, 0, 0, 0}
86902 };
86903 static PyGetSetDef __pyx_Generator_getsets[] = {
86904     {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name,
86905      (char*) PyDoc_STR("name of the generator"), 0},
86906     {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname,
86907      (char*) PyDoc_STR("qualified name of the generator"), 0},
86908     {0, 0, 0, 0, 0}
86909 };
86910 static PyTypeObject __pyx_GeneratorType_type = {
86911     PyVarObject_HEAD_INIT(0, 0)
86912     "generator",
86913     sizeof(__pyx_CoroutineObject),
86914     0,
86915     (destructor) __Pyx_Coroutine_dealloc,
86916     0,
86917     0,
86918     0,
86919     0,
86920     0,
86921     0,
86922     0,
86923     0,
86924     0,
86925     0,
86926     0,
86927     0,
86928     0,
86929     0,
86930     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE,
86931     0,
86932     (traverseproc) __Pyx_Coroutine_traverse,
86933     0,
86934     0,
86935     offsetof(__pyx_CoroutineObject, gi_weakreflist),
86936     0,
86937     (iternextfunc) __Pyx_Generator_Next,
86938     __pyx_Generator_methods,
86939     __pyx_Generator_memberlist,
86940     __pyx_Generator_getsets,
86941     0,
86942     0,
86943     0,
86944     0,
86945     0,
86946     0,
86947     0,
86948     0,
86949     0,
86950     0,
86951     0,
86952     0,
86953     0,
86954     0,
86955     0,
86956 #if CYTHON_USE_TP_FINALIZE
86957     0,
86958 #else
86959     __Pyx_Coroutine_del,
86960 #endif
86961     0,
86962 #if CYTHON_USE_TP_FINALIZE
86963     __Pyx_Coroutine_del,
86964 #elif PY_VERSION_HEX >= 0x030400a1
86965     0,
86966 #endif
86967 #if PY_VERSION_HEX >= 0x030800b1
86968     0,
86969 #endif
86970 };
86971 static int __pyx_Generator_init(void) {
86972     __pyx_GeneratorType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
86973     __pyx_GeneratorType_type.tp_iter = PyObject_SelfIter;
86974     __pyx_GeneratorType = __Pyx_FetchCommonType(&__pyx_GeneratorType_type);
86975     if (unlikely(!__pyx_GeneratorType)) {
86976         return -1;
86977     }
86978     return 0;
86979 }
86980 
86981 /* CheckBinaryVersion */
86982     static int __Pyx_check_binary_version(void) {
86983     char ctversion[4], rtversion[4];
86984     PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
86985     PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
86986     if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
86987         char message[200];
86988         PyOS_snprintf(message, sizeof(message),
86989                       "compiletime version %s of module '%.100s' "
86990                       "does not match runtime version %s",
86991                       ctversion, __Pyx_MODULE_NAME, rtversion);
86992         return PyErr_WarnEx(NULL, message, 1);
86993     }
86994     return 0;
86995 }
86996 
86997 /* VoidPtrImport */
86998     #ifndef __PYX_HAVE_RT_ImportVoidPtr
86999 #define __PYX_HAVE_RT_ImportVoidPtr
87000 static int __Pyx_ImportVoidPtr(PyObject *module, const char *name, void **p, const char *sig) {
87001     PyObject *d = 0;
87002     PyObject *cobj = 0;
87003     d = PyObject_GetAttrString(module, (char *)"__pyx_capi__");
87004     if (!d)
87005         goto bad;
87006     cobj = PyDict_GetItemString(d, name);
87007     if (!cobj) {
87008         PyErr_Format(PyExc_ImportError,
87009             "%.200s does not export expected C variable %.200s",
87010                 PyModule_GetName(module), name);
87011         goto bad;
87012     }
87013 #if PY_VERSION_HEX >= 0x02070000
87014     if (!PyCapsule_IsValid(cobj, sig)) {
87015         PyErr_Format(PyExc_TypeError,
87016             "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
87017              PyModule_GetName(module), name, sig, PyCapsule_GetName(cobj));
87018         goto bad;
87019     }
87020     *p = PyCapsule_GetPointer(cobj, sig);
87021 #else
87022     {const char *desc, *s1, *s2;
87023     desc = (const char *)PyCObject_GetDesc(cobj);
87024     if (!desc)
87025         goto bad;
87026     s1 = desc; s2 = sig;
87027     while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; }
87028     if (*s1 != *s2) {
87029         PyErr_Format(PyExc_TypeError,
87030             "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
87031              PyModule_GetName(module), name, sig, desc);
87032         goto bad;
87033     }
87034     *p = PyCObject_AsVoidPtr(cobj);}
87035 #endif
87036     if (!(*p))
87037         goto bad;
87038     Py_DECREF(d);
87039     return 0;
87040 bad:
87041     Py_XDECREF(d);
87042     return -1;
87043 }
87044 #endif
87045 
87046 /* FunctionImport */
87047     #ifndef __PYX_HAVE_RT_ImportFunction
87048 #define __PYX_HAVE_RT_ImportFunction
87049 static int __Pyx_ImportFunction(PyObject *module, const char *funcname, void (**f)(void), const char *sig) {
87050     PyObject *d = 0;
87051     PyObject *cobj = 0;
87052     union {
87053         void (*fp)(void);
87054         void *p;
87055     } tmp;
87056     d = PyObject_GetAttrString(module, (char *)"__pyx_capi__");
87057     if (!d)
87058         goto bad;
87059     cobj = PyDict_GetItemString(d, funcname);
87060     if (!cobj) {
87061         PyErr_Format(PyExc_ImportError,
87062             "%.200s does not export expected C function %.200s",
87063                 PyModule_GetName(module), funcname);
87064         goto bad;
87065     }
87066 #if PY_VERSION_HEX >= 0x02070000
87067     if (!PyCapsule_IsValid(cobj, sig)) {
87068         PyErr_Format(PyExc_TypeError,
87069             "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
87070              PyModule_GetName(module), funcname, sig, PyCapsule_GetName(cobj));
87071         goto bad;
87072     }
87073     tmp.p = PyCapsule_GetPointer(cobj, sig);
87074 #else
87075     {const char *desc, *s1, *s2;
87076     desc = (const char *)PyCObject_GetDesc(cobj);
87077     if (!desc)
87078         goto bad;
87079     s1 = desc; s2 = sig;
87080     while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; }
87081     if (*s1 != *s2) {
87082         PyErr_Format(PyExc_TypeError,
87083             "C function %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
87084              PyModule_GetName(module), funcname, sig, desc);
87085         goto bad;
87086     }
87087     tmp.p = PyCObject_AsVoidPtr(cobj);}
87088 #endif
87089     *f = tmp.fp;
87090     if (!(*f))
87091         goto bad;
87092     Py_DECREF(d);
87093     return 0;
87094 bad:
87095     Py_XDECREF(d);
87096     return -1;
87097 }
87098 #endif
87099 
87100 /* InitStrings */
87101     static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
87102     while (t->p) {
87103         #if PY_MAJOR_VERSION < 3
87104         if (t->is_unicode) {
87105             *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
87106         } else if (t->intern) {
87107             *t->p = PyString_InternFromString(t->s);
87108         } else {
87109             *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
87110         }
87111         #else
87112         if (t->is_unicode | t->is_str) {
87113             if (t->intern) {
87114                 *t->p = PyUnicode_InternFromString(t->s);
87115             } else if (t->encoding) {
87116                 *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
87117             } else {
87118                 *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
87119             }
87120         } else {
87121             *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
87122         }
87123         #endif
87124         if (!*t->p)
87125             return -1;
87126         if (PyObject_Hash(*t->p) == -1)
87127             return -1;
87128         ++t;
87129     }
87130     return 0;
87131 }
87132 
87133 static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
87134     return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str));
87135 }
87136 static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
87137     Py_ssize_t ignore;
87138     return __Pyx_PyObject_AsStringAndSize(o, &ignore);
87139 }
87140 #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
87141 #if !CYTHON_PEP393_ENABLED
87142 static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
87143     char* defenc_c;
87144     PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
87145     if (!defenc) return NULL;
87146     defenc_c = PyBytes_AS_STRING(defenc);
87147 #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
87148     {
87149         char* end = defenc_c + PyBytes_GET_SIZE(defenc);
87150         char* c;
87151         for (c = defenc_c; c < end; c++) {
87152             if ((unsigned char) (*c) >= 128) {
87153                 PyUnicode_AsASCIIString(o);
87154                 return NULL;
87155             }
87156         }
87157     }
87158 #endif
87159     *length = PyBytes_GET_SIZE(defenc);
87160     return defenc_c;
87161 }
87162 #else
87163 static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
87164     if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;
87165 #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
87166     if (likely(PyUnicode_IS_ASCII(o))) {
87167         *length = PyUnicode_GET_LENGTH(o);
87168         return PyUnicode_AsUTF8(o);
87169     } else {
87170         PyUnicode_AsASCIIString(o);
87171         return NULL;
87172     }
87173 #else
87174     return PyUnicode_AsUTF8AndSize(o, length);
87175 #endif
87176 }
87177 #endif
87178 #endif
87179 static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
87180 #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
87181     if (
87182 #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
87183             __Pyx_sys_getdefaultencoding_not_ascii &&
87184 #endif
87185             PyUnicode_Check(o)) {
87186         return __Pyx_PyUnicode_AsStringAndSize(o, length);
87187     } else
87188 #endif
87189 #if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
87190     if (PyByteArray_Check(o)) {
87191         *length = PyByteArray_GET_SIZE(o);
87192         return PyByteArray_AS_STRING(o);
87193     } else
87194 #endif
87195     {
87196         char* result;
87197         int r = PyBytes_AsStringAndSize(o, &result, length);
87198         if (unlikely(r < 0)) {
87199             return NULL;
87200         } else {
87201             return result;
87202         }
87203     }
87204 }
87205 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
87206    int is_true = x == Py_True;
87207    if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
87208    else return PyObject_IsTrue(x);
87209 }
87210 static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) {
87211     int retval;
87212     if (unlikely(!x)) return -1;
87213     retval = __Pyx_PyObject_IsTrue(x);
87214     Py_DECREF(x);
87215     return retval;
87216 }
87217 static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) {
87218 #if PY_MAJOR_VERSION >= 3
87219     if (PyLong_Check(result)) {
87220         if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
87221                 "__int__ returned non-int (type %.200s).  "
87222                 "The ability to return an instance of a strict subclass of int "
87223                 "is deprecated, and may be removed in a future version of Python.",
87224                 Py_TYPE(result)->tp_name)) {
87225             Py_DECREF(result);
87226             return NULL;
87227         }
87228         return result;
87229     }
87230 #endif
87231     PyErr_Format(PyExc_TypeError,
87232                  "__%.4s__ returned non-%.4s (type %.200s)",
87233                  type_name, type_name, Py_TYPE(result)->tp_name);
87234     Py_DECREF(result);
87235     return NULL;
87236 }
87237 static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
87238 #if CYTHON_USE_TYPE_SLOTS
87239   PyNumberMethods *m;
87240 #endif
87241   const char *name = NULL;
87242   PyObject *res = NULL;
87243 #if PY_MAJOR_VERSION < 3
87244   if (likely(PyInt_Check(x) || PyLong_Check(x)))
87245 #else
87246   if (likely(PyLong_Check(x)))
87247 #endif
87248     return __Pyx_NewRef(x);
87249 #if CYTHON_USE_TYPE_SLOTS
87250   m = Py_TYPE(x)->tp_as_number;
87251   #if PY_MAJOR_VERSION < 3
87252   if (m && m->nb_int) {
87253     name = "int";
87254     res = m->nb_int(x);
87255   }
87256   else if (m && m->nb_long) {
87257     name = "long";
87258     res = m->nb_long(x);
87259   }
87260   #else
87261   if (likely(m && m->nb_int)) {
87262     name = "int";
87263     res = m->nb_int(x);
87264   }
87265   #endif
87266 #else
87267   if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {
87268     res = PyNumber_Int(x);
87269   }
87270 #endif
87271   if (likely(res)) {
87272 #if PY_MAJOR_VERSION < 3
87273     if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) {
87274 #else
87275     if (unlikely(!PyLong_CheckExact(res))) {
87276 #endif
87277         return __Pyx_PyNumber_IntOrLongWrongResultType(res, name);
87278     }
87279   }
87280   else if (!PyErr_Occurred()) {
87281     PyErr_SetString(PyExc_TypeError,
87282                     "an integer is required");
87283   }
87284   return res;
87285 }
87286 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
87287   Py_ssize_t ival;
87288   PyObject *x;
87289 #if PY_MAJOR_VERSION < 3
87290   if (likely(PyInt_CheckExact(b))) {
87291     if (sizeof(Py_ssize_t) >= sizeof(long))
87292         return PyInt_AS_LONG(b);
87293     else
87294         return PyInt_AsSsize_t(b);
87295   }
87296 #endif
87297   if (likely(PyLong_CheckExact(b))) {
87298     #if CYTHON_USE_PYLONG_INTERNALS
87299     const digit* digits = ((PyLongObject*)b)->ob_digit;
87300     const Py_ssize_t size = Py_SIZE(b);
87301     if (likely(__Pyx_sst_abs(size) <= 1)) {
87302         ival = likely(size) ? digits[0] : 0;
87303         if (size == -1) ival = -ival;
87304         return ival;
87305     } else {
87306       switch (size) {
87307          case 2:
87308            if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
87309              return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
87310            }
87311            break;
87312          case -2:
87313            if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
87314              return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
87315            }
87316            break;
87317          case 3:
87318            if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
87319              return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
87320            }
87321            break;
87322          case -3:
87323            if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
87324              return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
87325            }
87326            break;
87327          case 4:
87328            if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
87329              return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
87330            }
87331            break;
87332          case -4:
87333            if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
87334              return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
87335            }
87336            break;
87337       }
87338     }
87339     #endif
87340     return PyLong_AsSsize_t(b);
87341   }
87342   x = PyNumber_Index(b);
87343   if (!x) return -1;
87344   ival = PyInt_AsSsize_t(x);
87345   Py_DECREF(x);
87346   return ival;
87347 }
87348 static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
87349   return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
87350 }
87351 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
87352     return PyInt_FromSize_t(ival);
87353 }
87354 
87355 
87356 #endif /* Py_PYTHON_H */
87357